## GOPluginService GOPluginService |

## Synopsis

    #define             GO_TYPE_PLUGIN_SERVICE
    #define             GO_PLUGIN_SERVICE                   (o)
    #define             GO_IS_PLUGIN_SERVICE                (o)
                        GOPluginService;
                        GOPluginServiceClass;
    GType               go_plugin_service_get_type          (void);
    #define             GO_TYPE_PLUGIN_SERVICE_GENERAL
    #define             GO_PLUGIN_SERVICE_GENERAL           (o)
    #define             GO_IS_PLUGIN_SERVICE_GENERAL        (o)
    GType               go_plugin_service_general_get_type  (void);
                        GOPluginServiceGeneral;
                        GOPluginServiceGeneralCallbacks;
    #define             GO_TYPE_PLUGIN_SERVICE_FILE_OPENER
    #define             GO_PLUGIN_SERVICE_FILE_OPENER       (o)
    #define             GO_IS_PLUGIN_SERVICE_FILE_OPENER    (o)
    GType               go_plugin_service_file_opener_get_type
                                                            (void);
                        GOPluginServiceFileOpener;
                        GOPluginServiceFileOpenerCallbacks;
    #define             GO_TYPE_PLUGIN_SERVICE_FILE_SAVER
    #define             GO_PLUGIN_SERVICE_FILE_SAVER        (o)
    #define             GO_IS_PLUGIN_SERVICE_FILE_SAVER     (o)
    GType               go_plugin_service_file_saver_get_type
                                                            (void);
                        GOPluginServiceFileSaver;
                        GOPluginServiceFileSaverCallbacks;
    #define             GO_TYPE_PLUGIN_SERVICE_PLUGIN_LOADER
    #define             GO_PLUGIN_SERVICE_PLUGIN_LOADER     (o)
    #define             GO_IS_PLUGIN_SERVICE_PLUGIN_LOADER  (o)
    GType               go_plugin_service_plugin_loader_get_type
                                                            (void);
                        GOPluginServicePluginLoader;
                        GOPluginServicePluginLoaderCallbacks;
    GType               go_plugin_service_plugin_loader_generate_type
                                                            (GOPluginService *service,
                                                             GOErrorInfo **ret_error);
    #define             GO_TYPE_PLUGIN_SERVICE_GOBJECT_LOADER
    #define             GO_PLUGIN_SERVICE_GOBJECT_LOADER    (o)
    #define             GO_IS_PLUGIN_SERVICE_GOBJECT_LOADER (o)
    GType               go_plugin_service_gobject_loader_get_type
                                                            (void);
                        GOPluginServiceGObjectLoader;
                        GOPluginServiceGObjectLoaderClass;
    #define             GO_TYPE_PLUGIN_SERVICE_SIMPLE
    #define             GO_PLUGIN_SERVICE_SIMPLE            (o)
    #define             GO_IS_PLUGIN_SERVICE_SIMPLE         (o)
    GType               go_plugin_service_simple_get_type   (void);
                        GOPluginServiceSimple;
                        GOPluginServiceSimpleClass;
    GOPluginService *   go_plugin_service_new               (GOPlugin *plugin,
                                                             xmlNode *tree,
                                                             GOErrorInfo **ret_error);
    char const     *    go_plugin_service_get_id            (const GOPluginService *service);
    char const     *    go_plugin_service_get_description   (GOPluginService *service);
    GOPlugin *          go_plugin_service_get_plugin        (GOPluginService *service);
    gpointer            go_plugin_service_get_cbs           (GOPluginService *service);
    void                go_plugin_service_activate          (GOPluginService *service,
                                                             GOErrorInfo **ret_error);
    void                go_plugin_service_deactivate        (GOPluginService *service,
                                                             GOErrorInfo **ret_error);
    void                go_plugin_service_load              (GOPluginService *service,
                                                             GOErrorInfo **ret_error);
    void                go_plugin_service_unload            (GOPluginService *service,
                                                             GOErrorInfo **ret_error);
    GType               (*GOPluginServiceCreate)            (void);
    void                go_plugin_services_shutdown         (void);
    void                go_plugin_service_define            (char const *type_str,
                                                             GOPluginServiceCreate ctor);

