## GOPluginService GOPluginService |

## Synopsis

                        GOPluginService;
                        GOPluginServiceClass;
                        GOPluginServiceGObjectLoaderClass;
    GType               (*GOPluginServiceCreate)            (void);
                        GOPluginServiceFileOpener;
                        GOPluginServiceFileOpenerCallbacks;
                        GOPluginServiceFileSaver;
                        GOPluginServiceFileSaverCallbacks;
                        GOPluginServiceGObjectLoader;
                        GOPluginServiceGeneral;
                        GOPluginServiceGeneralCallbacks;
                        GOPluginServicePluginLoader;
                        GOPluginServicePluginLoaderCallbacks;
                        GOPluginServiceSimple;
    void                go_plugin_service_activate          (GOPluginService *service,
                                                             GOErrorInfo **ret_error);
    void                go_plugin_service_deactivate        (GOPluginService *service,
                                                             GOErrorInfo **ret_error);
    void                go_plugin_service_define            (char const *type_str,
                                                             GOPluginServiceCreate ctor);
    gpointer            go_plugin_service_get_cbs           (GOPluginService *service);
    char const     *    go_plugin_service_get_description   (GOPluginService *service);
    char const     *    go_plugin_service_get_id            (const GOPluginService *service);
    GOPlugin *          go_plugin_service_get_plugin        (GOPluginService *service);
    void                go_plugin_service_load              (GOPluginService *service,
                                                             GOErrorInfo **ret_error);
    GOPluginService *   go_plugin_service_new               (GOPlugin *plugin,
                                                             xmlNode *tree,
                                                             GOErrorInfo **ret_error);
    GType               go_plugin_service_plugin_loader_generate_type
                                                            (GOPluginService *service,
                                                             GOErrorInfo **ret_error);
    void                go_plugin_service_unload            (GOPluginService *service,
                                                             GOErrorInfo **ret_error);
    void                go_plugin_services_shutdown         (void);

## Object Hierarchy

      GObject
       +----GOPluginService
             +----GOPluginServiceFileOpener
             +----GOPluginServiceFileSaver
             +----GOPluginServiceGeneral
             +----GOPluginServiceSimple
             +----GOPluginServicePluginLoader
             +----GOPluginServiceResource

      GObject
       +----GOPluginService
             +----GOPluginServiceFileOpener

      GObject
       +----GOPluginService
             +----GOPluginServiceFileSaver

      GObject
       +----GOPluginService
             +----GOPluginServiceSimple
                   +----GOPluginServiceGObjectLoader

      GObject
       +----GOPluginService
             +----GOPluginServiceGeneral

      GObject
       +----GOPluginService
             +----GOPluginServicePluginLoader

      GObject
       +----GOPluginService
             +----GOPluginServiceSimple
                   +----GOPluginServiceGObjectLoader

## Description

## Details

### GOPluginService

    typedef struct _GOPluginService GOPluginService;

### GOPluginServiceClass

    typedef struct {
    	GObjectClass g_object_class;

    	void (*read_xml) (GOPluginService *service, xmlNode *tree, GOErrorInfo **ret_error);
    	void (*activate) (GOPluginService *service, GOErrorInfo **ret_error);
    	void (*deactivate) (GOPluginService *service, GOErrorInfo **ret_error);
    	char *(*get_description) (GOPluginService *service);
    } GOPluginServiceClass;

GObjectClass `g_object_class`; |
`read_xml` () | read XML node containing the service description.
`activate` () | actviates the service.
`deactivate` () | deactivates the service.
`get_description` () | gets the service description.

### GOPluginServiceGObjectLoaderClass

    typedef struct {
    	GOPluginServiceClass plugin_service_class;
    	GHashTable *pending; /* has service instances by type names */
    } GOPluginServiceGObjectLoaderClass;

GOPluginServiceClass `plugin_service_class`; | parent class.
GHashTable *`pending`; | has service instances by type names.

### GOPluginServiceCreate ()

    GType               (*GOPluginServiceCreate)            (void);

### GOPluginServiceFileOpener

    typedef struct _GOPluginServiceFileOpener GOPluginServiceFileOpener;

