Changeset 22

Show
Ignore:
Timestamp:
11/01/07 02:20:56
Author:
pvanhoof
Message:
        • Implementation of copy&move and delete of folders
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r21 r22  
    22 
    33        * Restructured the menus a little bit 
     4        * Implementation of copy&move and delete of folders 
    45 
    562007-10-31  Philip Van Hoof  <pvanhoof@gnome.org> 
  • trunk/src/tmut-menu-view.c

    r21 r22  
    4141        (G_TYPE_INSTANCE_GET_PRIVATE ((o), TMUT_TYPE_MENU_VIEW, TMutMenuViewPriv)) 
    4242 
    43  
    44  
     43static void  
     44status_update (GObject *sender, TnyStatus *status, gpointer user_data) 
     45
     46        TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (user_data); 
     47 
     48        if (priv->shell) 
     49                gtk_progress_set_percentage (tmut_shell_window_get_progress (priv->shell),  
     50                                tny_status_get_fraction (status)); 
     51 
     52        return; 
     53
     54 
     55 
     56static void  
     57on_copy_done (TnyFolder *folder, gboolean canceled, TnyFolderStore *into, TnyFolder *new_folder, GError *err, gpointer user_data) 
     58
     59        TMutMenuView *self = TMUT_MENU_VIEW (user_data); 
     60        TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (self); 
     61        gchar *msg = err->message; 
     62 
     63        if (canceled) 
     64                msg = "User canceled the operation"; 
     65 
     66        if (err || canceled)  
     67        { 
     68                GtkWidget *dialog = gtk_message_dialog_new ( 
     69                                GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (priv->shell))), 
     70                                GTK_DIALOG_DESTROY_WITH_PARENT, 
     71                                GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, msg); 
     72                g_signal_connect_swapped (dialog, "response", 
     73                        G_CALLBACK (gtk_widget_destroy), dialog); 
     74                gtk_widget_show_all (dialog); 
     75                g_error_free (err); 
     76        } 
     77 
     78        g_object_unref (user_data); 
     79        return; 
     80
    4581 
    4682void 
    4783tmut_menu_view_on_folder_move_activated (GObject *sender, TMutMenuView *self) 
    4884{ 
    49  
    50 g_print ("move folder\n"); 
     85        TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (self); 
     86        GtkTreeSelection *selection = gtk_tree_view_get_selection (priv->folders_treeview); 
     87        GtkTreeModel *model; 
     88        GtkTreeIter iter; 
     89 
     90        if (gtk_tree_selection_get_selected (selection, &model, &iter))  
     91        { 
     92                gint type; 
     93                gtk_tree_model_get (model, &iter,  
     94                        TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN,  
     95                        &type, -1); 
     96 
     97                if (type != TNY_FOLDER_TYPE_ROOT)  
     98                { 
     99                        TnyFolder *folder; 
     100                        TMutFolderView *view; 
     101 
     102                        gtk_tree_model_get (model, &iter,  
     103                                TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     104                                &folder, -1); 
     105                        if (folder) { 
     106                                TnyFolderStore *into = NULL; 
     107                                gboolean del_originals = TRUE; 
     108 
     109                                /* Select destination folder */ 
     110 
     111                                if (into) 
     112                                        tny_folder_copy_async (folder, into,  
     113                                                tny_folder_get_name (folder),  
     114                                                del_originals, on_copy_done, status_update, 
     115                                                g_object_ref (self)); 
     116 
     117                                g_object_unref (folder); 
     118                        } 
     119                } 
     120        } 
    51121 
    52122        return; 
     
    56126tmut_menu_view_on_folder_create_activated (GObject *sender, TMutMenuView *self) 
    57127{ 
    58  
    59 g_print ("create folder\n"); 
     128        TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (self); 
     129        GtkTreeSelection *selection = gtk_tree_view_get_selection (priv->folders_treeview); 
     130        GtkTreeModel *model; 
     131        GtkTreeIter iter; 
     132 
     133        if (gtk_tree_selection_get_selected (selection, &model, &iter))  
     134        { 
     135                gint type; 
     136                gtk_tree_model_get (model, &iter,  
     137                        TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN,  
     138                        &type, -1); 
     139                if (type != TNY_FOLDER_TYPE_ROOT)  
     140                { 
     141                        TnyFolderStore *folderstore; 
     142                        GtkWidget *dialog, *entry; 
     143                        gint result; 
     144 
     145                        gtk_tree_model_get (model, &iter,  
     146                                TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     147                                &folderstore, -1); 
     148 
     149                        dialog = gtk_dialog_new_with_buttons ("Create a folder", 
     150                                        GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), 
     151                                        GTK_DIALOG_MODAL, 
     152                                        GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, 
     153                                        GTK_STOCK_CANCEL,GTK_RESPONSE_REJECT, 
     154                                        NULL); 
     155 
     156                        entry = gtk_entry_new (); 
     157                        gtk_entry_set_text (GTK_ENTRY (entry), "New folder"); 
     158                        gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), entry); 
     159                        gtk_widget_show (entry); 
     160 
     161                        if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)  
     162                        { 
     163                                GError *err = NULL; 
     164                                const gchar *newname = gtk_entry_get_text (GTK_ENTRY (entry)); 
     165                                TnyFolder *created = tny_folder_store_create_folder (folderstore, newname, &err); 
     166                                if (created) /* Can be NULL on failure */ 
     167                                        g_object_unref (created); 
     168                                if (err) { 
     169                                        GtkWidget *edialog; 
     170                                        gtk_widget_destroy (dialog); 
     171                                        dialog = NULL; 
     172                                        edialog = gtk_message_dialog_new ( 
     173                                                        GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (priv->shell))), 
     174                                                        GTK_DIALOG_DESTROY_WITH_PARENT, 
     175                                                        GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, 
     176                                                        err->message); 
     177                                        g_signal_connect_swapped (edialog, "response", 
     178                                                G_CALLBACK (gtk_widget_destroy), edialog); 
     179                                        gtk_widget_show_all (edialog); 
     180                                        g_error_free (err); 
     181                                } 
     182                        } 
     183 
     184                        if (dialog) 
     185                                gtk_widget_destroy (dialog); 
     186                        g_object_unref (G_OBJECT (folderstore)); 
     187                } 
     188 
     189        } 
    60190 
    61191        return; 
     
    65195tmut_menu_view_on_folder_delete_activated (GObject *sender, TMutMenuView *self) 
    66196{ 
    67  
    68 g_print ("delete folder\n"); 
     197        TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (self); 
     198        GtkTreeSelection *selection = gtk_tree_view_get_selection (priv->folders_treeview); 
     199        GtkTreeModel *model; 
     200        GtkTreeIter iter; 
     201 
     202        if (gtk_tree_selection_get_selected (selection, &model, &iter))  
     203        { 
     204                gint type; 
     205 
     206                gtk_tree_model_get (model, &iter,  
     207                        TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN,  
     208                        &type, -1); 
     209 
     210                if (type != TNY_FOLDER_TYPE_ROOT)  
     211                { 
     212                        TnyFolder *folder; 
     213                        TMutFolderView *view; 
     214 
     215                        gtk_tree_model_get (model, &iter,  
     216                                TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     217                                &folder, -1); 
     218 
     219                        if (folder)  
     220                        { 
     221                                gint result; 
     222                                GtkWidget *dialog = gtk_dialog_new_with_buttons ("Delete a folder", 
     223                                          GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), 
     224                                          GTK_DIALOG_MODAL, 
     225                                          GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, 
     226                                          GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, 
     227                                          NULL); 
     228                                GtkWidget *label = gtk_label_new ("Are you sure you want to delete this folder?"); 
     229 
     230                                gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); 
     231                                gtk_widget_show (label); 
     232 
     233                                if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) 
     234                                { 
     235                                        GError *err = NULL; 
     236                                        TnyFolderStore *store = tny_folder_get_folder_store (folder); 
     237                                        tny_folder_store_remove_folder (store, folder, &err); 
     238                                        if (err) { 
     239                                                GtkWidget *edialog; 
     240                                                gtk_widget_destroy (dialog); 
     241                                                dialog = NULL; 
     242                                                edialog = gtk_message_dialog_new ( 
     243                                                        GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (priv->shell))), 
     244                                                        GTK_DIALOG_DESTROY_WITH_PARENT, 
     245                                                        GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, 
     246                                                        err->message); 
     247                                                g_signal_connect_swapped (edialog, "response", 
     248                                                        G_CALLBACK (gtk_widget_destroy), edialog); 
     249                                                gtk_widget_show_all (edialog); 
     250                                                g_error_free (err); 
     251                                        } 
     252                                        g_object_unref (store); 
     253                                } 
     254                                if (dialog) 
     255                                        gtk_widget_destroy (dialog); 
     256                                g_object_unref (folder); 
     257                        } 
     258                } 
     259        } 
    69260 
    70261        return; 
     
    230421                                TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
    231422                                &folder, -1); 
     423 
     424                        if (!folder) 
     425                                return; 
    232426 
    233427                        view = tmut_folder_view_new ();