## Object Hierarchy

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

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

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

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

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

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

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

## Description

## Details

### GO_TYPE_PLUGIN_SERVICE

    #define GO_TYPE_PLUGIN_SERVICE         (go_plugin_service_get_type ())

### GO_PLUGIN_SERVICE()

    #define GO_PLUGIN_SERVICE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_TYPE_PLUGIN_SERVICE, GOPluginService))

`o` : |

### GO_IS_PLUGIN_SERVICE()

    #define GO_IS_PLUGIN_SERVICE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_TYPE_PLUGIN_SERVICE))

`o` : |

### 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;

### go_plugin_service_get_type ()

    GType               go_plugin_service_get_type          (void);

Returns : |

### GO_TYPE_PLUGIN_SERVICE_GENERAL

    #define GO_TYPE_PLUGIN_SERVICE_GENERAL  (go_plugin_service_general_get_type ())

### GO_PLUGIN_SERVICE_GENERAL()

    #define GO_PLUGIN_SERVICE_GENERAL(o)    (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_TYPE_PLUGIN_SERVICE_GENERAL, GOPluginServiceGeneral))

`o` : |

### GO_IS_PLUGIN_SERVICE_GENERAL()

    #define GO_IS_PLUGIN_SERVICE_GENERAL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_TYPE_PLUGIN_SERVICE_GENERAL))

`o` : |

### go_plugin_service_general_get_type ()

    GType               go_plugin_service_general_get_type  (void);

Returns : |

### 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;

### GO_TYPE_PLUGIN_SERVICE_FILE_OPENER

    #define GO_TYPE_PLUGIN_SERVICE_FILE_OPENER  (go_plugin_service_file_opener_get_type ())

### GO_PLUGIN_SERVICE_FILE_OPENER()

    #define GO_PLUGIN_SERVICE_FILE_OPENER(o)    (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_TYPE_PLUGIN_SERVICE_FILE_OPENER, GOPluginServiceFileOpener))

`o` : |

### GO_IS_PLUGIN_SERVICE_FILE_OPENER()

    #define GO_IS_PLUGIN_SERVICE_FILE_OPENER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_TYPE_PLUGIN_SERVICE_FILE_OPENER))

`o` : |

### go_plugin_service_file_opener_get_type ()

    GType               go_plugin_service_file_opener_get_type
                                                            (void);

Returns : |

### 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, gpointer fixme_workbook_view,
    		 GsfInput *input);
    } GOPluginServiceFileOpenerCallbacks;

### GO_TYPE_PLUGIN_SERVICE_FILE_SAVER

    #define GO_TYPE_PLUGIN_SERVICE_FILE_SAVER  (go_plugin_service_file_saver_get_type ())

### GO_PLUGIN_SERVICE_FILE_SAVER()

    #define GO_PLUGIN_SERVICE_FILE_SAVER(o)    (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_TYPE_PLUGIN_SERVICE_FILE_SAVER, GOPluginServiceFileSaver))

`o` : |

### GO_IS_PLUGIN_SERVICE_FILE_SAVER()

    #define GO_IS_PLUGIN_SERVICE_FILE_SAVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_TYPE_PLUGIN_SERVICE_FILE_SAVER))

`o` : |

### go_plugin_service_file_saver_get_type ()

    GType               go_plugin_service_file_saver_get_type
                                                            (void);

Returns : |

### GOPluginServiceFileSaver

    typedef struct _GOPluginServiceFileSaver GOPluginServiceFileSaver;

### GOPluginServiceFileSaverCallbacks

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

### GO_TYPE_PLUGIN_SERVICE_PLUGIN_LOADER

    #define GO_TYPE_PLUGIN_SERVICE_PLUGIN_LOADER  (go_plugin_service_plugin_loader_get_type ())

### GO_PLUGIN_SERVICE_PLUGIN_LOADER()

    #define GO_PLUGIN_SERVICE_PLUGIN_LOADER(o)    (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_TYPE_PLUGIN_SERVICE_PLUGIN_LOADER, GOPluginServicePluginLoader))

`o` : |

