}
static void
-aoview_state_add_deg(char *label, double deg, char pos, char neg)
+aoview_state_add_deg(int column, char *label, double deg, char pos, char neg)
{
double int_part;
double min;
}
int_part = floor (deg);
min = (deg - int_part) * 60.0;
- aoview_table_add_row(label, "%d°%lf'%c",
+ aoview_table_add_row(column, label, "%d°%lf'%c",
(int) int_part, min, sign);
}
aoview_table_start();
if (state->npad >= MIN_PAD_SAMPLES)
- aoview_table_add_row("Ground state", "ready");
+ aoview_table_add_row(0, "Ground state", "ready");
else
- aoview_table_add_row("Ground state", "waiting for gps (%d)",
+ aoview_table_add_row(0, "Ground state", "waiting for gps (%d)",
MIN_PAD_SAMPLES - state->npad);
- aoview_table_add_row("Rocket state", "%s", state->data.state);
- aoview_table_add_row("Callsign", "%s", state->data.callsign);
- aoview_table_add_row("Rocket serial", "%d", state->data.serial);
-
- aoview_table_add_row("RSSI", "%6ddBm", state->data.rssi);
- aoview_table_add_row("Height", "%6dm", state->height);
- aoview_table_add_row("Max height", "%6dm", state->max_height);
- aoview_table_add_row("Acceleration", "%7.1fm/s²", state->acceleration);
- aoview_table_add_row("Max acceleration", "%7.1fm/s²", state->max_acceleration);
- aoview_table_add_row("Speed", "%7.1fm/s", state->ascent ? state->speed : state->baro_speed);
- aoview_table_add_row("Max Speed", "%7.1fm/s", state->max_speed);
- aoview_table_add_row("Temperature", "%6.2f°C", state->temperature);
- aoview_table_add_row("Battery", "%5.2fV", state->battery);
- aoview_table_add_row("Drogue", "%5.2fV", state->drogue_sense);
- aoview_table_add_row("Main", "%5.2fV", state->main_sense);
- aoview_table_add_row("Pad altitude", "%dm", state->ground_altitude);
- aoview_table_add_row("Satellites", "%d", state->data.nsat);
+ aoview_table_add_row(0, "Rocket state", "%s", state->data.state);
+ aoview_table_add_row(0, "Callsign", "%s", state->data.callsign);
+ aoview_table_add_row(0, "Rocket serial", "%d", state->data.serial);
+
+ aoview_table_add_row(0, "RSSI", "%6ddBm", state->data.rssi);
+ aoview_table_add_row(0, "Height", "%6dm", state->height);
+ aoview_table_add_row(0, "Max height", "%6dm", state->max_height);
+ aoview_table_add_row(0, "Acceleration", "%7.1fm/s²", state->acceleration);
+ aoview_table_add_row(0, "Max acceleration", "%7.1fm/s²", state->max_acceleration);
+ aoview_table_add_row(0, "Speed", "%7.1fm/s", state->ascent ? state->speed : state->baro_speed);
+ aoview_table_add_row(0, "Max Speed", "%7.1fm/s", state->max_speed);
+ aoview_table_add_row(0, "Temperature", "%6.2f°C", state->temperature);
+ aoview_table_add_row(0, "Battery", "%5.2fV", state->battery);
+ aoview_table_add_row(0, "Drogue", "%5.2fV", state->drogue_sense);
+ aoview_table_add_row(0, "Main", "%5.2fV", state->main_sense);
+ aoview_table_add_row(0, "Pad altitude", "%dm", state->ground_altitude);
+ aoview_table_add_row(1, "Satellites", "%d", state->data.nsat);
if (state->data.locked) {
- aoview_state_add_deg("Latitude", state->data.lat, 'N', 'S');
- aoview_state_add_deg("Longitude", state->data.lon, 'E', 'W');
- aoview_table_add_row("GPS height", "%d", state->gps_height);
- aoview_table_add_row("GPS time", "%02d:%02d:%02d",
+ aoview_state_add_deg(1, "Latitude", state->data.lat, 'N', 'S');
+ aoview_state_add_deg(1, "Longitude", state->data.lon, 'E', 'W');
+ aoview_table_add_row(1, "GPS height", "%d", state->gps_height);
+ aoview_table_add_row(1, "GPS time", "%02d:%02d:%02d",
state->data.gps_time.hour,
state->data.gps_time.minute,
state->data.gps_time.second);
- aoview_table_add_row("GPS ground speed", "%7.1fm/s %d°",
+ aoview_table_add_row(1, "GPS ground speed", "%7.1fm/s %d°",
state->data.ground_speed,
state->data.course);
- aoview_table_add_row("GPS climb rate", "%7.1fm/s",
+ aoview_table_add_row(1, "GPS climb rate", "%7.1fm/s",
state->data.climb_rate);
- aoview_table_add_row("GPS precision", "%f(hdop) %dm(h) %dm(v)\n",
+ aoview_table_add_row(1, "GPS precision", "%f(hdop) %dm(h) %dm(v)\n",
state->data.hdop, state->data.h_error, state->data.v_error);
- aoview_table_add_row("Distance from pad", "%5.0fm", state->distance);
- aoview_table_add_row("Direction from pad", "%4.0f°", state->bearing);
+ aoview_table_add_row(1, "Distance from pad", "%5.0fm", state->distance);
+ aoview_table_add_row(1, "Direction from pad", "%4.0f°", state->bearing);
} else {
- aoview_table_add_row("GPS", "unlocked");
+ aoview_table_add_row(1, "GPS", "unlocked");
}
if (state->npad) {
- aoview_state_add_deg("Pad latitude", state->pad_lat, 'N', 'S');
- aoview_state_add_deg("Pad longitude", state->pad_lon, 'E', 'W');
- aoview_table_add_row("Pad GPS alt", "%gm", state->pad_alt);
+ aoview_state_add_deg(1, "Pad latitude", state->pad_lat, 'N', 'S');
+ aoview_state_add_deg(1, "Pad longitude", state->pad_lon, 'E', 'W');
+ aoview_table_add_row(1, "Pad GPS alt", "%gm", state->pad_alt);
}
aoview_table_finish();
aoview_label_show(state);
#include "aoview.h"
-static GtkTreeView *dataview;
-static GtkListStore *datalist;
+#define NCOL 2
+
+static GtkTreeView *dataview[NCOL];
+static GtkListStore *datalist[NCOL];
void
aoview_table_start(void)
{
- datalist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
+ int col;
+ for (col = 0; col < NCOL; col++)
+ datalist[col] = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
}
void
-aoview_table_add_row(char *label, char *format, ...)
+aoview_table_add_row(int col, char *label, char *format, ...)
{
char buf[1024];
va_list ap;
va_start(ap, format);
vsnprintf(buf, sizeof (buf), format, ap);
va_end(ap);
- gtk_list_store_append(datalist, &iter);
- gtk_list_store_set(datalist, &iter,
+ gtk_list_store_append(datalist[col], &iter);
+ gtk_list_store_set(datalist[col], &iter,
0, label,
1, buf,
-1);
void
aoview_table_finish(void)
{
- gtk_tree_view_set_model(dataview, GTK_TREE_MODEL(datalist));
- g_object_unref(G_OBJECT(datalist));
- gtk_tree_view_columns_autosize(dataview);
+ int col;
+ for (col = 0; col < NCOL; col++) {
+ gtk_tree_view_set_model(dataview[col], GTK_TREE_MODEL(datalist[col]));
+ g_object_unref(G_OBJECT(datalist[col]));
+ gtk_tree_view_columns_autosize(dataview[col]);
+ }
}
void
aoview_table_clear(void)
{
- gtk_tree_view_set_model(dataview, NULL);
+ int col;
+ for (col = 0; col < NCOL; col++)
+ gtk_tree_view_set_model(dataview[col], NULL);
}
void
aoview_table_init(GladeXML *xml)
{
- dataview = GTK_TREE_VIEW(glade_xml_get_widget(xml, "dataview"));
- assert(dataview);
+ int col;
+
+ for (col = 0; col < NCOL; col++) {
+ char name[32];
+ sprintf(name, "dataview_%d", col);
+ dataview[col] = GTK_TREE_VIEW(glade_xml_get_widget(xml, name));
+ assert(dataview[col]);
- aoview_add_plain_text_column(dataview, "Field", 0, 20);
- aoview_add_plain_text_column(dataview, "Value", 1, 32);
+ aoview_add_plain_text_column(dataview[col], "Field", 0, 20);
+ aoview_add_plain_text_column(dataview[col], "Value", 1, 32);
+ }
}