## FMAIFactoryObject FMAIFactoryObject — The FMAObjectItem Interface v 1 |

## Functions

#define | FMA_IFACTORY_OBJECT()
#define | FMA_IS_IFACTORY_OBJECT()
#define | FMA_IFACTORY_OBJECT_GET_INTERFACE()
FMADataBoxed * | fma_ifactory_object_get_data_boxed ()
FMADataGroup * | fma_ifactory_object_get_data_groups ()
void * | fma_ifactory_object_get_as_void ()
void | fma_ifactory_object_set_from_void ()

## Types and Values

#define | FMA_TYPE_IFACTORY_OBJECT
| FMAIFactoryObject
| FMAIFactoryObjectInterface

## Includes

    #include <filemanager-actions/fma-ifactory-object.h>

## Description

This interface is implemented by FMAObjectItem derived objects so that they can take advantage of our data factory management system.

A FMAObjectItem derived object which would implement this FMAIFactoryObject interface must meet following conditions:

- accept an empty constructor

### Versions historic

Table 8. Historic of the versions of the FMAIFactoryObject interface

FileManager-Actions™ version | FMAIFactoryObject interface version |
--- | --- | ---
since 2.30 | 1 | current version

## Functions

### FMA_IFACTORY_OBJECT()

    #define FMA_IFACTORY_OBJECT( instance )               ( G_TYPE_CHECK_INSTANCE_CAST( instance, FMA_TYPE_IFACTORY_OBJECT, FMAIFactoryObject ))

### FMA_IS_IFACTORY_OBJECT()

    #define FMA_IS_IFACTORY_OBJECT( instance )            ( G_TYPE_CHECK_INSTANCE_TYPE( instance, FMA_TYPE_IFACTORY_OBJECT ))

### FMA_IFACTORY_OBJECT_GET_INTERFACE()

    #define FMA_IFACTORY_OBJECT_GET_INTERFACE( instance ) ( G_TYPE_INSTANCE_GET_INTERFACE(( instance ), FMA_TYPE_IFACTORY_OBJECT, FMAIFactoryObjectInterface ))

### fma_ifactory_object_get_data_boxed ()

    FMADataBoxed *
    fma_ifactory_object_get_data_boxed (const FMAIFactoryObject *object,
                                        const gchar *name);

The returned FMADataBoxed is owned by FMAIFactoryObject `object` , and should not be released by the caller.

#### Parameters

object | a FMAIFactoryObject object. |
name | the name of the elementary data we are searching for. |

#### Returns

The FMADataBoxed object which contains the specified data, or `NULL`.

Since: 2.30

### fma_ifactory_object_get_data_groups ()

    FMADataGroup *
    fma_ifactory_object_get_data_groups (const FMAIFactoryObject *object);

The returned FMADataGroup is owned by the FMAIFactoryObject `object` , and should not be released by the caller.

#### Parameters

object | a FMAIFactoryObject object. |

#### Returns

The FMADataGroup groups definition, or `NULL`.

Since: 2.30

### fma_ifactory_object_get_as_void ()

    void *
    fma_ifactory_object_get_as_void (const FMAIFactoryObject *object,
                                     const gchar *name);

If the type of the value is `FMA_DATA_TYPE_STRING`, `FMA_DATA_TYPE_LOCALE_STRING`, or `FMA_DATA_TYPE_STRING_LIST`, then the returned value is a newly allocated one and should be `g_free()` (resp. `fma_core_utils_slist_free()`) by the caller.

#### Parameters

object | this FMAIFactoryObject instance. |
name | the elementary data whose value is to be got. |

#### Returns

the searched value.

Since: 2.30

### fma_ifactory_object_set_from_void ()

    void
    fma_ifactory_object_set_from_void (FMAIFactoryObject *object,
                                       const gchar *name,
                                       const void *data);

Set the elementary data with the given value.

#### Parameters

object | this FMAIFactoryObject instance. |
name | the name of the elementary data whose value is to be set. |
data | the value to set. |

Since: 2.30

## Types and Values

### FMA_TYPE_IFACTORY_OBJECT

    #define FMA_TYPE_IFACTORY_OBJECT                      ( fma_ifactory_object_get_type())

### FMAIFactoryObject

    typedef struct _FMAIFactoryObject FMAIFactoryObject;

