20 |
#include "gpxview.h" |
#include "gpxview.h" |
21 |
#include <math.h> |
#include <math.h> |
22 |
|
|
23 |
|
#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) |
24 |
|
#include <hildon/hildon-entry.h> |
25 |
|
#endif |
26 |
|
|
27 |
#define STR_NAN "----" |
#define STR_NAN "----" |
28 |
|
|
29 |
typedef struct { |
typedef struct { |
44 |
/* a entry that is colored red when being "active" */ |
/* a entry that is colored red when being "active" */ |
45 |
static GtkWidget *gtk_red_entry_new(void) { |
static GtkWidget *gtk_red_entry_new(void) { |
46 |
GdkColor color; |
GdkColor color; |
47 |
|
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
48 |
GtkWidget *widget = gtk_entry_new(); |
GtkWidget *widget = gtk_entry_new(); |
49 |
|
#else |
50 |
|
GtkWidget *widget = hildon_entry_new(HILDON_SIZE_AUTO); |
51 |
|
#endif |
52 |
gdk_color_parse("#ff0000", &color); |
gdk_color_parse("#ff0000", &color); |
53 |
gtk_widget_modify_text(widget, TAG_STATE, &color); |
gtk_widget_modify_text(widget, TAG_STATE, &color); |
54 |
return widget; |
return widget; |
63 |
return widget; |
return widget; |
64 |
} |
} |
65 |
|
|
|
/* a label that is left aligned */ |
|
|
static GtkWidget *gtk_left_label_new(char *str) { |
|
|
GtkWidget *widget = gtk_label_new(str); |
|
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0f, 0.5f); |
|
|
return widget; |
|
|
} |
|
|
|
|
66 |
/* a label that is colored red when being "active" */ |
/* a label that is colored red when being "active" */ |
67 |
static GtkWidget *gtk_red_label_new(char *str) { |
static GtkWidget *gtk_red_label_new(char *str) { |
68 |
GdkColor color; |
GdkColor color; |
69 |
GtkWidget *widget = gtk_left_label_new(str); |
GtkWidget *widget = left_label_new(str); |
70 |
gdk_color_parse("#ff0000", &color); |
gdk_color_parse("#ff0000", &color); |
71 |
gtk_widget_modify_fg(widget, TAG_STATE, &color); |
gtk_widget_modify_fg(widget, TAG_STATE, &color); |
72 |
return widget; |
return widget; |
214 |
|
|
215 |
if(wpt_idx == 0) |
if(wpt_idx == 0) |
216 |
pos = gps_get_pos(state->appdata); |
pos = gps_get_pos(state->appdata); |
|
#ifdef USE_MAEMO |
|
217 |
else if(wpt_idx == 1) { |
else if(wpt_idx == 1) { |
218 |
|
#ifdef ENABLE_OSM_GPS_MAP |
219 |
|
if(!isnan(state->appdata->map.pos.lat) && |
220 |
|
!isnan(state->appdata->map.pos.lon)) |
221 |
|
pos = &state->appdata->map.pos; |
222 |
|
#endif |
223 |
|
} else if(wpt_idx == 2) { |
224 |
pos_t cache_pos = gpx_cache_pos(state->appdata->cur_cache); |
pos_t cache_pos = gpx_cache_pos(state->appdata->cur_cache); |
225 |
pos = &cache_pos; |
pos = &cache_pos; |
226 |
} else { |
} else { |
227 |
wpt_t *wpt = state->appdata->cur_cache->wpt; |
wpt_t *wpt = state->appdata->cur_cache->wpt; |
228 |
while(wpt_idx > 2) { |
while(wpt_idx > 3) { |
229 |
g_assert(wpt != NULL); |
g_assert(wpt != NULL); |
230 |
wpt = wpt->next; |
wpt = wpt->next; |
231 |
wpt_idx--; |
wpt_idx--; |
232 |
} |
} |
233 |
pos = &wpt->pos; |
pos = &wpt->pos; |
234 |
} |
} |
|
#endif |
|
235 |
|
|
236 |
if(pos) { |
if(pos) { |
237 |
char str[32]; |
char str[32]; |
250 |
return FALSE; |
return FALSE; |
251 |
} |
} |
252 |
|
|
253 |
|
static void callback_modified_lat(GtkWidget *widget, gpointer data ) { |
254 |
|
float i = pos_parse_lat((char*)gtk_entry_get_text(GTK_ENTRY(widget))); |
255 |
|
mark(widget, !isnan(i)); |
256 |
|
} |
257 |
|
|
258 |
void geomath_dialog(appdata_t *appdata) { |
void geomath_dialog(appdata_t *appdata) { |
259 |
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 }; |
260 |
static float dist1 = 0.0; |
static float dist1 = 0.0; |
302 |
GtkWidget *table = gtk_table_new(5, 3, FALSE); |
GtkWidget *table = gtk_table_new(5, 3, FALSE); |
303 |
gtk_table_set_col_spacing(GTK_TABLE(table), 1, 20); |
gtk_table_set_col_spacing(GTK_TABLE(table), 1, 20); |
304 |
|
|
305 |
gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("Coordinate 1")), 1, 2, 0, 1); |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Coordinate 1")), 1, 2, 0, 1); |
306 |
gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("Coordinate 2")), 2, 3, 0, 1); |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Coordinate 2")), 2, 3, 0, 1); |
307 |
gtk_table_attach_defaults(GTK_TABLE(table), gtk_left_label_new(_("Latitude:")), 0, 1, 1, 2); |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Latitude:")), 0, 1, 1, 2); |
308 |
|
|
309 |
GtkWidget *cbox = gtk_red_combo_box_entry_new_text(); |
GtkWidget *cbox = gtk_red_combo_box_entry_new_text(); |
310 |
gtk_combo_box_append_text(GTK_COMBO_BOX(cbox), _("GPS")); |
gtk_combo_box_append_text(GTK_COMBO_BOX(cbox), _("GPS")); |
311 |
|
gtk_combo_box_append_text(GTK_COMBO_BOX(cbox), _("Map")); |
312 |
|
|
|
#ifdef USE_MAEMO |
|
313 |
if(appdata->cur_cache) { |
if(appdata->cur_cache) { |
314 |
gtk_combo_box_append_text(GTK_COMBO_BOX(cbox), appdata->cur_cache->id); |
gtk_combo_box_append_text(GTK_COMBO_BOX(cbox), appdata->cur_cache->id); |
315 |
wpt_t *wpt = appdata->cur_cache->wpt; |
wpt_t *wpt = appdata->cur_cache->wpt; |
318 |
wpt = wpt->next; |
wpt = wpt->next; |
319 |
} |
} |
320 |
} |
} |
|
#endif |
|
321 |
|
|
322 |
state.lat1 = GTK_BIN(cbox)->child; |
state.lat1 = GTK_BIN(cbox)->child; |
323 |
|
g_signal_connect(G_OBJECT(state.lat1), "changed", |
324 |
|
G_CALLBACK(callback_modified_lat), NULL); |
325 |
pos_lat_str(str, sizeof(str), pos1.lat); |
pos_lat_str(str, sizeof(str), pos1.lat); |
326 |
gtk_entry_set_text(GTK_ENTRY(state.lat1), str); |
gtk_entry_set_text(GTK_ENTRY(state.lat1), str); |
327 |
|
|
330 |
gtk_table_attach_defaults(GTK_TABLE(table), cbox, 1,2,1,2); |
gtk_table_attach_defaults(GTK_TABLE(table), cbox, 1,2,1,2); |
331 |
|
|
332 |
|
|
333 |
gtk_table_attach_defaults(GTK_TABLE(table), state.lat2 = lat_entry_new(pos2.lat), 2, 3, 1, 2); |
gtk_table_attach_defaults(GTK_TABLE(table), state.lat2 = lat_entry_new(pos2.lat), 2, 3, 1, 2); |
334 |
gtk_table_attach_defaults(GTK_TABLE(table), gtk_left_label_new(_("Longitude:")), 0, 1, 2, 3); |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Longitude:")), 0, 1, 2, 3); |
335 |
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); |
336 |
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), state.lon2 = lon_entry_new(pos2.lon), 2, 3, 2, 3); |
337 |
gtk_table_attach_defaults(GTK_TABLE(table), gtk_left_label_new(_("Distance:")), 0, 1, 3, 4); |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Distance:")), 0, 1, 3, 4); |
338 |
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, 2, 3, 4); |
339 |
gtk_table_attach_defaults(GTK_TABLE(table), gtk_left_label_new(_("Direction:")), 0, 1, 4, 5); |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Direction:")), 0, 1, 4, 5); |
340 |
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, 2, 4, 5); |
341 |
|
|
342 |
gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0); |
gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0); |
343 |
|
|
345 |
|
|
346 |
/* ------------------------- do-it-button ------------------------- */ |
/* ------------------------- do-it-button ------------------------- */ |
347 |
|
|
|
hbox = gtk_hbox_new(FALSE, 0); |
|
348 |
GtkWidget *button = gtk_button_new_with_label(_("Calculate!")); |
GtkWidget *button = gtk_button_new_with_label(_("Calculate!")); |
349 |
|
g_signal_connect(button, "clicked", (GCallback)on_calc_clicked, &state); |
350 |
|
|
351 |
#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5) |
#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5) |
352 |
hildon_gtk_widget_set_theme_size(button, |
hildon_gtk_widget_set_theme_size(button, |
353 |
(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); |
(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); |
354 |
#endif |
gtk_table_attach(GTK_TABLE(table), button, 2,3,3,5, GTK_EXPAND, GTK_EXPAND, 0, 0); |
355 |
|
#else |
356 |
|
/* in non-maemo5 the button has its own row */ |
357 |
|
hbox = gtk_hbox_new(FALSE, 0); |
358 |
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 0); |
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 0); |
359 |
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, FALSE, 0); |
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, FALSE, 0); |
360 |
g_signal_connect(button, "clicked", (GCallback)on_calc_clicked, &state); |
#endif |
361 |
|
|
362 |
/* ------------------------- output area ------------------------- */ |
/* ------------------------- output area ------------------------- */ |
363 |
|
|
364 |
table = gtk_table_new(3, 3, FALSE); |
table = gtk_table_new(3, 3, FALSE); |
365 |
|
|
366 |
gtk_table_attach_defaults(GTK_TABLE(table), gtk_left_label_new(_("Distance = ")), |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Distance = ")), |
367 |
0, 1, 0, 1); |
0, 1, 0, 1); |
368 |
gtk_table_attach_defaults(GTK_TABLE(table), state.distance = gtk_red_label_new(STR_NAN), |
gtk_table_attach_defaults(GTK_TABLE(table), state.distance = gtk_red_label_new(STR_NAN), |
369 |
1, 3, 0, 1); |
1, 3, 0, 1); |
370 |
|
|
371 |
gtk_table_attach_defaults(GTK_TABLE(table), gtk_left_label_new(_("Projection = ")), |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Projection = ")), |
372 |
0, 1, 1, 2); |
0, 1, 1, 2); |
373 |
gtk_table_attach_defaults(GTK_TABLE(table), state.proj_lat = gtk_red_label_new(STR_NAN), |
gtk_table_attach_defaults(GTK_TABLE(table), state.proj_lat = gtk_red_label_new(STR_NAN), |
374 |
1, 2, 1, 2); |
1, 2, 1, 2); |
375 |
gtk_table_attach_defaults(GTK_TABLE(table), state.proj_lon = gtk_red_label_new(STR_NAN), |
gtk_table_attach_defaults(GTK_TABLE(table), state.proj_lon = gtk_red_label_new(STR_NAN), |
376 |
2, 3, 1, 2); |
2, 3, 1, 2); |
377 |
#if 0 |
#if 0 |
378 |
gtk_table_attach_defaults(GTK_TABLE(table), gtk_left_label_new(_("Middle = ")), |
gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Middle = ")), |
379 |
0, 1, 2, 3); |
0, 1, 2, 3); |
380 |
gtk_table_attach_defaults(GTK_TABLE(table), state.middle_lat = gtk_red_label_new(STR_NAN), |
gtk_table_attach_defaults(GTK_TABLE(table), state.middle_lat = gtk_red_label_new(STR_NAN), |
381 |
1, 2, 2, 3); |
1, 2, 2, 3); |