## MrpProject

MrpProject

## Synopsis

    #include <libplanner/planner.h>

                        MrpProjectPriv;
    struct              MrpProject;
    gboolean            (*MrpTaskTraverseFunc)              (MrpTask *Param1,
                                                             gpointer Param2);
    MrpProject *        mrp_project_new                     (MrpApplication *app);
    gboolean            mrp_project_is_empty                (MrpProject *project);
    gboolean            mrp_project_needs_saving            (MrpProject *project);
    mrptime             mrp_project_get_project_start       (MrpProject *project);
    void                mrp_project_set_project_start       (MrpProject *project,
                                                             mrptime start);
    gboolean            mrp_project_load                    (MrpProject *project,
                                                             const gchar *uri,
                                                             GError **error);
    gboolean            mrp_project_save                    (MrpProject *project,
                                                             gboolean force,
                                                             GError **error);
    gboolean            mrp_project_save_to_xml             (MrpProject *project,
                                                             gchar **str,
                                                             GError **error);
    gboolean            mrp_project_load_from_xml           (MrpProject *project,
                                                             const gchar *str,
                                                             GError **error);
    gboolean            mrp_project_save_as                 (MrpProject *project,
                                                             const gchar *uri,
                                                             gboolean force,
                                                             GError **error);
    void                mrp_project_close                   (MrpProject *project);
    const gchar *       mrp_project_get_uri                 (MrpProject *project);
    MrpResource *       mrp_project_get_resource_by_name    (MrpProject *project,
                                                             const gchar *name);
    GList *             mrp_project_get_resources           (MrpProject *project);
    void                mrp_project_add_resource            (MrpProject *project,
                                                             MrpResource *resource);
    void                mrp_project_remove_resource         (MrpProject *project,
                                                             MrpResource *resource);
    MrpGroup *          mrp_project_get_group_by_name       (MrpProject *project,
                                                             const gchar *name);
    GList *             mrp_project_get_groups              (MrpProject *project);
    void                mrp_project_add_group               (MrpProject *project,
                                                             MrpGroup *group);
    void                mrp_project_remove_group            (MrpProject *project,
                                                             MrpGroup *group);
    MrpTask *           mrp_project_get_task_by_name        (MrpProject *project,
                                                             const gchar *name);
    GList *             mrp_project_get_all_tasks           (MrpProject *project);
    void                mrp_project_insert_task             (MrpProject *project,
                                                             MrpTask *parent,
                                                             gint position,
                                                             MrpTask *task);
    void                mrp_project_remove_task             (MrpProject *project,
                                                             MrpTask *task);
    gboolean            mrp_project_move_task               (MrpProject *project,
                                                             MrpTask *task,
                                                             MrpTask *sibling,
                                                             MrpTask *parent,
                                                             gboolean before,
                                                             GError **error);
    MrpTask *           mrp_project_get_root_task           (MrpProject *project);
    void                mrp_project_task_traverse           (MrpProject *project,
                                                             MrpTask *root,
                                                             MrpTaskTraverseFunc func,
                                                             gpointer user_data);
    void                mrp_project_reschedule              (MrpProject *project);
    gint                mrp_project_calculate_task_work     (MrpProject *project,
                                                             MrpTask *task,
                                                             mrptime start,
                                                             mrptime finish);
    GList *             mrp_project_get_properties_from_type
                                                            (MrpProject *project,
                                                             GType object_type);
    void                mrp_project_add_property            (MrpProject *project,
                                                             GType object_type,
                                                             MrpProperty *property,
                                                             gboolean user_defined);
    void                mrp_project_remove_property         (MrpProject *project,
                                                             GType object_type,
                                                             const gchar *name);
    MrpProperty *       mrp_project_get_property            (MrpProject *project,
                                                             const gchar *name,
                                                             GType object_type);
    gboolean            mrp_project_has_property            (MrpProject *project,
                                                             GType owner_type,
                                                             const gchar *name);
    MrpCalendar *       mrp_project_get_root_calendar       (MrpProject *project);
    MrpCalendar *       mrp_project_get_calendar            (MrpProject *project);

