Diff of /trunk/src/geomath.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 197 by harbaum, Mon Oct 12 20:27:55 2009 UTC revision 198 by harbaum, Thu Nov 19 12:38:03 2009 UTC
# Line 20  Line 20 
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 {
# Line 40  static gboolean mark(GtkWidget *widget, Line 44  static gboolean mark(GtkWidget *widget,
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;
# Line 55  static GtkWidget *gtk_red_combo_box_entr Line 63  static GtkWidget *gtk_red_combo_box_entr
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;
# Line 213  static gint waypoint_changed_event(GtkWi Line 214  static gint waypoint_changed_event(GtkWi
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];
# Line 245  static gint waypoint_changed_event(GtkWi Line 250  static gint waypoint_changed_event(GtkWi
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;
# Line 292  void geomath_dialog(appdata_t *appdata) Line 302  void geomath_dialog(appdata_t *appdata)
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;
# Line 308  void geomath_dialog(appdata_t *appdata) Line 318  void geomath_dialog(appdata_t *appdata)
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    
# Line 319  void geomath_dialog(appdata_t *appdata) Line 330  void geomath_dialog(appdata_t *appdata)
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    
# Line 334  void geomath_dialog(appdata_t *appdata) Line 345  void geomath_dialog(appdata_t *appdata)
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);

Legend:
Removed from v.197  
changed lines
  Added in v.198