Diff of /trunk/src/goto.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 452  static gboolean goto_update(gpointer dat Line 452  static gboolean goto_update(gpointer dat
452    return TRUE;   // fire again    return TRUE;   // fire again
453  }  }
454    
 static gint waypoint_changed_event(GtkWidget *widget, gpointer data ) {  
   cache_context_t *context = (cache_context_t*)data;  
   int wpt_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));  
   
   /* get position of selected waypoint */  
   if(wpt_idx == 0)  
     context->gotoc.pos = context->appdata->geomath;  
   else if(wpt_idx == 1)  
     //    context->gotoc.pos = gpx_cache_pos(context->cache);  
     context->gotoc.pos = notes_get_pos(context);  
   else {  
     wpt_t *wpt = context->cache->wpt;  
     while(wpt_idx > 2) {  
       g_assert(wpt != NULL);  
       wpt = wpt->next;  
       wpt_idx--;  
     }  
     context->gotoc.pos = wpt->pos;  
   }  
   
   char str[32];  
   pos_lat_str(str, sizeof(str), context->gotoc.pos.lat);  
   gtk_label_set_text(GTK_LABEL(context->gotoc.lat_lbl), str);  
   pos_lon_str(str, sizeof(str), context->gotoc.pos.lon);  
   gtk_label_set_text(GTK_LABEL(context->gotoc.lon_lbl), str);  
   
   goto_update(context);  
   
   return FALSE;  
 }  
   
 static void manual_pos_update(cache_context_t *context) {  
   context->gotoc.pos.lat = context->appdata->manual_goto.lat;  
   context->gotoc.pos.lon = context->appdata->manual_goto.lon;  
   
   char str[32];  
   pos_lat_str(str, sizeof(str), context->gotoc.pos.lat);  
   gtk_label_set_text(GTK_LABEL(context->gotoc.lat_lbl), str);  
   pos_lon_str(str, sizeof(str), context->gotoc.pos.lon);  
   gtk_label_set_text(GTK_LABEL(context->gotoc.lon_lbl), str);  
   
   goto_update(context);  
 }  
   
 static void on_posedit_clicked(GtkWidget *button, gpointer data) {  
   cache_context_t *context = (cache_context_t*)data;  
   
   GtkWidget *dialog = gtk_dialog_new_with_buttons(_("Edit Position"),  
           GTK_WINDOW(context->appdata->window), GTK_DIALOG_MODAL,  
           GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,  
           GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);  
   
   GtkWidget *lat, *lon, *label;  
   GtkWidget *table = gtk_table_new(2, 2, FALSE);  
   
   gtk_table_attach_defaults(GTK_TABLE(table),  
                    label = gtk_label_new(_("Latitude:")), 0, 1, 0, 1);  
   gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);  
   gtk_table_attach_defaults(GTK_TABLE(table),  
                     lat = lat_entry_new(context->appdata->manual_goto.lat),  
                     1, 2, 0, 1);  
   
   gtk_table_attach_defaults(GTK_TABLE(table),  
                     label = gtk_label_new(_("Longitude:")), 0, 1, 1, 2);  
   gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);  
   gtk_table_attach_defaults(GTK_TABLE(table),  
                    lon = lon_entry_new(context->appdata->manual_goto.lon),  
                    1, 2, 1, 2);  
   
   gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox), table);  
   
   gtk_widget_show_all(dialog);  
   
   if(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {  
     if(isnan(lat_get(lat)) || isnan(lon_get(lon)))  
       errorf(_("Ignoring invalid position"));  
     else {  
       context->appdata->manual_goto.lat = lat_get(lat);  
       context->appdata->manual_goto.lon = lon_get(lon);  
   
       manual_pos_update(context);  
     }  
   }  
   gtk_widget_destroy(dialog);  
 }  
   
 static gint radio_changed_event(GtkWidget *widget, gpointer data ) {  
   cache_context_t *context = (cache_context_t*)data;  
   
   if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {  
     manual_pos_update(context);  
     gtk_widget_set_sensitive(context->gotoc.edit_but, TRUE);  
   } else {  
     waypoint_changed_event(context->gotoc.cbox, data);  
     gtk_widget_set_sensitive(context->gotoc.edit_but, FALSE);  
   }  
   
   return FALSE;  
 }  
   
