## MrpProperty

MrpProperty — represents a custom property in the project.

## Synopsis

    #include <libplanner/planner.h>

    typedef             MrpProperty;
    enum                MrpPropertyType;
    MrpProperty *       mrp_property_new                    (const gchar *name,
                                                             MrpPropertyType type,
                                                             const gchar *label,
                                                             const gchar *description,
                                                             gboolean user_defined);
    const gchar *       mrp_property_get_name               (MrpProperty *property);
    MrpPropertyType     mrp_property_get_property_type      (MrpProperty *property);
    void                mrp_property_set_label              (MrpProperty *property,
                                                             const gchar *label);
    const gchar *       mrp_property_get_label              (MrpProperty *property);
    void                mrp_property_set_description        (MrpProperty *property,
                                                             const gchar *description);
    const gchar *       mrp_property_get_description        (MrpProperty *property);
    void                mrp_property_set_user_defined       (MrpProperty *property,
                                                             gboolean user_defined);
    gboolean            mrp_property_get_user_defined       (MrpProperty *property);
    MrpProperty *       mrp_property_ref                    (MrpProperty *property);
    void                mrp_property_unref                  (MrpProperty *property);
    const gchar *       mrp_property_type_as_string         (MrpPropertyType type);

## Description

MrpProperty is a typedef to GParamSpec. It is used to add properties to projects, resources and tasks in run time, for example by the user of a GUI application, or plugins that add functionality.

## Details

### MrpProperty

    typedef GParamSpec MrpProperty;

Object representing a custom property in the project.

### enum MrpPropertyType

    typedef enum {
    	MRP_PROPERTY_TYPE_NONE,
    	MRP_PROPERTY_TYPE_INT,
    	MRP_PROPERTY_TYPE_FLOAT,
    	MRP_PROPERTY_TYPE_STRING,
    	MRP_PROPERTY_TYPE_STRING_LIST,
    	MRP_PROPERTY_TYPE_DATE,
    	MRP_PROPERTY_TYPE_DURATION,
    	MRP_PROPERTY_TYPE_COST
    } MrpPropertyType;

The different types of custom properties. Cost and duration are simply float and integer values, but the extra information provided makes it possible to format the values properly in a GUI.

`MRP_PROPERTY_TYPE_NONE` | invalid (unset type)
`MRP_PROPERTY_TYPE_INT` | integer type
`MRP_PROPERTY_TYPE_FLOAT` | float type
`MRP_PROPERTY_TYPE_STRING` | string type
`MRP_PROPERTY_TYPE_STRING_LIST` | not implemented
`MRP_PROPERTY_TYPE_DATE` | date type
`MRP_PROPERTY_TYPE_DURATION` | duration type
`MRP_PROPERTY_TYPE_COST` | cost type (float)

### mrp_property_new ()

    MrpProperty *       mrp_property_new                    (const gchar *name,
                                                             MrpPropertyType type,
                                                             const gchar *label,
                                                             const gchar *description,
                                                             gboolean user_defined);

Creates a new MrpProperty. `name` must be unique in the application. `user_defined` specifies if the property was created by a user or a plugin or Planner itself.

`name` : | the name of the property
`type` : | an MrpPropertyType
`label` : | the human readable label
`description` : | a string describing the property
`user_defined` : | a gboolean
Returns : | a newly create property

### mrp_property_get_name ()

    const gchar *       mrp_property_get_name               (MrpProperty *property);

Fetches the name of `property`

`property` : | an MrpProperty
Returns : | the name of `property`

### mrp_property_get_property_type ()

    MrpPropertyType     mrp_property_get_property_type      (MrpProperty *property);

Fetches the type of `property`

`property` : | an MrpProperty
Returns : | the type of `property`

### mrp_property_set_label ()

    void                mrp_property_set_label              (MrpProperty *property,
                                                             const gchar *label);

Sets the label of `property` and signals the "property-changed" signal on the project `property` is attached to.

`property` : | an MrpProperty
`label` : | a string containing the new label

### mrp_property_get_label ()

    const gchar *       mrp_property_get_label              (MrpProperty *property);

Fetches the label of `property`

`property` : | an MrpProperty
Returns : | the label of `property`

### mrp_property_set_description ()

    void                mrp_property_set_description        (MrpProperty *property,
                                                             const gchar *description);

Sets the description of `property` and signals the "property-changed" signal on the project `property` is attached to.

`property` : | an MrpProperty
`description` : | a string containing the new description

### mrp_property_get_description ()

    const gchar *       mrp_property_get_description        (MrpProperty *property);

Fetches the description of `property`

`property` : | an MrpProperty
Returns : | the description of `property`

### mrp_property_set_user_defined ()

    void                mrp_property_set_user_defined       (MrpProperty *property,
                                                             gboolean user_defined);

Sets if `property` is user-defined or created by a plugin or Planner itself.

`property` : | an MrpProperty
`user_defined` : | if the property is user defined

### mrp_property_get_user_defined ()

    gboolean            mrp_property_get_user_defined       (MrpProperty *property);

Fetches if `property` is uesr defined or not.

`property` : | an MrpProperty
Returns : | `TRUE` if `property` is user defined, otherwise `FALSE`

### mrp_property_ref ()

    MrpProperty *       mrp_property_ref                    (MrpProperty *property);

Add a reference to `property`. User should call this when storing a reference to `property`.

`property` : | an MrpProperty
Returns : | the property

### mrp_property_unref ()

    void                mrp_property_unref                  (MrpProperty *property);

Remove a reference from `property`. If the reference count reaches 0 the property will be freed. User should not use it's reference after calling `mrp_property_unref()`.

`property` : | an MrpProperty

### mrp_property_type_as_string ()

    const gchar *       mrp_property_type_as_string         (MrpPropertyType type);

Transform a MrpPropertyTYpe into a human readable string.

`type` : | an MrpPropertyType
Returns : | a string representation of `type`