### FMAIFactoryObjectInterface

    typedef struct {
    	/**
    	 * get_version:
    	 * @instance: this #FMAIFactoryObject instance.
    	 *
    	 * Defaults to 1.
    	 *
    	 * Returns: the version of this interface supported by @instance implementation.
    	 *
    	 * Since: 2.30
    	 */
    	guint         ( *get_version )( const FMAIFactoryObject *instance );

    	/**
    	 * get_groups:
    	 * @instance: this #FMAIFactoryObject instance.
    	 *
    	 * Returns: a pointer to the FMADataGroup which defines this object.
    	 *
    	 * Since: 2.30
    	 */
    	FMADataGroup * ( *get_groups ) ( const FMAIFactoryObject *instance );

    	/**
    	 * copy:
    	 * @instance: the target #FMAIFactoryObject instance.
    	 * @source: the source #FMAIFactoryObject instance.
    	 *
    	 * This function is triggered after having copied @source to
    	 * @instance target. This later may take advantage of this call
    	 * to do some particular copy tasks.
    	 *
    	 * Since: 2.30
    	 */
    	void          ( *copy )       ( FMAIFactoryObject *instance,
    										const FMAIFactoryObject *source );

    	/**
    	 * are_equal:
    	 * @a: the first #FMAIFactoryObject instance.
    	 * @b: the second #FMAIFactoryObject instance.
    	 *
    	 * This function is triggered after all elementary data comparisons
    	 * have been sucessfully made.
    	 *
    	 * Returns: %TRUE if @a is equal to @b.
    	 *
    	 * Since: 2.30
    	 */
    	gboolean      ( *are_equal )  ( const FMAIFactoryObject *a,
    										const FMAIFactoryObject *b );

    	/**
    	 * is_valid:
    	 * @object: the #FMAIFactoryObject instance whose validity is to be checked.
    	 *
    	 * This function is triggered after all elementary data comparisons
    	 * have been sucessfully made.
    	 *
    	 * Returns: %TRUE if @object is valid.
    	 *
    	 * Since: 2.30
    	 */
    	gboolean      ( *is_valid )   ( const FMAIFactoryObject *object );

    	/**
    	 * read_start:
    	 * @instance: this #FMAIFactoryObject instance.
    	 * @reader: the instance which has provided read services.
    	 * @reader_data: the data associated to @reader.
    	 * @messages: a pointer to a #GSList list of strings; the instance
    	 *  may append messages to this list, but shouldn't reinitialize it.
    	 *
    	 * Called just before the object is unserialized.
    	 *
    	 * Since: 2.30
    	 */
    	void          ( *read_start ) ( FMAIFactoryObject *instance,
    										const FMAIFactoryProvider *reader,
    										void *reader_data,
    										GSList **messages );

    	/**
    	 * read_done:
    	 * @instance: this #FMAIFactoryObject instance.
    	 * @reader: the instance which has provided read services.
    	 * @reader_data: the data associated to @reader.
    	 * @messages: a pointer to a #GSList list of strings; the instance
    	 *  may append messages to this list, but shouldn't reinitialize it.
    	 *
    	 * Called when the object has been unserialized.
    	 *
    	 * Since: 2.30
    	 */
    	void          ( *read_done )  ( FMAIFactoryObject *instance,
    										const FMAIFactoryProvider *reader,
    										void *reader_data,
    										GSList **messages );

    	/**
    	 * write_start:
    	 * @instance: this #FMAIFactoryObject instance.
    	 * @writer: the instance which has provided writing services.
    	 * @writer_data: the data associated to @writer.
    	 * @messages: a pointer to a #GSList list of strings; the instance
    	 *  may append messages to this list, but shouldn't reinitialize it.
    	 *
    	 * Called just before the object is serialized.
    	 *
    	 * Returns: a FMAIIOProvider operation return code.
    	 *
    	 * Since: 2.30
    	 */
    	guint         ( *write_start )( FMAIFactoryObject *instance,
    										const FMAIFactoryProvider *writer,
    										void *writer_data,
    										GSList **messages );

    	/**
    	 * write_done:
    	 * @instance: this #FMAIFactoryObject instance.
    	 * @writer: the instance which has provided writing services.
    	 * @writer_data: the data associated to @writer.
    	 * @messages: a pointer to a #GSList list of strings; the instance
    	 *  may append messages to this list, but shouldn't reinitialize it.
    	 *
    	 * Called when the object has been serialized.
    	 *
    	 * Returns: a FMAIIOProvider operation return code.
    	 *
    	 * Since: 2.30
    	 */
    	guint         ( *write_done ) ( FMAIFactoryObject *instance,
    										const FMAIFactoryProvider *writer,
    										void *writer_data,
    										GSList **messages );
    } FMAIFactoryObjectInterface;

In order to take full advantage of our data managament system, FMAObjectItem-derived objects all implement this FMAIFactoryObject interface.

#### Members

`get_version` () | returns the version of this interface the FMAObjectItem implements. |
`get_groups` () | returns a pointer to the FMADataGroup which defines this object. |
`copy` () | post copy callback. |
`are_equal` () | tests if two FMAObjectItem are equals. |
`is_valid` () | tests if one FMAObjectItem is valid. |
`read_start` () | triggered before serializing a FMAObjectItem. |
`read_done` () | triggered after a FMAObjectItem has been serialized. |
`write_start` () | triggered before unserializing a FMAObjectItem. |
`write_done` () | triggered after a FMAObjectItem has been unserialized. |