## Object Hierarchy

      GObject
       +----MrpObject
             +----MrpProject

## Properties

      "calendar"                 MrpCalendar*          : Read / Write
      "default-group"            MrpGroup*             : Read / Write
      "manager"                  gchar*                : Read / Write
      "name"                     gchar*                : Read / Write
      "organization"             gchar*                : Read / Write
      "phase"                    gchar*                : Read / Write
      "phases"                   gpointer              : Read / Write
      "project-start"            glong                 : Read / Write

## Signals

      "calendar-tree-changed"                          : Run Last
      "day-added"                                      : Run Last
      "day-changed"                                    : Run Last
      "day-removed"                                    : Run Last
      "default-group-changed"                          : Run Last
      "group-added"                                    : Run Last
      "group-removed"                                  : Run Last
      "loaded"                                         : Run Last
      "needs-saving-changed"                           : Run Last
      "property-added"                                 : Run Last
      "property-changed"                               : Run Last
      "property-removed"                               : Run Last
      "resource-added"                                 : Run Last
      "resource-removed"                               : Run Last
      "task-inserted"                                  : Run Last
      "task-moved"                                     : Run Last
      "task-removed"                                   : Run Last

## Description

## Details

### MrpProjectPriv

    typedef struct _MrpProjectPriv MrpProjectPriv;

A private struct for internal use only. The definition of this structure is not publically available.

### struct MrpProject

    struct MrpProject;

Object representing a project.

### MrpTaskTraverseFunc ()

    gboolean            (*MrpTaskTraverseFunc)              (MrpTask *Param1,
                                                             gpointer Param2);

A function to use with `mrp_project_task_traverse()`. `task` is the currently traversed task, and `data` is the user data passed to the `mrp_project_task_traverse()`. The traversal can be stopped by returning `TRUE`.

Returns : | `TRUE` if the traversal is to be stopped.

### mrp_project_new ()

    MrpProject *        mrp_project_new                     (MrpApplication *app);

Creates a new MrpProject.

`app` : | MrpApplication that creates the new project.
Returns : | the MrpProject

### mrp_project_is_empty ()

    gboolean            mrp_project_is_empty                (MrpProject *project);

Checks whether a project is empty.

`project` : | an MrpProject
Returns : | `TRUE` if `project` is empty, otherwise `FALSE`

### mrp_project_needs_saving ()

    gboolean            mrp_project_needs_saving            (MrpProject *project);

Checks if `project` needs saving

`project` : | an MrpProject
Returns : | `TRUE` if project has been altered since last save, otherwise `FALSE`

### mrp_project_get_project_start ()

    mrptime             mrp_project_get_project_start       (MrpProject *project);

Fetches the project start from `project`.

`project` : | an MrpProject
Returns : | the project start

### mrp_project_set_project_start ()

    void                mrp_project_set_project_start       (MrpProject *project,
                                                             mrptime start);

Set the project start.

`project` : | an MrpProject
`start` : | project start time

### mrp_project_load ()

    gboolean            mrp_project_load                    (MrpProject *project,
                                                             const gchar *uri,
                                                             GError **error);

Loads a project stored at `uri` into `project`.

`project` : | an MrpProject
`uri` : | the URI where project should be read from
`error` : | location to store error, or `NULL`
Returns : | Returns `TRUE` on success, otherwise `FALSE`.

### mrp_project_save ()

    gboolean            mrp_project_save                    (MrpProject *project,
                                                             gboolean force,
                                                             GError **error);

Saves a project.

`project` : | an MrpProject
`force` : | overwrite changes done by someone else if necessary
`error` : | location to store error, or `NULL`
Returns : | `TRUE` on success, otherwise `FALSE`

