summaryrefslogtreecommitdiff
path: root/src/gui/core
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-08-11 08:40:45 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-08-11 08:40:45 (GMT)
commit45c220eb6c7cb1076788307ace4b6f3df2e5e941 (patch)
treeb018cf25fc23190ec430afec0a612d29cb142757 /src/gui/core
parentd19bfec27f4ed528c5ca569dcbb6621185db0c48 (diff)
Created a new widget to handle tiled panels.
Diffstat (limited to 'src/gui/core')
-rw-r--r--src/gui/core/core.c44
-rw-r--r--src/gui/core/global.c41
-rw-r--r--src/gui/core/global.h7
-rw-r--r--src/gui/core/panels.c27
-rw-r--r--src/gui/core/panels.h5
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 *);