455  #ifdef ENABLE_MAEMO_MAPPER  #ifdef ENABLE_MAEMO_MAPPER
456  static void on_mm_button_clicked(GtkButton *button, gpointer data) {  static void on_mm_button_clicked(GtkButton *button, gpointer data) {
457    cache_context_t *context = (cache_context_t*)data;    cache_context_t *context = (cache_context_t*)data;
# Line 579  static gboolean compass_clicked_event(Gt Line 479  static gboolean compass_clicked_event(Gt
479    return FALSE;    return FALSE;
480  }  }
481    
482    static void pos_modified(GtkWidget *widget, gpointer data ) {
483      cache_context_t *context = (cache_context_t*)data;
484    
485      /* extract position from entries */
486      context->gotoc.pos.lat = lat_get(context->gotoc.lat_entry);
487      context->gotoc.pos.lon = lon_get(context->gotoc.lon_entry);
488    
489      goto_update(context);
490    }
491    
492  GtkWidget *goto_cache(cache_context_t *context) {  GtkWidget *goto_cache(cache_context_t *context) {
493    int i;    int i;
494    
# Line 607  GtkWidget *goto_cache(cache_context_t *c Line 517  GtkWidget *goto_cache(cache_context_t *c
517    gtk_box_pack_start_defaults(GTK_BOX(hbox), context->gotoc.compass_area);    gtk_box_pack_start_defaults(GTK_BOX(hbox), context->gotoc.compass_area);
518    
519    GtkWidget *vbox = gtk_vbox_new(FALSE, 0);    GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
520    GtkWidget *table = gtk_table_new(8, 2, FALSE);    GtkWidget *table = gtk_table_new(5, 3, FALSE);
521    
522    /* ---------- combo box containing waypoint names ------- */    /* ---------- destination coordinates ------- */
   GtkWidget *radio =  gtk_radio_button_new_with_label(NULL, _("Waypoint:"));  
   gtk_table_attach_defaults(GTK_TABLE(table), radio, 0,1,0,1);  
   
   context->gotoc.cbox = gtk_combo_box_new_text();  
   gtk_combo_box_append_text(GTK_COMBO_BOX(context->gotoc.cbox), _("Geomath"));  
   gtk_combo_box_append_text(GTK_COMBO_BOX(context->gotoc.cbox),  
                             context->cache->id);  
   
   wpt_t *wpt = context->cache->wpt;  
   while(wpt) {  
     gtk_combo_box_append_text(GTK_COMBO_BOX(context->gotoc.cbox), wpt->id);  
     wpt = wpt->next;  
   }  
   gtk_combo_box_set_active(GTK_COMBO_BOX(context->gotoc.cbox), 1);  
   gtk_signal_connect(GTK_OBJECT(context->gotoc.cbox), "changed",  
                      (GtkSignalFunc)waypoint_changed_event, context);  
   gtk_table_attach_defaults(GTK_TABLE(table), context->gotoc.cbox, 1,2,0,1);  
   
   /* -------------- manual entry field ------------------------- */  
   gtk_table_attach_defaults(GTK_TABLE(table),  
           gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio),  
                                                       _("Manual:")), 0,1,1,2);  
   gtk_signal_connect(GTK_OBJECT(radio), "clicked",  
                      (GtkSignalFunc)radio_changed_event, context);  
   
   context->gotoc.edit_but = gtk_button_new_with_label(_("Edit"));  
   gtk_table_attach_defaults(GTK_TABLE(table), context->gotoc.edit_but, 1,2,1,2);  
   gtk_signal_connect(GTK_OBJECT(context->gotoc.edit_but), "clicked",  
                      (GtkSignalFunc)on_posedit_clicked, context);  
   gtk_widget_set_sensitive(context->gotoc.edit_but, FALSE);  
   
 #if 0  
   context->gotoc.man_lat = entry_new();  
   gtk_table_attach_defaults(GTK_TABLE(table), context->gotoc.man_lat, 1,2,1,2);  
   pos_lat_str(str, sizeof(str), context->appdata->manual_goto.lat);  
   gtk_entry_set_text(GTK_ENTRY(context->gotoc.man_lat), str);  
   textbox_disable(context->gotoc.man_lat);  
   context->gotoc.man_lon = entry_new();  
   gtk_table_attach_defaults(GTK_TABLE(table), context->gotoc.man_lon, 1,2,2,3);  
   pos_lon_str(str, sizeof(str), context->appdata->manual_goto.lon);  
   gtk_entry_set_text(GTK_ENTRY(context->gotoc.man_lon), str);  
   textbox_disable(context->gotoc.man_lon);  
   
   gtk_signal_connect(GTK_OBJECT(context->gotoc.man_lat), "changed",  
                      (GtkSignalFunc)entry_changed_event, context);  
   gtk_signal_connect(GTK_OBJECT(context->gotoc.man_lon), "changed",  
                      (GtkSignalFunc)entry_changed_event, context);  
 #endif  
