[gtk+] Add load/save functions for the sort column order in GtkFileChooserSettings



commit 69a06113915709da57b2676e9e0d23bb34a31bc8
Author: Benjamin Gramlich <benjamin gramlich gmail com>
Date:   Fri Jun 12 16:40:25 2009 -0500

    Add load/save functions for the sort column order in GtkFileChooserSettings
    
    Signed-off-by: Federico Mena Quintero <federico novell com>

 gtk/gtkfilechooserdefault.c  |    8 ---
 gtk/gtkfilechoosersettings.c |  125 ++++++++++++++++++++++++++++++++++++++++++
 gtk/gtkfilechoosersettings.h |   19 ++++++
 3 files changed, 144 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index d59ed71..6ad727b 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -191,14 +191,6 @@ typedef enum {
   SHORTCUT_TYPE_RECENT
 } ShortcutType;
 
-/* Column numbers for the file list */
-enum {
-  FILE_LIST_COL_NAME,
-  FILE_LIST_COL_SIZE,
-  FILE_LIST_COL_MTIME,
-  FILE_LIST_COL_NUM_COLUMNS
-};
-
 /* Column numbers for the search model.  
  * Keep this in sync with search_setup_model() 
  */
diff --git a/gtk/gtkfilechoosersettings.c b/gtk/gtkfilechoosersettings.c
index fe3543d..1553c36 100644
--- a/gtk/gtkfilechoosersettings.c
+++ b/gtk/gtkfilechoosersettings.c
@@ -46,6 +46,14 @@
 #define GEOMETRY_Y_KEY		"GeometryY"
 #define GEOMETRY_WIDTH_KEY	"GeometryWidth"
 #define GEOMETRY_HEIGHT_KEY	"GeometryHeight"
+#define SORT_COLUMN_KEY         "SortColumn"
+#define SORT_ORDER_KEY          "SortOrder"
+
+#define COLUMN_NAME_STRING      "name"
+#define COLUMN_MTIME_STRING     "modified"
+#define COLUMN_SIZE_STRING      "size"
+#define SORT_ASCENDING_STRING   "ascending"
+#define SORT_DESCENDING_STRING  "descending"
 
 #define MODE_PATH_BAR          "path-bar"
 #define MODE_FILENAME_ENTRY    "filename-entry"
@@ -104,6 +112,7 @@ ensure_settings_read (GtkFileChooserSettings *settings)
   GError *error;
   GKeyFile *key_file;
   gchar *location_mode_str, *filename;
+  gchar *sort_column, *sort_order;
   gboolean value;
 
   if (settings->settings_read)
@@ -129,6 +138,8 @@ ensure_settings_read (GtkFileChooserSettings *settings)
   if (!g_key_file_has_group (key_file, SETTINGS_GROUP))
     goto out;
 
+  /* Location mode */
+
   location_mode_str = g_key_file_get_string (key_file, SETTINGS_GROUP,
 					     LOCATION_MODE_KEY, NULL);
   if (location_mode_str)
@@ -144,6 +155,8 @@ ensure_settings_read (GtkFileChooserSettings *settings)
       g_free (location_mode_str);
     }
 
+  /* Show hidden */
+
   value = g_key_file_get_boolean (key_file, SETTINGS_GROUP,
 				  SHOW_HIDDEN_KEY, &error);
   if (error)
@@ -151,6 +164,8 @@ ensure_settings_read (GtkFileChooserSettings *settings)
   else
     settings->show_hidden = value != FALSE;
 
+  /* Expand folders */
+
   value = g_key_file_get_boolean (key_file, SETTINGS_GROUP,
 				  EXPAND_FOLDERS_KEY, &error);
   if (error)
@@ -158,6 +173,8 @@ ensure_settings_read (GtkFileChooserSettings *settings)
   else
     settings->expand_folders = value != FALSE;
 
+  /* Show size column */
+
   value = g_key_file_get_boolean (key_file, SETTINGS_GROUP,
 				  SHOW_SIZE_COLUMN_KEY, &error);
   if (error)
@@ -165,11 +182,49 @@ ensure_settings_read (GtkFileChooserSettings *settings)
   else
     settings->show_size_column = value != FALSE;
 
+  /* Geometry */
+
   get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_X_KEY, &settings->geometry_x);
   get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_Y_KEY, &settings->geometry_y);
   get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_WIDTH_KEY, &settings->geometry_width);
   get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_HEIGHT_KEY, &settings->geometry_height);
 
+  /* Sort column */
+
+  sort_column = g_key_file_get_string (key_file, SETTINGS_GROUP,
+				       SORT_COLUMN_KEY, NULL);
+  if (sort_column)
+    {
+      if (EQ (COLUMN_NAME_STRING, sort_column))
+	settings->sort_column = FILE_LIST_COL_NAME;
+      else if (EQ (COLUMN_MTIME_STRING, sort_column))
+	settings->sort_column = FILE_LIST_COL_MTIME;
+      else if (EQ (COLUMN_SIZE_STRING, sort_column))
+	settings->sort_column = FILE_LIST_COL_SIZE;
+      else
+	g_warning ("Unknown sort column name '%s' encountered in filechooser settings",
+		   sort_column);
+
+      g_free (sort_column);
+    }
+
+  /* Sort order */
+
+  sort_order = g_key_file_get_string (key_file, SETTINGS_GROUP,
+				      SORT_ORDER_KEY, NULL);
+  if (sort_order)
+    {
+      if (EQ (SORT_ASCENDING_STRING, sort_order))
+	settings->sort_order = GTK_SORT_ASCENDING;
+      else if (EQ (SORT_DESCENDING_STRING, sort_order))
+	settings->sort_order = GTK_SORT_DESCENDING;
+      else
+	g_warning ("Unknown sort column order '%s' encountered in filechooser settings",
+		   sort_order);
+
+      g_free (sort_order);
+    }
+
  out:
 
   g_key_file_free (key_file);
