/** * gdl_dock_object_type_from_nick: * @nick: The nickname for the object type * * Finds the object type assigned to a given nickname. * * Returns: If the nickname has previously been assigned, then the corresponding * object type is returned. Otherwise, %G_TYPE_NONE. */ GType gdl_dock_object_type_from_nick (const gchar *nick) { GType type = G_TYPE_NONE; gboolean nick_is_in_register = FALSE; guint i = 0; if (!dock_register) gdl_dock_object_register_init (); for (i = 0; i < dock_register->len; i++) { struct DockRegisterItem item = g_array_index (dock_register, struct DockRegisterItem, i); if (!g_strcmp0 (nick, item.nick)) { nick_is_in_register = TRUE; type = (GType) item.type; } } if (!nick_is_in_register) { /* try searching in the glib type system */ type = g_type_from_name (nick); } return type; }
/** * gdl_dock_object_set_type_for_nick: * @nick: The nickname for the object type * @type: The object type * * Assigns an object type to a given nickname. If the nickname already exists, * then it reassigns it to a new object type. * * Returns: If the nick was previously assigned, the old type is returned. * Otherwise, %G_TYPE_NONE. */ GType gdl_dock_object_set_type_for_nick (const gchar *nick, GType type) { GType old_type = G_TYPE_NONE; guint i = 0; struct DockRegisterItem new_item; new_item.nick = g_strdup(nick); new_item.type = (gpointer) type; if (!dock_register) gdl_dock_object_register_init (); g_return_val_if_fail (g_type_is_a (type, GDL_TYPE_DOCK_OBJECT), G_TYPE_NONE); for (i = 0; i < dock_register->len; i++) { struct DockRegisterItem item = g_array_index (dock_register, struct DockRegisterItem, i); if (!g_strcmp0 (nick, item.nick)) { old_type = (GType) item.type; g_array_insert_val (dock_register, i, new_item); } } return old_type; }
G_CONST_RETURN gchar * gdl_dock_object_nick_from_type (GType type) { GTuples *tuples; gchar *nick = NULL; if (!dock_register) gdl_dock_object_register_init (); if (g_relation_count (dock_register, (gpointer) type, INDEX_TYPE) > 0) { tuples = g_relation_select (dock_register, (gpointer) type, INDEX_TYPE); nick = (gchar *) g_tuples_index (tuples, 0, INDEX_NICK); g_tuples_destroy (tuples); } return nick ? nick : g_type_name (type); }
/** * gdl_dock_object_nick_from_type: * @type: The type for which to find the nickname * * Finds the nickname for a given type * * Returns: If the object has a nickname, then it is returned. * Otherwise, the type name. */ const gchar * gdl_dock_object_nick_from_type (GType type) { gchar *nick = NULL; guint i = 0; if (!dock_register) gdl_dock_object_register_init (); for (i=0; i < dock_register->len; i++) { struct DockRegisterItem item = g_array_index (dock_register, struct DockRegisterItem, i); if (g_direct_equal (item.type, (gpointer) type)) nick = g_strdup (item.nick); } return nick ? nick : g_type_name (type); }
GType gdl_dock_object_set_type_for_nick (const gchar *nick, GType type) { GType old_type = G_TYPE_NONE; if (!dock_register) gdl_dock_object_register_init (); g_return_val_if_fail (g_type_is_a (type, GDL_TYPE_DOCK_OBJECT), G_TYPE_NONE); if (g_relation_count (dock_register, (gpointer) nick, INDEX_NICK) > 0) { old_type = gdl_dock_object_type_from_nick (nick); g_relation_delete (dock_register, (gpointer) nick, INDEX_NICK); } g_relation_insert (dock_register, nick, type); return old_type; }
GType gdl_dock_object_type_from_nick (const gchar *nick) { GTuples *tuples; GType type = G_TYPE_NONE; if (!dock_register) gdl_dock_object_register_init (); if (g_relation_count (dock_register, (gpointer) nick, INDEX_NICK) > 0) { tuples = g_relation_select (dock_register, (gpointer) nick, INDEX_NICK); type = (GType) g_tuples_index (tuples, 0, INDEX_TYPE); g_tuples_destroy (tuples); } else { /* try searching in the glib type system */ type = g_type_from_name (nick); } return type; }