diff options
Diffstat (limited to 'e-util/e-config.h')
-rw-r--r-- | e-util/e-config.h | 392 |
1 files changed, 0 insertions, 392 deletions
diff --git a/e-util/e-config.h b/e-util/e-config.h deleted file mode 100644 index 96a6a7025a..0000000000 --- a/e-util/e-config.h +++ /dev/null @@ -1,392 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- - * - * Authors: Michel Zucchi <notzed@ximian.com> - * - * Copyright 2003 Ximian, Inc. (www.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 Street #330, Boston, MA 02111-1307, USA. - * - */ - -#ifndef __E_CONFIG_H__ -#define __E_CONFIG_H__ - -#include <glib-object.h> -#include "e-util/e-msgport.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -struct _GtkWindow; -struct _GtkWidget; - -/* This is a config window management/merging class. */ - -typedef struct _EConfig EConfig; -typedef struct _EConfigClass EConfigClass; - -typedef struct _EConfigItem EConfigItem; -typedef struct _EConfigFactory EConfigFactory; -typedef struct _EConfigTarget EConfigTarget; - -typedef void (*EConfigFactoryFunc)(EConfig *ec, void *data); - -typedef gboolean (*EConfigCheckFunc)(EConfig *ec, const char *pageid, void *data); - -typedef void (*EConfigItemsFunc)(EConfig *ec, GSList *items, void *data); - -typedef struct _GtkWidget * (*EConfigItemFactoryFunc)(EConfig *ec, EConfigItem *, struct _GtkWidget *parent, struct _GtkWidget *old, void *data); - -/* ok so this is all a bit bogussy - we need to map to glade stuff instead */ - -/* Add types? - if no factory, setup appropriate container ? - if factory, then assume that returns the right sort of object? - what about pages ? -*/ - -/** - * enum _e_config_target_changed_t - Target changed mode. - * - * @E_CONFIG_TARGET_CHANGED_STATE: A state of the target has changed. - * @E_CONFIG_TARGET_CHANGED_REBUILD: A state of the target has - * changed, and the UI must be reconfigured as a result. - * - * How the target has changed. If @E_CONFIG_TARGET_CHANGED_REBUILD then a - * widget reconfigure is necessary, otherwise it is used to check if - * the widget is complete yet. - **/ -typedef -enum _e_config_target_change_t { - E_CONFIG_TARGET_CHANGED_STATE, - E_CONFIG_TARGET_CHANGED_REBUILD, -} e_config_target_change_t; - -/** - * enum _e_config_t - configuration item type. - * - * @E_CONFIG_BOOK: A notebook item. Only one of this or - * @E_CONFIG_DRUID may be included in the item list for the entire - * configuration description. - * @E_CONFIG_DRUID: A druid item. Only one of this or @E_CONFIG_BOOK - * may be included in the item list for the entire configutation - * description. - * @E_CONFIG_PAGE: A configuration page. The item @label will be - * either the notebook tab label or the druid page title if no factory - * is supplied. - * @E_CONFIG_PAGE_START: A druid start page. Only one of these may be - * supplied for a druid and it should be the first page in the druid. - * @E_CONFIG_PAGE_FINISH: A druid finish page. Only one of these may - * be supplied for a druid and it should be the last page of the druid. - * @E_CONFIG_SECTION: A section in the configuration page. A page for - * this section must have already been defined. The item @label if - * supplied will be setup as a borderless hig-compliant frame title. - * The content of the section will be a GtkVBox. If a factory is used - * then it is up to the factory method to create the section and add - * it to the parent page, and return a GtkVBox for following sections. - * @E_CONFIG_SECTION_TABLE: A table section. The same as an - * @E_CONFIG_SECTION but the content object is a GtkTable instead. - * @E_CONFIG_ITEM: A configuration item. It must have a parent - * section defined in the configuration system. - * @E_CONFIG_ITEM_TABLE: A configuration item with a parent - * @E_CONFIG_SECTION_TABLE. - * - * A configuration item type for each configuration item added to the - * EConfig object. These are merged from all contributors to the - * configuration window, and then processed to form the combined - * display. - **/ -enum _e_config_t { - /* use one and only one of these for any given config-window id */ - E_CONFIG_BOOK, - E_CONFIG_DRUID, - - E_CONFIG_PAGE, - E_CONFIG_PAGE_START, /* only allowed in druid types */ - E_CONFIG_PAGE_FINISH, /* only allowed in druid types */ - E_CONFIG_SECTION, - E_CONFIG_SECTION_TABLE, - E_CONFIG_ITEM, - E_CONFIG_ITEM_TABLE, /* only allowed in table sections */ -}; - -/** - * struct _EConfigItem - A configuration item. - * - * @type: The configuration item type. - * @path: An absolute path positioning this item in the configuration - * window. This will be used as a sort key for an ASCII sort to - * position the item in the layout tree. - * @label: A label or section title string which is used if no factory - * is supplied to title the page or section. - * @factory: If supplied, this will be invoked instead to create the - * appropriate item. - * @user_data: User data for the factory. - * - * The basic descriptor of a configuration item. This may be - * subclassed to store extra context information for each item. - **/ -struct _EConfigItem { - enum _e_config_t type; - char *path; /* absolute path, must sort ascii-lexographically into the right spot */ - char *label; - EConfigItemFactoryFunc factory; - void *user_data; -}; - -/** - * struct _EConfigTarget - configuration context. - * - * @config: The parent object. - * @widget: A target-specific parent widget. - * @type: The type of target, defined by implementing classes. - * - * The base target object is used as the parent and placeholder for - * configuration context for a given configuration window. It is - * subclassed by implementing classes to provide domain-specific - * context. - **/ -struct _EConfigTarget { - struct _EConfig *config; - struct _GtkWidget *widget; /* used if you need a parent toplevel, if available */ - - guint32 type; - - /* implementation fields follow, depends on window type */ -}; - -/** - * struct _EConfig - A configuration management object. - * - * @object: Superclass. - * @priv: Private data. - * @type: Either @E_CONFIG_BOOK or @E_CONFIG_DRIUD, describing the - * root window type. - * @id: The globally unique identifider for this configuration window, - * used for hooking into it. - * @target: The current target. - * @widget: The GtkNoteBook or GnomeDruid created after - * :create_widget() is called that represents the merged and combined - * configuration window. - * @window: If :create_window() is called, then the containing - * toplevel GtkDialog or GtkWindow appropriate for the @type of - * configuration window created. - * - **/ -struct _EConfig { - GObject object; - - struct _EConfigPrivate *priv; - - int type; /* E_CONFIG_BOOK or E_CONFIG_DRUID */ - - char *id; - - EConfigTarget *target; - - struct _GtkWidget *widget; /* the generated internal */ - struct _GtkWidget *window; /* the window widget, GtkWindow or GtkDialog */ -}; - -/** - * struct _EConfigClass - Configuration management abstract class. - * - * @object_class: Superclass. - * @factories: A list of factories registered on this type of - * configuration manager. - * @set_target: A virtual method used to set the target on the - * configuration manager. This is used by subclasses so they may hook - * into changes on the target to propery drive the manager. - * @target_free: A virtual method used to free the target in an - * implementation-defined way. - * - **/ -struct _EConfigClass { - GObjectClass object_class; - - EDList factories; - - void (*set_target)(EConfig *ep, EConfigTarget *t); - - void (*target_free)(EConfig *ep, EConfigTarget *t); -}; - -GType e_config_get_type(void); - -/* Static class methods */ -EConfigFactory *e_config_class_add_factory(EConfigClass *klass, const char *id, EConfigFactoryFunc func, void *data); -void e_config_class_remove_factory(EConfigClass *klass, EConfigFactory *f); - -EConfig *e_config_construct(EConfig *, int type, const char *id); - -void e_config_add_items(EConfig *, GSList *items, EConfigItemsFunc commitfunc, EConfigItemsFunc abortfunc, EConfigItemsFunc freefunc, void *data); -void e_config_add_page_check(EConfig *, const char *pageid, EConfigCheckFunc, void *data); - -void e_config_set_target(EConfig *emp, EConfigTarget *target); -struct _GtkWidget *e_config_create_widget(EConfig *); -GtkWidget *e_config_create_window(EConfig *emp, struct _GtkWindow *parent, const char *title); - -void e_config_target_changed(EConfig *emp, e_config_target_change_t how); - -gboolean e_config_page_check(EConfig *, const char *); - -GtkWidget *e_config_page_get(EConfig *ec, const char *pageid); -const char *e_config_page_next(EConfig *ec, const char *pageid); -const char *e_config_page_prev(EConfig *ec, const char *pageid); - -void e_config_abort(EConfig *); -void e_config_commit(EConfig *); - -void *e_config_target_new(EConfig *, int type, size_t size); -void e_config_target_free(EConfig *, void *); - -/* ********************************************************************** */ - -/* config plugin target, they are closely integrated */ - -/* To implement a basic config plugin, you just need to subclass - this and initialise the class target type tables */ - -#include "e-util/e-plugin.h" - -typedef struct _EConfigHookGroup EConfigHookGroup; -typedef struct _EConfigHook EConfigHook; -typedef struct _EConfigHookClass EConfigHookClass; - -typedef struct _EPluginHookTargetMap EConfigHookTargetMap; -typedef struct _EPluginHookTargetKey EConfigHookTargetMask; - -typedef struct _EConfigHookItemFactoryData EConfigHookItemFactoryData; -typedef struct _EConfigHookPageCheckData EConfigHookPageCheckData; - -typedef void (*EConfigHookFunc)(struct _EPlugin *plugin, EConfigTarget *target); -typedef void (*EConfigHookItemFactoryFunc)(struct _EPlugin *plugin, EConfigHookItemFactoryData *data); - -/** - * struct _EConfigHookItemFactoryData - Factory marshalling structure. - * - * @config: The parent EConfig. This is also available in - * @target->config but is here as a convenience. (TODO: do we need this). - * @item: The corresponding configuration item. - * @target: The current configuration target. This is also available - * on @config->target. - * @parent: The parent widget for this item. Depends on the item - * type. - * @old: The last widget created by this factory. The factory is only - * re-invoked if a reconfigure request is invoked on the EConfig. - * - * Used to marshal the callback data for the EConfigItemFactory method - * to a single pointer for the EPlugin system. - **/ -struct _EConfigHookItemFactoryData { - EConfig *config; - EConfigItem *item; - EConfigTarget *target; - struct _GtkWidget *parent; - struct _GtkWidget *old; -}; - -/** - * struct _EConfigHookPageCheckData - Check callback data. - * - * @config: - * @target: The current configuration target. This is also available - * on @config->target. - * @pageid: Name of page to validate, or "" means check all configuration. - * - **/ -struct _EConfigHookPageCheckData { - EConfig *config; - EConfigTarget *target; - const char *pageid; -}; - -/** - * struct _EConfigHookGroup - A group of configuration items. - * - * @hook: Parent object. - * @id: The configuration window to which these items apply. - * @target_type: The target type expected by the items. This is - * defined by implementing classes. - * @items: A list of EConfigHookItem's for this group. - * @check: A validate page handler. - * @commit: The name of the commit function for this group of items, or NULL - * for instant-apply configuration windows. Its format is plugin-type defined. - * @abort: Similar to the @commit function but for aborting or - * cancelling a configuration edit. - * - * Each plugin that hooks into a given configuration page will define - * all of the tiems for that page in a single group. - **/ -struct _EConfigHookGroup { - struct _EConfigHook *hook; /* parent pointer */ - char *id; /* target menu id for these config items */ - int target_type; /* target type of this group */ - GSList *items; /* items to add to group */ - char *check; /* validate handler, if set */ - char *commit; /* commit handler, if set */ - char *abort; /* abort handler, if set */ -}; - -/** - * struct _EConfigHook - Plugin hook for configuration windows. - * - * @hook: Superclass. - * @groups: A list of EConfigHookGroup's of all configuration windows - * this plugin hooks into. - * - **/ -struct _EConfigHook { - EPluginHook hook; - - GSList *groups; -}; - -/** - * struct _EConfigHookClass - Abstract class for configuration window - * plugin hooks. - * - * @hook_class: Superclass. - * @target_map: A table of EConfigHookTargetMap structures describing - * the possible target types supported by this class. - * @config_class: The EConfig derived class that this hook - * implementation drives. - * - * This is an abstract class defining the plugin hook point for - * configuration windows. - * - **/ -struct _EConfigHookClass { - EPluginHookClass hook_class; - - /* EConfigHookTargetMap by .type */ - GHashTable *target_map; - /* the config class these configs's belong to */ - EConfigClass *config_class; -}; - -GType e_config_hook_get_type(void); - -/* for implementors */ -void e_config_hook_class_add_target_map(EConfigHookClass *klass, const EConfigHookTargetMap *); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_CONFIG_H__ */ |