Changeset 839


Ignore:
Timestamp:
01/17/07 17:23:55 (6 years ago)
Author:
thomas
Message:

Move group editing into lower pane, rather than in a seperate dialog.

Location:
ohand/branches/private/omoko
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • ohand/branches/private/omoko/ChangeLog

    r838 r839  
     12007-01-17  Thomas Wood  <thomas@openedhand.com> 
     2 
     3        * src/contacts-callbacks-ui.c: (contacts_selection_cb), 
     4        (contacts_view_cb): 
     5        * src/contacts-callbacks-ui.h: 
     6        * src/contacts-defs.h: 
     7        * src/contacts-omoko-groups-editor.c: (contacts_groups_pane_show), 
     8        (contacts_groups_pane_update_selection), 
     9        (contacts_groups_pane_hide), (contacts_groups_new_group_cb), 
     10        (groups_checkbutton_cb): 
     11        * src/contacts-omoko-groups-editor.h: 
     12        * src/contacts-omoko.c: (create_contacts_list), 
     13        (create_main_window): 
     14        * src/contacts-ui.h: 
     15 
     16        Move group editing into lower pane, rather than in a seperate dialog. 
     17 
    1182007-01-16  Thomas Wood  <thomas@openedhand.com> 
    219 
  • ohand/branches/private/omoko/src/contacts-callbacks-ui.c

    r835 r839  
    117117        GtkWidget *widget; 
    118118        EContact *contact; 
    119  
    120         /* Get the currently selected contact and update the contact summary */ 
    121         contact = contacts_contact_from_selection (selection, 
    122                                                    data->contacts_table); 
    123         if (contact) { 
    124                 contacts_display_summary (contact, data); 
    125         } else { 
    126                 contacts_set_available_options (data, TRUE, FALSE, FALSE); 
    127                 widget = data->ui->summary_vbox; 
    128                 gtk_widget_hide (widget); 
     119        gint current_pane; 
     120 
     121        current_pane = gtk_notebook_get_current_page (GTK_NOTEBOOK (data->ui->main_notebook)); 
     122 
     123        if (current_pane == CONTACTS_VIEW_PANE) 
     124        { 
     125                /* Get the currently selected contact and update the contact summary */ 
     126                contact = contacts_contact_from_selection (selection, 
     127                                                           data->contacts_table); 
     128                if (contact) { 
     129                        contacts_display_summary (contact, data); 
     130                } else { 
     131                        contacts_set_available_options (data, TRUE, FALSE, FALSE); 
     132                        widget = data->ui->summary_vbox; 
     133                        gtk_widget_hide (widget); 
     134                } 
     135        } 
     136        else if (current_pane == CONTACTS_GROUPS_PANE) 
     137        { 
     138                contacts_groups_pane_update_selection ( 
     139                                gtk_tree_view_get_selection (GTK_TREE_VIEW (data->ui->contacts_treeview)), 
     140                                data); 
    129141        } 
    130142} 
     
    135147        data->contact = e_contact_new (); 
    136148        contacts_edit_pane_show (data, TRUE); 
     149} 
     150 
     151void 
     152contacts_view_cb (GtkWidget *source, ContactsData *data) 
     153{ 
     154        gtk_notebook_set_current_page (GTK_NOTEBOOK (data->ui->main_notebook), CONTACTS_VIEW_PANE); 
    137155} 
    138156 
  • ohand/branches/private/omoko/src/contacts-callbacks-ui.h

    r825 r839  
    3535void contacts_new_cb (GtkWidget *source, ContactsData *data); 
    3636 
     37void contacts_view_cb (GtkWidget *source, ContactsData *data); 
     38 
    3739void contacts_edit_cb (GtkWidget *source, ContactsData *data); 
    3840 
  • ohand/branches/private/omoko/src/contacts-defs.h

    r830 r839  
    4646}; 
    4747 
     48enum { 
     49        CONTACTS_VIEW_PANE = 0, 
     50        CONTACTS_EDIT_PANE, 
     51        CONTACTS_GROUPS_PANE 
     52}; 
     53 
    4854typedef struct { 
    4955        GtkWidget *chooser_add_hbox; 
     
    7177        GtkWidget *edit_groups; 
    7278        GtkWidget *edit_menu; 
    73         GtkWidget *edit_table; 
    7479        GtkWidget *main_menubar; 
    7580        GtkWidget *main_notebook; 
     
    7984        GtkWidget *photo_image; 
    8085        GtkWidget *preview_header_hbox; 
     86 
     87        GtkWidget *edit_table; 
     88        GtkWidget *groups_vbox; 
    8189 
    8290        GtkWidget *add_field_button; 
  • ohand/branches/private/omoko/src/contacts-omoko-groups-editor.c

    r838 r839  
    2626#include "contacts-utils.h" 
    2727 
    28 static GtkWidget *groups_create_dialog (ContactsData *data); 
     28static void groups_checkbutton_cb (GtkWidget *checkbutton, ContactsData *data); 
     29void contacts_groups_pane_update_selection (GtkTreeSelection *selection, ContactsData *data); 
    2930 
    3031/* TODO: put these in a struct and stop using global variables */ 
    3132static GHashTable *groups_widgets_hash; 
    32 static GtkWidget *contact_label; 
    33 static GtkWidget *treeview, *groups_vbox; 
    3433 
    3534void 
    36 moko_open_groups_editor (GtkWidget *widget, ContactsData *data) 
     35contacts_groups_pane_show (GtkWidget *button, ContactsData *data) 
    3736{ 
    38         groups_widgets_hash = g_hash_table_new (NULL, NULL); 
    39         if (!MOKO_IS_DIALOG_WINDOW (data->ui->chooser_dialog)) 
    40                 data->ui->chooser_dialog = groups_create_dialog (data); 
     37        GtkWidget *widget; 
     38        GList *cur; 
     39        if (!groups_widgets_hash) 
     40        { 
     41                groups_widgets_hash = g_hash_table_new (NULL, NULL); 
     42                for (cur = data->contacts_groups; cur; cur = g_list_next (cur)) 
     43                { 
     44                        widget = gtk_check_button_new_with_label (cur->data); 
     45                        gtk_box_pack_start (GTK_BOX (data->ui->groups_vbox), widget, FALSE, FALSE, 6); 
     46                        g_hash_table_insert (groups_widgets_hash, cur->data, widget); 
     47                        g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (groups_checkbutton_cb), data); 
     48                        gtk_widget_show (widget); 
     49                } 
     50        } 
     51        gtk_notebook_set_current_page (GTK_NOTEBOOK (data->ui->main_notebook), CONTACTS_GROUPS_PANE); 
    4152 
    42         moko_dialog_window_run (MOKO_DIALOG_WINDOW (data->ui->chooser_dialog)); 
    43         gtk_widget_hide (data->ui->chooser_dialog); 
    44         g_hash_table_destroy (groups_widgets_hash); 
     53        contacts_groups_pane_update_selection (gtk_tree_view_get_selection (GTK_TREE_VIEW (data->ui->contacts_treeview)), data); 
    4554} 
    4655 
    47 static void 
    48 groups_checkbutton_cb (GtkWidget *checkbutton, ContactsData *data) 
    49 { 
    50         EContact *contact; 
    51         GtkTreeSelection *selection; 
    52         GList *current_groups, *g = NULL; 
    53         gchar *new_group; 
    54  
    55         if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (checkbutton), "UPDATING"))) 
    56         { 
    57                 g_object_set_data (G_OBJECT(checkbutton), "updating", GINT_TO_POINTER (FALSE)); 
    58                 return; 
    59         } 
    60  
    61         selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); 
    62  
    63         contact = contacts_contact_from_selection (selection, 
    64                                                    data->contacts_table); 
    65         current_groups = e_contact_get (contact, E_CONTACT_CATEGORY_LIST); 
    66  
    67         /* TODO: probably ought to do something better here */ 
    68         new_group = g_strdup(gtk_button_get_label (GTK_BUTTON (checkbutton))); 
    69  
    70         if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton))) 
    71         { 
    72                 /* add this to the contact */ 
    73                 current_groups = g_list_append (current_groups, new_group); 
    74         } 
    75         else 
    76         { 
    77                 /* make sure this isn't in the list */ 
    78                 g = g_list_find_custom (current_groups, new_group, (GCompareFunc) strcmp); 
    79                 if (g) 
    80                         current_groups = g_list_remove (current_groups, g->data); 
    81         } 
    82  
    83         e_contact_set (contact, E_CONTACT_CATEGORY_LIST, current_groups); 
    84         e_book_async_commit_contact (data->book, contact, NULL, NULL); 
    85 } 
    86  
    87 static void 
    88 groups_contact_selection_cb  (GtkTreeSelection * selection, ContactsData *data) 
     56void 
     57contacts_groups_pane_update_selection (GtkTreeSelection *selection, ContactsData *data) 
    8958{ 
    9059        GtkWidget *widget; 
    9160        EContact *contact; 
    9261        GList *groups, *g; 
    93         gchar *fullname, *markup; 
     62 
     63 
     64        if (!selection) 
     65                return; 
    9466 
    9567        /* Get the currently selected contact and update the contact summary */ 
     
    9870        if (!contact) 
    9971                return; 
    100  
    101         fullname = e_contact_get (contact, E_CONTACT_FULL_NAME); 
    102         markup = g_markup_printf_escaped ("<span size=\"large\"><b>%s</b></span>", fullname); 
    103         g_free (fullname); 
    104         gtk_label_set_markup (GTK_LABEL (contact_label), markup); 
    105         g_free (markup); 
    10672 
    10773        groups = e_contact_get (contact, E_CONTACT_CATEGORY_LIST); 
     
    13197        } 
    13298 
     99 
    133100} 
    134101 
    135 static void 
    136 groups_new_group_cb (GtkWidget *button, ContactsData *data) 
     102void 
     103contacts_groups_pane_hide () 
     104{ 
     105        g_hash_table_destroy (groups_widgets_hash); 
     106} 
     107 
     108 
     109void 
     110contacts_groups_new_group_cb (GtkWidget *button, ContactsData *data) 
    137111{ 
    138112        GtkWidget *widget; 
     
    160134 
    161135        widget = gtk_check_button_new_with_label (text); 
    162         gtk_box_pack_start (GTK_BOX (groups_vbox), widget, FALSE, FALSE, 0); 
     136        gtk_box_pack_start (GTK_BOX (data->ui->groups_vbox), widget, FALSE, FALSE, 0); 
    163137        g_hash_table_insert (groups_widgets_hash, text, widget); 
    164138        g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (groups_checkbutton_cb), data); 
    165139 
    166         selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); 
     140        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (data->ui->contacts_treeview)); 
    167141        if (gtk_tree_selection_count_selected_rows (selection) == 0) 
    168142        { 
     
    180154} 
    181155 
    182 static GtkWidget * 
    183 groups_create_dialog (ContactsData *data) 
     156static void 
     157groups_checkbutton_cb (GtkWidget *checkbutton, ContactsData *data) 
    184158{ 
    185         GtkWidget *dialog; 
    186         GtkWidget *vbox; 
    187         GtkWidget *widget; 
    188         GtkWidget *details_vbox; 
     159        EContact *contact; 
     160        GtkTreeSelection *selection; 
     161        GList *current_groups, *g = NULL; 
     162        gchar *new_group; 
    189163 
    190         dialog = GTK_WIDGET (moko_dialog_window_new ()); 
    191         moko_dialog_window_set_title (MOKO_DIALOG_WINDOW (dialog), _("Group Membership") ); 
    192  
    193         vbox = gtk_vbox_new (FALSE, 0); 
    194         moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW (dialog), vbox); 
    195  
    196         details_vbox = gtk_vbox_new (FALSE, 0); 
    197         gtk_container_set_border_width (GTK_CONTAINER (details_vbox), 24); 
    198         gtk_container_add (GTK_CONTAINER (vbox), details_vbox); 
    199  
    200  
    201         contact_label = gtk_label_new ("<span size=\"large\"><b>Contact Name</b></span>"); 
    202         gtk_box_pack_start (GTK_BOX (details_vbox), contact_label, FALSE, FALSE, 0); 
    203         gtk_label_set_use_markup (GTK_LABEL (contact_label), TRUE); 
    204         gtk_misc_set_alignment (GTK_MISC (contact_label), 0, 0); 
    205  
    206         widget = gtk_hseparator_new (); 
    207         gtk_box_pack_start (GTK_BOX (details_vbox), widget, FALSE, FALSE, 0); 
    208  
    209         groups_vbox = gtk_vbox_new (FALSE, 0); 
    210         gtk_container_set_border_width (GTK_CONTAINER (groups_vbox), 12); 
    211  
    212         widget = gtk_scrolled_window_new (NULL, NULL); 
    213         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, 
    214                                                 GTK_POLICY_AUTOMATIC); 
    215         gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (widget), groups_vbox); 
    216         gtk_box_pack_start (GTK_BOX (details_vbox), widget, TRUE, TRUE, 0); 
    217  
    218         /* FIXME: don't do this */ 
    219         gtk_viewport_set_shadow_type (GTK_VIEWPORT (groups_vbox->parent), GTK_SHADOW_NONE); 
    220         gtk_container_set_border_width (GTK_CONTAINER (groups_vbox->parent), 12); 
    221  
    222         widget = gtk_alignment_new (1, 0, 0, 0); 
    223         gtk_alignment_set_padding (GTK_ALIGNMENT (widget), 0, 0, 0, 24); 
    224         gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0); 
    225  
    226         GtkWidget *new_group_button = gtk_button_new_with_label ("New Group"); 
    227         g_signal_connect (G_OBJECT(new_group_button), "clicked", G_CALLBACK (groups_new_group_cb), data); 
    228         gtk_container_add (GTK_CONTAINER (widget), new_group_button); 
    229  
    230         GList *cur; 
    231         for (cur = data->contacts_groups; cur; cur = g_list_next (cur)) 
     164        if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (checkbutton), "updating"))) 
    232165        { 
    233                 widget = gtk_check_button_new_with_label (cur->data); 
    234                 gtk_box_pack_start (GTK_BOX (groups_vbox), widget, FALSE, FALSE, 6); 
    235                 g_hash_table_insert (groups_widgets_hash, cur->data, widget); 
    236                 g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (groups_checkbutton_cb), data); 
    237                 gtk_widget_set_sensitive (GTK_WIDGET (widget), FALSE); 
     166                g_object_set_data (G_OBJECT(checkbutton), "updating", GINT_TO_POINTER (FALSE)); 
     167                return; 
    238168        } 
    239169 
    240         /* contacts list */ 
    241         widget = gtk_alignment_new (0, 0, 1, 1); 
    242         gtk_alignment_set_padding (GTK_ALIGNMENT (widget), 12, 12, 12, 12); 
    243         gtk_box_pack_start (GTK_BOX(vbox), widget, FALSE, FALSE, 0); 
     170        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (data->ui->contacts_treeview)); 
    244171 
    245         GtkWidget *list = create_contacts_list (data); 
    246         gtk_container_add (GTK_CONTAINER (widget), list); 
    247          
    248         /* Connect signal for selection changed event */ 
    249         treeview = GTK_WIDGET (moko_navigation_list_get_tree_view (list)); 
    250         GtkTreeSelection *selection; 
    251         selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); 
    252         g_signal_connect (G_OBJECT (selection), "changed", 
    253                           G_CALLBACK (groups_contact_selection_cb), data); 
     172        contact = contacts_contact_from_selection (selection, 
     173                                                   data->contacts_table); 
     174        current_groups = e_contact_get (contact, E_CONTACT_CATEGORY_LIST); 
    254175 
    255         gtk_widget_show_all (vbox); 
     176        /* TODO: probably ought to do something better here */ 
     177        new_group = g_strdup(gtk_button_get_label (GTK_BUTTON (checkbutton))); 
    256178 
    257         return dialog; 
     179        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton))) 
     180        { 
     181                /* add this to the contact */ 
     182                current_groups = g_list_append (current_groups, new_group); 
     183        } 
     184        else 
     185        { 
     186                /* make sure this isn't in the list */ 
     187                g = g_list_find_custom (current_groups, new_group, (GCompareFunc) strcmp); 
     188                if (g) 
     189                        current_groups = g_list_remove (current_groups, g->data); 
     190        } 
    258191 
     192        e_contact_set (contact, E_CONTACT_CATEGORY_LIST, current_groups); 
     193        e_book_async_commit_contact (data->book, contact, NULL, NULL); 
    259194} 
    260  
    261  
  • ohand/branches/private/omoko/src/contacts-omoko-groups-editor.h

    r834 r839  
    11 
    2 void moko_open_groups_editor (GtkWidget *widget, ContactsData *data); 
     2void contacts_groups_pane_update_selection (GtkTreeSelection *selection, ContactsData *data); 
     3void contacts_groups_pane_show (GtkWidget *button, ContactsData *data); 
     4void contacts_groups_new_group_cb (GtkWidget *button, ContactsData *data); 
     5 
  • ohand/branches/private/omoko/src/contacts-omoko.c

    r837 r839  
    4040{ 
    4141        MokoNavigationList *moko_navigation_list = moko_navigation_list_new (); 
    42         GtkWidget *treeview = moko_navigation_list_get_tree_view (moko_navigation_list); 
     42        GtkWidget *treeview = GTK_WIDGET (moko_navigation_list_get_tree_view (moko_navigation_list)); 
    4343 
    4444        gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), 
     
    128128 
    129129        moko_paned_window_set_upper_pane (MOKO_PANED_WINDOW (ui->main_window), GTK_WIDGET (moko_navigation_list)); 
    130         ui->contacts_treeview = GTK_WIDGET (moko_navigation_list_get_tree_view (moko_navigation_list)); 
     130        ui->contacts_treeview = GTK_WIDGET (moko_navigation_list_get_tree_view (MOKO_NAVIGATION_LIST (moko_navigation_list))); 
    131131 
    132132        /* Connect signal for selection changed event */ 
     
    159159                        MOKO_PIXMAP_BUTTON (groups_button), 
    160160                        "openmoko-action-button-group-icon"); 
    161         g_signal_connect (G_OBJECT (groups_button), "clicked", G_CALLBACK (moko_open_groups_editor), contacts_data); 
     161        g_signal_connect (G_OBJECT (groups_button), "clicked", G_CALLBACK (contacts_groups_pane_show), contacts_data); 
    162162 
    163163        /* mode button */ 
     
    170170        GtkWidget *mode_menu = gtk_menu_new (); 
    171171        GtkWidget *menuitem; 
     172        menuitem = gtk_menu_item_new_with_label (_("View")); 
     173        gtk_menu_shell_append (GTK_MENU_SHELL (mode_menu), menuitem); 
     174        g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (contacts_view_cb), contacts_data); 
    172175        menuitem = gtk_menu_item_new_with_label (_("Edit")); 
    173176        gtk_menu_shell_append (GTK_MENU_SHELL (mode_menu), menuitem); 
     
    175178        menuitem = gtk_menu_item_new_with_label (_("Group Membership")); 
    176179        gtk_menu_shell_append (GTK_MENU_SHELL (mode_menu), menuitem); 
    177         g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (moko_open_groups_editor), contacts_data); 
     180        g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (contacts_groups_pane_show), contacts_data); 
    178181        menuitem = gtk_menu_item_new_with_label (_("History")); 
    179182        gtk_menu_shell_append (GTK_MENU_SHELL (mode_menu), menuitem); 
     
    184187        ui->new_button = (GtkWidget *)moko_tool_box_add_action_button (MOKO_TOOL_BOX (moko_tool_box)); 
    185188        moko_pixmap_button_set_center_stock (MOKO_PIXMAP_BUTTON (ui->new_button), "openmoko-action-button-new-concant-icon"); 
    186  
    187189 
    188190 
     
    231233        gtk_container_set_border_width (GTK_CONTAINER (ui->edit_table), 6); 
    232234        gtk_table_set_row_spacings (GTK_TABLE (ui->edit_table), 6); 
     235 
     236        /*** groups mode ***/ 
     237        ui->groups_vbox = gtk_vbox_new (TRUE, 0); 
     238        gtk_container_set_border_width (GTK_CONTAINER (ui->groups_vbox), 12); 
     239        gtk_notebook_append_page (GTK_NOTEBOOK (ui->main_notebook), ui->groups_vbox, NULL); 
    233240 
    234241        /*** connect signals ***/ 
  • ohand/branches/private/omoko/src/contacts-ui.h

    r834 r839  
    22#include "config.h" 
    33#include "contacts-omoko.h" 
     4#include "contacts-omoko-groups-editor.h" 
    45 
    56void contacts_setup_ui (ContactsData *data); 
Note: See TracChangeset for help on using the changeset viewer.