diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-08-11 08:40:45 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-08-11 08:40:45 (GMT) |
commit | 45c220eb6c7cb1076788307ace4b6f3df2e5e941 (patch) | |
tree | b018cf25fc23190ec430afec0a612d29cb142757 /src/gui/core | |
parent | d19bfec27f4ed528c5ca569dcbb6621185db0c48 (diff) |
Created a new widget to handle tiled panels.
Diffstat (limited to 'src/gui/core')
-rw-r--r-- | src/gui/core/core.c | 44 | ||||
-rw-r--r-- | src/gui/core/global.c | 41 | ||||
-rw-r--r-- | src/gui/core/global.h | 7 | ||||
-rw-r--r-- | src/gui/core/panels.c | 27 | ||||
-rw-r--r-- | src/gui/core/panels.h | 5 |
5 files changed, 114 insertions, 10 deletions
diff --git a/src/gui/core/core.c b/src/gui/core/core.c index 598a8eb..2cb75b1 100644 --- a/src/gui/core/core.c +++ b/src/gui/core/core.c @@ -24,12 +24,15 @@ #include "core.h" +#include "global.h" #include "panels.h" - - #include "theme.h" +#include "../menus/menubar.h" +#include "../menus/view.h" +#include "../panels/welcome.h" #include "../../core/params.h" #include "../../glibext/linesegment.h" +#include "../../gtkext/tiledgrid.h" @@ -48,6 +51,9 @@ bool load_all_gui_components(void) { bool result; /* Bilan à retourner */ + GObject *ref; /* Espace de référencements */ + GMenuBar *bar; /* Gestion des menus */ + GtkMenuItem *submenuitem; /* Sous-élément de menu */ load_main_panels(); @@ -55,6 +61,17 @@ bool load_all_gui_components(void) result = load_segment_rendering_parameters(); + /** + * Charge une liste initiale pour activer les raccourcis clavier. + */ + + ref = get_global_ref(); + + bar = G_MENU_BAR(g_object_get_data(ref, "menubar")); + submenuitem = GTK_MENU_ITEM(g_object_get_data(ref, "mnu_view_side_panels")); + + mcb_view_update_side_panels_list(submenuitem, bar); + return result; } @@ -75,8 +92,29 @@ bool load_all_gui_components(void) bool complete_loading_of_all_gui_components(GGenConfig *config) { bool result; /* Bilan à faire remonter */ + GtkTiledGrid *grid; /* Composant d'affichage */ + GPanelItem *welcome; /* Panneau d'accueil */ + + grid = get_tiled_grid(); + + welcome = get_panel_item_by_name(PANEL_WELCOME_ID); + gtk_tiled_grid_set_default_main_panel(grid, welcome); + g_object_unref(G_OBJECT(welcome)); + + /** + * Le fait d'avoir défini le panneau d'accueil par défaut va l'afficher, + * comme il n'y a encore aucun autre panneau. Ce qui va mémoriser son + * paramètre d'affichage par défaut au démarrage à vrai. + * + * Or gtk_panel_item_apply_configuration() s'occupe précisément de + * restaurer les affichages de panneaux au démarrage. + * + * Donc on doit sauter ce panneau d'accueil lors de l'appel suivant. + */ + + result = _browse_all_item_panels(true, (handle_panel_item_fc)gtk_panel_item_apply_configuration, config); - result = browse_all_item_panels((handle_panel_item_fc)gtk_panel_item_apply_configuration, config); + gtk_tiled_grid_restore_positions(grid, config); return result; diff --git a/src/gui/core/global.c b/src/gui/core/global.c index dadece0..bfc2426 100644 --- a/src/gui/core/global.c +++ b/src/gui/core/global.c @@ -31,6 +31,9 @@ static GtkWindow *_editor = NULL; /* Gestion des raccourcis clavier */ static GtkAccelGroup *_accgroup = NULL; +/* Composant d'affichage en tuile */ +static GtkTiledGrid *_grid = NULL; + /* Barre de statut principale */ static GtkStatusStack *_status = NULL; @@ -143,6 +146,44 @@ GtkAccelGroup *get_accel_group(void) /****************************************************************************** * * +* Paramètres : grid = composant GTK à conserver. * +* * +* Description : Note l'adresse du composant d'affichage en tuiles. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void set_tiled_grid(GtkTiledGrid *grid) +{ + _grid = grid; + +} + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Fournit l'adresse du composant d'affichage en tuiles. * +* * +* Retour : Composant GTK à manipuler. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkTiledGrid *get_tiled_grid(void) +{ + return _grid; + +} + + +/****************************************************************************** +* * * Paramètres : status = barre de statut à tenir informée. * * * * Description : Note l'adresse de la barre de statut principale. * diff --git a/src/gui/core/global.h b/src/gui/core/global.h index c80bcb5..86a1ea4 100644 --- a/src/gui/core/global.h +++ b/src/gui/core/global.h @@ -28,6 +28,7 @@ #include "../../analysis/loaded.h" #include "../../glibext/gloadedpanel.h" #include "../../gtkext/gtkstatusstack.h" +#include "../../gtkext/tiledgrid.h" @@ -46,6 +47,12 @@ void set_accel_group(GtkAccelGroup *); /* Fournit le groupe de raccourcis clavier globaux. */ GtkAccelGroup *get_accel_group(void); +/* Note l'adresse du composant d'affichage en tuiles. */ +void set_tiled_grid(GtkTiledGrid *); + +/* Fournit l'adresse du composant d'affichage en tuiles. */ +GtkTiledGrid *get_tiled_grid(void); + /* Note l'adresse de la barre de statut principale. */ void set_global_status(GtkStatusStack *); diff --git a/src/gui/core/panels.c b/src/gui/core/panels.c index 9d11e58..60ff6f2 100644 --- a/src/gui/core/panels.c +++ b/src/gui/core/panels.c @@ -25,6 +25,7 @@ #include "panels.h" +#include "global.h" #include "items.h" #include "../panels/bintree.h" #include "../panels/bookmarks.h" @@ -115,6 +116,7 @@ void load_main_panels(void) void register_panel_item(GPanelItem *item, GGenConfig *config) { GEditorItem *parent; /* Autre version de l'élément */ + GtkTiledGrid *grid; /* Composant d'affichage */ parent = G_EDITOR_ITEM(item); @@ -122,11 +124,10 @@ void register_panel_item(GPanelItem *item, GGenConfig *config) register_editor_item(parent); panels_list_add_tail(item, &_panels_list); - extern void on_panel_item_dock_request(GPanelItem *item, void *data); - extern void on_panel_item_undock_request(GPanelItem *item, void *data); + grid = get_tiled_grid(); - g_signal_connect(item, "dock-request", G_CALLBACK(on_panel_item_dock_request), NULL); - g_signal_connect(item, "undock-request", G_CALLBACK(on_panel_item_undock_request), NULL); + g_signal_connect_swapped(item, "dock-request", G_CALLBACK(gtk_tiled_grid_add), grid); + g_signal_connect_swapped(item, "undock-request", G_CALLBACK(gtk_tiled_grid_remove), grid); gtk_dockable_setup_dnd(GTK_DOCKABLE(item)); @@ -137,7 +138,8 @@ void register_panel_item(GPanelItem *item, GGenConfig *config) /****************************************************************************** * * -* Paramètres : handle = routine à appeler pour chaque panneau. * +* Paramètres : skip = saute le panneau d'accueil lors du parcours ? * +* handle = routine à appeler pour chaque panneau. * * data = données fournies pour accompagner cet appel. * * * * Description : Effectue le parcours de tous les panneaux chargés. * @@ -148,21 +150,31 @@ void register_panel_item(GPanelItem *item, GGenConfig *config) * * ******************************************************************************/ -bool browse_all_item_panels(handle_panel_item_fc handle, void *data) +bool _browse_all_item_panels(bool skip, handle_panel_item_fc handle, void *data) { bool result; /* Résultat à renvoyer */ + GPanelItem *welcome; /* Panneau d'accueil */ GPanelItem *iter; /* Boucle de parcours */ result = true; + if (skip) + welcome = get_panel_item_by_name(PANEL_WELCOME_ID); + panels_list_for_each(iter, _panels_list) { + if (skip && iter == welcome) + continue; + result = handle(iter, data); if (!result) break; } + if (skip) + g_object_unref(G_OBJECT(welcome)); + return result; } @@ -208,6 +220,9 @@ GPanelItem *get_panel_item_by_name(const char *name) browse_all_item_panels((handle_panel_item_fc)look_for_named_panel, &result); + if (result != NULL) + g_object_ref(G_OBJECT(result)); + return result; } diff --git a/src/gui/core/panels.h b/src/gui/core/panels.h index 0c55417..477c1e0 100644 --- a/src/gui/core/panels.h +++ b/src/gui/core/panels.h @@ -44,7 +44,10 @@ void register_panel_item(GPanelItem *, GGenConfig *); typedef bool (* handle_panel_item_fc) (GPanelItem *, void *); /* Effectue le parcours de tous les panneaux chargés. */ -bool browse_all_item_panels(handle_panel_item_fc, void *); +bool _browse_all_item_panels(bool, handle_panel_item_fc, void *); + +#define browse_all_item_panels(h, d) \ + _browse_all_item_panels(false, h, d) /* Recherche un panneau à partir de son nom court. */ GPanelItem *get_panel_item_by_name(const char *); |