diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2020-12-05 00:39:57 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2020-12-05 00:39:57 (GMT) |
commit | 1e3fa9b79ebe55698e2aa7d5484baec7e8400a8f (patch) | |
tree | c3581ceb7f8586f2f6822de563927a1246dd33a5 /src/gui/editor.c | |
parent | 6122bb7f34b178d4c07285adae16afcc55294b1f (diff) |
Rewritten the whole API dealing with panels.
Diffstat (limited to 'src/gui/editor.c')
-rw-r--r-- | src/gui/editor.c | 66 |
1 files changed, 43 insertions, 23 deletions
diff --git a/src/gui/editor.c b/src/gui/editor.c index 6e98423..1665ff4 100644 --- a/src/gui/editor.c +++ b/src/gui/editor.c @@ -43,6 +43,7 @@ #include "core/panels.h" #include "core/global.h" #include "core/items.h" +#include "panels/view.h" #include "tb/portions.h" #include "../common/extstr.h" #include "../core/global.h" @@ -117,10 +118,10 @@ static void on_dock_station_created(GtkTiledGrid *, GtkDockStation *, gpointer); static void on_dock_item_switch(GtkDockStation *, GtkWidget *, gpointer); /* Encastre comme demandé un panneau dans l'éditeur. */ -static void dock_panel_into_current_station(GtkCheckMenuItem *, GPanelItem *); +static void dock_panel_into_current_station(GtkCheckMenuItem *, gpointer); /* Ajout d'un panneau dans la liste adaptée des menus. */ -static bool add_side_panel_to_menu(GPanelItem *, GtkContainer *); +static bool add_side_panel_to_menu(GPanelItemClass *, GtkContainer *); /* Réagit à une demande de menu pour rajouter des panneaux. */ static void on_dock_menu_request(GtkDockStation *, GtkWidget *, gpointer); @@ -361,7 +362,7 @@ static void connect_all_editor_signals(GtkBuilder *builder, GObject *obj, const { if (strncmp(hdl_name, "mcb_", 4) == 0) { - bar = G_MENU_BAR(find_editor_item_by_key("menubar")); + bar = G_MENU_BAR(find_editor_item_by_type(G_TYPE_MENU_BAR)); arg = bar; g_object_unref(G_OBJECT(bar)); } @@ -739,7 +740,7 @@ static void on_dock_item_switch(GtkDockStation *station, GtkWidget *widget, gpoi /****************************************************************************** * * * Paramètres : menuitem = élement de menu actionné. * -* item = panneau à ajouter à l'interface graphique. * +* type_ptr = type de panneau à mettre en place. * * * * Description : Encastre comme demandé un panneau dans l'éditeur. * * * @@ -749,18 +750,21 @@ static void on_dock_item_switch(GtkDockStation *station, GtkWidget *widget, gpoi * * ******************************************************************************/ -static void dock_panel_into_current_station(GtkCheckMenuItem *menuitem, GPanelItem *item) +static void dock_panel_into_current_station(GtkCheckMenuItem *menuitem, gpointer type_ptr) { + GType type; /* Type de panneau considérée */ GtkWidget *parent; /* Menu parent avec chemin */ const char *new_path; /* Nouveau chemin à appliquer */ + GPanelItem *panel; /* Panneau à mettre en place */ + + type = GPOINTER_TO_SIZE(type_ptr); parent = gtk_widget_get_parent(GTK_WIDGET(menuitem)); new_path = g_object_get_data(G_OBJECT(parent), "path"); - gtk_panel_item_set_path(item, new_path); - - g_panel_item_dock(item); + panel = g_panel_item_new(type, new_path); + g_object_unref(G_OBJECT(panel)); } @@ -773,47 +777,63 @@ static void dock_panel_into_current_station(GtkCheckMenuItem *menuitem, GPanelIt * * * Description : Ajout d'un panneau dans la liste adaptée des menus. * * * -* Retour : - * +* Retour : true, par conformité avec browse_all_item_panels(). * * * * Remarques : - * * * ******************************************************************************/ -static bool add_side_panel_to_menu(GPanelItem *panel, GtkContainer *support) +static bool add_side_panel_to_menu(GPanelItemClass *class, GtkContainer *support) { + GEditorItem *item; /* Instance de panneau en place*/ + gpointer type_ptr; /* Type de panneau traité */ char *key; /* Désignation de l'entrée */ GtkWidget *submenuitem; /* Sous-élément de menu */ - const char *bindings; /* Raccourcis clavier bruts */ + char *bindings; /* Raccourcis clavier bruts */ GtkBuilder *builder; /* Constructeur principal */ /* Profil qui ne cadre pas ? */ - if (gtk_panel_item_get_personality(panel) != PIP_SINGLETON) + if (gtk_panel_item_class_get_personality(class) != PIP_SINGLETON) goto exit; - if (g_panel_item_is_docked(panel)) - goto exit; + item = find_editor_item_by_type(G_TYPE_FROM_CLASS(class)); + + if (item != NULL) + { + if (g_panel_item_is_docked(G_PANEL_ITEM(item))) + goto exit_ref; + } /* Elément de menu */ - key = g_editor_item_get_key(G_EDITOR_ITEM(panel)); + type_ptr = GSIZE_TO_POINTER(G_TYPE_FROM_CLASS(class)); + + key = g_editor_item_class_get_key(G_EDITOR_ITEM_CLASS(class)); submenuitem = qck_create_menu_item(NULL, NULL, key, - G_CALLBACK(dock_panel_into_current_station), panel); + G_CALLBACK(dock_panel_into_current_station), type_ptr); free(key); - bindings = gtk_panel_item_get_key_bindings(panel); + bindings = gtk_panel_item_class_get_key_bindings(class); if (bindings != NULL) { builder = get_editor_builder(); add_accelerator_to_widget(builder, submenuitem, bindings); g_object_unref(G_OBJECT(builder)); + + free(bindings); + } gtk_container_add(support, submenuitem); + exit_ref: + + g_object_unref(G_OBJECT(item)); + exit: return true; @@ -838,7 +858,7 @@ static bool add_side_panel_to_menu(GPanelItem *panel, GtkContainer *support) static void on_dock_menu_request(GtkDockStation *station, GtkWidget *button, gpointer unused) { GtkWidget *active; /* Composant actif modèle */ - GPanelItem *model; /* Panneau encapsulé */ + GPanelItemClass *model; /* Panneau encapsulé */ GtkContainer *menu; /* Support à retourner */ GList *children; /* Composants mis en place */ GtkWidget *nopanel; /* Sous-élément de menu */ @@ -847,9 +867,9 @@ static void on_dock_menu_request(GtkDockStation *station, GtkWidget *button, gpo active = gtk_notebook_get_nth_page(GTK_NOTEBOOK(station), 0); - model = G_PANEL_ITEM(g_object_get_data(G_OBJECT(active), "dockable")); + model = G_PANEL_ITEM_GET_CLASS(g_object_get_data(G_OBJECT(active), "dockable")); - g_object_set_data_full(G_OBJECT(menu), "path", strdup(gtk_panel_item_get_path(model)), free); + g_object_set_data_full(G_OBJECT(menu), "path", gtk_panel_item_class_get_path(model), free); /* Ajout des panneaux uniques */ @@ -1012,9 +1032,9 @@ static void on_editor_loaded_content_added(GStudyProject *project, GLoadedConten GPanelItem *panel; /* Nouveau panneau à integrer */ GtkWidget *selected; /* Interface de prédilection */ - panel = g_panel_item_new(PIP_BINARY_VIEW, G_NAMED_WIDGET(content), true, "M"); + panel = g_view_panel_new(G_NAMED_WIDGET(content)); - register_panel_item(panel, get_main_configuration()); + register_panel_item(G_TYPE_VIEW_PANEL, get_main_configuration()); selected = g_editor_item_get_widget(G_EDITOR_ITEM(panel)); @@ -1111,7 +1131,7 @@ static void remove_loaded_content_from_editor(GtkWidget *widget, GLoadedContent panel = G_PANEL_ITEM(g_object_get_data(G_OBJECT(tab), "dockable")); - if (gtk_panel_item_get_personality(panel) != PIP_BINARY_VIEW) + if (gtk_panel_item_class_get_personality(G_PANEL_ITEM_GET_CLASS(panel)) != PIP_BINARY_VIEW) continue; built = get_loaded_panel_from_built_view(tab); |