[maemo-commits] [maemo-commits] r15922 - projects/haf/branches/hildon-fm/fremantle/hildon-fm

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon Sep 1 09:44:54 EEST 2008
Author: yangli
Date: 2008-09-01 09:44:53 +0300 (Mon, 01 Sep 2008)
New Revision: 15922

Modified:
   projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-chooser-dialog.c
   projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c
   projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.h
Log:
modifications regarding requirement of using both scrolled window for FM and pannable area widget for other new applications

Modified: projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-chooser-dialog.c
===================================================================
--- projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-chooser-dialog.c	2008-09-01 05:53:35 UTC (rev 15921)
+++ projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-chooser-dialog.c	2008-09-01 06:44:53 UTC (rev 15922)
@@ -93,6 +93,8 @@
 #endif
 
 static void sync_extensions_combo (HildonFileChooserDialogPrivate *priv);
+static void hildon_file_chooser_dialog_reset_files_visibility(HildonFileChooserDialogPrivate *priv,
+							      gint dialog_type);
 
 #define HILDON_FILE_CHOOSER_DIALOG_TYPE_SELECTION_MODE (hildon_file_chooser_dialog_selection_mode_get_type())
 static GType
@@ -128,6 +130,7 @@
     PROP_MAX_FULL_PATH_LENGTH,
     PROP_SELECTION_MODE,
     PROP_INVISIBLE_FILES,