523    
   gtk_table_set_row_spacing(GTK_TABLE(table), 2, 16);  
   
   /* -------------- waypoint coordinates ------------------------- */  
524    /* SIZE_SMALL doesn't work here as setting the label returns to normal */    /* SIZE_SMALL doesn't work here as setting the label returns to normal */
525    context->gotoc.lat_lbl = pos_lat(context->gotoc.pos.lat, SIZE_NORMAL,    gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Latitude:")), 0,1,0,1);
526                                 STRIKETHROUGH_NONE);    context->gotoc.lat_entry = lat_entry_new(context->gotoc.pos.lat);
527    gtk_table_attach_defaults(GTK_TABLE(table), context->gotoc.lat_lbl,0,1,3,4);    gtk_table_attach_defaults(GTK_TABLE(table), context->gotoc.lat_entry, 1,2,0,1);
528    context->gotoc.lon_lbl = pos_lon(context->gotoc.pos.lon, SIZE_NORMAL,    gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Longitude:")), 0,1,1,2);
529                                 STRIKETHROUGH_NONE);    context->gotoc.lon_entry = lon_entry_new(context->gotoc.pos.lon);
530    gtk_table_attach_defaults(GTK_TABLE(table), context->gotoc.lon_lbl,1,2,3,4);    gtk_table_attach_defaults(GTK_TABLE(table), context->gotoc.lon_entry, 1,2,1,2);
531    
532      g_signal_connect(G_OBJECT(context->gotoc.lat_entry), "changed",
533                       G_CALLBACK(pos_modified), context);
534      g_signal_connect(G_OBJECT(context->gotoc.lon_entry), "changed",
535                       G_CALLBACK(pos_modified), context);
536    
537      GtkWidget *popup = coo_popup(context->appdata,
538                   context->gotoc.lat_entry, context->gotoc.lon_entry);
539      gtk_table_attach_defaults(GTK_TABLE(table), popup, 2,3,0,1);
540    
541      gtk_table_set_row_spacing(GTK_TABLE(table), 1, 16);
542      gtk_table_set_col_spacing(GTK_TABLE(table), 0, 16);
543    
544    /* -------------- distance label ------------------------- */    /* -------------- distance label ------------------------- */
545    gtk_table_attach_defaults(GTK_TABLE(table),    gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Distance:")), 0,1,2,3);
             gtk_label_new(_("Distance:")), 0,1,4,5);  
546    gtk_table_attach_defaults(GTK_TABLE(table),    gtk_table_attach_defaults(GTK_TABLE(table),
547              (context->gotoc.distance_label = gtk_label_new("-----")), 1,2,4,5);              (context->gotoc.distance_label = left_label_new("-----")), 1,2,2,3);
548    
549    /* -------------- bearing label ------------------------- */    /* -------------- bearing label ------------------------- */
550    gtk_table_attach_defaults(GTK_TABLE(table),    gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Bearing:")), 0,1,3,4);
             gtk_label_new(_("Bearing:")), 0,1,5,6);  
