Diff of /trunk/src/misc.c

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

revision 233 by harbaum, Wed Dec 9 19:45:36 2009 UTC revision 246 by harbaum, Tue Jan 19 20:26:37 2010 UTC
# Line 51  float roundf(float x); Line 51  float roundf(float x);
51  #define COORDINATE_PICKER  #define COORDINATE_PICKER
52  #endif  #endif
53    
54    static const char *decimal_point(void) {
55      static const char *point = ".";
56    
57      struct lconv *lconv = localeconv();
58    
59      if(lconv && lconv->decimal_point)
60        return lconv->decimal_point;
61    
62      return point;
63    }
64    
65  char strlastchr(char *str) {  char strlastchr(char *str) {
66    return str[strlen(str)]-1;    return str[strlen(str)]-1;
67  }  }
# Line 568  static gint on_lat_picker_button_press(G Line 579  static gint on_lat_picker_button_press(G
579                  minw[0] = digit_picker_create(0,5, min/10));                  minw[0] = digit_picker_create(0,5, min/10));
580      gtk_box_pack_start_defaults(GTK_BOX(hbox),      gtk_box_pack_start_defaults(GTK_BOX(hbox),
581                  minw[1] = digit_picker_create(0,9, min%10));                  minw[1] = digit_picker_create(0,9, min%10));
582      gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("."), FALSE, FALSE, 0);      gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(decimal_point()),
583                           FALSE, FALSE, 0);
584    
585      gtk_box_pack_start_defaults(GTK_BOX(hbox),      gtk_box_pack_start_defaults(GTK_BOX(hbox),
586                  minfracw[0] = digit_picker_create(0,9, minfrac/100));                  minfracw[0] = digit_picker_create(0,9, minfrac/100));
# Line 612  static gint on_lat_picker_button_press(G Line 624  static gint on_lat_picker_button_press(G
624  }  }
625  #endif  #endif
626    
627    /* whatever there is in the entry: if it's illegal make it */
628    #define ILLEGAL_LAT  "X --° --%s---'"
629    #define ILLEGAL_LON  "X ---° --%s---'"
630    
631    static void pos_lat_check(GtkWidget *widget) {
632      if(isnan(lat_entry_get(widget))) {
633        char *str = g_strdup_printf(ILLEGAL_LAT, decimal_point());
634    
635    #ifndef COORDINATE_PICKER
636        mark(widget, FALSE);
637        gtk_entry_set_text(GTK_ENTRY(widget), str);
638    #else
639        gtk_button_set_label(GTK_BUTTON(widget), str);
640    #endif
641    
642        g_free(str);
643      }
644    }
645    
646    static void pos_lon_check(GtkWidget *widget) {
647      if(isnan(lon_entry_get(widget))) {
648        char *str = g_strdup_printf(ILLEGAL_LON, decimal_point());
649    
650    #ifndef COORDINATE_PICKER
651        mark(widget, FALSE);
652        gtk_entry_set_text(GTK_ENTRY(widget), str);
653    #else
654        gtk_button_set_label(GTK_BUTTON(widget), str);
655    #endif
656    
657        g_free(str);
658      }
659    }
660    
661  /* a entry that is colored red when being "active" */  /* a entry that is colored red when being "active" */
662  GtkWidget *lat_entry_new(float lat) {  GtkWidget *lat_entry_new(float lat) {
663    char str[32];    char str[32];
# Line 636  GtkWidget *lat_entry_new(float lat) { Line 682  GtkWidget *lat_entry_new(float lat) {
682                       (GtkSignalFunc)on_lat_picker_button_press, NULL);                       (GtkSignalFunc)on_lat_picker_button_press, NULL);
683  #endif  #endif
684    
685      pos_lat_check(widget);
686    return widget;    return widget;
687  }  }
688    
# Line 688  static gint on_lon_picker_button_press(G Line 735  static gint on_lon_picker_button_press(G
735                  minw[0] = digit_picker_create(0,5, min/10));                  minw[0] = digit_picker_create(0,5, min/10));
736      gtk_box_pack_start_defaults(GTK_BOX(hbox),      gtk_box_pack_start_defaults(GTK_BOX(hbox),
737                  minw[1] = digit_picker_create(0,9, min%10));                  minw[1] = digit_picker_create(0,9, min%10));
738      gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("."), FALSE, FALSE, 0);      gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(decimal_point()),
739                           FALSE, FALSE, 0);
740    
741      gtk_box_pack_start_defaults(GTK_BOX(hbox),      gtk_box_pack_start_defaults(GTK_BOX(hbox),
742                  minfracw[0] = digit_picker_create(0,9, minfrac/100));                  minfracw[0] = digit_picker_create(0,9, minfrac/100));
# Line 754  GtkWidget *lon_entry_new(float lon) { Line 802  GtkWidget *lon_entry_new(float lon) {
802                       (GtkSignalFunc)on_lon_picker_button_press, NULL);                       (GtkSignalFunc)on_lon_picker_button_press, NULL);
803  #endif  #endif
804    
805      pos_lon_check(widget);
806    return widget;    return widget;
807  }  }
808    
# Line 786  void lat_entry_set(GtkWidget *widget, fl Line 835  void lat_entry_set(GtkWidget *widget, fl
835    g_object_set_data(G_OBJECT(widget), "latitude", (gpointer)lat_int);    g_object_set_data(G_OBJECT(widget), "latitude", (gpointer)lat_int);
836    g_signal_emit_by_name(widget, "changed");    g_signal_emit_by_name(widget, "changed");
837  #endif  #endif
838      pos_lat_check(widget);
839  }  }
840    
841  void lon_entry_set(GtkWidget *widget, float lon) {  void lon_entry_set(GtkWidget *widget, float lon) {
# Line 799  void lon_entry_set(GtkWidget *widget, fl Line 849  void lon_entry_set(GtkWidget *widget, fl
849    g_object_set_data(G_OBJECT(widget), "longitude", (gpointer)lon_int);    g_object_set_data(G_OBJECT(widget), "longitude", (gpointer)lon_int);
850    g_signal_emit_by_name(widget, "changed");    g_signal_emit_by_name(widget, "changed");
851  #endif  #endif
852      pos_lon_check(widget);
853  }  }
854    
855  void lat_label_set(GtkWidget *widget, float lat) {  void lat_label_set(GtkWidget *widget, float lat) {
# Line 2110  GtkWidget *export_file(char *sel_title, Line 2161  GtkWidget *export_file(char *sel_title,
2161  #endif  #endif
2162  }  }
2163    
2164    #ifdef FREMANTLE
2165    static int number_editor_get(GtkWidget *widget) {
2166      GtkWidget *entry = g_object_get_data(G_OBJECT(widget), "entry");
2167      g_assert(entry);
2168      const char *str = gtk_entry_get_text(GTK_ENTRY(entry));
2169      if(!str) return 0;
2170      return atoi(str);
2171    }
2172    
2173    static void number_editor_set(GtkWidget *widget, int num) {
2174      int min = (int)g_object_get_data(G_OBJECT(widget), "min");
2175      int max = (int)g_object_get_data(G_OBJECT(widget), "max");
2176    
2177      if(num < min) num = min;
2178      if(num > max) num = max;
2179    
2180      GtkWidget *btn_inc =
2181        (GtkWidget*)g_object_get_data(G_OBJECT(widget), "btn_inc");
2182      gtk_widget_set_sensitive(btn_inc, num < max);
2183    
2184      GtkWidget *btn_dec =
2185        (GtkWidget*)g_object_get_data(G_OBJECT(widget), "btn_dec");
2186      gtk_widget_set_sensitive(btn_dec, num > min);
2187    
2188      GtkWidget *entry = g_object_get_data(G_OBJECT(widget), "entry");
2189      g_assert(entry);
2190      char *str = g_strdup_printf("%d", num);
2191      gtk_entry_set_text(GTK_ENTRY(entry), str);
2192      g_free(str);
2193    }
2194    
2195    static void on_number_decrease(GtkWidget *widget, gpointer data) {
2196      number_editor_set(GTK_WIDGET(data),
2197        number_editor_get(GTK_WIDGET(data)) - 1);
2198    }
2199    
2200    static void on_number_increase(GtkWidget *widget, gpointer data) {
2201      number_editor_set(GTK_WIDGET(data),
2202        number_editor_get(GTK_WIDGET(data)) + 1);
2203    }
2204    
2205    static void on_number_changed(GtkWidget *widget, gpointer data) {
2206      number_editor_set(GTK_WIDGET(data),
2207        number_editor_get(GTK_WIDGET(data)));
2208    }
2209    #endif
2210    
2211    GtkWidget *number_editor_new(int current, int min, int max) {
2212    #ifndef USE_MAEMO
2213      GtkObject *adj = gtk_adjustment_new(current, min, max, 1, 10, 10);
2214      return gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0);
2215    #elif MAEMO_VERSION_MAJOR < 5
2216      GtkWidget *widget = hildon_number_editor_new(min, max);
2217      hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(widget), current);
2218      return widget;
2219    #else
2220      GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
2221      g_object_set_data(G_OBJECT(hbox), "min", (gpointer)min);
2222      g_object_set_data(G_OBJECT(hbox), "max", (gpointer)max);
2223    
2224      GtkWidget *btn_dec = button_new_with_label("  -  ");
2225      g_object_set_data(G_OBJECT(hbox), "btn_dec", btn_dec);
2226      gtk_signal_connect(GTK_OBJECT(btn_dec), "clicked",
2227                         (GtkSignalFunc)on_number_decrease, hbox);
2228      gtk_box_pack_start(GTK_BOX(hbox), btn_dec, FALSE, FALSE, 0);
2229    
2230      GtkWidget *entry = hildon_entry_new(HILDON_SIZE_AUTO);
2231      g_object_set_data(G_OBJECT(hbox), "entry", entry);
2232      g_signal_connect(G_OBJECT(entry), "changed",
2233                       G_CALLBACK(on_number_changed), hbox);
2234      gtk_entry_set_width_chars(GTK_ENTRY(entry), 2);
2235      hildon_gtk_entry_set_input_mode(GTK_ENTRY(entry),
2236                                      HILDON_GTK_INPUT_MODE_NUMERIC);
2237      gtk_box_pack_start_defaults(GTK_BOX(hbox), entry);
2238    
2239      GtkWidget *btn_inc = button_new_with_label("  +  ");
2240      g_object_set_data(G_OBJECT(hbox), "btn_inc", btn_inc);
2241      gtk_signal_connect(GTK_OBJECT(btn_inc), "clicked",
2242                         (GtkSignalFunc)on_number_increase, hbox);
2243      gtk_box_pack_start(GTK_BOX(hbox), btn_inc, FALSE, FALSE, 0);
2244    
2245      number_editor_set(hbox, current);
2246    
2247      return hbox;
2248    #endif
2249    }
2250    
2251    int number_editor_get_value(GtkWidget *widget) {
2252    #ifndef USE_MAEMO
2253      return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
2254    #elif MAEMO_VERSION_MAJOR < 5
2255      return hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(widget));
2256    #else
2257      return number_editor_get(widget);
2258    #endif
2259    }

Legend:
Removed from v.233  
changed lines
  Added in v.246