Changeset 839
- Timestamp:
- 01/17/07 17:23:55 (6 years ago)
- Location:
- ohand/branches/private/omoko
- Files:
-
- 8 edited
-
ChangeLog (modified) (1 diff)
-
src/contacts-callbacks-ui.c (modified) (2 diffs)
-
src/contacts-callbacks-ui.h (modified) (1 diff)
-
src/contacts-defs.h (modified) (3 diffs)
-
src/contacts-omoko-groups-editor.c (modified) (5 diffs)
-
src/contacts-omoko-groups-editor.h (modified) (1 diff)
-
src/contacts-omoko.c (modified) (7 diffs)
-
src/contacts-ui.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
ohand/branches/private/omoko/ChangeLog
r838 r839 1 2007-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 1 18 2007-01-16 Thomas Wood <thomas@openedhand.com> 2 19 -
ohand/branches/private/omoko/src/contacts-callbacks-ui.c
r835 r839 117 117 GtkWidget *widget; 118 118 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); 129 141 } 130 142 } … … 135 147 data->contact = e_contact_new (); 136 148 contacts_edit_pane_show (data, TRUE); 149 } 150 151 void 152 contacts_view_cb (GtkWidget *source, ContactsData *data) 153 { 154 gtk_notebook_set_current_page (GTK_NOTEBOOK (data->ui->main_notebook), CONTACTS_VIEW_PANE); 137 155 } 138 156 -
ohand/branches/private/omoko/src/contacts-callbacks-ui.h
r825 r839 35 35 void contacts_new_cb (GtkWidget *source, ContactsData *data); 36 36 37 void contacts_view_cb (GtkWidget *source, ContactsData *data); 38 37 39 void contacts_edit_cb (GtkWidget *source, ContactsData *data); 38 40 -
ohand/branches/private/omoko/src/contacts-defs.h
r830 r839 46 46 }; 47 47 48 enum { 49 CONTACTS_VIEW_PANE = 0, 50 CONTACTS_EDIT_PANE, 51 CONTACTS_GROUPS_PANE 52 }; 53 48 54 typedef struct { 49 55 GtkWidget *chooser_add_hbox; … … 71 77 GtkWidget *edit_groups; 72 78 GtkWidget *edit_menu; 73 GtkWidget *edit_table;74 79 GtkWidget *main_menubar; 75 80 GtkWidget *main_notebook; … … 79 84 GtkWidget *photo_image; 80 85 GtkWidget *preview_header_hbox; 86 87 GtkWidget *edit_table; 88 GtkWidget *groups_vbox; 81 89 82 90 GtkWidget *add_field_button; -
ohand/branches/private/omoko/src/contacts-omoko-groups-editor.c
r838 r839 26 26 #include "contacts-utils.h" 27 27 28 static GtkWidget *groups_create_dialog (ContactsData *data); 28 static void groups_checkbutton_cb (GtkWidget *checkbutton, ContactsData *data); 29 void contacts_groups_pane_update_selection (GtkTreeSelection *selection, ContactsData *data); 29 30 30 31 /* TODO: put these in a struct and stop using global variables */ 31 32 static GHashTable *groups_widgets_hash; 32 static GtkWidget *contact_label;33 static GtkWidget *treeview, *groups_vbox;34 33 35 34 void 36 moko_open_groups_editor (GtkWidget *widget, ContactsData *data)35 contacts_groups_pane_show (GtkWidget *button, ContactsData *data) 37 36 { 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); 41 52 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); 45 54 } 46 55 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) 56 void 57 contacts_groups_pane_update_selection (GtkTreeSelection *selection, ContactsData *data) 89 58 { 90 59 GtkWidget *widget; 91 60 EContact *contact; 92 61 GList *groups, *g; 93 gchar *fullname, *markup; 62 63 64 if (!selection) 65 return; 94 66 95 67 /* Get the currently selected contact and update the contact summary */ … … 98 70 if (!contact) 99 71 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);106 72 107 73 groups = e_contact_get (contact, E_CONTACT_CATEGORY_LIST); … … 131 97 } 132 98 99 133 100 } 134 101 135 static void 136 groups_new_group_cb (GtkWidget *button, ContactsData *data) 102 void 103 contacts_groups_pane_hide () 104 { 105 g_hash_table_destroy (groups_widgets_hash); 106 } 107 108 109 void 110 contacts_groups_new_group_cb (GtkWidget *button, ContactsData *data) 137 111 { 138 112 GtkWidget *widget; … … 160 134 161 135 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); 163 137 g_hash_table_insert (groups_widgets_hash, text, widget); 164 138 g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (groups_checkbutton_cb), data); 165 139 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)); 167 141 if (gtk_tree_selection_count_selected_rows (selection) == 0) 168 142 { … … 180 154 } 181 155 182 static GtkWidget *183 groups_c reate_dialog (ContactsData *data)156 static void 157 groups_checkbutton_cb (GtkWidget *checkbutton, ContactsData *data) 184 158 { 185 GtkWidget *dialog;186 Gtk Widget *vbox;187 G tkWidget *widget;188 GtkWidget *details_vbox;159 EContact *contact; 160 GtkTreeSelection *selection; 161 GList *current_groups, *g = NULL; 162 gchar *new_group; 189 163 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"))) 232 165 { 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; 238 168 } 239 169 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)); 244 171 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); 254 175 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))); 256 178 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 } 258 191 192 e_contact_set (contact, E_CONTACT_CATEGORY_LIST, current_groups); 193 e_book_async_commit_contact (data->book, contact, NULL, NULL); 259 194 } 260 261 -
ohand/branches/private/omoko/src/contacts-omoko-groups-editor.h
r834 r839 1 1 2 void moko_open_groups_editor (GtkWidget *widget, ContactsData *data); 2 void contacts_groups_pane_update_selection (GtkTreeSelection *selection, ContactsData *data); 3 void contacts_groups_pane_show (GtkWidget *button, ContactsData *data); 4 void contacts_groups_new_group_cb (GtkWidget *button, ContactsData *data); 5 -
ohand/branches/private/omoko/src/contacts-omoko.c
r837 r839 40 40 { 41 41 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)); 43 43 44 44 gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), … … 128 128 129 129 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))); 131 131 132 132 /* Connect signal for selection changed event */ … … 159 159 MOKO_PIXMAP_BUTTON (groups_button), 160 160 "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); 162 162 163 163 /* mode button */ … … 170 170 GtkWidget *mode_menu = gtk_menu_new (); 171 171 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); 172 175 menuitem = gtk_menu_item_new_with_label (_("Edit")); 173 176 gtk_menu_shell_append (GTK_MENU_SHELL (mode_menu), menuitem); … … 175 178 menuitem = gtk_menu_item_new_with_label (_("Group Membership")); 176 179 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); 178 181 menuitem = gtk_menu_item_new_with_label (_("History")); 179 182 gtk_menu_shell_append (GTK_MENU_SHELL (mode_menu), menuitem); … … 184 187 ui->new_button = (GtkWidget *)moko_tool_box_add_action_button (MOKO_TOOL_BOX (moko_tool_box)); 185 188 moko_pixmap_button_set_center_stock (MOKO_PIXMAP_BUTTON (ui->new_button), "openmoko-action-button-new-concant-icon"); 186 187 189 188 190 … … 231 233 gtk_container_set_border_width (GTK_CONTAINER (ui->edit_table), 6); 232 234 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); 233 240 234 241 /*** connect signals ***/ -
ohand/branches/private/omoko/src/contacts-ui.h
r834 r839 2 2 #include "config.h" 3 3 #include "contacts-omoko.h" 4 #include "contacts-omoko-groups-editor.h" 4 5 5 6 void contacts_setup_ui (ContactsData *data);
Note: See TracChangeset
for help on using the changeset viewer.
