--- trunk/src/misc.c 2009/12/07 16:14:50 231 +++ trunk/src/misc.c 2009/12/09 19:45:36 233 @@ -38,6 +38,7 @@ #include #include #include +#include #endif float roundf(float x); @@ -973,11 +974,12 @@ #ifndef COORDINATE_PICKER gtk_entry_set_text(GTK_ENTRY(widget), str); #else + gtk_button_set_label(GTK_BUTTON(widget), str); int dist_int = (int)roundf(dist * 1000); // km -> m if(mil) dist_int = (int)roundf(dist * 5280.0); // mi -> ft g_object_set_data(G_OBJECT(widget), "distance", (gpointer)dist_int); g_object_set_data(G_OBJECT(widget), "mil", (gpointer)mil); - gtk_button_set_label(GTK_BUTTON(widget), str); + g_signal_emit_by_name(widget, "changed"); #endif } @@ -1176,7 +1178,7 @@ static void cb_mm(GtkWidget *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; - pos_set(item, appdata->mmpos.lat, appdata->mpos.lon); + pos_set(item, appdata->mmpos.lat, appdata->mmpos.lon); } #endif @@ -1267,7 +1269,7 @@ #ifdef ENABLE_MAEMO_MAPPER if(appdata->mmpos_valid) { menu_add(menu, appdata, icon_get_widget(ICON_POS, 24), - _("Maemo mapper position"), cb_mm, 0, lon_entry, lat_entry); + _("Maemo Mapper position"), cb_mm, 0, lon_entry, lat_entry); } #endif @@ -1457,8 +1459,8 @@ #ifdef ENABLE_MAEMO_MAPPER if(appdata->mmpos_valid) { - preset_picker_add(menu, appdata, icon_get(ICON_POS, 24), - _("Maemo mapper position"), cb_mm, 0); + preset_picker_add(store, appdata, icon_get(ICON_POS, 24), + _("Maemo Mapper position"), cb_mm, 0); } #endif @@ -1527,7 +1529,7 @@ if(event->type == GDK_BUTTON_PRESS) { GtkWidget *dialog = - gtk_dialog_new_with_buttons(_("Preset coordinates"), + gtk_dialog_new_with_buttons(_("Use coordinate"), GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button))), GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, @@ -1556,7 +1558,9 @@ gtk_button_set_image(GTK_BUTTON(button), icon_get_widget(ICON_POS, 22)); - gtk_widget_set_tooltip_text(button, _("Preset coordinates")); +#ifndef USE_MAEMO + gtk_widget_set_tooltip_text(button, _("Use coordinate")); +#endif g_object_set_data(G_OBJECT(button), "lat_entry", (gpointer)lat_entry); g_object_set_data(G_OBJECT(button), "lon_entry", (gpointer)lon_entry); @@ -1593,6 +1597,7 @@ return pos; } +#if defined(ENABLE_MAEMO_MAPPER) && defined(ENABLE_OSM_GPS_MAP) #ifdef ENABLE_MAEMO_MAPPER static void cb_mm_set(GtkWidget *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; @@ -1603,6 +1608,7 @@ } #endif +#ifdef ENABLE_OSM_GPS_MAP static void cb_map_set(GtkWidget *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; @@ -1613,6 +1619,7 @@ pos.lat, pos.lon); } } +#endif #ifndef PRESET_PICKER_DIALOG static GtkWidget *goto_popup_menu_create(appdata_t *appdata, @@ -1621,12 +1628,12 @@ #if defined(ENABLE_OSM_GPS_MAP) menu_add(menu, appdata, icon_get_widget(ICON_POS, 20), - _("Map position"), cb_map_set, 0, lon_entry, lat_entry); + _("Internal map"), cb_map_set, 0, lon_entry, lat_entry); #endif #if defined(ENABLE_MAEMO_MAPPER) menu_add(menu, appdata, icon_get_widget(ICON_POS, 24), - _("Maemo mapper position"), cb_mm_set, 0, lon_entry, lat_entry); + _("Maemo Mapper"), cb_mm_set, 0, lon_entry, lat_entry); #endif gtk_widget_show_all(menu); @@ -1665,12 +1672,12 @@ #if defined(ENABLE_OSM_GPS_MAP) preset_picker_add(store, appdata, icon_get(ICON_POS, 20), - _("Map position"), cb_map_set, 0); + _("Internal map"), cb_map_set, 0); #endif #if defined(ENABLE_MAEMO_MAPPER) preset_picker_add(store, appdata, icon_get(ICON_POS, 24), - _("Maemo mapper position"), cb_mm_set, 0); + _("Maemo Mapper"), cb_mm_set, 0); #endif gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(store)); @@ -1694,6 +1701,7 @@ #endif } #endif +#endif static gint on_goto_button_press(GtkWidget *button, GdkEventButton *event, gpointer data) { @@ -1704,7 +1712,7 @@ #if defined(ENABLE_MAEMO_MAPPER) && !defined(ENABLE_OSM_GPS_MAP) /* only maemo mapper is being used */ pos_t pos = goto_pos_get(button); - if(!isnan(pos.lat) && !isnan(pos.lon)) { + if(!isnan(pos.lat) && !isnan(pos.lon)) dbus_mm_set_position(appdata, &pos); #elif !defined(ENABLE_MAEMO_MAPPER) && defined(ENABLE_OSM_GPS_MAP) /* only internal map is being used */ @@ -1733,7 +1741,7 @@ event->button, event->time); #else GtkWidget *dialog = - gtk_dialog_new_with_buttons(_("Map coordinates"), + gtk_dialog_new_with_buttons(_("Show coordinate on map"), GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button))), GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, @@ -1765,7 +1773,9 @@ gtk_button_set_image(GTK_BUTTON(button), icon_get_widget(ICON_POS, 23)); - gtk_widget_set_tooltip_text(button, _("Goto coordinates")); +#ifndef USE_MAEMO + gtk_widget_set_tooltip_text(button, _("Show coordinate on map")); +#endif g_object_set_data(G_OBJECT(button), "lat_entry", (gpointer)lat_entry); g_object_set_data(G_OBJECT(button), "lon_entry", (gpointer)lon_entry); @@ -1914,7 +1924,7 @@ #endif return widget; } - + float angle_entry_get(GtkWidget *widget) { #ifndef COORDINATE_PICKER char *p = (char*)gtk_entry_get_text(GTK_ENTRY(widget)); @@ -1936,4 +1946,168 @@ g_signal_emit_by_name(widget, "changed"); #endif } + +GtkWidget *toggle_button_new_with_label(char *label) { +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + return gtk_check_button_new_with_label(label); +#else + GtkWidget *cbut = gtk_toggle_button_new_with_label(label); + hildon_gtk_widget_set_theme_size(cbut, + (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); + gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(cbut), FALSE); + return cbut; +#endif +} + +void toggle_button_set_active(GtkWidget *button, gboolean active) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), active); +} + +gboolean toggle_button_get_active(GtkWidget *button) { + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); +} + +GtkWidget *check_button_new_with_label(char *label) { +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + return gtk_check_button_new_with_label(label); +#else + GtkWidget *cbut = + hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT | + HILDON_SIZE_AUTO_WIDTH); + gtk_button_set_label(GTK_BUTTON(cbut), label); + return cbut; +#endif +} + +void check_button_set_active(GtkWidget *button, gboolean active) { +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), active); +#else + hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active); +#endif +} + +gboolean check_button_get_active(GtkWidget *button) { +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); +#else + return hildon_check_button_get_active(HILDON_CHECK_BUTTON(button)); +#endif +} + +GtkWidget *button_new(void) { + GtkWidget *button = gtk_button_new(); +#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5) + hildon_gtk_widget_set_theme_size(button, + (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); +#endif + return button; +} + +GtkWidget *button_new_with_label(char *label) { + GtkWidget *button = gtk_button_new_with_label(label); +#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5) + hildon_gtk_widget_set_theme_size(button, + (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); +#endif + return button; +} + +static void on_browse(GtkWidget *widget, gpointer data) { + GtkWidget *dialog; + + char **fileptr = g_object_get_data(G_OBJECT(widget), "fileptr"); + +#ifdef USE_MAEMO + dialog = hildon_file_chooser_dialog_new( + GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))), + GTK_FILE_CHOOSER_ACTION_SAVE); +#else + dialog = gtk_file_chooser_dialog_new( + g_object_get_data(G_OBJECT(widget), "sel_title"), + GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))), + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); +#endif + + if(*fileptr) { + printf("set filename <%s>\n", *fileptr); + + if(!g_file_test(*fileptr, G_FILE_TEST_EXISTS)) { + char *last_sep = strrchr(*fileptr, '/'); + if(last_sep) { + *last_sep = 0; // seperate path from file + + /* the user just created a new document */ + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), + *fileptr); + gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), + last_sep+1); + + /* restore full filename */ + *last_sep = '/'; + } + } else + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), *fileptr); + } + + if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_FM_OK) { + gchar *name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if(name) { + if(*fileptr) g_free(*fileptr); + *fileptr = g_strdup(name); + +#ifndef FREMANTLE + GtkWidget *label = g_object_get_data(G_OBJECT(widget), "label"); + gtk_label_set_text(GTK_LABEL(label), *fileptr); +#else + hildon_button_set_value(HILDON_BUTTON(widget), *fileptr); +#endif + } + } + + gtk_widget_destroy (dialog); +} + +GtkWidget *export_file(char *sel_title, char **filename) { + /* non-fremantle and classic gtk use a rather ugly and */ + /* complex layout */ +#ifndef FREMANTLE + GtkWidget *vbox = gtk_vbox_new(FALSE, 0); + GtkWidget *hbox = gtk_hbox_new(FALSE, 0); + GtkWidget *label = gtk_label_new(_("Export to")); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE,0); + gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); + GtkWidget *button = button_new_with_label(_("Browse")); + g_object_set_data(G_OBJECT(button), "sel_title", sel_title); + g_object_set_data(G_OBJECT(button), "fileptr", filename); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(on_browse), NULL); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE,0); + gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox); + + label = gtk_label_new((*filename)?*filename:""); + g_object_set_data(G_OBJECT(button), "label", label); + gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); + gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_MIDDLE); + + gtk_box_pack_start_defaults(GTK_BOX(vbox), label); + return vbox; +#else + GtkWidget *button = hildon_button_new_with_text( + (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH), + HILDON_BUTTON_ARRANGEMENT_VERTICAL, + _("Export to"), *filename); + hildon_button_set_title_alignment(HILDON_BUTTON(button), 0.5, 0.5); + hildon_button_set_value_alignment(HILDON_BUTTON(button), 0.5, 0.5); + g_object_set_data(G_OBJECT(button), "sel_title", sel_title); + g_object_set_data(G_OBJECT(button), "fileptr", filename); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(on_browse), NULL); + return button; +#endif +} +