## IAnjutaPluginFactory IAnjutaPluginFactory — Create Anjuta plugin objects |

## Stability Level

Unstable, unless otherwise indicated

## Synopsis

    #include <libanjuta/interfaces/ianjuta-plugin-factory.h>

    #define             IANJUTA_TYPE_PLUGIN_FACTORY_ERROR
    #define             IANJUTA_PLUGIN_FACTORY_ERROR
                        IAnjutaPluginFactory;
                        IAnjutaPluginFactoryIface;
    enum                IAnjutaPluginFactoryError;
    GQuark              ianjuta_plugin_factory_error_quark  (void);
    GType               ianjuta_plugin_factory_get_type     (void);
    AnjutaPlugin*       ianjuta_plugin_factory_new_plugin   (IAnjutaPluginFactory *obj,
                                                             AnjutaPluginHandle *handle,
                                                             AnjutaShell *shell,
                                                             GError **err);

## Object Hierarchy

      GInterface
       +----IAnjutaPluginFactory

## Prerequisites

IAnjutaPluginFactory requires GObject.

## Known Implementations

IAnjutaPluginFactory is implemented by AnjutaCPluginFactory.

## Description

This interface is used to create all Anjuta plugin objects. It is already implemented inside Anjuta by an object able to load plugins written in C. In order to load plugins in other languages (or in a different way), a loader plugin implementing this interface must be written first, probably in C.

## Details

### IANJUTA_TYPE_PLUGIN_FACTORY_ERROR

    #define IANJUTA_TYPE_PLUGIN_FACTORY_ERROR (ianjuta_plugin_factory_error_get_type())

### IANJUTA_PLUGIN_FACTORY_ERROR

    #define IANJUTA_PLUGIN_FACTORY_ERROR ianjuta_plugin_factory_error_quark()

### IAnjutaPluginFactory

    typedef struct _IAnjutaPluginFactory IAnjutaPluginFactory;

### IAnjutaPluginFactoryIface

    typedef struct {
    	GTypeInterface g_iface;

    	AnjutaPlugin* (*new_plugin) (IAnjutaPluginFactory *obj, AnjutaPluginHandle* handle,  AnjutaShell *shell, GError **err);
    } IAnjutaPluginFactoryIface;

### enum IAnjutaPluginFactoryError

    typedef enum {
    	IANJUTA_PLUGIN_FACTORY_OK = 0,
    	IANJUTA_PLUGIN_FACTORY_MISSING_LOCATION,
    	IANJUTA_PLUGIN_FACTORY_MISSING_TYPE,
    	IANJUTA_PLUGIN_FACTORY_MISSING_MODULE,
    	IANJUTA_PLUGIN_FACTORY_INVALID_MODULE,
    	IANJUTA_PLUGIN_FACTORY_MISSING_FUNCTION,
    	IANJUTA_PLUGIN_FACTORY_INVALID_TYPE,
    	IANJUTA_PLUGIN_FACTORY_UNKNOWN_ERROR,
    } IAnjutaPluginFactoryError;

These enumeration is used to specify errors.

`IANJUTA_PLUGIN_FACTORY_OK` |
`IANJUTA_PLUGIN_FACTORY_MISSING_LOCATION` | Module file location is missing in .plugin file
`IANJUTA_PLUGIN_FACTORY_MISSING_TYPE` | Plugin type (just after double colon following location) is missing in .plugin file
`IANJUTA_PLUGIN_FACTORY_MISSING_MODULE` | Module file name not found, plugin module is probably not installed
`IANJUTA_PLUGIN_FACTORY_INVALID_MODULE` | Module file cannot be loaded, not a shared library perhaps
`IANJUTA_PLUGIN_FACTORY_MISSING_FUNCTION` | Module does not contain registration function, library is not an anjuta plugin or is not for the right version
`IANJUTA_PLUGIN_FACTORY_INVALID_TYPE` | Module has not registered plugin type, library is not an anjuta plugin or not for the right version
`IANJUTA_PLUGIN_FACTORY_UNKNOWN_ERROR` | Another error

### ianjuta_plugin_factory_error_quark ()

    GQuark              ianjuta_plugin_factory_error_quark  (void);

Returns : |

### ianjuta_plugin_factory_get_type ()

    GType               ianjuta_plugin_factory_get_type     (void);

Returns : |

### ianjuta_plugin_factory_new_plugin ()

    AnjutaPlugin*       ianjuta_plugin_factory_new_plugin   (IAnjutaPluginFactory *obj,
                                                             AnjutaPluginHandle *handle,
                                                             AnjutaShell *shell,
                                                             GError **err);

Create a new AnjutaPlugin object from the plugin information handle, give it the AnjutaShell object as argument.

`obj` : | Self
`handle` : | Plugin information
`shell` : | Anjuta shell
`err` : | Error propagation and reporting.
Returns : | a new plugin object