551    gtk_table_attach_defaults(GTK_TABLE(table),    gtk_table_attach_defaults(GTK_TABLE(table),
552              (context->gotoc.bearing_label = gtk_label_new("-----")), 1,2,5,6);              (context->gotoc.bearing_label = left_label_new("-----")), 1,2,3,4);
553    
554    /* -------------- error label ------------------------- */    /* -------------- error label ------------------------- */
555    gtk_table_attach_defaults(GTK_TABLE(table),    gtk_table_attach_defaults(GTK_TABLE(table), left_label_new(_("Est. error:")), 0,1,4,5);
             gtk_label_new(_("Est. error:")), 0,1,6,7);  
556    gtk_table_attach_defaults(GTK_TABLE(table),    gtk_table_attach_defaults(GTK_TABLE(table),
557              (context->gotoc.eph_label = gtk_label_new("-----")), 1,2,6,7);              (context->gotoc.eph_label = left_label_new("-----")), 1,2,4,5);
558    
559    gtk_table_set_row_spacing(GTK_TABLE(table), 6, 16);    gtk_table_set_row_spacing(GTK_TABLE(table), 4, 16);
560    
561    /* -------------- sat view box ------------------------- */    /* -------------- sat view box ------------------------- */
562    GtkWidget *ihbox = gtk_hbox_new(FALSE,0);    GtkWidget *ihbox = gtk_hbox_new(FALSE,0);
# Line 713  GtkWidget *goto_cache(cache_context_t *c Line 581  GtkWidget *goto_cache(cache_context_t *c
581                       (GtkSignalFunc)on_mm_button_clicked, context);                       (GtkSignalFunc)on_mm_button_clicked, context);
582    gtk_box_pack_start(GTK_BOX(ihbox), mm_button, 1,0,0);    gtk_box_pack_start(GTK_BOX(ihbox), mm_button, 1,0,0);
583  #endif  #endif
584    gtk_table_attach_defaults(GTK_TABLE(table), ihbox, 0,2,7,8);    gtk_table_attach_defaults(GTK_TABLE(table), ihbox, 0,3,5,6);
585    
586    /* ------------------------------------------------------- */    /* ------------------------------------------------------- */
587    
588    gtk_box_pack_start(GTK_BOX(vbox), table, 1,0,0);    gtk_box_pack_start(GTK_BOX(vbox), table, 1,0,0);
589    gtk_box_pack_start(GTK_BOX(hbox), vbox, 1,0,0);    gtk_box_pack_start(GTK_BOX(hbox), vbox, 1,0,0);
590    
591    context->gotoc.handler_id = gtk_timeout_add(UPDATE_MS,    context->gotoc.handler_id =
592                                               goto_update, context);      gtk_timeout_add(UPDATE_MS, goto_update, context);
593    
594    return hbox;    return hbox;
595  }  }
596    
597  void goto_coordinate_update(cache_context_t *context) {  void goto_coordinate_update(cache_context_t *context) {
598      static pos_t pos = { 0.0, 0.0 };
599      char str[32];
600    
601    if(!context->notes.modified)    if(!context->notes.modified)
602      return;      return;
603    
604    waypoint_changed_event(context->gotoc.cbox, context);    pos_t npos = notes_get_pos(context);
605      if(pos_differ(&npos, &pos)) {
606        pos = npos;
607    
608        pos_lat_str(str, sizeof(str)-1, npos.lat);
609        gtk_entry_set_text(GTK_ENTRY(context->gotoc.lat_entry), str);
610        pos_lon_str(str, sizeof(str)-1, npos.lon);
611        gtk_entry_set_text(GTK_ENTRY(context->gotoc.lon_entry), str);
612      }
613  }  }

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