Changeset 1651

Show
Ignore:
Timestamp:
02/17/07 00:03:18
Author:
pvanhoof
Message:

More implementations

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libtinymail/tny-folder-change.h

    r1649 r1651  
    4343enum _TnyFolderChangeChanged 
    4444{ 
    45         TNY_FOLDER_CHANGE_CHANGED_ALL_COUNT
    46         TNY_FOLDER_CHANGE_CHANGED_UNREAD_COUNT
    47         TNY_FOLDER_CHANGE_CHANGED_ADDED_HEADERS
    48         TNY_FOLDER_CHANGE_CHANGED_REMOVED_HEADERS
    49         TNY_FOLDER_CHANGE_CHANGED_FOLDER_RENAME 
     45        TNY_FOLDER_CHANGE_CHANGED_ALL_COUNT = 1<<1
     46        TNY_FOLDER_CHANGE_CHANGED_UNREAD_COUNT = 1<<2
     47        TNY_FOLDER_CHANGE_CHANGED_ADDED_HEADERS = 1<<3
     48        TNY_FOLDER_CHANGE_CHANGED_REMOVED_HEADERS = 1<<4
     49        TNY_FOLDER_CHANGE_CHANGED_FOLDER_RENAME = 1<<5 
    5050}; 
    5151 
  • trunk/libtinymail/tny-folder-store-change.h

    r1649 r1651  
    4343enum _TnyFolderStoreChangeChanged 
    4444{ 
    45         TNY_FOLDER_STORE_CHANGE_CHANGED_CREATED_FOLDERS
    46         TNY_FOLDER_STORE_CHANGE_CHANGED_REMOVED_FOLDERS 
     45        TNY_FOLDER_STORE_CHANGE_CHANGED_CREATED_FOLDERS = 1<<1
     46        TNY_FOLDER_STORE_CHANGE_CHANGED_REMOVED_FOLDERS = 1<<2 
    4747}; 
    4848 
  • trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.c

    r1650 r1651  
    7575                        TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN,  
    7676                        tny_folder_get_unread_count (TNY_FOLDER (folder)), 
     77                        TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN,  
     78                        tny_folder_get_all_count (TNY_FOLDER (folder)), 
    7779                        TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 
    7880                        tny_folder_get_folder_type (TNY_FOLDER (folder)), 
     
    137139                        TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN,  
    138140                        tny_folder_get_unread_count (TNY_FOLDER (folder)), 
     141                        TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN,  
     142                        tny_folder_get_all_count (TNY_FOLDER (folder)), 
    139143                        TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 
    140144                        tny_folder_get_folder_type (TNY_FOLDER (folder)), 
     
    176180                TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN, root_name, 
    177181                TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, 0, 
     182                TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, 0, 
    178183                TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, TNY_FOLDER_TYPE_ROOT, 
    179184                TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 
     
    308313        GtkTreeStore *store = (GtkTreeStore*) instance; 
    309314        TnyGtkFolderStoreTreeModel *me = (TnyGtkFolderStoreTreeModel*) instance; 
    310         static GType types[] = { G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INT, G_TYPE_OBJECT }; 
     315        static GType types[] = { G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT, G_TYPE_OBJECT }; 
    311316 
    312317        me->iterator_lock = g_mutex_new (); 
     
    527532} 
    528533 
    529 static void 
    530 tny_gtk_folder_store_tree_model_store_obsr_update (TnyFolderStoreObserver *self, TnyFolderStoreChange *change) 
    531 { 
    532         TnyFolderStoreChangeChanged changed = tny_folder_store_change_get_changed (change); 
    533  
    534         if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_CREATED_FOLDERS) 
    535         { 
    536         } 
    537  
    538         if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_REMOVED_FOLDERS) 
    539         { 
    540         } 
    541 } 
    542534 
    543535typedef void (*pernodeexec) (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data1, gpointer user_data2); 
     
    582574                                TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN,  
    583575                                tny_folder_get_unread_count (TNY_FOLDER (folder)), 
     576                                TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN,  
     577                                tny_folder_get_all_count (TNY_FOLDER (folder)), 
    584578                                -1); 
    585579                } 
     
    591585} 
    592586 
     587 
     588static void 
     589creater (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data1, gpointer user_data2) 
     590{ 
     591        gint type; 
     592        TnyFolderStoreChange *change = user_data1; 
     593        TnyFolderStore *parentstore = tny_folder_store_change_get_folder_store (change); 
     594 
     595        gtk_tree_model_get (model, iter,  
     596                TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN,  
     597                &type, -1); 
     598 
     599        if (type != TNY_FOLDER_TYPE_ROOT)  
     600        { 
     601                TnyFolderStore *fol; 
     602 
     603                gtk_tree_model_get (model, iter,  
     604                        TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     605                        &fol, -1); 
     606 
     607                if (fol == parentstore) 
     608                { 
     609                        TnyList *created = tny_simple_list_new (); 
     610                        TnyIterator *miter; 
     611 
     612                        tny_folder_store_change_get_created_folders (change, created); 
     613                        miter = tny_list_create_iterator (created); 
     614 
     615                        while (!tny_iterator_is_done (miter)) 
     616                        { 
     617                                GtkTreeIter newiter; 
     618                                TnyFolder *folder = TNY_FOLDER (tny_iterator_get_current (miter)); 
     619 
     620                                gtk_tree_store_append (GTK_TREE_STORE (model), &newiter, iter); 
     621 
     622                                gtk_tree_store_set (GTK_TREE_STORE (model), &newiter, 
     623                                        TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN,  
     624                                        tny_folder_get_name (TNY_FOLDER (folder)), 
     625                                        TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN,  
     626                                        tny_folder_get_unread_count (TNY_FOLDER (folder)), 
     627                                        TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN,  
     628                                        tny_folder_get_all_count (TNY_FOLDER (folder)), 
     629                                        TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 
     630                                        tny_folder_get_folder_type (TNY_FOLDER (folder)), 
     631                                        TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 
     632                                        folder, -1); 
     633 
     634                                g_object_unref (G_OBJECT (folder)); 
     635 
     636                                tny_iterator_next (miter); 
     637                        } 
     638 
     639                        g_object_unref (G_OBJECT (miter)); 
     640                        g_object_unref (G_OBJECT (created)); 
     641 
     642                } 
     643 
     644                g_object_unref (G_OBJECT (fol)); 
     645        } 
     646 
     647        g_object_unref (G_OBJECT (parentstore)); 
     648} 
     649 
     650 
     651 
     652static void 
     653deleter (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data1, gpointer user_data2) 
     654{ 
     655        gint type; 
     656        TnyFolderStoreChange *change = user_data1; 
     657        TnyFolderStore *parentstore = tny_folder_store_change_get_folder_store (change); 
     658 
     659        gtk_tree_model_get (model, iter,  
     660                TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN,  
     661                &type, -1); 
     662 
     663        if (type != TNY_FOLDER_TYPE_ROOT)  
     664        { 
     665                TnyFolderStore *fol; 
     666 
     667                gtk_tree_model_get (model, iter,  
     668                        TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     669                        &fol, -1); 
     670 
     671                if (fol == parentstore) 
     672                { 
     673                        TnyList *removed = tny_simple_list_new (); 
     674                        TnyIterator *miter; 
     675 
     676                        tny_folder_store_change_get_removed_folders (change, removed); 
     677                        miter = tny_list_create_iterator (removed); 
     678 
     679                        while (!tny_iterator_is_done (miter)) 
     680                        { 
     681                                GtkTreeIter kids; 
     682                                TnyFolder *folder = TNY_FOLDER (tny_iterator_get_current (miter)); 
     683 
     684                                if (gtk_tree_model_iter_children (model, &kids, iter)) 
     685                                  while (gtk_tree_model_iter_next (model, &kids)) 
     686                                  { 
     687                                        gint ntype; 
     688                                        gtk_tree_model_get (model, &kids,  
     689                                                TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN,  
     690                                                &ntype, -1); 
     691 
     692                                        if (ntype != TNY_FOLDER_TYPE_ROOT) 
     693                                        { 
     694                                                TnyFolder *nfol; 
     695                                                gtk_tree_model_get (model, &kids,  
     696                                                        TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     697                                                        &nfol, -1); 
     698 
     699                                                if (nfol == folder) 
     700                                                        gtk_tree_store_remove (GTK_TREE_STORE (model), &kids); 
     701 
     702                                                g_object_unref (G_OBJECT (nfol)); 
     703                                        } 
     704                                  } 
     705                                g_object_unref (G_OBJECT (folder)); 
     706 
     707                                tny_iterator_next (miter); 
     708                        } 
     709 
     710                        g_object_unref (G_OBJECT (miter)); 
     711                        g_object_unref (G_OBJECT (removed)); 
     712 
     713                } 
     714 
     715                g_object_unref (G_OBJECT (fol)); 
     716        } 
     717 
     718        g_object_unref (G_OBJECT (parentstore)); 
     719} 
     720 
    593721static void 
    594722tny_gtk_folder_store_tree_model_folder_obsr_update (TnyFolderObserver *self, TnyFolderChange *change) 
     
    597725        GtkTreeModel *model = GTK_TREE_MODEL (self); 
    598726 
    599  
    600727        if (changed & TNY_FOLDER_CHANGE_CHANGED_FOLDER_RENAME || 
    601                 /* changed & TNY_FOLDER_CHANGE_CHANGED_ALL_COUNT || */ 
     728                changed & TNY_FOLDER_CHANGE_CHANGED_ALL_COUNT ||  
    602729                changed & TNY_FOLDER_CHANGE_CHANGED_UNREAD_COUNT) 
    603730        { 
    604                 const gchar *oldname, *newname; 
    605731                GtkTreeIter iter; 
    606  
    607732                if (gtk_tree_model_get_iter_first (model, &iter)) 
    608733                        foreach_node_execute (model, &iter, updater, change, NULL); 
    609  
    610         } 
    611  
     734        } 
     735
     736 
     737 
     738static void 
     739tny_gtk_folder_store_tree_model_store_obsr_update (TnyFolderStoreObserver *self, TnyFolderStoreChange *change) 
     740
     741        TnyFolderStoreChangeChanged changed = tny_folder_store_change_get_changed (change); 
     742        GtkTreeModel *model = GTK_TREE_MODEL (self); 
     743 
     744        if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_CREATED_FOLDERS) 
     745        { 
     746                GtkTreeIter iter; 
     747                if (gtk_tree_model_get_iter_first (model, &iter)) 
     748                        foreach_node_execute (model, &iter, creater, change, NULL); 
     749        } 
     750 
     751        if (changed & TNY_FOLDER_STORE_CHANGE_CHANGED_REMOVED_FOLDERS) 
     752        { 
     753                GtkTreeIter iter; 
     754                if (gtk_tree_model_get_iter_first (model, &iter)) 
     755                        foreach_node_execute (model, &iter, deleter, change, NULL); 
     756        } 
    612757} 
    613758 
     
    700845      { TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN, "TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN", "name" }, 
    701846      { TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, "TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN", "unread" }, 
     847      { TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, "TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN", "all" }, 
    702848      { TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, "TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN", "type" }, 
    703849      { TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, "TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN", "instance" }, 
  • trunk/libtinymailui-gtk/tny-gtk-folder-store-tree-model.h

    r1649 r1651  
    4949        TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN, 
    5050        TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN, 
     51        TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN, 
    5152        TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, 
    5253        TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, 
  • trunk/tests/c-demo/tny-demoui-summary-view.c

    r1649 r1651  
    729729on_delete_folder_activate (GtkMenuItem *mitem, gpointer user_data) 
    730730{ 
    731  
     731        TnyDemouiSummaryView *self = user_data; 
     732        TnyDemouiSummaryViewPriv *priv = TNY_DEMOUI_SUMMARY_VIEW_GET_PRIVATE (self); 
     733        GtkTreeIter iter; 
     734        GtkTreeModel *model; 
     735 
     736        if (gtk_tree_selection_get_selected (priv->mailbox_select, &model, &iter)) 
     737        { 
     738                gint type; 
     739 
     740                gtk_tree_model_get (model, &iter,  
     741                        TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN,  
     742                        &type, -1); 
     743 
     744                if (type != TNY_FOLDER_TYPE_ROOT)  
     745                {  
     746                        TnyFolder *folder; 
     747                        GtkWidget *dialog, *label; 
     748                        gint result; 
     749 
     750                        gtk_tree_model_get (model, &iter,  
     751                                TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     752                                &folder, -1); 
     753 
     754                        dialog = gtk_dialog_new_with_buttons (_("Delete a folder"), 
     755                                                                                                  GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), 
     756                                                                                                  GTK_DIALOG_MODAL, 
     757                                                                                                  GTK_STOCK_OK, 
     758                                                                                                  GTK_RESPONSE_ACCEPT, 
     759                                                                                                  GTK_STOCK_CANCEL, 
     760                                                                                                  GTK_RESPONSE_REJECT, 
     761                                                                                                  NULL); 
     762 
     763                        label = gtk_label_new (_("Are you sure you want to delete this folder?")); 
     764                        gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); 
     765                        gtk_widget_show (label); 
     766 
     767                        result = gtk_dialog_run (GTK_DIALOG (dialog)); 
     768 
     769                        switch (result) 
     770                        { 
     771                                case GTK_RESPONSE_ACCEPT:  
     772                                { 
     773                                        GError *err = NULL; 
     774                                        TnyFolderStore *folderstore = tny_folder_get_folder_store (folder); 
     775 
     776                                        tny_folder_store_remove_folder (folderstore, folder, &err); 
     777 
     778                                        if (err != NULL) 
     779                                        { 
     780                                                GtkWidget *edialog = gtk_message_dialog_new ( 
     781                                                                                  GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), 
     782                                                                                  GTK_DIALOG_DESTROY_WITH_PARENT, 
     783                                                                                  GTK_MESSAGE_ERROR, 
     784                                                                                  GTK_BUTTONS_CLOSE, 
     785                                                                                  err->message); 
     786                                                gtk_widget_show_all (edialog); 
     787                                                g_error_free (err); 
     788                                        } 
     789 
     790                                        g_object_unref (G_OBJECT (folderstore)); 
     791                                } 
     792                                break; 
     793 
     794                                default: 
     795                                break; 
     796                        } 
     797                        gtk_widget_destroy (dialog); 
     798                        g_object_unref (G_OBJECT (folder)); 
     799                } 
     800 
     801        } 
    732802} 
    733803 
     
    735805on_create_folder_activate (GtkMenuItem *mitem, gpointer user_data) 
    736806{ 
    737  
     807        TnyDemouiSummaryView *self = user_data; 
     808        TnyDemouiSummaryViewPriv *priv = TNY_DEMOUI_SUMMARY_VIEW_GET_PRIVATE (self); 
     809        GtkTreeIter iter; 
     810        GtkTreeModel *model; 
     811 
     812        if (gtk_tree_selection_get_selected (priv->mailbox_select, &model, &iter)) 
     813        { 
     814                gint type; 
     815 
     816                gtk_tree_model_get (model, &iter,  
     817                        TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN,  
     818                        &type, -1); 
     819 
     820                if (type != TNY_FOLDER_TYPE_ROOT)  
     821                {  
     822                        TnyFolderStore *folderstore; 
     823                        GtkWidget *dialog, *entry; 
     824                        gint result; 
     825 
     826                        gtk_tree_model_get (model, &iter,  
     827                                TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     828                                &folderstore, -1); 
     829 
     830                        dialog = gtk_dialog_new_with_buttons (_("Create a folder"), 
     831                                                                                                  GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), 
     832                                                                                                  GTK_DIALOG_MODAL, 
     833                                                                                                  GTK_STOCK_OK, 
     834                                                                                                  GTK_RESPONSE_ACCEPT, 
     835                                                                                                  GTK_STOCK_CANCEL, 
     836                                                                                                  GTK_RESPONSE_REJECT, 
     837                                                                                                  NULL); 
     838 
     839                        entry = gtk_entry_new (); 
     840                        gtk_entry_set_text (GTK_ENTRY (entry), _("New folder")); 
     841                        gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), entry); 
     842                        gtk_widget_show (entry); 
     843 
     844                        result = gtk_dialog_run (GTK_DIALOG (dialog)); 
     845 
     846                        switch (result) 
     847                        { 
     848                                case GTK_RESPONSE_ACCEPT:  
     849                                { 
     850                                        GError *err = NULL; 
     851                                        const gchar *newname = gtk_entry_get_text (GTK_ENTRY (entry)); 
     852 
     853                                        tny_folder_store_create_folder (folderstore, newname, &err); 
     854 
     855                                        if (err != NULL) 
     856                                        { 
     857                                                GtkWidget *edialog = gtk_message_dialog_new ( 
     858                                                                                  GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self))), 
     859                                                                                  GTK_DIALOG_DESTROY_WITH_PARENT, 
     860                                                                                  GTK_MESSAGE_ERROR, 
     861                                                                                  GTK_BUTTONS_CLOSE, 
     862                                                                                  err->message); 
     863                                                gtk_widget_show_all (edialog); 
     864                                                g_error_free (err); 
     865                                        } 
     866                                } 
     867                                break; 
     868 
     869                                default: 
     870                                break; 
     871                        } 
     872                        gtk_widget_destroy (dialog); 
     873                        g_object_unref (G_OBJECT (folderstore)); 
     874                } 
     875 
     876        } 
    738877} 
    739878 
     
    803942                G_CALLBACK (on_rename_folder_activate), user_data); 
    804943        g_signal_connect (G_OBJECT (mcreate), "activate", 
    805                 G_CALLBACK (on_rename_folder_activate), user_data); 
     944                G_CALLBACK (on_create_folder_activate), user_data); 
    806945        g_signal_connect (G_OBJECT (mdelete), "activate", 
    807946                G_CALLBACK (on_delete_folder_activate), user_data);