## NAObjectId NAObjectId — The Identified Object Base Class Definition |

## Synopsis

    #include <nautilus-actions/na-object-id.h>

    #define             NA_TYPE_OBJECT_ID
    #define             NA_OBJECT_ID                        (object)
    #define             NA_IS_OBJECT_ID                     (object)
                        NAObjectId;
                        NAObjectIdClass;
    gint                na_object_id_sort_alpha_asc         (const NAObjectId *a,
                                                             const NAObjectId *b);
    gint                na_object_id_sort_alpha_desc        (const NAObjectId *a,
                                                             const NAObjectId *b);
    void                na_object_id_prepare_for_paste      (NAObjectId *object,
                                                             gboolean relabel,
                                                             gboolean renumber,
                                                             NAObjectId *parent);
    void                na_object_id_set_copy_of_label      (NAObjectId *object);
    void                na_object_id_set_new_id             (NAObjectId *object,
                                                             const NAObjectId *new_parent);

## Object Hierarchy

      GObject
       +----NAObject
             +----NAObjectId
                   +----NAObjectItem
                   +----NAObjectProfile

## Implemented Interfaces

NAObjectId implements NAIDuplicable.

## Description

This is a pure virtual class, i.e. not an instantiatable one. It serves as the base class for NAObject -derived object which have a unique Id, i.e. for NAObjectItem and NAObjectProfile.

## Details

### NA_TYPE_OBJECT_ID

    #define NA_TYPE_OBJECT_ID                ( na_object_id_get_type())

### NA_OBJECT_ID()

    #define NA_OBJECT_ID( object )           ( G_TYPE_CHECK_INSTANCE_CAST( object, NA_TYPE_OBJECT_ID, NAObjectId ))

### NA_IS_OBJECT_ID()

    #define NA_IS_OBJECT_ID( object )        ( G_TYPE_CHECK_INSTANCE_TYPE( object, NA_TYPE_OBJECT_ID ))

### NAObjectId

    typedef struct _NAObjectId NAObjectId;

### NAObjectIdClass

    typedef struct {
    	/**
    	 * new_id:
    	 * @object: a NAObjectId object.
    	 * @new_parent: possibly the new NAObjectId parent, or NULL.
    	 * If not NULL, this should actually be a NAObjectItem.
    	 *
    	 * If @object is a NAObjectProfile, then @new_parent must be a
    	 * not null NAObjectAction. This function ensures that the new
    	 * profile name does not already exist in the given @new_parent.
    	 *
    	 * This is a pure virtual function which should be implemented by
    	 * the actual class. Actually, we asks for the most-derived class
    	 * which implements this function.
    	 *
    	 * Returns: a new id suitable for this @object.
    	 *
    	 * Since: 2.30
    	 */
    	gchar * ( *new_id )( const NAObjectId *object, const NAObjectId *new_parent );
    } NAObjectIdClass;

The NAObjectIdClass defines some methods available to derived classes.

`new_id` () | Allocate a new id to an existing NAObjectId.

### na_object_id_sort_alpha_asc ()

    gint                na_object_id_sort_alpha_asc         (const NAObjectId *a,
                                                             const NAObjectId *b);

Sort the objects in alphabetical ascending order of their label.

`a` : | first NAObjectId.
`b` : | second NAObjectId.
Returns : | -1 if `a` must be sorted before `b`, 0 if `a` and `b` are equal from the local point of view, 1 if `a` must be sorted after `b`.

Since 2.30

### na_object_id_sort_alpha_desc ()

    gint                na_object_id_sort_alpha_desc        (const NAObjectId *a,
                                                             const NAObjectId *b);

Sort the objects in alphabetical descending order of their label.

`a` : | first NAObjectId.
`b` : | second NAObjectId.
Returns : | -1 if `a` must be sorted before `b`, 0 if `a` and `b` are equal from the local point of view, 1 if `a` must be sorted after `b`.

Since 2.30

### na_object_id_prepare_for_paste ()

    void                na_object_id_prepare_for_paste      (NAObjectId *object,
                                                             gboolean relabel,
                                                             gboolean renumber,
                                                             NAObjectId *parent);

Prepares `object` to be pasted.

If a NAObjectProfile, then `object` is attached to the specified NAObjectAction `action`. The identifier is always renumbered to be suitable with the already existing profiles.

If a NAObjectAction or a NAObjectMenu, a new identifier is allocated if and only if `relabel` is `TRUE`.

Actual relabeling takes place if `relabel` is `TRUE`, depending of the user preferences.

`object` : | the NAObjectId object to be pasted.
`relabel` : | whether this object should be relabeled when pasted.
`renumber` : | whether this item should be renumbered ?
`parent` : | the parent of `object`, or `NULL`.

Since 2.30

### na_object_id_set_copy_of_label ()

    void                na_object_id_set_copy_of_label      (NAObjectId *object);

Sets the 'Copy of' label.

`object` : | the NAObjectId object whose label is to be changed.

Since 2.30

### na_object_id_set_new_id ()

    void                na_object_id_set_new_id             (NAObjectId *object,
                                                             const NAObjectId *new_parent);

Request a new id to the derived class, and set it.

`object` : | the NAObjectId object whose internal identifier is to be set.
`new_parent` : | if `object` is a NAObjectProfile, then `new_parent` should be set to the NAObjectAction new parent. Else, it would not be possible to allocate a new profile id compatible with already existing ones.

Since 2.30