/* OpenIDA - Outil d'analyse de fichiers binaires * gtkdockitem.c - mémorisation des propriétés d'un panneau dockable * * Copyright (C) 2009 Cyrille Bagard * * This file is part of OpenIDA. * * OpenIDA is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * OpenIDA is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Foobar. If not, see . */ #include "gtkdockitem.h" #include "iodamarshal.h" /* Procède à l'initialisation d'un panneau dockable. */ static void g_dock_item_class_init(GDockItemClass *); /* Supprime toutes les références externes. */ static void g_dock_item_class_dispose(GDockItem *); /* Procède à la libération totale de la mémoire. */ static void g_dock_item_class_finalize(GDockItem *); /* Détermine le type d'un panneau dockable. */ G_DEFINE_TYPE(GDockItem, g_dock_item, G_TYPE_OBJECT) /****************************************************************************** * * * Paramètres : klass = classe GTK à initialiser. * * * * Description : Procède à l'initialisation d'un panneau dockable. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void g_dock_item_class_init(GDockItemClass *klass) { GObjectClass *object; /* Autre version de la classe */ object = G_OBJECT_CLASS(klass); object->dispose = g_dock_item_class_dispose; object->finalize = g_dock_item_class_finalize; g_signal_new("content-changed", G_TYPE_DOCK_ITEM, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(GDockItemClass, content_changed), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, GTK_TYPE_WIDGET, GTK_TYPE_WIDGET); } /****************************************************************************** * * * Paramètres : ditem = instance d'objet GLib à traiter. * * * * Description : Supprime toutes les références externes. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void g_dock_item_class_dispose(GDockItem *ditem) { gpointer obj_class; /* Classe parente */ gtk_widget_unref(ditem->panel); obj_class = g_type_class_peek_parent(G_DOCK_ITEM_GET_CLASS(ditem)); G_OBJECT_CLASS(obj_class)->dispose(G_OBJECT(ditem)); } /****************************************************************************** * * * Paramètres : ditem = instance d'objet GLib à traiter. * * * * Description : Procède à la libération totale de la mémoire. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void g_dock_item_class_finalize(GDockItem *ditem) { gpointer obj_class; /* Classe parente */ g_free(ditem->name); g_free(ditem->desc); obj_class = g_type_class_peek_parent(G_DOCK_ITEM_GET_CLASS(ditem)); G_OBJECT_CLASS(obj_class)->finalize(G_OBJECT(ditem)); } /****************************************************************************** * * * Paramètres : ditem = composant GTK à initialiser. * * * * Description : Procède à l'initialisation d'un panneau dockable. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void g_dock_item_init(GDockItem *ditem) { ditem->name = NULL; } /****************************************************************************** * * * Paramètres : name = nouveau nom à prendre en compte. * * panel = nouveau panneau à prendre en compte. * * * * Description : Crée une nouvelle mémorisation de panneau dockable. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ GDockItem *g_dock_item_new(const gchar *name, GtkWidget *panel) { GDockItem *result; /* Composant à retourner */ result = g_object_new(G_TYPE_DOCK_ITEM, NULL); g_dock_item_set_name(result, name); g_dock_item_set_panel(result, panel); return result; } /****************************************************************************** * * * Paramètres : ditem = composant GTK à modifier. * * name = nouveau nom à prendre en compte. * * * * Description : Change le nom du panneau dockable pour son onglet. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void g_dock_item_set_name(GDockItem *ditem, const gchar *name) { if (ditem->name != NULL) g_free(ditem->name); ditem->name = g_strdup(name); } /****************************************************************************** * * * Paramètres : ditem = composant GTK à modifier. * * * * Description : Fournit le nom du panneau dockable pour son onglet. * * * * Retour : Etiquette à faire apparaître sur un onglet. * * * * Remarques : - * * * ******************************************************************************/ const gchar *g_dock_item_get_name(GDockItem *ditem) { return ditem->name; } /****************************************************************************** * * * Paramètres : ditem = composant GTK à modifier. * * desc = nouvelle description à prendre en compte. * * * * Description : Change la description du panneau dockable pour son titre. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void g_dock_item_set_desc(GDockItem *ditem, const gchar *desc) { if (ditem->desc != NULL) g_free(ditem->desc); ditem->desc = g_strdup(desc); } /****************************************************************************** * * * Paramètres : ditem = composant GTK à modifier. * * * * Description : Fournit la description du panneau dockable pour son titre. * * * * Retour : Etiquette à faire apparaître sur un onglet. * * * * Remarques : - * * * ******************************************************************************/ const gchar *g_dock_item_get_desc(GDockItem *ditem) { const char *result; /* CHaîne à renvoyer */ result = ditem->desc; if (result == NULL) result = g_dock_item_get_name(ditem); return result; } /****************************************************************************** * * * Paramètres : ditem = composant GTK à modifier. * * panel = nouveau panneau à prendre en compte. * * * * Description : Change le panneau dockable associé à l'élément. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void g_dock_item_set_panel(GDockItem *ditem, GtkWidget *panel) { GtkWidget *old; /* Ancien panneau remplacé */ old = ditem->panel; ditem->panel = panel; gtk_widget_ref(panel); if (old != NULL) { g_signal_emit_by_name(ditem, "content-changed", old, panel); gtk_widget_unref(old); } } /****************************************************************************** * * * Paramètres : ditem = composant GTK à modifier. * * * * Description : Fournit le panneau dockable associé à l'élément. * * * * Retour : Panneau actuellement associé. * * * * Remarques : - * * * ******************************************************************************/ GtkWidget *g_dock_item_get_panel(GDockItem *ditem) { return ditem->panel; }