diff options
Diffstat (limited to 'calendar/gui/dialogs/meeting-page.c')
-rw-r--r-- | calendar/gui/dialogs/meeting-page.c | 918 |
1 files changed, 0 insertions, 918 deletions
diff --git a/calendar/gui/dialogs/meeting-page.c b/calendar/gui/dialogs/meeting-page.c deleted file mode 100644 index 7932fbd177..0000000000 --- a/calendar/gui/dialogs/meeting-page.c +++ /dev/null @@ -1,918 +0,0 @@ -/* Evolution calendar - Main page of the task editor dialog - * - * Copyright (C) 2001 Ximian, Inc. - * - * Authors: Federico Mena-Quintero <federico@ximian.com> - * Miguel de Icaza <miguel@ximian.com> - * Seth Alves <alves@hungry.com> - * JP Rosevear <jpr@ximian.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <liboaf/liboaf.h> -#include <bonobo/bonobo-control.h> -#include <bonobo/bonobo-widget.h> -#include <gtk/gtksignal.h> -#include <gtk/gtktogglebutton.h> -#include <gtk/gtkvbox.h> -#include <glade/glade.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/widgets/e-unicode.h> -#include <widgets/misc/e-dateedit.h> -#include <widgets/meeting-time-sel/e-meeting-time-sel.h> -#include <e-util/e-dialog-widgets.h> -#include "../Evolution-Addressbook-SelectNames.h" -#include "comp-editor-util.h" -#include "meeting-page.h" - - -#define SELECT_NAMES_OAFID "OAFIID:GNOME_Evolution_Addressbook_SelectNames" - -#define MEETING_PAGE_TABLE_SPEC \ - "<ETableSpecification click-to-add=\"true\" " \ - " _click-to-add-message=\"Click here to add an attendee\" " \ - " draw-grid=\"true\">" \ - " <ETableColumn model_col= \"0\" _title=\"Attendee\" " \ - " expansion=\"1.0\" minimum_width=\"10\" resizable=\"true\" " \ - " cell=\"string\" compare=\"string\"/>" \ - " <ETableColumn model_col= \"1\" _title=\"Role\" " \ - " expansion=\"1.0\" minimum_width=\"10\" resizable=\"true\" " \ - " cell=\"roleedit\" compare=\"string\"/>" \ - " <ETableColumn model_col= \"2\" _title=\"RSVP\" " \ - " expansion=\"2.0\" minimum_width=\"10\" resizable=\"true\" " \ - " cell=\"rsvpedit\" compare=\"string\"/>" \ - " <ETableColumn model_col= \"3\" _title=\"Status\" " \ - " expansion=\"2.0\" minimum_width=\"10\" resizable=\"true\" " \ - " cell=\"statusedit\" compare=\"string\"/>" \ - " <ETableState>" \ - " <column source=\"0\"/>" \ - " <column source=\"1\"/>" \ - " <column source=\"2\"/>" \ - " <column source=\"3\"/>" \ - " <grouping></grouping>" \ - " </ETableState>" \ - "</ETableSpecification>" - -enum columns { - MEETING_ATTENDEE_COL, - MEETING_ROLE_COL, - MEETING_RSVP_COL, - MEETING_STATUS_COL, - MEETING_COLUMN_COUNT -}; - -struct attendee { - char *address; - char *member; - - CalComponentCUType cutype; - CalComponentRole role; - CalComponentPartStat status; - gboolean rsvp; - - char *delto; - char *delfrom; - char *sentby; - char *cn; - char *language; -}; - -/* Private part of the MeetingPage structure */ -struct _MeetingPagePrivate { - /* List of attendees */ - GSList *attendees; - - /* Glade XML data */ - GladeXML *xml; - - /* Widgets from the Glade file */ - GtkWidget *main; - GtkWidget *organizer; - GtkWidget *invite; - - /* E Table stuff */ - ETableModel *model; - GtkWidget *etable; - - /* For handling the invite button */ - GNOME_Evolution_Addressbook_SelectNames corba_select_names; - - gboolean updating; -}; - - - -static void meeting_page_class_init (MeetingPageClass *class); -static void meeting_page_init (MeetingPage *mpage); -static void meeting_page_destroy (GtkObject *object); - -static GtkWidget *meeting_page_get_widget (CompEditorPage *page); -static void meeting_page_fill_widgets (CompEditorPage *page, CalComponent *comp); -static void meeting_page_fill_component (CompEditorPage *page, CalComponent *comp); - -static int row_count (ETableModel *etm, void *data); - -static CompEditorPageClass *parent_class = NULL; - - - -/** - * meeting_page_get_type: - * - * Registers the #MeetingPage class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the #MeetingPage class. - **/ -GtkType -meeting_page_get_type (void) -{ - static GtkType meeting_page_type; - - if (!meeting_page_type) { - static const GtkTypeInfo meeting_page_info = { - "MeetingPage", - sizeof (MeetingPage), - sizeof (MeetingPageClass), - (GtkClassInitFunc) meeting_page_class_init, - (GtkObjectInitFunc) meeting_page_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - meeting_page_type = - gtk_type_unique (TYPE_COMP_EDITOR_PAGE, - &meeting_page_info); - } - - return meeting_page_type; -} - -/* Class initialization function for the task page */ -static void -meeting_page_class_init (MeetingPageClass *class) -{ - CompEditorPageClass *editor_page_class; - GtkObjectClass *object_class; - - editor_page_class = (CompEditorPageClass *) class; - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (TYPE_COMP_EDITOR_PAGE); - - editor_page_class->get_widget = meeting_page_get_widget; - editor_page_class->fill_widgets = meeting_page_fill_widgets; - editor_page_class->fill_component = meeting_page_fill_component; - editor_page_class->set_summary = NULL; - editor_page_class->set_dates = NULL; - - object_class->destroy = meeting_page_destroy; -} - -/* Object initialization function for the task page */ -static void -meeting_page_init (MeetingPage *mpage) -{ - MeetingPagePrivate *priv; - - priv = g_new0 (MeetingPagePrivate, 1); - mpage->priv = priv; - - priv->xml = NULL; - - priv->main = NULL; - priv->invite = NULL; - - priv->model = NULL; - priv->etable = NULL; - - priv->updating = FALSE; -} - -/* Destroy handler for the task page */ -static void -meeting_page_destroy (GtkObject *object) -{ - MeetingPage *mpage; - MeetingPagePrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_MEETING_PAGE (object)); - - mpage = MEETING_PAGE (object); - priv = mpage->priv; - - if (priv->xml) { - gtk_object_unref (GTK_OBJECT (priv->xml)); - priv->xml = NULL; - } - - g_free (priv); - mpage->priv = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - -/* get_widget handler for the task page */ -static GtkWidget * -meeting_page_get_widget (CompEditorPage *page) -{ - MeetingPage *mpage; - MeetingPagePrivate *priv; - - mpage = MEETING_PAGE (page); - priv = mpage->priv; - - return priv->main; -} - -/* Fills the widgets with default values */ -static void -clear_widgets (MeetingPage *mpage) -{ - MeetingPagePrivate *priv; - - priv = mpage->priv; -} - -/* fill_widgets handler for the task page */ -static void -meeting_page_fill_widgets (CompEditorPage *page, CalComponent *comp) -{ - MeetingPage *mpage; - MeetingPagePrivate *priv; - CalComponentOrganizer organizer; - GSList *attendees, *l; - - mpage = MEETING_PAGE (page); - priv = mpage->priv; - - priv->updating = TRUE; - - /* Clean the screen */ - clear_widgets (mpage); - - cal_component_get_organizer (comp, &organizer); - e_dialog_editable_set (priv->organizer, organizer.value); - - cal_component_get_attendee_list (comp, &attendees); - for (l = attendees; l != NULL; l = l->next) { - CalComponentAttendee *att = l->data; - struct attendee *attendee = g_new0 (struct attendee, 1); - - attendee->address = g_strdup (att->value); - attendee->member = g_strdup (att->member); - attendee->cutype= att->cutype; - attendee->role = att->role; - attendee->status = att->status; - attendee->rsvp = att->rsvp; - attendee->delto = g_strdup (att->delto); - attendee->delfrom = g_strdup (att->delfrom); - attendee->sentby = g_strdup (att->sentby); - attendee->cn = g_strdup (att->cn); - attendee->language = g_strdup (att->language); - - priv->attendees = g_slist_prepend (priv->attendees, attendee); - - } - priv->attendees = g_slist_reverse (priv->attendees); - cal_component_free_attendee_list (attendees); - - /* Table */ - e_table_model_rows_inserted (priv->model, 0, row_count (priv->model, mpage)); - - /* So the comp editor knows we need to send if anything changes */ - if (priv->attendees != NULL) - comp_editor_page_notify_needs_send (COMP_EDITOR_PAGE (mpage)); - - priv->updating = FALSE; -} - -/* fill_component handler for the task page */ -static void -meeting_page_fill_component (CompEditorPage *page, CalComponent *comp) -{ - MeetingPage *mpage; - MeetingPagePrivate *priv; - CalComponentOrganizer organizer = {NULL, NULL, NULL, NULL}; - GSList *attendees = NULL, *l; - gchar *str; - - mpage = MEETING_PAGE (page); - priv = mpage->priv; - - str = e_dialog_editable_get (priv->organizer); - if (str == NULL || strlen (str) == 0) { - if (str != NULL) - g_free (str); - return; - } - - organizer.value = str; - cal_component_set_organizer (comp, &organizer); - g_free (str); - - for (l = priv->attendees; l != NULL; l = l->next) { - struct attendee *attendee = l->data; - CalComponentAttendee *att = g_new0 (CalComponentAttendee, 1); - - att->value = attendee->address; - att->member = attendee->member; - att->cutype= attendee->cutype; - att->role = attendee->role; - att->status = attendee->status; - att->rsvp = attendee->rsvp; - att->delto = attendee->delto; - att->delfrom = attendee->delfrom; - att->sentby = attendee->sentby; - att->cn = attendee->cn; - att->language = attendee->language; - - attendees = g_slist_prepend (attendees, att); - - } - attendees = g_slist_reverse (attendees); - cal_component_set_attendee_list (comp, attendees); - g_slist_free (attendees); -} - - - -/* Gets the widgets from the XML file and returns if they are all available. */ -static gboolean -get_widgets (MeetingPage *mpage) -{ - MeetingPagePrivate *priv; - - priv = mpage->priv; - -#define GW(name) glade_xml_get_widget (priv->xml, name) - - priv->main = GW ("meeting-page"); - g_assert (priv->main); - gtk_widget_ref (priv->main); - gtk_widget_unparent (priv->main); - - priv->organizer = GW ("organizer"); - priv->invite = GW ("invite"); - -#undef GW - - return (priv->invite - && priv->organizer); -} - -static void -invite_entry_changed (BonoboListener *listener, - char *event_name, - CORBA_any *arg, - CORBA_Environment *ev, - gpointer user_data) -{ -} - -static void -add_section (GNOME_Evolution_Addressbook_SelectNames corba_select_names, const char *name) -{ - Bonobo_Control corba_control; - CORBA_Environment ev; - GtkWidget *control_widget; - BonoboControlFrame *cf; - Bonobo_PropertyBag pb = CORBA_OBJECT_NIL; - CORBA_exception_init (&ev); - - GNOME_Evolution_Addressbook_SelectNames_addSection (corba_select_names, - name, name, &ev); - - corba_control = - GNOME_Evolution_Addressbook_SelectNames_getEntryBySection ( - corba_select_names, name, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - CORBA_exception_free (&ev); - return; - } - - CORBA_exception_free (&ev); - - control_widget = bonobo_widget_new_control_from_objref ( - corba_control, CORBA_OBJECT_NIL); - - cf = bonobo_widget_get_control_frame (BONOBO_WIDGET (control_widget)); - pb = bonobo_control_frame_get_control_property_bag (cf, NULL); - - bonobo_event_source_client_add_listener ( - pb, invite_entry_changed, - "Bonobo/Property:change:entry_changed", - NULL, NULL); -} - -static gboolean -get_select_name_dialog (MeetingPage *mpage) -{ - MeetingPagePrivate *priv; - CORBA_Environment ev; - - priv = mpage->priv; - - if (priv->corba_select_names != CORBA_OBJECT_NIL) - return TRUE; - - CORBA_exception_init (&ev); - - priv->corba_select_names = oaf_activate_from_id (SELECT_NAMES_OAFID, 0, NULL, &ev); - - add_section (priv->corba_select_names, "Required Participants"); - add_section (priv->corba_select_names, "Optional Participants"); - add_section (priv->corba_select_names, "Non-Participants"); - - /* OAF seems to be broken -- it can return a CORBA_OBJECT_NIL without - raising an exception in `ev'. */ - if (ev._major != CORBA_NO_EXCEPTION || priv->corba_select_names == CORBA_OBJECT_NIL) { - g_warning ("Cannot activate -- %s", SELECT_NAMES_OAFID); - CORBA_exception_free (&ev); - return FALSE; - } - - CORBA_exception_free (&ev); - - return TRUE; -} - -/* This is called when any field is changed; it notifies upstream. */ -static void -field_changed_cb (GtkWidget *widget, gpointer data) -{ - MeetingPage *mpage; - MeetingPagePrivate *priv; - - mpage = MEETING_PAGE (data); - priv = mpage->priv; - - if (!priv->updating) - comp_editor_page_notify_changed (COMP_EDITOR_PAGE (mpage)); -} - -/* Function called to invite more people */ -static void -invite_cb (GtkWidget *widget, gpointer data) -{ - MeetingPage *mpage; - MeetingPagePrivate *priv; - CORBA_Environment ev; - - mpage = MEETING_PAGE (data); - priv = mpage->priv; - - if (!get_select_name_dialog (mpage)) - return; - - CORBA_exception_init (&ev); - - GNOME_Evolution_Addressbook_SelectNames_activateDialog ( - priv->corba_select_names, "Required Participants", &ev); - - CORBA_exception_free (&ev); -} - -/* Hooks the widget signals */ -static void -init_widgets (MeetingPage *mpage) -{ - MeetingPagePrivate *priv; - - priv = mpage->priv; - - /* Organizer */ - gtk_signal_connect (GTK_OBJECT (priv->organizer), "changed", - GTK_SIGNAL_FUNC (field_changed_cb), mpage); - - /* Invite button */ - gtk_signal_connect (GTK_OBJECT (priv->invite), "clicked", - GTK_SIGNAL_FUNC (invite_cb), mpage); -} - -static CalComponentRole -text_to_role (const char *role) -{ - if (!g_strcasecmp (role, "Chair")) - return CAL_COMPONENT_ROLE_CHAIR; - else if (!g_strcasecmp (role, "Required Participant")) - return CAL_COMPONENT_ROLE_REQUIRED; - else if (!g_strcasecmp (role, "Optional Participant")) - return CAL_COMPONENT_ROLE_OPTIONAL; - else if (!g_strcasecmp (role, "Non-Participant")) - return CAL_COMPONENT_ROLE_NON; - else - return CAL_COMPONENT_ROLE_UNKNOWN; -} - -static char * -role_to_text (CalComponentRole role) -{ - switch (role) { - case CAL_COMPONENT_ROLE_CHAIR: - return "Chair"; - case CAL_COMPONENT_ROLE_REQUIRED: - return "Required Participant"; - case CAL_COMPONENT_ROLE_OPTIONAL: - return "Optional Participant"; - case CAL_COMPONENT_ROLE_NON: - return "Non-Participant"; - default: - return "Unknown"; - } - - return NULL; -} - -static gboolean -text_to_boolean (const char *role) -{ - if (!g_strcasecmp (role, "Yes")) - return TRUE; - else - return FALSE; -} - -static char * -boolean_to_text (gboolean b) -{ - if (b) - return "Yes"; - else - return "No"; -} - -static CalComponentPartStat -text_to_partstat (const char *partstat) -{ - if (!g_strcasecmp (partstat, "Needs Action")) - return CAL_COMPONENT_PARTSTAT_NEEDSACTION; - else if (!g_strcasecmp (partstat, "Accepted")) - return CAL_COMPONENT_PARTSTAT_ACCEPTED; - else if (!g_strcasecmp (partstat, "Declined")) - return CAL_COMPONENT_PARTSTAT_DECLINED; - else if (!g_strcasecmp (partstat, "Tentative")) - return CAL_COMPONENT_PARTSTAT_TENTATIVE; - else if (!g_strcasecmp (partstat, "Delegated")) - return CAL_COMPONENT_PARTSTAT_DELEGATED; - else if (!g_strcasecmp (partstat, "Completed")) - return CAL_COMPONENT_PARTSTAT_COMPLETED; - else if (!g_strcasecmp (partstat, "In Process")) - return CAL_COMPONENT_PARTSTAT_INPROCESS; - else - return CAL_COMPONENT_PARTSTAT_UNKNOWN; -} - -static char * -partstat_to_text (CalComponentPartStat partstat) -{ - switch (partstat) { - case CAL_COMPONENT_PARTSTAT_NEEDSACTION: - return "Needs Action"; - case CAL_COMPONENT_PARTSTAT_ACCEPTED: - return "Accepted"; - case CAL_COMPONENT_PARTSTAT_DECLINED: - return "Declined"; - case CAL_COMPONENT_PARTSTAT_TENTATIVE: - return "Tentative"; - case CAL_COMPONENT_PARTSTAT_DELEGATED: - return "Delegated"; - case CAL_COMPONENT_PARTSTAT_COMPLETED: - return "Completed"; - case CAL_COMPONENT_PARTSTAT_INPROCESS: - return "In Process"; - case CAL_COMPONENT_PARTSTAT_UNKNOWN: - default: - return "Unknown"; - } - - return NULL; -} - -static int -column_count (ETableModel *etm, void *data) -{ - return MEETING_COLUMN_COUNT; -} - -static int -row_count (ETableModel *etm, void *data) -{ - MeetingPage *mpage; - MeetingPagePrivate *priv; - - mpage = MEETING_PAGE (data); - priv = mpage->priv; - - return g_slist_length (priv->attendees); -} - -static void -append_row (ETableModel *etm, ETableModel *model, int row, void *data) -{ - MeetingPage *mpage; - MeetingPagePrivate *priv; - struct attendee *attendee; - gint row_cnt; - - mpage = MEETING_PAGE (data); - priv = mpage->priv; - - attendee = g_new0 (struct attendee, 1); - - attendee->address = g_strdup (e_table_model_value_at (model, MEETING_ATTENDEE_COL, row)); - attendee->role = text_to_role (e_table_model_value_at (model, MEETING_ROLE_COL, row)); - attendee->rsvp = text_to_boolean (e_table_model_value_at (model, MEETING_RSVP_COL, row)); - attendee->status = text_to_partstat (e_table_model_value_at (model, MEETING_STATUS_COL, row)); - - priv->attendees = g_slist_append (priv->attendees, attendee); - - row_cnt = row_count (etm, data) - 1; - e_table_model_row_inserted (E_TABLE_MODEL (etm), row_cnt); - - comp_editor_page_notify_needs_send (COMP_EDITOR_PAGE (mpage)); - comp_editor_page_notify_changed (COMP_EDITOR_PAGE (mpage)); -} - -static void * -value_at (ETableModel *etm, int col, int row, void *data) -{ - MeetingPage *mpage; - MeetingPagePrivate *priv; - struct attendee *attendee; - - mpage = MEETING_PAGE (data); - priv = mpage->priv; - - attendee = g_slist_nth_data (priv->attendees, row); - - switch (col) { - case MEETING_ATTENDEE_COL: - return attendee->address; - case MEETING_ROLE_COL: - return role_to_text (attendee->role); - case MEETING_RSVP_COL: - return boolean_to_text (attendee->rsvp); - case MEETING_STATUS_COL: - return partstat_to_text (attendee->status); - } - - return NULL; -} - -static void -set_value_at (ETableModel *etm, int col, int row, const void *val, void *data) -{ - MeetingPage *mpage; - MeetingPagePrivate *priv; - struct attendee *attendee; - - mpage = MEETING_PAGE (data); - priv = mpage->priv; - - attendee = g_slist_nth_data (priv->attendees, row); - - switch (col) { - case MEETING_ATTENDEE_COL: - attendee->address = g_strdup (val); - break; - case MEETING_ROLE_COL: - attendee->role = text_to_role (val); - break; - case MEETING_RSVP_COL: - attendee->rsvp = text_to_boolean (val); - break; - case MEETING_STATUS_COL: - attendee->status = text_to_partstat (val); - break; - } - - if (!priv->updating) { - comp_editor_page_notify_needs_send (COMP_EDITOR_PAGE (mpage)); - comp_editor_page_notify_changed (COMP_EDITOR_PAGE (mpage)); - } -} - -static gboolean -is_cell_editable (ETableModel *etm, int col, int row, void *data) -{ - return TRUE; -} - -static void * -duplicate_value (ETableModel *etm, int col, const void *val, void *data) -{ - return g_strdup (val); -} - -static void -free_value (ETableModel *etm, int col, void *val, void *data) -{ - g_free (val); -} - -static void * -init_value (ETableModel *etm, int col, void *data) -{ - switch (col) { - case MEETING_ATTENDEE_COL: - return g_strdup (""); - case MEETING_ROLE_COL: - return g_strdup ("Required Participant"); - case MEETING_RSVP_COL: - return g_strdup ("Yes"); - case MEETING_STATUS_COL: - return g_strdup ("Needs Action"); - } - - return g_strdup (""); -} - -static gboolean -value_is_empty (ETableModel *etm, int col, const void *val, void *data) -{ - if (col == 0) { - if (val && !g_strcasecmp (val, "")) - return TRUE; - else - return FALSE; - } - - return TRUE; -} - -static char * -value_to_string (ETableModel *etm, int col, const void *val, void *data) -{ - return g_strdup (val); -} - -static void -build_etable (MeetingPage *mpage) -{ - MeetingPagePrivate *priv; - ETableExtras *extras; - GList *strings; - ECell *popup_cell, *cell; - - priv = mpage->priv; - - extras = e_table_extras_new (); - - /* For role */ - cell = e_cell_text_new (NULL, GTK_JUSTIFY_LEFT); - popup_cell = e_cell_combo_new (); - e_cell_popup_set_child (E_CELL_POPUP (popup_cell), cell); - gtk_object_unref (GTK_OBJECT (cell)); - - strings = NULL; - strings = g_list_append (strings, "Chair"); - strings = g_list_append (strings, "Required Participant"); - strings = g_list_append (strings, "Optional Participant"); - strings = g_list_append (strings, "Non-Participant"); - strings = g_list_append (strings, "Unknown"); - - e_cell_combo_set_popdown_strings (E_CELL_COMBO (popup_cell), strings); - e_table_extras_add_cell (extras, "roleedit", popup_cell); - - /* For rsvp */ - cell = e_cell_text_new (NULL, GTK_JUSTIFY_LEFT); - popup_cell = e_cell_combo_new (); - e_cell_popup_set_child (E_CELL_POPUP (popup_cell), cell); - gtk_object_unref (GTK_OBJECT (cell)); - - strings = NULL; - strings = g_list_append (strings, "Yes"); - strings = g_list_append (strings, "No"); - - e_cell_combo_set_popdown_strings (E_CELL_COMBO (popup_cell), strings); - e_table_extras_add_cell (extras, "rsvpedit", popup_cell); - - /* For status */ - cell = e_cell_text_new (NULL, GTK_JUSTIFY_LEFT); - popup_cell = e_cell_combo_new (); - e_cell_popup_set_child (E_CELL_POPUP (popup_cell), cell); - gtk_object_unref (GTK_OBJECT (cell)); - - strings = NULL; - strings = g_list_append (strings, "Needs Action"); - strings = g_list_append (strings, "Accepted"); - strings = g_list_append (strings, "Declined"); - strings = g_list_append (strings, "Tentative"); - strings = g_list_append (strings, "Delegated"); - - e_cell_combo_set_popdown_strings (E_CELL_COMBO (popup_cell), strings); - e_table_extras_add_cell (extras, "statusedit", popup_cell); - - - /* The table itself */ - priv->model = e_table_simple_new (column_count, - row_count, - value_at, - set_value_at, - is_cell_editable, - duplicate_value, - free_value, - init_value, - value_is_empty, - value_to_string, - mpage); - gtk_object_set (GTK_OBJECT (priv->model), - "append_row", append_row, - NULL); - - priv->etable = e_table_scrolled_new (priv->model, extras, - MEETING_PAGE_TABLE_SPEC, NULL); - gtk_object_unref (GTK_OBJECT (extras)); -} - - - -/** - * meeting_page_construct: - * @mpage: An task details page. - * - * Constructs an task page by loading its Glade data. - * - * Return value: The same object as @mpage, or NULL if the widgets could not - * be created. - **/ -MeetingPage * -meeting_page_construct (MeetingPage *mpage) -{ - MeetingPagePrivate *priv; - - priv = mpage->priv; - - priv->xml = glade_xml_new (EVOLUTION_GLADEDIR - "/meeting-page.glade", NULL); - if (!priv->xml) { - g_message ("meeting_page_construct(): " - "Could not load the Glade XML file!"); - return NULL; - } - - if (!get_widgets (mpage)) { - g_message ("meeting_page_construct(): " - "Could not find all widgets in the XML file!"); - return NULL; - } - - /* The etable displaying attendees and their status */ - build_etable (mpage); - gtk_widget_show (priv->etable); - gtk_box_pack_start (GTK_BOX (priv->main), priv->etable, TRUE, TRUE, 2); - - /* Init the widget signals */ - init_widgets (mpage); - - return mpage; -} - -/** - * meeting_page_new: - * - * Creates a new task details page. - * - * Return value: A newly-created task details page, or NULL if the page could - * not be created. - **/ -MeetingPage * -meeting_page_new (void) -{ - MeetingPage *mpage; - - mpage = gtk_type_new (TYPE_MEETING_PAGE); - if (!meeting_page_construct (mpage)) { - gtk_object_unref (GTK_OBJECT (mpage)); - return NULL; - } - - return mpage; -} |