@@ -189,6 +244,8 @@ static void
 _gtk_file_chooser_settings_init (GtkFileChooserSettings *settings)
 {
   settings->location_mode = LOCATION_MODE_PATH_BAR;
+  settings->sort_order = GTK_SORT_ASCENDING;
+  settings->sort_column = FILE_LIST_COL_NAME;
   settings->show_hidden = FALSE;
   settings->expand_folders = FALSE;
   settings->show_size_column = FALSE;
@@ -288,6 +345,34 @@ _gtk_file_chooser_settings_set_geometry (GtkFileChooserSettings *settings,
   settings->geometry_height = height;
 }
 
+gint
+_gtk_file_chooser_settings_get_sort_column (GtkFileChooserSettings *settings)
+{
+  ensure_settings_read (settings);
+  return settings->sort_column;
+}
+
+void
+_gtk_file_chooser_settings_set_sort_column (GtkFileChooserSettings *settings,
+					    gint sort_column)
+{
+  settings->sort_column = sort_column;
+}
+
+GtkSortType
+_gtk_file_chooser_settings_get_sort_order (GtkFileChooserSettings *settings)
+{
+  ensure_settings_read (settings);
+  return settings->sort_order;
+}
+
+void
+_gtk_file_chooser_settings_set_sort_order (GtkFileChooserSettings *settings,
+					   GtkSortType sort_order)
+{
+  settings->sort_order = sort_order;
+}
+
 gboolean
 _gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
 				 GError                **error)
@@ -296,6 +381,8 @@ _gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
   gchar *filename;
   gchar *dirname;
   gchar *contents;
+  gchar *sort_column;
+  gchar *sort_order;
   gsize len;
   gboolean retval;
   GKeyFile *key_file;
@@ -317,6 +404,40 @@ _gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
       return FALSE;
     }
 
+  switch (settings->sort_column)
+    {
+    case FILE_LIST_COL_NAME:
+      sort_column = COLUMN_NAME_STRING;
+      break;
+
+    case FILE_LIST_COL_MTIME:
+      sort_column = COLUMN_MTIME_STRING;
+      break;
+
+    case FILE_LIST_COL_SIZE:
+      sort_column = COLUMN_SIZE_STRING;
+      break;
+
+    default:
+      g_assert_not_reached ();
+      sort_column = NULL;
+    }
+
+  switch (settings->sort_order)
+    {
+    case GTK_SORT_ASCENDING:
+      sort_order = SORT_ASCENDING_STRING;
+      break;
+
+    case GTK_SORT_DESCENDING:
+      sort_order = SORT_DESCENDING_STRING;
+      break;
+
+    default:
+      g_assert_not_reached ();
+      sort_order = NULL;
+    }
+
   key_file = g_key_file_new ();
 
   /* Initialise with the on-disk keyfile, so we keep unknown options */
@@ -338,6 +459,10 @@ _gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
 			  GEOMETRY_WIDTH_KEY, settings->geometry_width);
   g_key_file_set_integer (key_file, SETTINGS_GROUP,
 			  GEOMETRY_HEIGHT_KEY, settings->geometry_height);
+  g_key_file_set_string (key_file, SETTINGS_GROUP,
+			 SORT_COLUMN_KEY, sort_column);
+  g_key_file_set_string (key_file, SETTINGS_GROUP,
+			 SORT_ORDER_KEY, sort_order);
 
   contents = g_key_file_to_data (key_file, &len, error);
   g_key_file_free (key_file);
diff --git a/gtk/gtkfilechoosersettings.h b/gtk/gtkfilechoosersettings.h
index 1bc45aa..5fd7ad2 100644
--- a/gtk/gtkfilechoosersettings.h
+++ b/gtk/gtkfilechoosersettings.h
@@ -29,6 +29,14 @@ G_BEGIN_DECLS
 
 #define GTK_FILE_CHOOSER_SETTINGS_TYPE (_gtk_file_chooser_settings_get_type ())
 
+/* Column numbers for the file list */
+enum {
+  FILE_LIST_COL_NAME,
+  FILE_LIST_COL_SIZE,
+  FILE_LIST_COL_MTIME,
+  FILE_LIST_COL_NUM_COLUMNS
+};
+
 typedef struct _GtkFileChooserSettings GtkFileChooserSettings;
 typedef struct _GtkFileChooserSettingsClass GtkFileChooserSettingsClass;
 
@@ -38,6 +46,9 @@ struct _GtkFileChooserSettings
 
   LocationMode location_mode;
 
+  GtkSortType sort_order;
+  gint sort_column;
+
   int geometry_x;
   int geometry_y;
   int geometry_width;
@@ -74,6 +85,14 @@ gboolean _gtk_file_chooser_settings_get_show_size_column (GtkFileChooserSettings
 void     _gtk_file_chooser_settings_set_show_size_column (GtkFileChooserSettings *settings,
                                                           gboolean                show_column);
 
+gint _gtk_file_chooser_settings_get_sort_column (GtkFileChooserSettings *settings);
+void _gtk_file_chooser_settings_set_sort_column (GtkFileChooserSettings *settings,
+						 gint sort_column);
+
+GtkSortType _gtk_file_chooser_settings_get_sort_order (GtkFileChooserSettings *settings);
+void        _gtk_file_chooser_settings_set_sort_order (GtkFileChooserSettings *settings,
+						       GtkSortType sort_order);
+
 void _gtk_file_chooser_settings_get_geometry (GtkFileChooserSettings *settings,
 					      int                    *out_x,
 					      int                    *out_y,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]