Added ModestFolderView filters based on folder rules
authorJose Dapena Paz <jdapena@igalia.com>
Wed, 14 Jan 2009 09:48:39 +0000 (09:48 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Wed, 14 Jan 2009 09:48:39 +0000 (09:48 +0000)
pmo-trunk-r7139

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

index 11aa375..a1bd524 100644 (file)
@@ -454,3 +454,32 @@ modest_folder_window_pack_toolbar (ModestHildon2Window *self,
                gtk_box_pack_end (GTK_BOX (priv->top_vbox), toolbar, FALSE, FALSE, 0);
        }
 }
+
+static void 
+edit_mode_changed (ModestFolderWindow *folder_window,
+                  gint edit_mode_id,
+                  ModestFolderWindow *self)
+{
+       ModestFolderWindowPrivate *priv;
+       ModestFolderViewFilter filter = MODEST_FOLDER_VIEW_FILTER_NONE;
+
+       g_return_if_fail (MODEST_IS_FOLDER_WINDOW (self));
+       priv = MODEST_FOLDER_WINDOW_GET_PRIVATE (self);
+
+       switch (edit_mode_id) {
+       case EDIT_MODE_COMMAND_MOVE:
+               filter = MODEST_FOLDER_VIEW_FILTER_MOVEABLE;
+               break;
+       case EDIT_MODE_COMMAND_DELETE:
+               filter = MODEST_FOLDER_VIEW_FILTER_DELETABLE;
+               break;
+       case EDIT_MODE_COMMAND_RENAME:
+               filter = MODEST_FOLDER_VIEW_FILTER_RENAMEABLE;
+               break;
+       case MODEST_HILDON2_WINDOW_EDIT_MODE_NONE:
+               filter = MODEST_FOLDER_VIEW_FILTER_NONE;
+               break;
+       }
+
+       modest_folder_view_set_filter (MODEST_FOLDER_VIEW (priv->folder_view), filter);
+}
index 810976f..e813583 100644 (file)
@@ -1561,6 +1561,7 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
        guint i;
        gboolean found = FALSE;
        gboolean cleared = FALSE;
+       ModestTnyFolderRules rules = 0;
 
        g_return_val_if_fail (MODEST_IS_FOLDER_VIEW (data), FALSE);
        priv = MODEST_FOLDER_VIEW_GET_PRIVATE (data);
@@ -1716,6 +1717,34 @@ filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
                }
        }
 
+       if (retval && TNY_IS_FOLDER (instance)) {
+               rules = modest_tny_folder_get_rules (TNY_FOLDER (instance));
+       }
+
+       if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_DELETABLE)) {
+               if (TNY_IS_FOLDER (instance)) {
+                       retval = !(rules & MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE);
+               } else if (TNY_IS_ACCOUNT (instance)) {
+                       retval = FALSE;
+               }
+       }
+
+       if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_RENAMEABLE)) {
+               if (TNY_IS_FOLDER (instance)) {
+                       retval = !(rules & MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE);
+               } else if (TNY_IS_ACCOUNT (instance)) {
+                       retval = FALSE;
+               }
+       }
+
+       if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_MOVEABLE)) {
+               if (TNY_IS_FOLDER (instance)) {
+                       retval = !(rules & MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE);
+               } else if (TNY_IS_ACCOUNT (instance)) {
+                       retval = FALSE;
+               }
+       }
+
        /* Free */
        g_object_unref (instance);
 
index 211b7a5..2748512 100644 (file)
@@ -59,6 +59,9 @@ typedef enum _ModestFolderViewFilter {
        MODEST_FOLDER_VIEW_FILTER_NONE = 0,
        MODEST_FOLDER_VIEW_FILTER_CAN_HAVE_FOLDERS = 1 << 0,
        MODEST_FOLDER_VIEW_FILTER_HIDE_MANDATORY_FOLDERS = 1 << 1,
+       MODEST_FOLDER_VIEW_FILTER_RENAMEABLE = 1 << 2,
+       MODEST_FOLDER_VIEW_FILTER_MOVEABLE = 1 << 3,
+       MODEST_FOLDER_VIEW_FILTER_DELETABLE = 1 << 4,
 } ModestFolderViewFilter;
 
 typedef struct _ModestFolderView      ModestFolderView;