diff options
author | Mike Kestner <mkestner@ximian.com> | 2003-10-01 06:39:04 +0800 |
---|---|---|
committer | Mike Kestner <mkestner@src.gnome.org> | 2003-10-01 06:39:04 +0800 |
commit | 54869d90bd04f0a816b1786530d3555ac2b034cc (patch) | |
tree | 3b2859280d478fa6b57227a419125eadd455a615 /calendar/gui/dialogs/meeting-page.c | |
parent | 642e0e5abd8486793e95fab56e9fd9f3dd0394f8 (diff) | |
download | gsoc2013-evolution-54869d90bd04f0a816b1786530d3555ac2b034cc.tar gsoc2013-evolution-54869d90bd04f0a816b1786530d3555ac2b034cc.tar.gz gsoc2013-evolution-54869d90bd04f0a816b1786530d3555ac2b034cc.tar.bz2 gsoc2013-evolution-54869d90bd04f0a816b1786530d3555ac2b034cc.tar.lz gsoc2013-evolution-54869d90bd04f0a816b1786530d3555ac2b034cc.tar.xz gsoc2013-evolution-54869d90bd04f0a816b1786530d3555ac2b034cc.tar.zst gsoc2013-evolution-54869d90bd04f0a816b1786530d3555ac2b034cc.zip |
new VOID:STRING,STRING,STRING build the new view/store/renderer/editable
2003-09-30 Mike Kestner <mkestner@ximian.com>
* cal-util/cal-util-marshal.list : new VOID:STRING,STRING,STRING
* gui/Makefile.am : build the new view/store/renderer/editable
* gui/e-select-names-renderer.* : new completion cell renderer
* gui/e-select-names-editable.* : new completion cell editable
* gui/e-meeting-model.* : killed. code reused in list-view/store
* gui/e-meeting-store.* : port of EMeetingModel to GtkTreeModel
* gui/e-meeting-list-view.* : GtkTreeView subclass for attendee lists
* gui/e-meeting-time-sel.c : Use the new store/view
* gui/e-meeting-time-sel-item.c : Use the new store/view
* gui/dialogs/Makefile.am : don't install the etspec anymore.
* gui/dialogs/event-editor.c : Use the new store/view.
* gui/dialogs/meeting-page.c : Use the new store/view.
* gui/dialogs/shedule-page.c : Use the new store/view.
* gui/dialogs/task-editor.c : Use the new store/view.
svn path=/trunk/; revision=22774
Diffstat (limited to 'calendar/gui/dialogs/meeting-page.c')
-rw-r--r-- | calendar/gui/dialogs/meeting-page.c | 182 |
1 files changed, 44 insertions, 138 deletions
diff --git a/calendar/gui/dialogs/meeting-page.c b/calendar/gui/dialogs/meeting-page.c index e603978520..6c8212e93c 100644 --- a/calendar/gui/dialogs/meeting-page.c +++ b/calendar/gui/dialogs/meeting-page.c @@ -34,10 +34,7 @@ #include <libgnome/gnome-i18n.h> #include <glade/glade.h> #include <libgnomeui/gnome-stock-icons.h> -#include <gal/e-table/e-cell-combo.h> -#include <gal/e-table/e-cell-text.h> -#include <gal/e-table/e-table-simple.h> -#include <gal/e-table/e-table-scrolled.h> +#include <gal/util/e-util.h> #include <gal/widgets/e-unicode.h> #include <gal/widgets/e-popup-menu.h> #include <gal/widgets/e-gui-utils.h> @@ -47,27 +44,13 @@ #include "../calendar-component.h" #include "../e-meeting-attendee.h" -#include "../e-meeting-model.h" +#include "../e-meeting-store.h" +#include "../e-meeting-list-view.h" #include "../itip-utils.h" #include "comp-editor-util.h" #include "e-delegate-dialog.h" #include "meeting-page.h" - - -enum columns { - MEETING_ATTENDEE_COL, - MEETING_MEMBER_COL, - MEETING_TYPE_COL, - MEETING_ROLE_COL, - MEETING_RSVP_COL, - MEETING_DELTO_COL, - MEETING_DELFROM_COL, - MEETING_STATUS_COL, - MEETING_CN_COL, - MEETING_LANG_COL, - MEETING_COLUMN_COUNT -}; /* Private part of the MeetingPage structure */ struct _MeetingPagePrivate { @@ -94,9 +77,9 @@ struct _MeetingPagePrivate { GtkWidget *existing_organizer_btn; GtkWidget *invite; - /* E Table stuff */ - EMeetingModel *model; - ETableScrolled *etable; + /* ListView stuff */ + EMeetingStore *model; + EMeetingListView *list_view; gint row; /* For handling who the organizer is */ @@ -116,8 +99,6 @@ static void meeting_page_focus_main_widget (CompEditorPage *page); static void meeting_page_fill_widgets (CompEditorPage *page, CalComponent *comp); static gboolean meeting_page_fill_component (CompEditorPage *page, CalComponent *comp); -static gint right_click_cb (ETable *etable, gint row, gint col, GdkEvent *event, gpointer data); - static CompEditorPageClass *parent_class = NULL; @@ -178,7 +159,7 @@ meeting_page_init (MeetingPage *mpage) priv->invite = NULL; priv->model = NULL; - priv->etable = NULL; + priv->list_view = NULL; priv->updating = FALSE; } @@ -377,14 +358,12 @@ meeting_page_fill_widgets (CompEditorPage *page, CalComponent *comp) page->client, CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS)) gtk_widget_hide (priv->existing_organizer_btn); - e_meeting_model_etable_click_to_add (priv->model, TRUE); } else { if (cal_client_get_static_capability ( page->client, CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS)) gtk_widget_hide (priv->existing_organizer_btn); gtk_widget_hide (priv->invite); - e_meeting_model_etable_click_to_add (priv->model, FALSE); } if (organizer.cn != NULL) @@ -401,7 +380,7 @@ meeting_page_fill_widgets (CompEditorPage *page, CalComponent *comp) a = get_current_account (mpage); if (a != NULL) { - priv->ia = e_meeting_model_add_attendee_with_defaults (priv->model); + priv->ia = e_meeting_store_add_attendee_with_defaults (priv->model); g_object_ref (priv->ia); e_meeting_attendee_set_address (priv->ia, g_strdup_printf ("MAILTO:%s", a->id->address)); @@ -453,12 +432,12 @@ meeting_page_fill_component (CompEditorPage *page, CalComponent *comp) g_free (addr); } - if (e_meeting_model_count_actual_attendees (priv->model) < 1) { + if (e_meeting_store_count_actual_attendees (priv->model) < 1) { e_notice (page, GTK_MESSAGE_ERROR, _("At least one attendee is required.")); return FALSE; } - set_attendees (comp, e_meeting_model_get_attendees (priv->model)); + set_attendees (comp, e_meeting_store_get_attendees (priv->model)); return TRUE; } @@ -535,10 +514,10 @@ org_changed_cb (GtkWidget *widget, gpointer data) e_meeting_attendee_set_address (priv->ia, g_strdup_printf ("MAILTO:%s", a->id->address)); e_meeting_attendee_set_cn (priv->ia, g_strdup (a->id->name)); - if (!e_meeting_model_find_attendee (priv->model, e_meeting_attendee_get_address (priv->ia), NULL)) - e_meeting_model_add_attendee (priv->model, priv->ia); + if (!e_meeting_store_find_attendee (priv->model, e_meeting_attendee_get_address (priv->ia), NULL)) + e_meeting_store_add_attendee (priv->model, priv->ia); } else { - e_meeting_model_remove_attendee (priv->model, priv->ia); + e_meeting_store_remove_attendee (priv->model, priv->ia); } } @@ -558,7 +537,6 @@ change_clicked_cb (GtkWidget *widget, gpointer data) gtk_widget_show (priv->organizer_table); gtk_widget_hide (priv->existing_organizer_table); gtk_widget_show (priv->invite); - e_meeting_model_etable_click_to_add (priv->model, TRUE); comp_editor_page_notify_needs_send (COMP_EDITOR_PAGE (mpage)); @@ -575,7 +553,7 @@ invite_cb (GtkWidget *widget, gpointer data) mpage = MEETING_PAGE (data); priv = mpage->priv; - e_meeting_model_invite_others_dialog (priv->model); + e_meeting_list_view_invite_others_dialog (priv->list_view); } /* Hooks the widget signals */ @@ -598,67 +576,6 @@ init_widgets (MeetingPage *mpage) G_CALLBACK (invite_cb), mpage); } -#if 0 -static void -popup_delegate_cb (GtkWidget *widget, gpointer data) -{ - MeetingPage *mpage = MEETING_PAGE (data); - MeetingPagePrivate *priv; - EDelegateDialog *edd; - GtkWidget *dialog; - EMeetingAttendee *ia; - char *address = NULL, *name = NULL; - - priv = mpage->priv; - - ia = e_meeting_model_find_attendee_at_row (priv->model, priv->row); - - /* Show dialog. */ - edd = e_delegate_dialog_new (NULL, itip_strip_mailto (e_meeting_attendee_get_delto (ia))); - dialog = e_delegate_dialog_get_toplevel (edd); - - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK){ - EMeetingAttendee *ic; - - name = e_delegate_dialog_get_delegate_name (edd); - address = e_delegate_dialog_get_delegate (edd); - - /* Make sure we can add the new delegatee person */ - if (e_meeting_model_find_attendee (priv->model, address, NULL) != NULL) { - e_notice (mpage, GTK_MESSAGE_ERROR, - _("That person is already attending the meeting!")); - goto cleanup; - } - - /* Update information for attendee */ - if (e_meeting_attendee_is_set_delto (ia)) { - EMeetingAttendee *ib; - - ib = e_meeting_model_find_attendee (priv->model, itip_strip_mailto (e_meeting_attendee_get_delto (ia)), NULL); - if (ib != NULL) { - g_object_ref((ib)); - g_ptr_array_add (priv->deleted_attendees, ib); - - e_meeting_model_remove_attendee (priv->model, ib); - } - } - e_meeting_attendee_set_delto (ia, g_strdup_printf ("MAILTO:%s", address)); - - /* Construct delegatee information */ - ic = e_meeting_model_add_attendee_with_defaults (priv->model); - - e_meeting_attendee_set_address (ic, g_strdup_printf ("MAILTO:%s", address)); - e_meeting_attendee_set_delfrom (ic, g_strdup (e_meeting_attendee_get_address (ia))); - e_meeting_attendee_set_cn (ic, g_strdup (name)); - } - - cleanup: - g_free (name); - g_free (address); - g_object_unref((edd)); -} -#endif - static void popup_delete_cb (GtkWidget *widget, gpointer data) { @@ -669,7 +586,7 @@ popup_delete_cb (GtkWidget *widget, gpointer data) priv = mpage->priv; - ia = e_meeting_model_find_attendee_at_row (priv->model, priv->row); + ia = e_meeting_store_find_attendee_at_row (priv->model, priv->row); /* If the user deletes the attendee explicitly, assume they no longer want the organizer showing up */ @@ -682,7 +599,7 @@ popup_delete_cb (GtkWidget *widget, gpointer data) if (e_meeting_attendee_is_set_delfrom (ia)) { EMeetingAttendee *ib; - ib = e_meeting_model_find_attendee (priv->model, e_meeting_attendee_get_delfrom (ia), &pos); + ib = e_meeting_store_find_attendee (priv->model, e_meeting_attendee_get_delfrom (ia), &pos); if (ib != NULL) { e_meeting_attendee_set_delto (ib, NULL); e_meeting_attendee_set_edit_level (ib, E_MEETING_ATTENDEE_EDIT_FULL); @@ -695,10 +612,10 @@ popup_delete_cb (GtkWidget *widget, gpointer data) g_object_ref((ia)); g_ptr_array_add (priv->deleted_attendees, ia); - e_meeting_model_remove_attendee (priv->model, ia); + e_meeting_store_remove_attendee (priv->model, ia); if (e_meeting_attendee_get_delto (ia) != NULL) - ib = e_meeting_model_find_attendee (priv->model, e_meeting_attendee_get_delto (ia), NULL); + ib = e_meeting_store_find_attendee (priv->model, e_meeting_attendee_get_delto (ia), NULL); ia = ib; } } @@ -719,6 +636,8 @@ static EPopupMenu context_menu[] = { E_POPUP_TERMINATOR }; +#if 0 +/* FIXME: handle context menu for treeview */ /* handle context menu over message-list */ static gint right_click_cb (ETable *etable, gint row, gint col, GdkEvent *event, gpointer data) @@ -752,26 +671,12 @@ right_click_cb (ETable *etable, gint row, gint col, GdkEvent *event, gpointer da return TRUE; } - +#endif - -/* Callback used when the ETable gets a focus-out event. We have to commit any - * pending click-to-add state for if the event editor is being destroyed. - */ -static gint -table_canvas_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer data) +static void +add_btn_clicked_cb (GtkButton *btn, MeetingPage *mpage) { - MeetingPage *mpage; - MeetingPagePrivate *priv; - ETable *etable; - - mpage = MEETING_PAGE (data); - priv = mpage->priv; - - etable = e_table_scrolled_get_table (priv->etable); - - e_table_commit_click_to_add (etable); - return TRUE; + e_meeting_store_add_attendee_with_defaults (mpage->priv->model); } /** @@ -784,16 +689,15 @@ table_canvas_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer dat * be created. **/ MeetingPage * -meeting_page_construct (MeetingPage *mpage, EMeetingModel *emm, +meeting_page_construct (MeetingPage *mpage, EMeetingStore *ems, CalClient *client) { MeetingPagePrivate *priv; - ETable *real_table; - gchar *filename; const char *backend_address; EIterator *it; EAccount *def_account; GList *address_strings = NULL, *l; + GtkWidget *sw, *btn; priv = mpage->priv; @@ -849,25 +753,27 @@ meeting_page_construct (MeetingPage *mpage, EMeetingModel *emm, g_free (l->data); g_list_free (address_strings); - /* The etable displaying attendees and their status */ - g_object_ref((emm)); - priv->model = emm; + g_object_ref((ems)); + priv->model = ems; + + btn = gtk_button_new_with_label ("Add Attendee"); + g_signal_connect(btn, "clicked", G_CALLBACK (add_btn_clicked_cb), mpage); + gtk_widget_show (btn); + gtk_box_pack_start (GTK_BOX (priv->main), btn, FALSE, FALSE, 6); - filename = g_strdup_printf ("%s/config/et-header-meeting-page", evolution_dir); - priv->etable = e_meeting_model_etable_from_model (priv->model, - EVOLUTION_ETSPECDIR "/meeting-page.etspec", - filename); - g_free (filename); + priv->list_view = e_meeting_list_view_new (priv->model); - real_table = e_table_scrolled_get_table (priv->etable); +#if 0 + /* FIXME: handle context menu for treeview */ g_signal_connect((real_table), "right_click", G_CALLBACK (right_click_cb), mpage); +#endif - g_signal_connect((real_table->table_canvas), "focus_out_event", - G_CALLBACK (table_canvas_focus_out_cb), mpage); - - gtk_widget_show (GTK_WIDGET (priv->etable)); - gtk_box_pack_start (GTK_BOX (priv->main), GTK_WIDGET (priv->etable), TRUE, TRUE, 6); + gtk_widget_show (GTK_WIDGET (priv->list_view)); + sw = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (sw); + gtk_container_add (GTK_CONTAINER (sw), GTK_WIDGET (priv->list_view)); + gtk_box_pack_start (GTK_BOX (priv->main), sw, TRUE, TRUE, 6); /* Init the widget signals */ init_widgets (mpage); @@ -884,12 +790,12 @@ meeting_page_construct (MeetingPage *mpage, EMeetingModel *emm, * not be created. **/ MeetingPage * -meeting_page_new (EMeetingModel *emm, CalClient *client) +meeting_page_new (EMeetingStore *ems, CalClient *client) { MeetingPage *mpage; mpage = g_object_new (TYPE_MEETING_PAGE, NULL); - if (!meeting_page_construct (mpage, emm, client)) { + if (!meeting_page_construct (mpage, ems, client)) { g_object_unref((mpage)); return NULL; } |