]> git.street.me.uk Git - andy/viking.git/commitdiff
Fix bug #2481237: Maps directory file chooser should look for directory
authorJocelyn Jaubert <jocelyn.jaubert@gmail.com>
Sun, 15 Mar 2009 12:38:02 +0000 (13:38 +0100)
committerGuilhem Bonnefille <guilhem.bonnefille@gmail.com>
Sat, 4 Apr 2009 20:47:20 +0000 (22:47 +0200)
This adds a parameter to vik_file_entry_new() to specify if we are looking for
a file or a directory. There is also a new parameter for widget type:
VIK_LAYER_WIDGET_FOLDERENTRY in addition to VIK_LAYER_WIDGET_FILEENTRY. Now, we
can correctly select a directory when looking at the maps directory property of
maps layers.

Thanks Andrew Lunn to have reported the bug.

src/dialog.c
src/uibuilder.c
src/uibuilder.h
src/vikfileentry.c
src/vikfileentry.h
src/vikgeoreflayer.c
src/vikmapslayer.c

index 06965fd15095e230f2e963403b1e7f6f5d0b5afe..a3c4bdba27a5b6ff8b053831a312a5c6891d795b 100644 (file)
@@ -257,7 +257,7 @@ gboolean a_dialog_new_waypoint ( GtkWindow *parent, gchar **dest, VikWaypoint *w
     gtk_entry_set_text(GTK_ENTRY(commententry), cmt);
 
   imagelabel = gtk_label_new (_("Image:"));
-  imageentry = vik_file_entry_new ();
+  imageentry = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN);
 
   {
     GtkCellRenderer *r;
index a277724d1b730d2e4d0112c5c44a93fd5876f2ec..d9b497c3ee44fdd99b32971c54c60e43c00c8ed9 100644 (file)
@@ -138,10 +138,18 @@ GtkWidget *a_uibuilder_new_widget ( VikLayerParam *param, VikLayerParamData data
     case VIK_LAYER_WIDGET_FILEENTRY:
       if ( param->type == VIK_LAYER_PARAM_STRING )
       {
-        rv = vik_file_entry_new ();
+        rv = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN);
         vik_file_entry_set_filename ( VIK_FILE_ENTRY(rv), data.s );
       }
       break;
+    case VIK_LAYER_WIDGET_FOLDERENTRY:
+      if ( param->type == VIK_LAYER_PARAM_STRING )
+      {
+        rv = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+        vik_file_entry_set_filename ( VIK_FILE_ENTRY(rv), data.s );
+      }
+      break;
+
     case VIK_LAYER_WIDGET_FILELIST:
       if ( param->type == VIK_LAYER_PARAM_STRING_LIST )
       {
@@ -202,6 +210,7 @@ VikLayerParamData a_uibuilder_widget_get_value ( GtkWidget *widget, VikLayerPara
       rv.s = gtk_entry_get_text ( GTK_ENTRY(widget) );
       break;
     case VIK_LAYER_WIDGET_FILEENTRY:
+    case VIK_LAYER_WIDGET_FOLDERENTRY:
       rv.s = vik_file_entry_get_filename ( VIK_FILE_ENTRY(widget) );
       break;
     case VIK_LAYER_WIDGET_FILELIST:
index f7a4b07d1d0a569c22ad9ea8b5bbe4351eccf69c..b9669c4ec48007d4503e2114bda695ca40ef0f84 100644 (file)
@@ -58,6 +58,7 @@ VIK_LAYER_WIDGET_SPINBUTTON,
 VIK_LAYER_WIDGET_ENTRY,
 VIK_LAYER_WIDGET_PASSWORD,
 VIK_LAYER_WIDGET_FILEENTRY,
+VIK_LAYER_WIDGET_FOLDERENTRY,
 VIK_LAYER_WIDGET_HSCALE,
 VIK_LAYER_WIDGET_COLOR,
 VIK_LAYER_WIDGET_COMBOBOX,
index e151ef260cb59d2d9c390409fbe20744eaa6287a..707fb01551a1403c879c081d4409ffdeb3c60ae8 100644 (file)
@@ -34,6 +34,7 @@ struct _VikFileEntry {
   GtkHBox parent;
   GtkWidget *entry, *button;
   GtkWidget *file_selector;
+  GtkFileChooserAction action;
 };
 
 GType vik_file_entry_get_type (void)
@@ -60,11 +61,12 @@ GType vik_file_entry_get_type (void)
   return vs_type;
 }
 
-GtkWidget *vik_file_entry_new ()
+GtkWidget *vik_file_entry_new (GtkFileChooserAction action)
 {
   VikFileEntry *vfe = VIK_FILE_ENTRY ( g_object_new ( VIK_FILE_ENTRY_TYPE, NULL ) );
   vfe->entry = gtk_entry_new ();
   vfe->button = gtk_button_new_with_label ( _("Browse...") );
+  vfe->action = action;
   g_signal_connect_swapped ( G_OBJECT(vfe->button), "clicked", G_CALLBACK(choose_file), vfe );
 
   gtk_box_pack_start ( GTK_BOX(vfe), vfe->entry, TRUE, TRUE, 3 );
@@ -93,7 +95,7 @@ static void choose_file ( VikFileEntry *vfe )
     g_assert ( (win = gtk_widget_get_toplevel(GTK_WIDGET(vfe))) );
     vfe->file_selector = gtk_file_chooser_dialog_new (_("Choose file"),
                                      GTK_WINDOW(win),
-                                     GTK_FILE_CHOOSER_ACTION_OPEN,
+                                     vfe->action,   /* open file or directory */
                                      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                      GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
                                      NULL);
index a9f46c040f182e460784553fbb342e398a6b9cb2..b83af5806477b98c27b78f2124b40e18af1f6d24 100644 (file)
@@ -44,7 +44,7 @@ struct _VikFileEntryClass
 
 GType vik_file_entry_get_type ();
 
-GtkWidget *vik_file_entry_new ();
+GtkWidget *vik_file_entry_new (GtkFileChooserAction action);
 G_CONST_RETURN gchar *vik_file_entry_get_filename ( VikFileEntry *vfe );
 void vik_file_entry_set_filename ( VikFileEntry *vfe, const gchar *filename );
 
index 34947f34c5df8fa9bcffe72d00dcc834620f1b0c..9134e9f96aa659ab92f6ec01ecdd90b529d132d9 100644 (file)
@@ -416,7 +416,7 @@ static gboolean georef_layer_dialog ( VikGeorefLayer **vgl, gpointer vp, GtkWind
   yspin = gtk_spin_button_new ( (GtkAdjustment *) gtk_adjustment_new ( 4, VIK_VIEWPORT_MIN_ZOOM, VIK_VIEWPORT_MAX_ZOOM, 1, 5, 5 ), 1, 8 );
 
   imagelabel = gtk_label_new ( _("Map Image:") );
-  imageentry = vik_file_entry_new ();
+  imageentry = vik_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN);
 
   if (*vgl)
   {
index 1021b3e89dba102967dfa48569a5b74dd692b7ae..5f722eb84799e02ee29b7a611f45467873569bd0 100644 (file)
@@ -117,7 +117,7 @@ static VikLayerParamScale params_scales[] = {
 
 VikLayerParam maps_layer_params[] = {
   { "mode", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Map Type:"), VIK_LAYER_WIDGET_RADIOGROUP, NULL, NULL },
-  { "directory", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Maps Directory (Optional):"), VIK_LAYER_WIDGET_FILEENTRY },
+  { "directory", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Maps Directory (Optional):"), VIK_LAYER_WIDGET_FOLDERENTRY },
   { "alpha", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Alpha:"), VIK_LAYER_WIDGET_HSCALE, params_scales },
   { "autodownload", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_GROUP_NONE, N_("Autodownload maps:"), VIK_LAYER_WIDGET_CHECKBUTTON },
   { "mapzoom", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Zoom Level:"), VIK_LAYER_WIDGET_COMBOBOX, params_mapzooms },