Diff of /trunk/src/geomath.c

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

revision 213 by harbaum, Wed Nov 25 13:52:17 2009 UTC revision 214 by harbaum, Thu Nov 26 10:05:23 2009 UTC
# Line 50  static GtkWidget *gtk_red_entry_new(void Line 50  static GtkWidget *gtk_red_entry_new(void
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;
# Line 200  static void on_calc_clicked(GtkButton *b Line 191  static void on_calc_clicked(GtkButton *b
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;
# Line 258  void geomath_dialog(appdata_t *appdata) Line 198  void geomath_dialog(appdata_t *appdata)
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 */
# Line 295  void geomath_dialog(appdata_t *appdata) Line 234  void geomath_dialog(appdata_t *appdata)
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    
# Line 347  void geomath_dialog(appdata_t *appdata) Line 268  void geomath_dialog(appdata_t *appdata)
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);

Legend:
Removed from v.213  
changed lines
  Added in v.214