### GOPluginServiceFileOpenerCallbacks

    typedef struct {
    	/* plugin_func_file_probe may be NULL */
    	gboolean (*plugin_func_file_probe) (
    	         GOFileOpener const *fo, GOPluginService *service,
    	         GsfInput *input, GOFileProbeLevel pl);
    	void     (*plugin_func_file_open) (
    	         GOFileOpener const *fo, GOPluginService *service,
    	         GOIOContext *io_context, GoView *view,
    		 GsfInput *input, char const *enc);
    } GOPluginServiceFileOpenerCallbacks;

`plugin_func_file_probe` () | probes the file, may be `NULL`.
`plugin_func_file_open` () | opens and reads the file.

### GOPluginServiceFileSaver

    typedef struct _GOPluginServiceFileSaver GOPluginServiceFileSaver;

### GOPluginServiceFileSaverCallbacks

    typedef struct {
    	void  (*plugin_func_file_save) (
    	      GOFileSaver const *fs, GOPluginService *service,
    	      GOIOContext *io_context, GoView const *view,
    	      GsfOutput *output);
    } GOPluginServiceFileSaverCallbacks;

`plugin_func_file_save` () | saves the file.

### GOPluginServiceGObjectLoader

    typedef struct _GOPluginServiceGObjectLoader GOPluginServiceGObjectLoader;

### GOPluginServiceGeneral

    typedef struct _GOPluginServiceGeneral GOPluginServiceGeneral;

### GOPluginServiceGeneralCallbacks

    typedef struct {
    	void (*plugin_func_init) (GOPluginService *service, GOErrorInfo **ret_error);
    	void (*plugin_func_cleanup) (GOPluginService *service, GOErrorInfo **ret_error);
    } GOPluginServiceGeneralCallbacks;

`plugin_func_init` () | initializes the service.
`plugin_func_cleanup` () | service cleanup.

### GOPluginServicePluginLoader

    typedef struct _GOPluginServicePluginLoader GOPluginServicePluginLoader;

### GOPluginServicePluginLoaderCallbacks

    typedef struct {
    	GType (*plugin_func_get_loader_type) (
    	      GOPluginService *service, GOErrorInfo **ret_error);
    } GOPluginServicePluginLoaderCallbacks;

`plugin_func_get_loader_type` () | returns a GType for a function loader. Used by gnumeric in the Python and Perl plugins.

### GOPluginServiceSimple

    typedef struct _GOPluginServiceSimple GOPluginServiceSimple;

### go_plugin_service_activate ()

    void                go_plugin_service_activate          (GOPluginService *service,
                                                             GOErrorInfo **ret_error);

### go_plugin_service_deactivate ()

    void                go_plugin_service_deactivate        (GOPluginService *service,
                                                             GOErrorInfo **ret_error);

### go_plugin_service_define ()

    void                go_plugin_service_define            (char const *type_str,
                                                             GOPluginServiceCreate ctor);

Allow the definition of new service types

`type_str` : | char const *
`ctor` : | GOPluginServiceCreate. [scope async]

### go_plugin_service_get_cbs ()

    gpointer            go_plugin_service_get_cbs           (GOPluginService *service);

`service` : | GOPluginService
Returns : | the callbacks for the service. [transfer none]

### go_plugin_service_get_description ()

    char const     *    go_plugin_service_get_description   (GOPluginService *service);

### go_plugin_service_get_id ()

    char const     *    go_plugin_service_get_id            (const GOPluginService *service);

### go_plugin_service_get_plugin ()

    GOPlugin *          go_plugin_service_get_plugin        (GOPluginService *service);

`service` : | GOPluginService
Returns : | the plugin offering `service`. [transfer none]

### go_plugin_service_load ()

    void                go_plugin_service_load              (GOPluginService *service,
                                                             GOErrorInfo **ret_error);

### go_plugin_service_new ()

    GOPluginService *   go_plugin_service_new               (GOPlugin *plugin,
                                                             xmlNode *tree,
                                                             GOErrorInfo **ret_error);

### go_plugin_service_plugin_loader_generate_type ()

    GType               go_plugin_service_plugin_loader_generate_type
                                                            (GOPluginService *service,
                                                             GOErrorInfo **ret_error);

### go_plugin_service_unload ()

    void                go_plugin_service_unload            (GOPluginService *service,
                                                             GOErrorInfo **ret_error);

### go_plugin_services_shutdown ()

    void                go_plugin_services_shutdown         (void);