Make folder view of new folder dialog show only folders able to have children
authorJose Dapena Paz <jdapena@igalia.com>
Mon, 22 Dec 2008 11:34:08 +0000 (11:34 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Mon, 22 Dec 2008 11:34:08 +0000 (11:34 +0000)
pmo-trunk-r6975

src/hildon2/modest-platform.c
src/widgets/modest-folder-view.c
src/widgets/modest-folder-view.h

index 61e40e2..26fa4ba 100644 (file)
@@ -696,6 +696,8 @@ folder_chooser_dialog_run (ModestFolderView *original)
        userdata.dialog = hildon_dialog_new ();
        pannable = hildon_pannable_area_new ();
        folder_view = modest_platform_create_folder_view (NULL);
+       modest_folder_view_set_filter (MODEST_FOLDER_VIEW (folder_view),
+                                      MODEST_FOLDER_VIEW_FILTER_CAN_HAVE_FOLDERS);
 
        modest_folder_view_copy_model (MODEST_FOLDER_VIEW (original), MODEST_FOLDER_VIEW (folder_view));
 
index a882bf8..ff51e30 100644 (file)
@@ -220,6 +220,7 @@ struct _ModestFolderViewPrivate {
        /* Filter tree model */
        gchar **hidding_ids;
        guint n_selected;
+       ModestFolderViewFilter filter;
 
        TnyFolderStoreQuery  *query;
        guint                 timer_expander;
@@ -1028,6 +1029,7 @@ modest_folder_view_init (ModestFolderView *obj)
        priv->clipboard = modest_runtime_get_email_clipboard ();
        priv->hidding_ids = NULL;
        priv->n_selected = 0;
+       priv->filter = MODEST_FOLDER_VIEW_FILTER_NONE;
        priv->reselect = FALSE;
        priv->show_non_move = TRUE;
 
@@ -1658,6 +1660,18 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
                }
        }
 
+       /* apply special filters */
+       if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_CAN_HAVE_FOLDERS)) {
+               if (TNY_IS_FOLDER (instance)) {
+                       TnyFolderCaps capabilities;
+
+                       capabilities = tny_folder_get_caps (TNY_FOLDER (instance));
+                       retval = !(capabilities & TNY_FOLDER_CAPS_NOCHILDREN);
+               } else if (TNY_IS_ACCOUNT (instance)) {
+                       retval = FALSE;
+               }
+       }
+
        /* Free */
        g_object_unref (instance);
 
@@ -3292,3 +3306,22 @@ on_notify_style (GObject *obj, GParamSpec *spec, gpointer userdata)
        } 
 }
 
+void 
+modest_folder_view_set_filter (ModestFolderView *self,
+                              ModestFolderViewFilter filter)
+{
+       ModestFolderViewPrivate *priv;
+       GtkTreeModel *filter_model;
+
+       g_return_if_fail (MODEST_IS_FOLDER_VIEW (self));
+       priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self);
+
+       priv->filter = filter;
+
+       filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
+       if (!GTK_IS_TREE_MODEL_FILTER(filter_model)) {
+               g_warning ("BUG: %s: not a valid filter model", __FUNCTION__);
+               return;
+       }
+       gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));  
+}
index 13d5701..5c5ae4a 100644 (file)
@@ -55,6 +55,11 @@ typedef enum _ModestFolderViewCellStyle {
        MODEST_FOLDER_VIEW_CELL_STYLE_COMPACT
 } ModestFolderViewCellStyle;
 
+typedef enum _ModestFolderViewFilter {
+       MODEST_FOLDER_VIEW_FILTER_NONE = 0,
+       MODEST_FOLDER_VIEW_FILTER_CAN_HAVE_FOLDERS = 1 << 0,
+} ModestFolderViewFilter;
+
 typedef struct _ModestFolderView      ModestFolderView;
 typedef struct _ModestFolderViewClass ModestFolderViewClass;
 
@@ -261,6 +266,17 @@ void modest_folder_view_disable_next_folder_selection (ModestFolderView *self);
 void modest_folder_view_set_cell_style (ModestFolderView *self,
                                        ModestFolderViewCellStyle cell_style);
 
+/**
+ * modest_folder_view_filter:
+ * @self: a #ModestFolderView
+ * @filter: a filter mask to be applied to files
+ *
+ * sets the special filter to be applied (affects visibility of items).
+ * It's a mask, and filters applied are applied with an AND.
+ */
+void modest_folder_view_set_filter (ModestFolderView *self,
+                                   ModestFolderViewFilter filter);
+
 G_END_DECLS
 
 #endif /* __MODEST_FOLDER_VIEW_H__ */