## IAnjutaPluginFactory IAnjutaPluginFactory — Create Anjuta plugin objects |

## Stability Level

Unstable, unless otherwise indicated

## Synopsis

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

    enum                IAnjutaPluginFactoryError;
    struct              IAnjutaPluginFactoryIface;
    GQuark              ianjuta_plugin_factory_error_quark  (void);
    AnjutaPlugin *      ianjuta_plugin_factory_new_plugin   (IAnjutaPluginFactory *obj,
                                                             AnjutaPluginHandle *handle,
                                                             AnjutaShell *shell,
                                                             GError **err);

## Object Hierarchy

      GEnum
       +----IAnjutaPluginFactoryError

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

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

### struct IAnjutaPluginFactoryIface

    struct IAnjutaPluginFactoryIface {
    	GTypeInterface g_iface;

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

### ianjuta_plugin_factory_error_quark ()

    GQuark              ianjuta_plugin_factory_error_quark  (void);

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