+    PROP_PANNABLE
 };
 
 struct _HildonFileChooserDialogPrivate {
@@ -175,7 +178,7 @@
     gboolean should_show_folder_button;
     gboolean should_show_location;
     gboolean show_upnp;
-    gboolean invisible_files;
+    gboolean pannable_flag;
 };
 
 static void hildon_response_up_button_clicked(GtkWidget *widget,
@@ -1113,9 +1116,8 @@
         gtk_widget_set_size_request(GTK_WIDGET(priv->filetree),
                                     FILE_SELECTION_WIDTH_TOTAL,
                                     FILE_SELECTION_HEIGHT);	
-	hildon_file_selection_set_invisible_files(priv->filetree, 
-					      priv->invisible_files);
-	hildon_file_selection_set_filter(priv->filetree, NULL);
+	hildon_file_chooser_dialog_reset_files_visibility(priv,
+							  GTK_FILE_CHOOSER_ACTION_OPEN);
         gtk_widget_show(GTK_WIDGET(priv->filetree));
 	hildon_file_selection_show_content_pane(priv->filetree);
 	hildon_file_selection_hide_navigation_pane(priv->filetree);
@@ -1193,6 +1195,8 @@
 	
 	gtk_widget_show_all(priv->hbox_address);
 	gtk_widget_hide(priv->path_label);
+	hildon_file_chooser_dialog_reset_files_visibility(priv,
+							  GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
 	gtk_widget_show(GTK_WIDGET(priv->filetree));
 	hildon_file_selection_show_content_pane(priv->filetree);
 	hildon_file_selection_hide_navigation_pane(priv->filetree);
@@ -1301,18 +1305,21 @@
     gboolean local_only = FALSE;
     gboolean show_hidden = FALSE;
     gboolean show_upnp = TRUE;
+    gboolean dialog_pannable = TRUE;
 
     g_object_get (self->priv->filetree, "local-only", &local_only, NULL);
     g_object_get (self->priv->filetree, "show-hidden", &show_hidden, NULL);
     g_object_get (self->priv->filetree, "show-upnp", &show_upnp, NULL);
-
-    /* new button need to be visible */
+    
+    g_object_get (self, "use-pannable-widget", &dialog_pannable, NULL);
+    g_object_set (self->priv->filetree, "use-pannable-widget", 
+		  &dialog_pannable, NULL);
+    
     dialog = hildon_file_chooser_dialog_new_with_properties
       (GTK_WINDOW(self),
        "action", action,
        "file-system-model",
        self->priv->model, 
-       "invisible-files", TRUE,
        "local-only", local_only,
        "show-hidden", show_hidden,
        "show-upnp", show_upnp,
@@ -1322,9 +1329,8 @@
     priv = HILDON_FILE_CHOOSER_DIALOG(dialog)->priv;
 
     g_assert(HILDON_IS_FILE_SELECTION(priv->filetree));
-    hildon_file_selection_set_invisible_files(priv->filetree,
-					      priv->invisible_files);
-    hildon_file_selection_set_filter(priv->filetree, NULL);
+    hildon_file_chooser_dialog_reset_files_visibility(priv,
+			  GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER + 4);
     sync_current_folders(self, HILDON_FILE_CHOOSER_DIALOG(dialog));
 
     return dialog;
@@ -1715,8 +1721,8 @@
     	gtk_check_menu_item_set_active
 	  (GTK_CHECK_MENU_ITEM(priv->mode_thumbnails), TRUE);
       break;
-    case PROP_INVISIBLE_FILES:
-      priv->invisible_files = g_value_get_boolean(value);
+    case PROP_PANNABLE:
+      priv->pannable_flag = g_value_get_boolean(value);
       break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
@@ -1784,9 +1790,9 @@
     case PROP_SELECTION_MODE:
         g_value_set_enum(value, hildon_file_selection_get_mode(priv->filetree));
         break;
-    case PROP_INVISIBLE_FILES:
-      g_value_set_boolean(value, priv->invisible_files);
-      break;
+    case PROP_PANNABLE:
+        g_value_set_boolean(value, priv->pannable_flag);
+        break;
     default:   /* Backend is not readable */
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
         break;
@@ -1953,11 +1959,6 @@
                                 "String to use in leftmost (=open) button",
                                 NULL, G_PARAM_READWRITE));
 
-    pspec = g_param_spec_boolean("invisible-files", "invisible files",
-				 "files should be invisible  (if it's true)",
-				 FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
-    g_object_class_install_property(gobject_class, PROP_INVISIBLE_FILES, pspec);
-
     g_object_class_install_property(gobject_class, PROP_MULTIPLE_TEXT,
             g_param_spec_string("save-multiple", "Save multiple files",
                                 "Text to be displayed in items field when saving multiple files",
@@ -1986,6 +1987,11 @@
                               G_PARAM_READWRITE);
     g_object_class_install_property(gobject_class, PROP_SELECTION_MODE, pspec);
 
+    g_object_class_install_property(gobject_class, PROP_PANNABLE,
+      g_param_spec_boolean("use-pannable-area-widget", "use the pannable area widget",
+                           "use the pannable area widget instead of scrolled window as "
+                           "a container if this property is TRUE (TRUE by default)",
+                           TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
     hildon_gtk_file_chooser_install_properties(gobject_class);
 }
@@ -2369,6 +2375,7 @@
 {
     GObject *obj;
     HildonFileChooserDialogPrivate *priv;
+    gboolean dialog_pannable = TRUE;
 
     obj =
         G_OBJECT_CLASS(hildon_file_chooser_dialog_parent_class)->
@@ -2376,6 +2383,8 @@
     /* Now we know if specific backend is requested */
     priv = HILDON_FILE_CHOOSER_DIALOG(obj)->priv;
 
+    g_object_get (HILDON_FILE_CHOOSER_DIALOG(obj), 
+		  "use-pannable-widget", &dialog_pannable, NULL);
     g_assert(priv->model);
     priv->filetree = g_object_new
       (HILDON_TYPE_FILE_SELECTION,
@@ -2383,11 +2392,8 @@
        "visible-columns", (HILDON_FILE_SELECTION_SHOW_NAME
 			   | HILDON_FILE_SELECTION_SHOW_MODIFIED),
        "pane-position", get_global_pane_position (),
-      NULL);
-
-    hildon_file_selection_set_invisible_files(priv->filetree, 
-					      priv->invisible_files);
-
+       "use-pannable-area-widget", dialog_pannable,
+       NULL);
     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(obj)->vbox), 
 			       priv->hbox_address, FALSE, TRUE, 0);
     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(obj)->vbox),
@@ -2510,7 +2516,7 @@
 static void
 sync_extensions_combo (HildonFileChooserDialogPrivate *priv)
 {
-  if (priv->ext_name && priv->extensions_combo)
+    if (priv->ext_name && priv->extensions_combo)
     {
       GtkTreeModel *model;
       GtkTreeIter iter;
@@ -2565,6 +2571,27 @@
   hildon_file_chooser_dialog_do_autonaming (priv);
 }
 
+static void hildon_file_chooser_dialog_reset_files_visibility(HildonFileChooserDialogPrivate *priv,
+							      gint dialog_type)
+{
+  switch (dialog_type){
+     case GTK_FILE_CHOOSER_ACTION_OPEN:
+       g_object_set(priv->filetree, "show-files", TRUE, NULL);
+       hildon_file_selection_set_filter(priv->filetree, NULL);
+       break;
+     case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER:
+       g_object_set(priv->filetree, "show-files", TRUE, NULL);
+       hildon_file_selection_set_filter(priv->filetree, NULL);
+       break;
+     case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER + 4:
+       g_object_set(priv->filetree, "show-files", FALSE, NULL);
+       hildon_file_selection_set_filter(priv->filetree, NULL);
+       break;
+     default:
+       break;
+  }
+}
+
 /**
  * hildon_file_chooser_dialog_add_extensions_combo:
  * @self: dialog widget

Modified: projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c
===================================================================
--- projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c	2008-09-01 05:53:35 UTC (rev 15921)
+++ projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c	2008-09-01 06:44:53 UTC (rev 15922)
@@ -128,7 +128,9 @@
     PROP_ACTIVE_PANE,
     PROP_SHOW_UPNP,
     PROP_PANE_POSITION,
-    PROP_DRAGGING
+    PROP_DRAGGING,
+    PROP_SHOW_FILES, /* show or not show the files in the content pane */
+    PROP_PANNABLE /* use the pannable area widget as a container */
 };
 
 struct _HildonFileSelectionPrivate {
@@ -190,12 +192,10 @@
 
     gchar *cursor_goal_uri;
     
-    /* 1: use pannable area widget 
-       0: use scrolled wnidow widget */
     gboolean pannable_flag;
-    /* set this flag to true, files will be filtered out, used
+    /* set this flag to FALSE, files will be filtered out in content pane, used
        in for example, folder chooser dialog and some other similar dialogs */
-    gboolean invisible_files;
+    gboolean show_files;
 };
 
 #if 0
@@ -678,7 +678,7 @@
                        HILDON_FILE_SYSTEM_MODEL_COLUMN_IS_FOLDER,
                        &is_folder, -1);
 