### GO_IS_PLUGIN_SERVICE_PLUGIN_LOADER()

    #define GO_IS_PLUGIN_SERVICE_PLUGIN_LOADER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_TYPE_PLUGIN_SERVICE_PLUGIN_LOADER))

`o` : |

### go_plugin_service_plugin_loader_get_type ()

    GType               go_plugin_service_plugin_loader_get_type
                                                            (void);

Returns : |

### GOPluginServicePluginLoader

    typedef struct _GOPluginServicePluginLoader GOPluginServicePluginLoader;

### GOPluginServicePluginLoaderCallbacks

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

### go_plugin_service_plugin_loader_generate_type ()

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

`service` : |
`ret_error` : |
Returns : |

### GO_TYPE_PLUGIN_SERVICE_GOBJECT_LOADER

    #define GO_TYPE_PLUGIN_SERVICE_GOBJECT_LOADER  (go_plugin_service_gobject_loader_get_type ())

### GO_PLUGIN_SERVICE_GOBJECT_LOADER()

    #define GO_PLUGIN_SERVICE_GOBJECT_LOADER(o)    (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_TYPE_PLUGIN_SERVICE_GOBJECT_LOADER, GOPluginServiceGObjectLoader))

`o` : |

### GO_IS_PLUGIN_SERVICE_GOBJECT_LOADER()

    #define GO_IS_PLUGIN_SERVICE_GOBJECT_LOADER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_TYPE_PLUGIN_SERVICE_GOBJECT_LOADER))

`o` : |

### go_plugin_service_gobject_loader_get_type ()

    GType               go_plugin_service_gobject_loader_get_type
                                                            (void);

Returns : |

### GOPluginServiceGObjectLoader

    typedef struct _GOPluginServiceGObjectLoader GOPluginServiceGObjectLoader;

### GOPluginServiceGObjectLoaderClass

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

### GO_TYPE_PLUGIN_SERVICE_SIMPLE

    #define GO_TYPE_PLUGIN_SERVICE_SIMPLE  (go_plugin_service_simple_get_type ())

### GO_PLUGIN_SERVICE_SIMPLE()

    #define GO_PLUGIN_SERVICE_SIMPLE(o)    (G_TYPE_CHECK_INSTANCE_CAST ((o), GO_TYPE_PLUGIN_SERVICE_SIMPLE, GOPluginServiceSimple))

`o` : |

### GO_IS_PLUGIN_SERVICE_SIMPLE()

    #define GO_IS_PLUGIN_SERVICE_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GO_TYPE_PLUGIN_SERVICE_SIMPLE))

`o` : |

### go_plugin_service_simple_get_type ()

    GType               go_plugin_service_simple_get_type   (void);

Returns : |

### GOPluginServiceSimple

    typedef struct _GOPluginServiceSimple GOPluginServiceSimple;

### GOPluginServiceSimpleClass

    typedef struct {
    	GOPluginServiceClass plugin_service_class;
    } GOPluginServiceSimpleClass;

### go_plugin_service_new ()

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

`plugin` : |
`tree` : |
`ret_error` : |
Returns : |

### go_plugin_service_get_id ()

    char const     *    go_plugin_service_get_id            (const GOPluginService *service);

`service` : |
Returns : |

### go_plugin_service_get_description ()

    char const     *    go_plugin_service_get_description   (GOPluginService *service);

`service` : |
Returns : |

### go_plugin_service_get_plugin ()

    GOPlugin *          go_plugin_service_get_plugin        (GOPluginService *service);

`service` : |
Returns : |

### go_plugin_service_get_cbs ()

    gpointer            go_plugin_service_get_cbs           (GOPluginService *service);

`service` : |
Returns : |

### go_plugin_service_activate ()

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

`service` : |
`ret_error` : |

### go_plugin_service_deactivate ()

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

`service` : |
`ret_error` : |

### go_plugin_service_load ()

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

`service` : |
`ret_error` : |

### go_plugin_service_unload ()

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

`service` : |
`ret_error` : |

### GOPluginServiceCreate ()

    GType               (*GOPluginServiceCreate)            (void);

Returns : |

### go_plugin_services_shutdown ()

    void                go_plugin_services_shutdown         (void);

### 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