### mrp_project_save_to_xml ()

    gboolean            mrp_project_save_to_xml             (MrpProject *project,
                                                             gchar **str,
                                                             GError **error);

Saves a project as XML to a string buffer.

`project` : | an MrpProject
`str` : | location to store XML string
`error` : | location to store error, or `NULL`
Returns : | `TRUE` on success, otherwise `FALSE`

### mrp_project_load_from_xml ()

    gboolean            mrp_project_load_from_xml           (MrpProject *project,
                                                             const gchar *str,
                                                             GError **error);

Loads a project from XML data into `project`.

`project` : | an MrpProject
`str` : | XML string with project data to read from
`error` : | location to store error, or `NULL`
Returns : | Returns `TRUE` on success, otherwise `FALSE`.

### mrp_project_save_as ()

    gboolean            mrp_project_save_as                 (MrpProject *project,
                                                             const gchar *uri,
                                                             gboolean force,
                                                             GError **error);

Saves a project to a specific URI.

`project` : | an MrpProject
`uri` : | URI to save to
`force` : | overwrite an existing file if necessary
`error` : | location to store error, or `NULL`
Returns : | `TRUE` on success, otherwise `FALSE`

### mrp_project_close ()

    void                mrp_project_close                   (MrpProject *project);

Closes a project.

`project` : | an MrpProject

### mrp_project_get_uri ()

    const gchar *       mrp_project_get_uri                 (MrpProject *project);

Fetches the URI from `project`.

`project` : | an MrpProject
Returns : | the URI of `project`

### mrp_project_get_resource_by_name ()

    MrpResource *       mrp_project_get_resource_by_name    (MrpProject *project,
                                                             const gchar *name);

Retrieves the first resource in the list that match the name.

`project` : | an MrpProject
`name` : | name to search for
Returns : | an MrpResource or `NULL` if not found

### mrp_project_get_resources ()

    GList *             mrp_project_get_resources           (MrpProject *project);

Fetches the list of resources in `project`. This list should not be freed and if caller needs to manipulate it, a copy needs to be made first.

`project` : | an MrpProject
Returns : | the resource list of `project`

### mrp_project_add_resource ()

    void                mrp_project_add_resource            (MrpProject *project,
                                                             MrpResource *resource);

Adds `resource` to the list of resources in `project`.

`project` : | an MrpProject
`resource` : | MrpResource to add

### mrp_project_remove_resource ()

    void                mrp_project_remove_resource         (MrpProject *project,
                                                             MrpResource *resource);

Removes `resource` from `project`.

`project` : | an MrpProject
`resource` : | MrpResource to remove

### mrp_project_get_group_by_name ()

    MrpGroup *          mrp_project_get_group_by_name       (MrpProject *project,
                                                             const gchar *name);

Retrieves the first group with name that matches `name`

`project` : | an MrpProject
`name` : | a name to look for
Returns : | an MrpGroup or `NULL` if not found

### mrp_project_get_groups ()

    GList *             mrp_project_get_groups              (MrpProject *project);

Fetches the list of groups in `project`. The list should not be freed and if caller needs to manipulate it, a copy needs to be made first.

`project` : | an MrpProject
Returns : | the group list of `project`

### mrp_project_add_group ()

    void                mrp_project_add_group               (MrpProject *project,
                                                             MrpGroup *group);

Adds `group` to the list of groups in `project`.

`project` : | an MrpProject
`group` : | MrpGroup to remove

### mrp_project_remove_group ()

    void                mrp_project_remove_group            (MrpProject *project,
                                                             MrpGroup *group);

Removes `group` from `project`.

`project` : | an MrpProject
`group` : | MrpGroup to remove

### mrp_project_get_task_by_name ()

    MrpTask *           mrp_project_get_task_by_name        (MrpProject *project,
                                                             const gchar *name);

Retrieves the first task with name matching `name`. Uses task_traverse to traverse all tasks.

`project` : | an MrpProject
`name` : | the name to look for
Returns : | an MrpTask or `NULL` if not found.

