Diff of /trunk/src/cache.c

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

revision 1 by harbaum, Sat Jun 20 11:08:47 2009 UTC revision 134 by harbaum, Tue Oct 13 14:36:07 2009 UTC
# Line 53  void bearing_fill_hbox(GtkWidget *hbox, Line 53  void bearing_fill_hbox(GtkWidget *hbox,
53      gtk_box_pack_start(GTK_BOX(hbox), gtk_image_new_from_pixbuf(      gtk_box_pack_start(GTK_BOX(hbox), gtk_image_new_from_pixbuf(
54                                          icon_bearing(refpos, pos)),1,0,0);                                          icon_bearing(refpos, pos)),1,0,0);
55    
56      if(refpos.lat && refpos.lon) {      if(!isnan(refpos.lat) && !isnan(refpos.lon)) {
57        gtk_box_pack_start_defaults(GTK_BOX(hbox),        gtk_box_pack_start_defaults(GTK_BOX(hbox),
58                     GTK_LABEL_SMALL((char*)pos_get_bearing_str(refpos, pos)));                     GTK_LABEL_SMALL((char*)pos_get_bearing_str(refpos, pos)));
59        snprintf(str, sizeof(str), _("%.1f°"),        snprintf(str, sizeof(str), _("%.1f°"),
# Line 92  void overview_coordinate_update(cache_co Line 92  void overview_coordinate_update(cache_co
92                          (GtkCallback)gtk_widget_destroy, NULL);                          (GtkCallback)gtk_widget_destroy, NULL);
93    
94    /* update distance/etc */    /* update distance/etc */
95    bearing_fill_hbox(context->bearing_hbox, context->appdata,    if(!isnan(context->cache->pos.lat) &&
96                      *get_pos(context->appdata), notes_get_pos(context));       !isnan(context->cache->pos.lon))
97        bearing_fill_hbox(context->bearing_hbox, context->appdata,
98                          *get_pos(context->appdata), notes_get_pos(context));
99    
100    gtk_widget_show_all(context->bearing_hbox);    gtk_widget_show_all(context->bearing_hbox);
101  }  }
102    
# Line 153  static GtkWidget *cache_overview(cache_c Line 156  static GtkWidget *cache_overview(cache_c
156      else {      else {
157        /* add Go button */        /* add Go button */
158        lbl = gtk_button_attrib(cache->id, SIZE_BIG, strike);        lbl = gtk_button_attrib(cache->id, SIZE_BIG, strike);
       //      gtk_button_set_relief(GTK_BUTTON(button),GTK_RELIEF_NONE);  
159        gtk_signal_connect(GTK_OBJECT(lbl), "clicked",        gtk_signal_connect(GTK_OBJECT(lbl), "clicked",
160                           (GtkSignalFunc)on_www_clicked, context);                           (GtkSignalFunc)on_www_clicked, context);
161      }      }
# Line 166  static GtkWidget *cache_overview(cache_c Line 168  static GtkWidget *cache_overview(cache_c
168    if(cache->owner) {    if(cache->owner) {
169      ivbox = gtk_vbox_new(FALSE, 0);      ivbox = gtk_vbox_new(FALSE, 0);
170      gtk_box_pack_start_defaults(GTK_BOX(ivbox), GTK_LABEL_SMALL(_("by")));      gtk_box_pack_start_defaults(GTK_BOX(ivbox), GTK_LABEL_SMALL(_("by")));
171      gtk_box_pack_start_defaults(GTK_BOX(ivbox), GTK_LABEL_SMALL(cache->owner));      gtk_box_pack_start_defaults(GTK_BOX(ivbox), GTK_LABEL_SMALL(cache->owner->name));
172      gtk_table_attach_defaults(GTK_TABLE(table), ivbox, 1,2,1,2);      gtk_table_attach_defaults(GTK_TABLE(table), ivbox, 1,2,1,2);
173    }    }
174    
# Line 212  static GtkWidget *cache_overview(cache_c Line 214  static GtkWidget *cache_overview(cache_c
214         context->pos_lon_label = pos_lon(cache->pos.lon, SIZE_BIG, strike));         context->pos_lon_label = pos_lon(cache->pos.lon, SIZE_BIG, strike));
215    
216    /* but calculations may be done with respect to the overriden one */    /* but calculations may be done with respect to the overriden one */
217    context->bearing_hbox = gtk_hbox_new(FALSE, 0);    if(!isnan(cache->pos.lat) && !isnan(cache->pos.lon)) {
218    bearing_fill_hbox(context->bearing_hbox, appdata, *refpos,      context->bearing_hbox = gtk_hbox_new(FALSE, 0);
219                      gpx_cache_pos(cache));      bearing_fill_hbox(context->bearing_hbox, appdata, *refpos,
220    gtk_box_pack_start_defaults(GTK_BOX(ivbox), context->bearing_hbox);                        gpx_cache_pos(cache));
221        gtk_box_pack_start_defaults(GTK_BOX(ivbox), context->bearing_hbox);
222      }
223    
224    gtk_table_attach_defaults(GTK_TABLE(table), ivbox, 3,4,0,2);    gtk_table_attach_defaults(GTK_TABLE(table), ivbox, 3,4,0,2);
225    
# Line 234  static GtkWidget *cache_overview(cache_c Line 238  static GtkWidget *cache_overview(cache_c
238    
239  /* slow but short, we don't need performance here ... */  /* slow but short, we don't need performance here ... */
240  static void rot13(char *t) {  static void rot13(char *t) {
241      int braces = 0;
242    
243    while(*t) {    while(*t) {
244      if(((*t >= 'a') && (*t < 'n')) ||      if(!braces) {
245         ((*t >= 'A') && (*t < 'N'))) *t += 13;        if(*t == '[')
246      else if(((*t >= 'n') && (*t <= 'z')) ||          braces++;
247              ((*t >= 'N') && (*t <= 'Z'))) *t -= 13;        else if(((*t >= 'a') && (*t < 'n')) ||
248                  ((*t >= 'A') && (*t < 'N'))) *t += 13;
249          else if(((*t >= 'n') && (*t <= 'z')) ||
250                  ((*t >= 'N') && (*t <= 'Z'))) *t -= 13;
251        } else {
252          if(braces > 0 && *t == ']')
253            braces--;
254        }
255    
256      t++;      t++;
257    }    }
# Line 276  static GtkWidget *cache_hint(appdata_t * Line 289  static GtkWidget *cache_hint(appdata_t *
289    free(hint);    free(hint);
290    
291    GtkWidget *button = gtk_button_new_with_label(_("Encrypt/Decrypt"));    GtkWidget *button = gtk_button_new_with_label(_("Encrypt/Decrypt"));
292    #if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5)
293      hildon_gtk_widget_set_theme_size(button,
294               (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH));
295    #endif
296    gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
297    gtk_signal_connect(GTK_OBJECT(button), "clicked",    gtk_signal_connect(GTK_OBJECT(button), "clicked",
298             GTK_SIGNAL_FUNC(on_decrypt), gtk_bin_get_child(GTK_BIN(view)));             GTK_SIGNAL_FUNC(on_decrypt), gtk_bin_get_child(GTK_BIN(view)));
# Line 349  static GtkWidget *cache_wpts(appdata_t * Line 365  static GtkWidget *cache_wpts(appdata_t *
365        GtkTextBuffer *buffer = gtk_text_buffer_new(NULL);        GtkTextBuffer *buffer = gtk_text_buffer_new(NULL);
366        gtk_text_buffer_set_text(buffer, wpt->desc, strlen(wpt->desc));        gtk_text_buffer_set_text(buffer, wpt->desc, strlen(wpt->desc));
367    
368  #ifndef USE_MAEMO  #ifndef USE_HILDON_TEXT_VIEW
369        GtkWidget *textview = gtk_text_view_new_with_buffer(buffer);        GtkWidget *textview = gtk_text_view_new_with_buffer(buffer);
370  #else  #else
371        GtkWidget *textview = hildon_text_view_new();        GtkWidget *textview = hildon_text_view_new();
# Line 368  static GtkWidget *cache_wpts(appdata_t * Line 384  static GtkWidget *cache_wpts(appdata_t *
384      if(wpt->cmt) {      if(wpt->cmt) {
385        GtkTextBuffer *buffer = gtk_text_buffer_new(NULL);        GtkTextBuffer *buffer = gtk_text_buffer_new(NULL);
386        gtk_text_buffer_set_text(buffer, wpt->cmt, strlen(wpt->cmt));        gtk_text_buffer_set_text(buffer, wpt->cmt, strlen(wpt->cmt));
387  #ifndef USE_MAEMO  #ifndef USE_HILDON_TEXT_VIEW
388        GtkWidget *textview = gtk_text_view_new_with_buffer(buffer);        GtkWidget *textview = gtk_text_view_new_with_buffer(buffer);
389  #else  #else
390        GtkWidget *textview = hildon_text_view_new();        GtkWidget *textview = hildon_text_view_new();
# Line 405  static GtkWidget *cache_wpts(appdata_t * Line 421  static GtkWidget *cache_wpts(appdata_t *
421  #endif  #endif
422  }  }
423    
424    #ifdef ENABLE_BROWSER_INTERFACE
425    static void on_tbref_clicked(GtkButton *button, gpointer data) {
426      appdata_t *appdata = (appdata_t *)data;
427    
428      unsigned int id = (unsigned int)g_object_get_data(G_OBJECT(button), "id");
429      if(id) {
430        printf("clicked tb id %u\n", id);
431        char *url =
432          g_strdup_printf("http://www.geocaching.com/track/details.aspx?id=%u", id);
433        browser_url(appdata, url);
434        g_free(url);
435      }
436    }
437    #endif
438    
439  static GtkWidget *cache_tbs(appdata_t *appdata, tb_t *tb) {  static GtkWidget *cache_tbs(appdata_t *appdata, tb_t *tb) {
440    pos_t *refpos = NULL;    pos_t *refpos = NULL;
441    
# Line 428  static GtkWidget *cache_tbs(appdata_t *a Line 459  static GtkWidget *cache_tbs(appdata_t *a
459      /* --------------------- icon/ref/name -------------------------*/      /* --------------------- icon/ref/name -------------------------*/
460      gtk_table_attach_defaults(GTK_TABLE(table), icon_get_widget(ICON_TB, 0),      gtk_table_attach_defaults(GTK_TABLE(table), icon_get_widget(ICON_TB, 0),
461                                0, 1, tb_row+0, tb_row+1);                                0, 1, tb_row+0, tb_row+1);
462      if(tb->ref)  
463        gtk_table_attach_defaults(GTK_TABLE(table), GTK_LABEL_BIG(tb->ref),      if(tb->ref) {
464    #ifdef ENABLE_BROWSER_INTERFACE
465          GtkWidget *ref = gtk_button_new_with_label(tb->ref);
466    #if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5)
467          hildon_gtk_widget_set_theme_size(ref,
468                                           (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH));
469    #endif
470          g_object_set_data(G_OBJECT(ref), "id", (gpointer)tb->id);
471          gtk_signal_connect(GTK_OBJECT(ref), "clicked",
472                           GTK_SIGNAL_FUNC(on_tbref_clicked), appdata);
473    #else
474          GtkWidget *ref = GTK_LABEL_BIG(tb->ref);
475    #endif
476          gtk_table_attach_defaults(GTK_TABLE(table), ref,
477                                  1, 2, tb_row+0, tb_row+1);                                  1, 2, tb_row+0, tb_row+1);
478        }
479    
480      if(tb->name)      if(tb->name)
481        gtk_table_attach_defaults(GTK_TABLE(table), GTK_LABEL_BIG(tb->name),        gtk_table_attach_defaults(GTK_TABLE(table), GTK_LABEL_BIG(tb->name),
482                                  2, 3, tb_row+0, tb_row+1);                                  2, 3, tb_row+0, tb_row+1);
# Line 456  static GtkWidget *cache_tbs(appdata_t *a Line 502  static GtkWidget *cache_tbs(appdata_t *a
502  #endif  #endif
503  }  }
504    
505  static GtkWidget *cache_logs(appdata_t *appdata, log_t *log, int is_html) {  #ifdef ENABLE_BROWSER_INTERFACE
506    static void on_gclink_clicked(GtkButton *button, gpointer data) {
507      cache_context_t *context = (cache_context_t*)data;
508      char *url = g_strdup_printf("http://www.geocaching.com/seek/log.aspx?wp=%s", context->cache->id);
509      browser_url(context->appdata, url);
510      g_free(url);
511    }
512    #endif
513    
514    static GtkWidget *cache_logs(appdata_t *appdata, cache_context_t *context, log_t *log, int is_html) {
515  #ifndef  USE_PANNABLE_AREA  #ifndef  USE_PANNABLE_AREA
516    /* put this inside a scrolled view */    /* put this inside a scrolled view */
517    GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL);    GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL);
# Line 466  static GtkWidget *cache_logs(appdata_t * Line 521  static GtkWidget *cache_logs(appdata_t *
521    GtkWidget *pannable_area = hildon_pannable_area_new();    GtkWidget *pannable_area = hildon_pannable_area_new();
522  #endif  #endif
523    
524    GtkWidget *table = gtk_table_new(4*gpx_number_of_logs(log), 3, FALSE);  #ifdef ENABLE_BROWSER_INTERFACE
525      gboolean gc_link = strncmp(context->cache->id, "GC", 2) == 0;
526    #else
527    #define gc_link (FALSE)
528    #endif
529    
530      GtkWidget *table = gtk_table_new(4*gpx_number_of_logs(log)+(gc_link?1:0), 3, FALSE);
531    int cnt = 0;    int cnt = 0;
532    
533    #ifdef ENABLE_BROWSER_INTERFACE
534      if(gc_link) {
535        GtkWidget *but = gtk_button_new_with_label(_("Post a new log entry for this geocache"));
536    #if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5)
537      hildon_gtk_widget_set_theme_size(but,
538               (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH));
539    #endif
540        gtk_signal_connect(GTK_OBJECT(but), "clicked",
541                           GTK_SIGNAL_FUNC(on_gclink_clicked), context);
542    
543        gtk_table_attach_defaults(GTK_TABLE(table), but, 0, 3, 0, 1);
544        cnt++;
545      }
546    #endif
547    
548    /* add all logs to the vbox */    /* add all logs to the vbox */
549    while(log) {    while(log) {
# Line 597  GtkWidget *cache_view(appdata_t *appdata Line 673  GtkWidget *cache_view(appdata_t *appdata
673  #endif  #endif
674    
675    notebook =  gtk_notebook_new();    notebook =  gtk_notebook_new();
676    
677  #ifdef USE_MAEMO  #ifdef USE_MAEMO
678  #if MAEMO_VERSION_MAJOR >= 5  #if MAEMO_VERSION_MAJOR >= 5
679    /* prevents user from accidentially touching the breadcrumb trail */    /* prevents user from accidentially touching the breadcrumb trail */
# Line 617  GtkWidget *cache_view(appdata_t *appdata Line 694  GtkWidget *cache_view(appdata_t *appdata
694    
695    if(cache->log)    if(cache->log)
696      gtk_notebook_append_page(GTK_NOTEBOOK(notebook),      gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
697             cache_logs(appdata, cache->log, cache->logs_are_html),       cache_logs(appdata, cache_context, cache->log, cache->logs_are_html),
698             gtk_label_new(_("Logs")));             gtk_label_new(_("Logs")));
699    
700    if(cache->wpt)    if(cache->wpt)
# Line 665  void cache_dialog(appdata_t *appdata, ca Line 742  void cache_dialog(appdata_t *appdata, ca
742    
743  #else  #else
744  #ifdef USE_STACKABLE_WINDOW  #ifdef USE_STACKABLE_WINDOW
745    static void on_cache_destroy (GtkWidget *widget, appdata_t *appdata) {
746      appdata->cur_cache = NULL;
747    
748      /* restore cur_view */
749      appdata->cur_view = g_object_get_data(G_OBJECT(widget), "cur_view");
750    }
751    
752  void cache_dialog(appdata_t *appdata, cache_t *cache) {  void cache_dialog(appdata_t *appdata, cache_t *cache) {
753    GtkWidget *window = hildon_stackable_window_new();    GtkWidget *window = hildon_stackable_window_new();
754    
755    gtk_window_set_title(GTK_WINDOW(window), cache->name);    /* store last "cur_view" in window */
756      g_object_set_data(G_OBJECT(window), "cur_view", appdata->cur_view);
757    
758      appdata->cur_cache = cache;
759      char *title = g_strdup_printf("%s - GPXView", cache->name);
760      gtk_window_set_title(GTK_WINDOW(window), title);
761      g_free(title);
762    
763    /* create cache visualization widget */    /* create cache visualization widget */
764    gtk_container_add(GTK_CONTAINER(window),    appdata->cur_view = cache_view(appdata, cache);
765                      cache_view(appdata, cache));    gtk_container_add(GTK_CONTAINER(window), appdata->cur_view);
766    
767      hildon_window_set_app_menu(HILDON_WINDOW(window),
768                                 menu_create(appdata, MENU_CACHE));
769    
770      g_signal_connect(G_OBJECT(window), "destroy",
771                       G_CALLBACK(on_cache_destroy), appdata);
772    
773    gtk_widget_show_all(window);    gtk_widget_show_all(window);
774  }  }

Legend:
Removed from v.1  
changed lines
  Added in v.134