-    if ((is_folder == FALSE) && priv->invisible_files) {
+    if ((is_folder == FALSE) && !priv->show_files) {
       /* Files are NOT displayed in for example, 
 	 folder chooser dialog..., maybe more etc */
         return FALSE;
@@ -950,6 +950,12 @@
     case PROP_DRAGGING:
       ULOG_ERR_F("PROP_DRAGGING is a read-only property");
       break;
+    case PROP_SHOW_FILES:
+      priv->show_files = g_value_get_boolean(value);
+      break;
+    case PROP_PANNABLE:
+      priv->pannable_flag = g_value_get_boolean(value);
+      break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
         break;
@@ -999,6 +1005,12 @@
     case PROP_DRAGGING:
 	g_value_set_boolean(value, priv->currently_dragging);
 	break;
+    case PROP_SHOW_FILES:
+        g_value_set_boolean(value, priv->show_files);
+        break;
+    case PROP_PANNABLE:
+        g_value_set_boolean(value, priv->pannable_flag);
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
         break;
@@ -1239,6 +1251,18 @@
       g_param_spec_boolean("currently-dragging", "Currently dragging",
                            "Whether or not dragging is ongoing",
                            FALSE, G_PARAM_READABLE));
+
+    g_object_class_install_property(object, PROP_SHOW_FILES,
+      g_param_spec_boolean("show-files", "show the files in the content pane",
+                           "show the files in the content pane "
+                           "if this property is TRUE (TRUE by default)",
+                           TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+    g_object_class_install_property(object, PROP_PANNABLE,
+      g_param_spec_boolean("use-pannable-area-widget", "use the pannable area widget",
+                           "use the pannable area widget instead of scrolled window as "
+                           "a container if this property is TRUE (TRUE by default)",
+                           TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 }
 
 static gboolean
@@ -3033,9 +3057,52 @@
     self->priv->mode = HILDON_FILE_SELECTION_MODE_THUMBNAILS;
 
     GTK_WIDGET_SET_FLAGS(GTK_WIDGET(self), GTK_NO_WINDOW);
-    //to be fixed
-    self->priv->pannable_flag = TRUE;
-    if(self->priv->pannable_flag){
+}
+
+static GObject *hildon_file_selection_constructor(GType type,
+                                                  guint
+                                                  n_construct_properties,
+                                                  GObjectConstructParam *
+                                                  construct_properties)
+{
+    GObject *obj;
+    HildonFileSelection *self;
+    HildonFileSelectionPrivate *priv;
+    GtkTreePath *temp_path;
+    gboolean fs_pannable = TRUE;
+
+    obj =
+        G_OBJECT_CLASS(hildon_file_selection_parent_class)->
+        constructor(type, n_construct_properties, construct_properties);
+
+    /* Now construction parameters (=backend) are applied. Let's finalize
+       construction */
+    self = HILDON_FILE_SELECTION(obj);
+    priv = self->priv;
+  /*priv->sort_model =   <SNIP> */
+
+      /* we need to create view models here, even if dummy ones */
+
+    temp_path = gtk_tree_path_new_from_string("0");
+    priv->view_filter = gtk_tree_model_filter_new(priv->main_model, temp_path);
+    gtk_tree_path_free (temp_path);
+
+    gtk_tree_model_filter_set_visible_func
+      (GTK_TREE_MODEL_FILTER (priv->view_filter), filter_func, priv, NULL);
+
+    priv->sort_model = hildon_file_selection_create_sort_model
+      (self, content_pane_sort_function, priv->view_filter);
+    hildon_file_selection_enable_cursor_magic (self, priv->sort_model);
+
+    /* the following code were moved here from hildon_file_selection_init,
+       because, file_selection widget needs to know which one to use between
+       pannable area widget and scrolled window widget. the property 
+       "use-pannable-are-widget" indicates to use the pannable area widget
+     */
+    g_object_get (HILDON_FILE_SELECTION(self), "use-pannable-area-widget",
+		   &fs_pannable, NULL);
+
+    if(fs_pannable){
       self->priv->scroll_dir = hildon_pannable_area_new();
       self->priv->scroll_list = hildon_pannable_area_new();
       self->priv->scroll_thumb = hildon_pannable_area_new();
@@ -3129,57 +3196,16 @@
 
     g_signal_connect(self, "grab-notify",
       G_CALLBACK(hildon_file_selection_check_scroll), NULL);
-}
+    /* above code were moved from hildon_file_selection_init */
+    g_object_set(self,"pane-position", 250, NULL); // to be fixed
 
-static GObject *hildon_file_selection_constructor(GType type,
-                                                  guint
-                                                  n_construct_properties,
-                                                  GObjectConstructParam *
-                                                  construct_properties)
-{
-    GObject *obj;
-    HildonFileSelection *self;
-    HildonFileSelectionPrivate *priv;
-    GtkTreePath *temp_path;
-
-    obj =
-        G_OBJECT_CLASS(hildon_file_selection_parent_class)->
-        constructor(type, n_construct_properties, construct_properties);
-
-    /* Now construction parameters (=backend) are applied. Let's finalize
-       construction */
-    self = HILDON_FILE_SELECTION(obj);
-    priv = self->priv;
-
-  /*priv->sort_model =   <SNIP> */
-
-      /* we need to create view models here, even if dummy ones */
-
-    temp_path = gtk_tree_path_new_from_string("0");
-    priv->view_filter = gtk_tree_model_filter_new(priv->main_model, temp_path);
-    gtk_tree_path_free (temp_path);
-
-    gtk_tree_model_filter_set_visible_func
-      (GTK_TREE_MODEL_FILTER (priv->view_filter), filter_func, priv, NULL);
-
-    priv->sort_model = hildon_file_selection_create_sort_model
-      (self, content_pane_sort_function, priv->view_filter);
-    hildon_file_selection_enable_cursor_magic (self, priv->sort_model);
-
     hildon_file_selection_create_dir_view(self);
     hildon_file_selection_create_list_view(self);
     hildon_file_selection_create_thumbnail_view(self);
 
-    if(self->priv->pannable_flag){
-      gtk_container_add(GTK_CONTAINER(priv->scroll_dir), priv->dir_tree);
-      gtk_container_add(GTK_CONTAINER(priv->scroll_list), priv->view[0]);
-      gtk_container_add(GTK_CONTAINER(priv->scroll_thumb), priv->view[1]);
-    }
-    else{
-      gtk_container_add(GTK_CONTAINER(priv->scroll_dir), priv->dir_tree);
-      gtk_container_add(GTK_CONTAINER(priv->scroll_list), priv->view[0]);
-      gtk_container_add(GTK_CONTAINER(priv->scroll_thumb), priv->view[1]);
-    }
+    gtk_container_add(GTK_CONTAINER(priv->scroll_dir), priv->dir_tree);
+    gtk_container_add(GTK_CONTAINER(priv->scroll_list), priv->view[0]);
+    gtk_container_add(GTK_CONTAINER(priv->scroll_thumb), priv->view[1]);
 
     gtk_box_pack_start (GTK_BOX (self->priv->view_selector),
 		      self->priv->scroll_list, TRUE, TRUE, 0);
@@ -3260,7 +3286,6 @@
     gtk_widget_hide (priv->view[3]);
 
     hildon_file_selection_inspect_view (priv);
-
     return obj;
 }
 
@@ -4738,11 +4763,4 @@
   return ret;
 }
 
-void hildon_file_selection_set_invisible_files(HildonFileSelection *self,
-					       gboolean invisible)
-{
-  HildonFileSelectionPrivate *priv = self->priv;
-  priv->invisible_files = invisible;
-}
 
-

Modified: projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.h
===================================================================
--- projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.h	2008-09-01 05:53:35 UTC (rev 15921)
+++ projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.h	2008-09-01 06:44:53 UTC (rev 15922)
@@ -170,8 +170,6 @@
 void
 hildon_file_selection_set_current_folder_iter(HildonFileSelection * self,
                                               GtkTreeIter * main_iter);
-void hildon_file_selection_set_invisible_files(HildonFileSelection *self,
-					       gboolean invisible);
 
 #ifndef HILDON_DISABLE_DEPRECATED
 gboolean hildon_file_selection_get_active_content_iter(HildonFileSelection


More information about the maemo-commits mailing list