### mrp_project_get_all_tasks ()

    GList *             mrp_project_get_all_tasks           (MrpProject *project);

Returns a new list of the tasks in `project`. The caller needs to free the list with `g_list_free()`, but not the values in it.

`project` : | an MrpProject
Returns : | a newly allocated list of the tasks

### mrp_project_insert_task ()

    void                mrp_project_insert_task             (MrpProject *project,
                                                             MrpTask *parent,
                                                             gint position,
                                                             MrpTask *task);

Insert `task` in the task tree with `parent` at `position` among other children.

`project` : | an MrpProject
`parent` : | MrpTask that will be parent to inserted task
`position` : | position among children to insert task
`task` : | MrpTask to insert

### mrp_project_remove_task ()

    void                mrp_project_remove_task             (MrpProject *project,
                                                             MrpTask *task);

Removes `task` from the task tree in `project`.

`project` : | an MrpProject
`task` : | MrpTask to remove

### mrp_project_move_task ()

    gboolean            mrp_project_move_task               (MrpProject *project,
                                                             MrpTask *task,
                                                             MrpTask *sibling,
                                                             MrpTask *parent,
                                                             gboolean before,
                                                             GError **error);

Move the task in the task tree. If `sibling` is `NULL` task will be placed first among the children of `parent` if `before` is `TRUE`, otherwise it will be placed last. If `sibling` is set, `task` will be placed before or after `sibling` depending on the value of `before`.

`project` : | an MrpProject
`task` : | MrpTask to move
`sibling` : | MrpTask that `task` will be placed next to, can be `NULL`
`parent` : | MrpTask the new parent
`before` : | whether to put `task` before or after `sibling`.
`error` : | location to store error, or NULL
Returns : | `TRUE` on success, otherwise `FALSE`

### mrp_project_get_root_task ()

    MrpTask *           mrp_project_get_root_task           (MrpProject *project);

Fetches the root task from `project`.

`project` : | an MrpProject
Returns : | the root task

### mrp_project_task_traverse ()

    void                mrp_project_task_traverse           (MrpProject *project,
                                                             MrpTask *root,
                                                             MrpTaskTraverseFunc func,
                                                             gpointer user_data);

Calls `func` on each task under `root` in the task tree. `user_data` is passed to `func`. If `func` returns `TRUE`, the traversal is stopped.

`project` : | an MrpProject
`root` : | MrpTask indicates where traversing will begin.
`func` : | the function to call for each task
`user_data` : | user data passed to the function

### mrp_project_reschedule ()

    void                mrp_project_reschedule              (MrpProject *project);

Reschedules the project, calculating task start/end/duration etc.

`project` : | an MrpProject

### mrp_project_calculate_task_work ()

    gint                mrp_project_calculate_task_work     (MrpProject *project,
                                                             MrpTask *task,
                                                             mrptime start,
                                                             mrptime finish);

Calculates the work needed to achieve the given start and finish time, with the allocated resources' calendards in consideration.

`project` : | an MrpProject
`task` : | an MrpTask
`start` : | a start time, or if `-1`, the task start time is to be used
`finish` : | a finish time
Returns : | The calculated work.

### mrp_project_get_properties_from_type ()

    GList *             mrp_project_get_properties_from_type
                                                            (MrpProject *project,
                                                             GType object_type);

Fetches a list of the properties belonging to `project` and applies to `object_type`. The list should not be freed and needs to be copied before modified.

`project` : | an MrpProject
`object_type` : | a GType
Returns : | The list of properties.

### mrp_project_add_property ()

    void                mrp_project_add_property            (MrpProject *project,
                                                             GType object_type,
                                                             MrpProperty *property,
                                                             gboolean user_defined);

Add a custom property to `project`. The `object_type` specifies what kind of objects the property applies to. `user_defined` specifies whether the property is created by the user or by some plugin.

