diff options
Diffstat (limited to 'src/gui/window.c')
-rw-r--r-- | src/gui/window.c | 196 |
1 files changed, 186 insertions, 10 deletions
diff --git a/src/gui/window.c b/src/gui/window.c index f45cec9..dbe7e87 100644 --- a/src/gui/window.c +++ b/src/gui/window.c @@ -29,7 +29,9 @@ #include "core/panels.h" #include "dialogs/about.h" #include "dialogs/preferences.h" +#include "panels/logs.h" #include "panels/welcome.h" +#include "../gtkext/grid.h" #include "../gtkext/helpers.h" #include "../gtkext/statusstack.h" @@ -42,10 +44,25 @@ static void gtk_framework_window_class_init(GtkFrameworkWindowClass *); static void gtk_framework_window_init(GtkFrameworkWindow *); /* Supprime toutes les références externes. */ -static void gtk_framework_window_dispose(GtkFrameworkWindow *); +static void gtk_framework_window_dispose(GObject *); /* Procède à la libération totale de la mémoire. */ -static void gtk_framework_window_finalize(GtkFrameworkWindow *); +static void gtk_framework_window_finalize(GObject *); + +/* Bascule l'affichage d'un panneau de bordure. */ +static void gtk_framework_window_toggle_pannel_visibility(GtkFrameworkWindow *, TilingGridBorder); + +/* Réagit à une activation de bascule du panneau supérieur. */ +static void gtk_framework_window_activate_toggle_top(GSimpleAction *, GVariant *, gpointer); + +/* Réagit à une activation de bascule du panneau de gauche. */ +static void gtk_framework_window_activate_toggle_left(GSimpleAction *action, GVariant *, gpointer); + +/* Réagit à une activation de bascule du panneau de droite. */ +static void gtk_framework_window_activate_toggle_right(GSimpleAction *, GVariant *, gpointer); + +/* Réagit à une activation de bascule du panneau inférieur. */ +static void gtk_framework_window_activate_toggle_bottom(GSimpleAction *, GVariant *, gpointer); /* Réagit à une activation du menu "Préférences" de la fenetre. */ static void gtk_framework_window_activate_preferences(GSimpleAction *, GVariant *, gpointer); @@ -83,6 +100,7 @@ static void gtk_framework_window_class_init(GtkFrameworkWindowClass *class) widget = GTK_WIDGET_CLASS(class); + g_type_ensure(GTK_TYPE_TILING_GRID); g_type_ensure(GTK_TYPE_STATUS_STACK); gtk_widget_class_set_template_from_resource(widget, "/re/chrysalide/framework/gui/window.ui"); @@ -111,7 +129,13 @@ static void gtk_framework_window_class_init(GtkFrameworkWindowClass *class) static void gtk_framework_window_init(GtkFrameworkWindow *window) { + GAction *action; /* Action mise en place */ + static GActionEntry app_entries[] = { + { "toggle-top", gtk_framework_window_activate_toggle_top, NULL, NULL, NULL }, + { "toggle-left", gtk_framework_window_activate_toggle_left, NULL, NULL, NULL }, + { "toggle-right", gtk_framework_window_activate_toggle_right, NULL, NULL, NULL }, + { "toggle-bottom", gtk_framework_window_activate_toggle_bottom, NULL, NULL, NULL }, { "preferences", gtk_framework_window_activate_preferences, NULL, NULL, NULL }, { "about", gtk_framework_window_activate_about, NULL, NULL, NULL }, }; @@ -128,12 +152,41 @@ static void gtk_framework_window_init(GtkFrameworkWindow *window) app_entries, G_N_ELEMENTS(app_entries), window); + /** + * Définition de l'accès aux actions pour obtenir un effet de bord sur + * l'accès aux boutons graphiques de déclenchement. + */ + + action = g_action_map_lookup_action(G_ACTION_MAP(window), "toggle-top"); + + g_object_bind_property(G_OBJECT(window->grid), "empty-top", + G_OBJECT(action), "enabled", + G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN); + + action = g_action_map_lookup_action(G_ACTION_MAP(window), "toggle-left"); + + g_object_bind_property(G_OBJECT(window->grid), "empty-left", + G_OBJECT(action), "enabled", + G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN); + + action = g_action_map_lookup_action(G_ACTION_MAP(window), "toggle-right"); + + g_object_bind_property(G_OBJECT(window->grid), "empty-right", + G_OBJECT(action), "enabled", + G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN); + + action = g_action_map_lookup_action(G_ACTION_MAP(window), "toggle-bottom"); + + g_object_bind_property(G_OBJECT(window->grid), "empty-bottom", + G_OBJECT(action), "enabled", + G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN); + } /****************************************************************************** * * -* Paramètres : window = instance d'objet GLib à traiter. * +* Paramètres : object = instance d'objet GLib à traiter. * * * * Description : Supprime toutes les références externes. * * * @@ -143,20 +196,24 @@ static void gtk_framework_window_init(GtkFrameworkWindow *window) * * ******************************************************************************/ -static void gtk_framework_window_dispose(GtkFrameworkWindow *window) +static void gtk_framework_window_dispose(GObject *object) { + GtkFrameworkWindow *window; /* Version spécialisée */ + + window = GTK_FRAMEWORK_WINDOW(object); + gtk_widget_dispose_template(GTK_WIDGET(window), GTK_TYPE_FRAMEWORK_WINDOW); g_clear_object(&window->settings); - G_OBJECT_CLASS(gtk_framework_window_parent_class)->dispose(G_OBJECT(window)); + G_OBJECT_CLASS(gtk_framework_window_parent_class)->dispose(object); } /****************************************************************************** * * -* Paramètres : window = instance d'objet GLib à traiter. * +* Paramètres : object = instance d'objet GLib à traiter. * * * * Description : Procède à la libération totale de la mémoire. * * * @@ -166,9 +223,9 @@ static void gtk_framework_window_dispose(GtkFrameworkWindow *window) * * ******************************************************************************/ -static void gtk_framework_window_finalize(GtkFrameworkWindow *window) +static void gtk_framework_window_finalize(GObject *object) { - G_OBJECT_CLASS(gtk_framework_window_parent_class)->finalize(G_OBJECT(window)); + G_OBJECT_CLASS(gtk_framework_window_parent_class)->finalize(object); } @@ -228,6 +285,14 @@ bool gtk_framework_window_create(GtkFrameworkWindow *window, GtkApplication *app gtk_framework_window_add(window, panel); + if (1/* FIXME : first time */) + { + panel = get_framework_panel_singleton(GTK_TYPE_LOGS_PANEL); + + gtk_framework_window_add(window, panel); + + } + /* Chargement des extensions de thème */ css = gtk_css_provider_new(); @@ -257,6 +322,116 @@ bool gtk_framework_window_create(GtkFrameworkWindow *window, GtkApplication *app /****************************************************************************** * * +* Paramètres : window = instance de fenêtre principale à manipuler. * +* border = sélection de la zone à considérer. * +* * +* Description : Bascule l'affichage d'un panneau de bordure. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_framework_window_toggle_pannel_visibility(GtkFrameworkWindow *window, TilingGridBorder border) +{ + bool state; /* Etat courant à basculer */ + + state = gtk_tiling_grid_get_visible(window->grid, border); + + state = !state; + + gtk_tiling_grid_set_visible(window->grid, border, state); + +} + + +/****************************************************************************** +* * +* Paramètres : action = désignation de l'action concernée par l'appel. * +* unused = adresse non utilisée ici. * +* _window = instance de fenêtre principale à manipuler. * +* * +* Description : Réagit à une activation de bascule du panneau supérieur. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_framework_window_activate_toggle_top(GSimpleAction *action, GVariant *unused, gpointer _window) +{ + gtk_framework_window_toggle_pannel_visibility(_window, TGB_TOP); + +} + + +/****************************************************************************** +* * +* Paramètres : action = désignation de l'action concernée par l'appel. * +* unused = adresse non utilisée ici. * +* _window = instance de fenêtre principale à manipuler. * +* * +* Description : Réagit à une activation de bascule du panneau de gauche. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_framework_window_activate_toggle_left(GSimpleAction *action, GVariant *unused, gpointer _window) +{ + gtk_framework_window_toggle_pannel_visibility(_window, TGB_LEFT); + +} + + +/****************************************************************************** +* * +* Paramètres : action = désignation de l'action concernée par l'appel. * +* unused = adresse non utilisée ici. * +* _window = instance de fenêtre principale à manipuler. * +* * +* Description : Réagit à une activation de bascule du panneau de droite. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_framework_window_activate_toggle_right(GSimpleAction *action, GVariant *unused, gpointer _window) +{ + gtk_framework_window_toggle_pannel_visibility(_window, TGB_RIGHT); + +} + + +/****************************************************************************** +* * +* Paramètres : action = désignation de l'action concernée par l'appel. * +* unused = adresse non utilisée ici. * +* _window = instance de fenêtre principale à manipuler. * +* * +* Description : Réagit à une activation de bascule du panneau inférieur. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_framework_window_activate_toggle_bottom(GSimpleAction *action, GVariant *unused, gpointer _window) +{ + gtk_framework_window_toggle_pannel_visibility(_window, TGB_BOTTOM); + +} + + +/****************************************************************************** +* * * Paramètres : action = désignation de l'action concernée par l'appel. * * unused = adresse non utilisée ici. * * _window = instance de fenêtre principale à manipuler. * @@ -332,9 +507,10 @@ void gtk_framework_window_add(GtkFrameworkWindow *window, /* __steal */GtkTiledP guint i; /* Boucle de parcours */ GtkWidget *widget; /* Composant à intégrer */ - gtk_stack_add_child(window->grid, GTK_WIDGET(panel)); - gtk_stack_set_visible_child(window->grid, GTK_WIDGET(panel)); + + gtk_tiling_grid_add_panel(window->grid, panel, G_OBJECT_TYPE(panel) == GTK_TYPE_WELCOME_PANEL); + |