--- trunk/src/geotoad.c 2009/12/07 16:22:17 232 +++ trunk/src/geotoad.c 2009/12/09 19:45:36 233 @@ -66,8 +66,9 @@ GtkWidget *view; } log; - GtkWidget *username, *password, *filename; + GtkWidget *username, *password; GtkWidget *lat, *lon, *dst; + char *filename; int use_cnt; @@ -92,6 +93,8 @@ g_ptr_array_free (context->argv, TRUE); } + if(context->filename) g_free(context->filename); + g_free(context); } } @@ -419,50 +422,11 @@ gtk_widget_destroy(dialog); } -static void on_browse(GtkWidget *widget, gpointer data) { - gt_context_t *context = (gt_context_t*)data; - - printf("Browse %p\n", context->dialog); - -#ifdef USE_MAEMO - GtkWidget *dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(context->dialog), - GTK_FILE_CHOOSER_ACTION_SAVE); -#else - GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Save GPX file"), - GTK_WINDOW(context->dialog), - GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, - NULL); -#endif - - printf("set filename <%s>\n", context->appdata->gt.filename); - - if(!g_file_test(context->appdata->gt.filename, G_FILE_TEST_EXISTS)) { - char *last_sep = strrchr(context->appdata->gt.filename, '/'); - 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), - context->appdata->gt.filename); - 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), - context->appdata->gt.filename); - - if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_FM_OK) { - gchar *name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - gtk_label_set_text(GTK_LABEL(context->filename), name); - } - - gtk_widget_destroy (dialog); +static void table_attach(GtkWidget *table, GtkWidget *child, int left, int top) { + gtk_table_attach_defaults(GTK_TABLE(table), child, left, left+1, top, top+1); } + static gboolean gui_setup(gt_context_t *context) { appdata_t *appdata = context->appdata; gboolean ok = FALSE; @@ -474,6 +438,9 @@ g_strdup_printf("%s/gtoad.gpx", appdata->path); } + if(appdata->gt.filename) + context->filename = g_strdup(appdata->gt.filename); + context->dialog = gtk_dialog_new_with_buttons(_("GeoToad - Setup"), GTK_WINDOW(appdata->window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, @@ -481,13 +448,12 @@ GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); + GtkWidget *table = gtk_table_new(5, 2, FALSE); + /* ------------------- Coordinates ------------------------- */ - GtkWidget *hbox = gtk_hbox_new(FALSE, 0); - GtkWidget *vbox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start_defaults(GTK_BOX(vbox), left_label_new(_("Position:"))); - gtk_box_pack_start_defaults(GTK_BOX(vbox), left_label_new(_("Distance:"))); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); + table_attach(table, left_label_new(_("Position:")), 0, 0); + table_attach(table, left_label_new(_("Distance:")), 0, 1); /* setup default positions */ pos_t *refpos = get_pos(appdata); @@ -496,51 +462,24 @@ appdata->gt.lon = refpos->lon; } - vbox = gtk_vbox_new(FALSE, 0); - GtkWidget *ihbox = gtk_hbox_new(FALSE, 0); + GtkWidget *hbox = gtk_hbox_new(FALSE, 0); context->lat = lat_entry_new(appdata->gt.lat); - gtk_box_pack_start_defaults(GTK_BOX(ihbox), context->lat); + gtk_box_pack_start_defaults(GTK_BOX(hbox), context->lat); context->lon = lon_entry_new(appdata->gt.lon); - gtk_box_pack_start_defaults(GTK_BOX(ihbox), context->lon); + gtk_box_pack_start_defaults(GTK_BOX(hbox), context->lon); GtkWidget *popup = preset_coordinate_picker(appdata, context->lat, context->lon); - gtk_box_pack_start_defaults(GTK_BOX(ihbox), popup); - gtk_box_pack_start_defaults(GTK_BOX(vbox), ihbox); + gtk_box_pack_start_defaults(GTK_BOX(hbox), popup); + table_attach(table, hbox, 1, 0); + float dst = appdata->gt.distance; // distance is given in kilometers if(appdata->imperial) dst /= 1.609344; context->dst = dist_entry_new(dst, appdata->imperial); - gtk_box_pack_start_defaults(GTK_BOX(vbox), context->dst); - gtk_box_pack_start_defaults(GTK_BOX(hbox), vbox); - - gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(context->dialog)->vbox), hbox); - - /* ------------------- file name ------------------------- */ - hbox = gtk_hbox_new(FALSE, 0); - - context->filename = gtk_label_new(appdata->gt.filename); - gtk_misc_set_alignment(GTK_MISC(context->filename), 0.f, 0.5f); - gtk_label_set_ellipsize(GTK_LABEL(context->filename), PANGO_ELLIPSIZE_MIDDLE); - gtk_box_pack_start_defaults(GTK_BOX(hbox), context->filename); - - GtkWidget *button = gtk_button_new_with_label(_("Browse")); -#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5) - hildon_gtk_widget_set_theme_size(button, - (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); -#endif - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(on_browse), context); - gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); - - gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(context->dialog)->vbox), hbox); - + table_attach(table, context->dst, 1, 1); /* ------------------- Username/Password ------------------------- */ - hbox = gtk_hbox_new(FALSE, 0); - vbox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start_defaults(GTK_BOX(vbox), left_label_new(_("Username:"))); - gtk_box_pack_start_defaults(GTK_BOX(vbox), left_label_new(_("Password:"))); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); + table_attach(table, left_label_new(_("Username:")), 0, 2); + table_attach(table, left_label_new(_("Password:")), 0, 3); - vbox = gtk_vbox_new(FALSE, 0); context->username = entry_new(); context->password = entry_new(); gtk_entry_set_visibility(GTK_ENTRY(context->password), FALSE); @@ -554,13 +493,20 @@ gtk_entry_set_text(GTK_ENTRY(context->password), appdata->gt.password); - gtk_box_pack_start_defaults(GTK_BOX(vbox), context->username); - gtk_box_pack_start_defaults(GTK_BOX(vbox), context->password); - gtk_box_pack_start_defaults(GTK_BOX(hbox), vbox); + table_attach(table, context->username, 1, 2); + table_attach(table, context->password, 1, 3); - gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(context->dialog)->vbox), hbox); + /* ------------------- file name ------------------------- */ + gtk_table_attach_defaults(GTK_TABLE(table), + export_file(_("Save GPX file"), &context->filename), + 0, 2, 4, 5); + + /* ---------------------------------------------------------------- */ + gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(context->dialog)->vbox), + table); - gtk_dialog_set_default_response(GTK_DIALOG(context->dialog), GTK_RESPONSE_OK); + gtk_dialog_set_default_response(GTK_DIALOG(context->dialog), + GTK_RESPONSE_OK); gtk_widget_show_all(context->dialog); @@ -580,8 +526,8 @@ g_strdup(gtk_entry_get_text(GTK_ENTRY(context->password))); if(appdata->gt.filename) g_free(appdata->gt.filename); - appdata->gt.filename = - g_strdup(gtk_label_get_text(GTK_LABEL(context->filename))); + if(context->filename) + appdata->gt.filename = g_strdup(context->filename); /* get distance in kilometers */ appdata->gt.distance = dist_entry_get(context->dst, FALSE);