50 |
return widget; |
return widget; |
51 |
} |
} |
52 |
|
|
|
/* a comboboxentry that is colored red when being "active" */ |
|
|
static GtkWidget *gtk_red_combo_box_entry_new_text(void) { |
|
|
GdkColor color; |
|
|
GtkWidget *widget = gtk_combo_box_entry_new_text(); |
|
|
gdk_color_parse("#ff0000", &color); |
|
|
gtk_widget_modify_text(GTK_BIN(widget)->child, TAG_STATE, &color); |
|
|
return widget; |
|
|
} |
|
|
|
|
53 |
/* a label that is colored red when being "active" */ |
/* a label that is colored red when being "active" */ |
54 |
static GtkWidget *gtk_red_label_new(char *str) { |
static GtkWidget *gtk_red_label_new(char *str) { |
55 |
GdkColor color; |
GdkColor color; |
191 |
#endif |
#endif |
192 |
} |
} |
193 |
|
|
|
static gint waypoint_changed_event(GtkWidget *widget, gpointer data ) { |
|
|
math_dialog_state_t *state = (math_dialog_state_t*)data; |
|
|
int wpt_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); |
|
|
pos_t *pos = NULL; |
|
|
|
|
|
if(wpt_idx < 0) |
|
|
return FALSE; |
|
|
|
|
|
if(wpt_idx == 0) |
|
|
pos = gps_get_pos(state->appdata); |
|
|
else if(wpt_idx == 1) { |
|
|
#ifdef ENABLE_OSM_GPS_MAP |
|
|
if(!isnan(state->appdata->map.pos.lat) && |
|
|
!isnan(state->appdata->map.pos.lon)) |
|
|
pos = &state->appdata->map.pos; |
|
|
#endif |
|
|
} else if(wpt_idx == 2) { |
|
|
pos_t cache_pos = gpx_cache_pos(state->appdata->cur_cache); |
|
|
pos = &cache_pos; |
|
|
} else { |
|
|
wpt_t *wpt = state->appdata->cur_cache->wpt; |
|
|
while(wpt_idx > 3) { |
|
|
g_assert(wpt != NULL); |
|
|
wpt = wpt->next; |
|
|
wpt_idx--; |
|
|
} |
|
|
pos = &wpt->pos; |
|
|
} |
|
|
|
|
|
if(pos) { |
|
|
char str[32]; |
|
|
pos_lat_str(str,sizeof(str),pos->lat); |
|
|
gtk_entry_set_text(GTK_ENTRY(state->lat1), str); |
|
|
pos_lon_str(str,sizeof(str),pos->lon); |
|
|
gtk_entry_set_text(GTK_ENTRY(state->lon1), str); |
|
|
} else { |
|
|
gtk_entry_set_text(GTK_ENTRY(state->lat1), STR_NAN); |
|
|
gtk_entry_set_text(GTK_ENTRY(state->lon1), STR_NAN); |
|
|
} |
|
|
|
|
|
mark(state->lat1, pos != NULL); |
|
|
mark(state->lon1, pos != NULL); |
|
|
|
|
|
return FALSE; |
|
|
} |
|
|
|
|
|
static void callback_modified_lat(GtkWidget *widget, gpointer data ) { |
|
|
float i = pos_parse_lat((char*)gtk_entry_get_text(GTK_ENTRY(widget))); |
|
|
mark(widget, !isnan(i)); |
|
|
} |
|
|
|
|
194 |
void geomath_dialog(appdata_t *appdata) { |
void geomath_dialog(appdata_t *appdata) { |
195 |
static pos_t pos1 = { 0.0, 0.0 }, pos2 = { 0.0, 0.0 }; |
static pos_t pos1 = { 0.0, 0.0 }, pos2 = { 0.0, 0.0 }; |
196 |
static float dist1 = 0.0; |
static float dist1 = 0.0; |
198 |
static gboolean is_imperial = FALSE; |
static gboolean is_imperial = FALSE; |
199 |
|
|
200 |
math_dialog_state_t state; |
math_dialog_state_t state; |
|
char str[32]; |
|
201 |
|
|
202 |
/* this is quite ugly. It would be nice to run the entire system on */ |
/* this is quite ugly. It would be nice to run the entire system on */ |
203 |
/* one specific system (e.g. metric) and only convert for in- and output */ |
/* one specific system (e.g. metric) and only convert for in- and output */ |
234 |
GtkWidget *hbox = gtk_hbox_new(FALSE, 0); |
GtkWidget *hbox = gtk_hbox_new(FALSE, 0); |
235 |
|
|
236 |
/* ------------------------- input area ------------------------- */ |
/* ------------------------- input area ------------------------- */ |
237 |
GtkWidget *table = gtk_table_new(5, 3, FALSE); |
GtkWidget *table = gtk_table_new(5, 5, FALSE); |
238 |
gtk_table_set_col_spacing(GTK_TABLE(table), 1, 20); |
gtk_table_set_col_spacing(GTK_TABLE(table), 2, 20); |
|
|
|
|
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Coordinate 1")), 1, 2, 0, 1); |
|
|
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Coordinate 2")), 2, 3, 0, 1); |
|
|
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Latitude:")), 0, 1, 1, 2); |
|
|
|
|
|
GtkWidget *cbox = gtk_red_combo_box_entry_new_text(); |
|
|
gtk_combo_box_append_text(GTK_COMBO_BOX(cbox), _("GPS")); |
|
|
gtk_combo_box_append_text(GTK_COMBO_BOX(cbox), _("Map")); |
|
|
|
|
|
if(appdata->cur_cache) { |
|
|
gtk_combo_box_append_text(GTK_COMBO_BOX(cbox), appdata->cur_cache->id); |
|
|
wpt_t *wpt = appdata->cur_cache->wpt; |
|
|
while(wpt) { |
|
|
gtk_combo_box_append_text(GTK_COMBO_BOX(cbox), wpt->id); |
|
|
wpt = wpt->next; |
|
|
} |
|
|
} |
|
|
|
|
|
state.lat1 = GTK_BIN(cbox)->child; |
|
|
g_signal_connect(G_OBJECT(state.lat1), "changed", |
|
|
G_CALLBACK(callback_modified_lat), NULL); |
|
|
pos_lat_str(str, sizeof(str), pos1.lat); |
|
|
gtk_entry_set_text(GTK_ENTRY(state.lat1), str); |
|
|
|
|
|
gtk_signal_connect(GTK_OBJECT(cbox), "changed", |
|
|
(GtkSignalFunc)waypoint_changed_event, &state); |
|
|
gtk_table_attach_defaults(GTK_TABLE(table), cbox, 1,2,1,2); |
|
239 |
|
|
240 |
|
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Latitude:")), 0, 1, 1, 2); |
|
gtk_table_attach_defaults(GTK_TABLE(table), state.lat2 = lat_entry_new(pos2.lat), 2, 3, 1, 2); |
|
241 |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Longitude:")), 0, 1, 2, 3); |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Longitude:")), 0, 1, 2, 3); |
242 |
|
|
243 |
|
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Coordinate 1")), 1, 3, 0, 1); |
244 |
|
gtk_table_attach_defaults(GTK_TABLE(table), state.lat1 = lat_entry_new(pos1.lat), 1, 2, 1, 2); |
245 |
gtk_table_attach_defaults(GTK_TABLE(table), state.lon1 = lon_entry_new(pos1.lon), 1, 2, 2, 3); |
gtk_table_attach_defaults(GTK_TABLE(table), state.lon1 = lon_entry_new(pos1.lon), 1, 2, 2, 3); |
246 |
gtk_table_attach_defaults(GTK_TABLE(table), state.lon2 = lon_entry_new(pos2.lon), 2, 3, 2, 3); |
gtk_table_attach_defaults(GTK_TABLE(table), coo_popup(appdata, state.lat1, state.lon1), 2, 3, 1, 2); |
247 |
|
|
248 |
|
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Coordinate 2")), 3, 5, 0, 1); |
249 |
|
gtk_table_attach_defaults(GTK_TABLE(table), state.lat2 = lat_entry_new(pos2.lat), 3, 4, 1, 2); |
250 |
|
gtk_table_attach_defaults(GTK_TABLE(table), state.lon2 = lon_entry_new(pos2.lon), 3, 4, 2, 3); |
251 |
|
gtk_table_attach_defaults(GTK_TABLE(table), coo_popup(appdata, state.lat2, state.lon2), 4, 5, 1, 2); |
252 |
|
|
253 |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Distance:")), 0, 1, 3, 4); |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Distance:")), 0, 1, 3, 4); |
254 |
gtk_table_attach_defaults(GTK_TABLE(table), state.dist1 = dist_entry_new(dist1, appdata->imperial), 1, 2, 3, 4); |
gtk_table_attach_defaults(GTK_TABLE(table), state.dist1 = dist_entry_new(dist1, appdata->imperial), 1, 3, 3, 4); |
255 |
|
|
256 |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Direction:")), 0, 1, 4, 5); |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Direction:")), 0, 1, 4, 5); |
257 |
gtk_table_attach_defaults(GTK_TABLE(table), state.dir1 = gtk_dir_entry_new(dir1), 1, 2, 4, 5); |
gtk_table_attach_defaults(GTK_TABLE(table), state.dir1 = gtk_dir_entry_new(dir1), 1, 3, 4, 5); |
258 |
|
|
259 |
gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0); |
gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0); |
260 |
|
|
268 |
#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5) |
#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5) |
269 |
hildon_gtk_widget_set_theme_size(button, |
hildon_gtk_widget_set_theme_size(button, |
270 |
(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); |
(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); |
271 |
gtk_table_attach(GTK_TABLE(table), button, 2,3,3,5, GTK_EXPAND, GTK_EXPAND, 0, 0); |
gtk_table_attach(GTK_TABLE(table), button, 3,5,3,5, GTK_EXPAND, GTK_EXPAND, 0, 0); |
272 |
#else |
#else |
273 |
/* in non-maemo5 the button has its own row */ |
/* in non-maemo5 the button has its own row */ |
274 |
hbox = gtk_hbox_new(FALSE, 0); |
hbox = gtk_hbox_new(FALSE, 0); |