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 |
} |
} |
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)); |
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]; |
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 |
|
|
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)); |
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 |
|
|
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) { |
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) { |
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 |
|
} |