`project` : | an MrpProject
`object_type` : | the owner type
`property` : | an MrpProperty
`user_defined` : | whether the property is defined through a user interface

### mrp_project_remove_property ()

    void                mrp_project_remove_property         (MrpProject *project,
                                                             GType object_type,
                                                             const gchar *name);

Removes the property corresponding to `object_type` and `name` from `project`.

`project` : | an MrpProject
`object_type` : | a GType specifing object type to remove property from
`name` : | the name of the property

### mrp_project_get_property ()

    MrpProperty *       mrp_project_get_property            (MrpProject *project,
                                                             const gchar *name,
                                                             GType object_type);

Fetches an MrpProperty that corresponds to `name` and `object_type`. This is mainly for language bindings and should not be used for other cases.

`project` : | an MrpProject
`name` : | the name of the property
`object_type` : | object type the property belongs to
Returns : | An MrpProperty, if found, otherwise `NULL`.

### mrp_project_has_property ()

    gboolean            mrp_project_has_property            (MrpProject *project,
                                                             GType owner_type,
                                                             const gchar *name);

Checks if `project` has a property named `name` applying to object of type `object_type`.

`project` : | an MrpProperty
`owner_type` : | a GType specifing object type look for property on
`name` : | the name of the property
Returns : | `TRUE` if property `name` exists on objects of type `object_type`

### mrp_project_get_root_calendar ()

    MrpCalendar *       mrp_project_get_root_calendar       (MrpProject *project);

Fetches the root calendar of `project`.

`project` : | an MrpProject
Returns : | the root calendar of `project`

### mrp_project_get_calendar ()

    MrpCalendar *       mrp_project_get_calendar            (MrpProject *project);

Fetches the calendar used by `project`.

`project` : | an MrpProject
Returns : | the calendar used by `project`

## Property Details

### The `"calendar"` property

      "calendar"                 MrpCalendar*          : Read / Write

The calendar used in the project.

### The `"default-group"` property

      "default-group"            MrpGroup*             : Read / Write

Default group for new resources.

### The `"manager"` property

      "manager"                  gchar*                : Read / Write

The manager of the project.

Default value: ""

### The `"name"` property

      "name"                     gchar*                : Read / Write

The name of the project.

Default value: ""

### The `"organization"` property

      "organization"             gchar*                : Read / Write

The organization behind the project.

Default value: ""

### The `"phase"` property

      "phase"                    gchar*                : Read / Write

The phase the project is in.

Default value: ""

### The `"phases"` property

      "phases"                   gpointer              : Read / Write

The various phases the project can be in.

### The `"project-start"` property

      "project-start"            glong                 : Read / Write

The start date of the project.

Allowed values: >= 0

Default value: 0

## Signal Details

### The `"calendar-tree-changed"` signal

    void                user_function                      (MrpProject  *mrpproject,
                                                            MrpCalendar *arg1,
                                                            gpointer     user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"day-added"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            gpointer    arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"day-changed"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            gpointer    arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"day-removed"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            gpointer    arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"default-group-changed"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            MrpGroup   *arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"group-added"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            MrpGroup   *arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"group-removed"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            MrpGroup   *arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"loaded"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"needs-saving-changed"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            gboolean    arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"property-added"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            glong       arg1,
                                                            gpointer    arg2,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"property-changed"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            gpointer    arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"property-removed"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            gpointer    arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"resource-added"` signal

    void                user_function                      (MrpProject  *mrpproject,
                                                            MrpResource *arg1,
                                                            gpointer     user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"resource-removed"` signal

    void                user_function                      (MrpProject  *mrpproject,
                                                            MrpResource *arg1,
                                                            gpointer     user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"task-inserted"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            MrpTask    *arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"task-moved"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            MrpTask    *arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.

### The `"task-removed"` signal

    void                user_function                      (MrpProject *mrpproject,
                                                            MrpTask    *arg1,
                                                            gpointer    user_data)       : Run Last

`mrpproject` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.