Changeset 4

Show
Ignore:
Timestamp:
10/28/07 02:26:23
Author:
pvanhoof
Message:
        • Implemented a first TMutFolderView
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r3 r4  
    66        * Implemented TMutPlatformFactory 
    77        * Created project's infrastructure 
     8        * Implemented a first TMutFolderView 
    89 
    9102007-03-28  Philip Van Hoof  <pvanhoof@gnome.org> 
  • trunk/src/tmut-folder-view.c

    r3 r4  
     1/* TMut 
     2 * Copyright (C) 2006-2007 Philip Van Hoof <pvanhoof@gnome.org> 
     3 * 
     4 * This library is free software; you can redistribute it and/or 
     5 * modify it under the terms of the GNU Lesser General Public 
     6 * License as published by the Free Software Foundation; either 
     7 * version 2 of the License, or (at your option) any later version. 
     8 * 
     9 * This library is distributed in the hope that it will be useful, 
     10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
     11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
     12 * Lesser General Public License for more details. 
     13 * 
     14 * You should have received a copy of the GNU Lesser General Public 
     15 * License along with self library; if not, write to the 
     16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
     17 * Boston, MA 02110-1301, USA. 
     18 */ 
     19 
     20#include "tmut-folder-view.h" 
     21 
     22#include <tny-folder-monitor.h> 
     23#include <tny-gtk-header-list-model.h> 
     24 
     25static GObjectClass *parent_class = NULL; 
     26 
     27typedef struct _TMutFolderViewPriv TMutFolderViewPriv; 
     28 
     29struct _TMutFolderViewPriv 
     30{ 
     31        GtkProgress *progress; 
     32        GtkTreeView *headers_treeview; 
     33        TnyFolderMonitor *monitor; 
     34        TnyFolder *folder; 
     35}; 
     36 
     37#define TMUT_FOLDER_VIEW_GET_PRIVATE(o) \ 
     38        (G_TYPE_INSTANCE_GET_PRIVATE ((o), TMUT_TYPE_FOLDER_VIEW, TMutFolderViewPriv)) 
     39 
     40 
     41static void  
     42status_update (GObject *sender, TnyStatus *status, gpointer user_data) 
     43{ 
     44        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (user_data); 
     45 
     46        if (priv->progress) { 
     47                gtk_progress_set_percentage (priv->progress,  
     48                        tny_status_get_fraction (status)); 
     49        } 
     50 
     51        return; 
     52} 
     53 
     54static void 
     55on_active_folder_set (TnyFolder *folder, gboolean cancelled, GError *err, gpointer user_data) 
     56{ 
     57        return; 
     58} 
     59 
     60void  
     61tmut_folder_view_set_active_folder (TMutFolderView *self, TnyFolder *folder) 
     62{ 
     63        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (self); 
     64        GtkTreeModel *model = NULL; 
     65 
     66        if (priv->folder) 
     67                g_object_unref (priv->folder); 
     68        priv->folder = TNY_FOLDER (g_object_ref (folder)); 
     69 
     70        model = tny_gtk_header_list_model_new (); 
     71 
     72        tny_gtk_header_list_model_set_folder (TNY_GTK_HEADER_LIST_MODEL (model),  
     73                folder, FALSE, NULL, status_update, self); 
     74 
     75        if (priv->monitor) { 
     76                tny_folder_monitor_stop (priv->monitor); 
     77                g_object_unref (priv->monitor); 
     78        } 
     79 
     80        priv->monitor = TNY_FOLDER_MONITOR (tny_folder_monitor_new (folder)); 
     81        tny_folder_monitor_add_list (priv->monitor, TNY_LIST (model)); 
     82        tny_folder_monitor_start (priv->monitor); 
     83 
     84        tny_folder_refresh_async (folder, on_active_folder_set,  
     85                        status_update, self); 
     86 
     87        gtk_tree_view_set_model (priv->headers_treeview, model); 
     88 
     89        return; 
     90} 
     91 
     92static void 
     93on_msg_selected (GtkTreeSelection *selection, gpointer user_data) 
     94{ 
     95        TMutFolderView *self = TMUT_FOLDER_VIEW (user_data); 
     96        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (self); 
     97 
     98        return; 
     99} 
     100 
     101 
     102 
     103static void 
     104tmut_folder_view_instance_init (GTypeInstance *instance, gpointer g_class) 
     105{ 
     106        TMutFolderView *self = (TMutFolderView *) instance; 
     107        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (self); 
     108        GtkWindow *window = GTK_WINDOW (self); 
     109        GtkCellRenderer *renderer; 
     110        GtkTreeViewColumn *column; 
     111        GtkTreeSelection *select; 
     112        GtkWidget *widget, *sw; 
     113 
     114        priv->progress = NULL; 
     115        priv->monitor = NULL; 
     116 
     117        sw = gtk_scrolled_window_new (NULL, NULL); 
     118        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),  
     119                GTK_SHADOW_NONE); 
     120        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), 
     121                GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 
     122        gtk_container_add (GTK_CONTAINER (window), sw); 
     123        gtk_widget_show (sw); 
     124 
     125        priv->headers_treeview = GTK_TREE_VIEW (gtk_tree_view_new ()); 
     126        gtk_tree_view_set_headers_visible (priv->headers_treeview, FALSE); 
     127        gtk_tree_view_set_rules_hint (priv->headers_treeview, TRUE); 
     128        gtk_tree_view_set_fixed_height_mode (priv->headers_treeview, TRUE); 
     129        gtk_widget_show (GTK_WIDGET (priv->headers_treeview)); 
     130        gtk_container_add (GTK_CONTAINER (sw), GTK_WIDGET (priv->headers_treeview)); 
     131 
     132        renderer = gtk_cell_renderer_text_new (); 
     133        column = gtk_tree_view_column_new_with_attributes ("Subject", renderer, 
     134                        "text", TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN, NULL); 
     135        gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); 
     136        gtk_tree_view_append_column (GTK_TREE_VIEW(priv->headers_treeview), column); 
     137 
     138        select = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->headers_treeview)); 
     139        gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); 
     140 
     141        g_signal_connect (G_OBJECT (select), "changed",  
     142                G_CALLBACK (on_msg_selected), self); 
     143 
     144        return; 
     145} 
     146 
     147static void 
     148tmut_folder_view_finalize (GObject *object) 
     149{ 
     150        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (object); 
     151 
     152        if (priv->monitor) { 
     153                tny_folder_monitor_stop (priv->monitor); 
     154                g_object_unref (priv->monitor); 
     155        } 
     156 
     157        if (priv->progress) 
     158                g_object_unref (priv->progress); 
     159 
     160        (*parent_class->finalize) (object); 
     161        return; 
     162} 
     163 
     164 
     165static void  
     166tmut_folder_view_class_init (TMutFolderViewClass *class) 
     167{ 
     168        GObjectClass *object_class; 
     169 
     170        parent_class = g_type_class_peek_parent (class); 
     171        object_class = (GObjectClass*) class; 
     172 
     173        object_class->finalize = tmut_folder_view_finalize; 
     174 
     175        g_type_class_add_private (object_class, sizeof (TMutFolderViewPriv)); 
     176 
     177        return; 
     178} 
     179 
     180/** 
     181 * tmut_folder_view_new: 
     182 *  
     183 * 
     184 * Return value: A new #TnySummaryView instance implemented for TMUT 
     185 **/ 
     186TMutFolderView* 
     187tmut_folder_view_new (GtkProgress *progress) 
     188{ 
     189        TMutFolderView *self = g_object_new (TMUT_TYPE_FOLDER_VIEW, NULL); 
     190        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (self); 
     191 
     192        priv->progress = GTK_PROGRESS (g_object_ref (progress)); 
     193 
     194        return TMUT_FOLDER_VIEW (self); 
     195} 
     196 
     197GType  
     198tmut_folder_view_get_type (void) 
     199{ 
     200        static GType type = 0; 
     201 
     202        if (G_UNLIKELY(type == 0)) 
     203        { 
     204                static const GTypeInfo info =  
     205                { 
     206                  sizeof (TMutFolderViewClass), 
     207                  NULL,   /* base_init */ 
     208                  NULL,   /* base_finalize */ 
     209                  (GClassInitFunc) tmut_folder_view_class_init,   /* class_init */ 
     210                  NULL,   /* class_finalize */ 
     211                  NULL,   /* class_data */ 
     212                  sizeof (TMutFolderView), 
     213                  0,      /* n_preallocs */ 
     214                  tmut_folder_view_instance_init    /* instance_init */ 
     215                }; 
     216 
     217                type = g_type_register_static (GTK_TYPE_WINDOW, 
     218                        "TMutFolderView", 
     219                        &info, 0); 
     220        } 
     221 
     222        return type; 
     223} 
     224 
  • trunk/src/tmut-folder-view.h

    r3 r4  
     1#ifndef TMUT_FOLDER_VIEW_H 
     2#define TMUT_FOLDER_VIEW_H 
     3 
     4/* TMut 
     5 * Copyright (C) 2006-2007 Philip Van Hoof <pvanhoof@gnome.org> 
     6 * 
     7 * This library is free software; you can redistribute it and/or 
     8 * modify it under the terms of the GNU Lesser General Public 
     9 * License as published by the Free Software Foundation; either 
     10 * version 2 of the License, or (at your option) any later version. 
     11 * 
     12 * This library is distributed in the hope that it will be useful, 
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
     15 * Lesser General Public License for more details. 
     16 * 
     17 * You should have received a copy of the GNU Lesser General Public 
     18 * License along with self library; if not, write to the 
     19 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
     20 * Boston, MA 02110-1301, USA. 
     21 */ 
     22 
     23#include <glib.h> 
     24#include <gtk/gtk.h> 
     25#include <glib-object.h> 
     26#include <tny-shared.h> 
     27 
     28G_BEGIN_DECLS 
     29 
     30#define TMUT_TYPE_FOLDER_VIEW             (tmut_folder_view_get_type ()) 
     31#define TMUT_FOLDER_VIEW(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), TMUT_TYPE_FOLDER_VIEW, TMutFolderView)) 
     32#define TMUT_FOLDER_VIEW_CLASS(vtable)    (G_TYPE_CHECK_CLASS_CAST ((vtable), TMUT_TYPE_FOLDER_VIEW, TMutFolderViewClass)) 
     33#define TMUT_IS_FOLDER_VIEW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TMUT_TYPE_FOLDER_VIEW)) 
     34#define TMUT_IS_FOLDER_VIEW_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), TMUT_TYPE_FOLDER_VIEW)) 
     35#define TMUT_FOLDER_VIEW_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS ((inst), TMUT_TYPE_FOLDER_VIEW, TMutFolderViewClass)) 
     36 
     37typedef struct _TMutFolderView TMutFolderView; 
     38typedef struct _TMutFolderViewClass TMutFolderViewClass; 
     39 
     40struct _TMutFolderView 
     41{ 
     42        GtkWindow parent; 
     43}; 
     44 
     45struct _TMutFolderViewClass 
     46{ 
     47        GtkWindowClass parent_class; 
     48}; 
     49 
     50GType tmut_folder_view_get_type (void); 
     51TMutFolderView* tmut_folder_view_new (GtkProgress *process); 
     52 
     53void tmut_folder_view_set_active_folder (TMutFolderView *self, TnyFolder *folder); 
     54 
     55G_END_DECLS 
     56 
     57#endif 
  • trunk/src/tmut-menu-view.c

    r3 r4  
    1919 
    2020#include "tmut-menu-view.h" 
     21#include "tmut-folder-view.h" 
     22 
    2123 
    2224#include <tny-gtk-folder-store-tree-model.h> 
     
    102104 
    103105static void 
    104 on_folder_changed (GtkTreeSelection *selection, gpointer user_data) 
    105 
    106         TMutMenuView *self = TMUT_MENU_VIEW (user_data); 
    107         TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (self); 
     106on_folder_changed  (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) 
     107
     108        TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (user_data); 
     109        GtkTreeSelection *selection = gtk_tree_view_get_selection (treeview); 
     110 
     111        GtkTreeModel *model; 
     112        GtkTreeIter iter; 
     113 
     114        if (gtk_tree_selection_get_selected (selection, &model, &iter))  
     115        { 
     116                gint type; 
     117 
     118                gtk_tree_model_get (model, &iter,  
     119                        TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN,  
     120                        &type, -1); 
     121 
     122                if (type != TNY_FOLDER_TYPE_ROOT)  
     123                { 
     124                        TnyFolder *folder; 
     125                        TMutFolderView *folder_view; 
     126 
     127                        gtk_tree_model_get (model, &iter,  
     128                                TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN,  
     129                                &folder, -1); 
     130 
     131                        folder_view = tmut_folder_view_new (priv->progress); 
     132                        tmut_folder_view_set_active_folder (folder_view, folder); 
     133                        gtk_widget_show (GTK_WIDGET (folder_view)); 
     134 
     135                        g_object_unref (folder); 
     136                } 
     137        } 
    108138 
    109139        return; 
     
    176206        g_signal_connect (G_OBJECT (priv->accounts_combo), "changed",  
    177207                G_CALLBACK (on_account_changed), self); 
    178         g_signal_connect (G_OBJECT (select), "changed",  
     208        g_signal_connect (G_OBJECT (priv->folders_treeview), "row-activated",  
    179209                G_CALLBACK (on_folder_changed), self); 
    180210        g_signal_connect (G_OBJECT (priv->newmsg_button), "clicked",