2001-10-12 JP Rosevear <jpr@ximian.com> * gui/dialogs/alarm-page.c: return fill_component success * gui/dialogs/task-page.c: ditto * gui/dialogs/task-details-page.c: ditto * gui/dialogs/schedule-page.c: ditto * gui/dialogs/recurrence-page.c: ditto * gui/dialogs/event-page.c: ditto * gui/dialogs/meeting-page.c: use e_notice instead of duplicate_error (meeting_page_get_cancel_comp): duh, deleted_attendees is an array now (meeting_page_fill_component): spew gui errors if there is no organizer or no attendees, return success * gui/dialogs/event-editor.c (event_editor_send_comp): always call parent method and don't send the cancellation comp if the method is publish (refresh_meeting_cmd): use the orginal comp to refresh (forward_cmd): prompt the user for the version they want to send (current, original) * gui/dialogs/task-editor.c (forward_cmd): as above (refresh_task_cmd): ditto * gui/dialogs/comp-editor-page.c (comp_editor_page_fill_component): return boolean of whether the component could be filled or not * gui/dialogs/comp-editor-page.h: update proto * gui/dialogs/comp-editor.c (prompt_to_save_changes): take a param on whether to try and send or not (comp_editor_get_current_comp): only fill component if its changed (comp_editor_save_comp): prompt user as well * gui/dialogs/comp-editor.h: change proto * gui/itip-utils.c: replace error_dialog with e_notice (comp_content_type): specify charset svn path=/trunk/; revision=13635
382 lines
9.4 KiB
C
382 lines
9.4 KiB
C
/* Evolution calendar - Base class for calendar component editor pages
|
||
*
|
||
* Copyright (C) 2001 Ximian, Inc.
|
||
*
|
||
* Authors: Federico Mena-Quintero <federico@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 <gtk/gtksignal.h>
|
||
#include "comp-editor-page.h"
|
||
|
||
|
||
|
||
static void comp_editor_page_class_init (CompEditorPageClass *class);
|
||
static void comp_editor_page_init (CompEditorPage *page);
|
||
static void comp_editor_page_destroy (GtkObject *object);
|
||
|
||
static GtkObjectClass *parent_class = NULL;
|
||
|
||
/* Signal IDs */
|
||
|
||
enum {
|
||
CHANGED,
|
||
NEEDS_SEND,
|
||
SUMMARY_CHANGED,
|
||
DATES_CHANGED,
|
||
LAST_SIGNAL
|
||
};
|
||
|
||
static guint comp_editor_page_signals[LAST_SIGNAL];
|
||
|
||
#define CLASS(page) (COMP_EDITOR_PAGE_CLASS (GTK_OBJECT (page)->klass))
|
||
|
||
|
||
|
||
/**
|
||
* comp_editor_page_get_type:
|
||
*
|
||
* Registers the #CompEditorPage class if necessary, and returns the type ID
|
||
* associated to it.
|
||
*
|
||
* Return value: The type ID of the #CompEditorPage class.
|
||
**/
|
||
GtkType
|
||
comp_editor_page_get_type (void)
|
||
{
|
||
static GtkType comp_editor_page_type = 0;
|
||
|
||
if (!comp_editor_page_type) {
|
||
static const GtkTypeInfo comp_editor_page_info = {
|
||
"CompEditorPage",
|
||
sizeof (CompEditorPage),
|
||
sizeof (CompEditorPageClass),
|
||
(GtkClassInitFunc) comp_editor_page_class_init,
|
||
(GtkObjectInitFunc) comp_editor_page_init,
|
||
NULL, /* reserved_1 */
|
||
NULL, /* reserved_2 */
|
||
(GtkClassInitFunc) NULL
|
||
};
|
||
|
||
comp_editor_page_type =
|
||
gtk_type_unique (GTK_TYPE_OBJECT,
|
||
&comp_editor_page_info);
|
||
}
|
||
|
||
return comp_editor_page_type;
|
||
}
|
||
|
||
/* Class initialization function for the abstract editor page */
|
||
static void
|
||
comp_editor_page_class_init (CompEditorPageClass *class)
|
||
{
|
||
GtkObjectClass *object_class;
|
||
|
||
object_class = (GtkObjectClass *) class;
|
||
|
||
parent_class = gtk_type_class (GTK_TYPE_OBJECT);
|
||
|
||
comp_editor_page_signals[CHANGED] =
|
||
gtk_signal_new ("changed",
|
||
GTK_RUN_FIRST,
|
||
object_class->type,
|
||
GTK_SIGNAL_OFFSET (CompEditorPageClass,
|
||
changed),
|
||
gtk_marshal_NONE__NONE,
|
||
GTK_TYPE_NONE, 0);
|
||
|
||
comp_editor_page_signals[NEEDS_SEND] =
|
||
gtk_signal_new ("needs_send",
|
||
GTK_RUN_FIRST,
|
||
object_class->type,
|
||
GTK_SIGNAL_OFFSET (CompEditorPageClass,
|
||
needs_send),
|
||
gtk_marshal_NONE__NONE,
|
||
GTK_TYPE_NONE, 0);
|
||
|
||
comp_editor_page_signals[SUMMARY_CHANGED] =
|
||
gtk_signal_new ("summary_changed",
|
||
GTK_RUN_FIRST,
|
||
object_class->type,
|
||
GTK_SIGNAL_OFFSET (CompEditorPageClass,
|
||
summary_changed),
|
||
gtk_marshal_NONE__POINTER,
|
||
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
|
||
|
||
comp_editor_page_signals[DATES_CHANGED] =
|
||
gtk_signal_new ("dates_changed",
|
||
GTK_RUN_FIRST,
|
||
object_class->type,
|
||
GTK_SIGNAL_OFFSET (CompEditorPageClass,
|
||
dates_changed),
|
||
gtk_marshal_NONE__POINTER,
|
||
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
|
||
|
||
gtk_object_class_add_signals (object_class,
|
||
comp_editor_page_signals,
|
||
LAST_SIGNAL);
|
||
|
||
class->changed = NULL;
|
||
class->summary_changed = NULL;
|
||
class->dates_changed = NULL;
|
||
|
||
class->get_widget = NULL;
|
||
class->focus_main_widget = NULL;
|
||
class->fill_widgets = NULL;
|
||
class->fill_component = NULL;
|
||
class->set_summary = NULL;
|
||
class->set_dates = NULL;
|
||
|
||
object_class->destroy = comp_editor_page_destroy;
|
||
}
|
||
|
||
|
||
|
||
static void
|
||
comp_editor_page_init (CompEditorPage *page)
|
||
{
|
||
page->client = NULL;
|
||
}
|
||
|
||
|
||
static void
|
||
comp_editor_page_destroy (GtkObject *object)
|
||
{
|
||
CompEditorPage *page;
|
||
|
||
g_return_if_fail (object != NULL);
|
||
g_return_if_fail (IS_COMP_EDITOR_PAGE (object));
|
||
|
||
page = COMP_EDITOR_PAGE (object);
|
||
|
||
if (page->client) {
|
||
gtk_object_ref (GTK_OBJECT (page->client));
|
||
page->client = NULL;
|
||
}
|
||
|
||
if (GTK_OBJECT_CLASS (parent_class)->destroy)
|
||
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||
}
|
||
|
||
|
||
/**
|
||
* comp_editor_page_get_widget:
|
||
* @page: An editor page.
|
||
*
|
||
* Queries the main widget of an editor page.
|
||
*
|
||
* Return value: The widget that is the page's upper container. It should
|
||
* normally be inserted in a notebook widget.
|
||
**/
|
||
GtkWidget *
|
||
comp_editor_page_get_widget (CompEditorPage *page)
|
||
{
|
||
g_return_val_if_fail (page != NULL, NULL);
|
||
g_return_val_if_fail (IS_COMP_EDITOR_PAGE (page), NULL);
|
||
|
||
g_assert (CLASS (page)->get_widget != NULL);
|
||
return (* CLASS (page)->get_widget) (page);
|
||
}
|
||
|
||
/**
|
||
* comp_editor_page_focus_main_widget:
|
||
* @page: An editor page.
|
||
*
|
||
* Makes an editor page focus its main widget. This is used by the component
|
||
* editor when it first pops up so that it can focus the main widget in the
|
||
* first page.
|
||
**/
|
||
void
|
||
comp_editor_page_focus_main_widget (CompEditorPage *page)
|
||
{
|
||
g_return_if_fail (page != NULL);
|
||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||
|
||
g_assert (CLASS (page)->focus_main_widget != NULL);
|
||
(* CLASS (page)->focus_main_widget) (page);
|
||
}
|
||
|
||
/**
|
||
* comp_editor_page_fill_widgets:
|
||
* @page: An editor page.
|
||
* @comp: A calendar component.
|
||
*
|
||
* Fills the widgets of an editor page with the data from a calendar component.
|
||
**/
|
||
void
|
||
comp_editor_page_fill_widgets (CompEditorPage *page, CalComponent *comp)
|
||
{
|
||
g_return_if_fail (page != NULL);
|
||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||
g_return_if_fail (comp != NULL);
|
||
|
||
g_assert (CLASS (page)->fill_widgets != NULL);
|
||
(* CLASS (page)->fill_widgets) (page, comp);
|
||
}
|
||
|
||
/**
|
||
* comp_editor_page_fill_component:
|
||
* @page: An editor page.
|
||
* @comp: A calendar component.
|
||
*
|
||
* Takes the data from the widgets of an editor page and sets it on a calendar
|
||
* component, replacing the contents of the properties that the editor page
|
||
* knows how to manipulate.
|
||
*
|
||
* Returns: TRUE if the component could be filled, FALSE otherwise
|
||
**/
|
||
gboolean
|
||
comp_editor_page_fill_component (CompEditorPage *page, CalComponent *comp)
|
||
{
|
||
g_return_val_if_fail (page != NULL, FALSE);
|
||
g_return_val_if_fail (IS_COMP_EDITOR_PAGE (page), FALSE);
|
||
g_return_val_if_fail (comp != NULL, FALSE);
|
||
|
||
if (CLASS (page)->fill_component != NULL)
|
||
return (* CLASS (page)->fill_component) (page, comp);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
/**
|
||
* comp_editor_page_set_cal_client:
|
||
* @page: An editor page
|
||
* @client: A #CalClient object
|
||
*
|
||
* Sets the #CalClient for the dialog page to use.
|
||
**/
|
||
void
|
||
comp_editor_page_set_cal_client (CompEditorPage *page, CalClient *client)
|
||
{
|
||
g_return_if_fail (page != NULL);
|
||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||
|
||
if (page->client)
|
||
gtk_object_unref (GTK_OBJECT (client));
|
||
|
||
page->client = client;
|
||
if (page->client)
|
||
gtk_object_ref (GTK_OBJECT (client));
|
||
}
|
||
|
||
/**
|
||
* comp_editor_page_set_summary:
|
||
* @page: An editor page
|
||
* @summary: The text of the new summary value
|
||
*
|
||
* Sets the summary value for this group of widgets
|
||
**/
|
||
void
|
||
comp_editor_page_set_summary (CompEditorPage *page, const char *summary)
|
||
{
|
||
g_return_if_fail (page != NULL);
|
||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||
|
||
if (CLASS (page)->set_summary != NULL)
|
||
(* CLASS (page)->set_summary) (page, summary);
|
||
}
|
||
|
||
/**
|
||
* comp_editor_page_set_dates:
|
||
* @page: An editor page
|
||
* @dates: A collection of various dates in time_t format
|
||
*
|
||
* Sets the date values for this group of widgets
|
||
**/
|
||
void
|
||
comp_editor_page_set_dates (CompEditorPage *page, CompEditorPageDates *dates)
|
||
{
|
||
g_return_if_fail (page != NULL);
|
||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||
|
||
if (CLASS (page)->set_dates != NULL)
|
||
(* CLASS (page)->set_dates) (page, dates);
|
||
}
|
||
|
||
/**
|
||
* comp_editor_page_notify_changed:
|
||
* @page: An editor page.
|
||
*
|
||
* Makes an editor page emit the "changed" signal. This is meant to be
|
||
* used only by page implementations.
|
||
**/
|
||
void
|
||
comp_editor_page_notify_changed (CompEditorPage *page)
|
||
{
|
||
g_return_if_fail (page != NULL);
|
||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||
|
||
gtk_signal_emit (GTK_OBJECT (page), comp_editor_page_signals[CHANGED]);
|
||
}
|
||
|
||
/**
|
||
* comp_editor_page_notify_needs_send:
|
||
* @page:
|
||
*
|
||
*
|
||
**/
|
||
void
|
||
comp_editor_page_notify_needs_send (CompEditorPage *page)
|
||
{
|
||
g_return_if_fail (page != NULL);
|
||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||
|
||
gtk_signal_emit (GTK_OBJECT (page), comp_editor_page_signals[NEEDS_SEND]);
|
||
}
|
||
|
||
/**
|
||
* comp_editor_page_notify_summary_changed:
|
||
* @page: An editor page.
|
||
*
|
||
* Makes an editor page emit the "summary_changed" signal. This is meant to be
|
||
* used only by page implementations.
|
||
**/
|
||
void
|
||
comp_editor_page_notify_summary_changed (CompEditorPage *page,
|
||
const char *summary)
|
||
{
|
||
g_return_if_fail (page != NULL);
|
||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||
|
||
|
||
gtk_signal_emit (GTK_OBJECT (page),
|
||
comp_editor_page_signals[SUMMARY_CHANGED],
|
||
summary);
|
||
}
|
||
|
||
/**
|
||
* comp_editor_page_notify_dates_changed:
|
||
* @page: An editor page.
|
||
*
|
||
* Makes an editor page emit the "dates_changed" signal. This is meant to be
|
||
* used only by page implementations.
|
||
**/
|
||
void
|
||
comp_editor_page_notify_dates_changed (CompEditorPage *page,
|
||
CompEditorPageDates *dates)
|
||
{
|
||
g_return_if_fail (page != NULL);
|
||
g_return_if_fail (IS_COMP_EDITOR_PAGE (page));
|
||
|
||
gtk_signal_emit (GTK_OBJECT (page),
|
||
comp_editor_page_signals[DATES_CHANGED],
|
||
dates);
|
||
}
|