diff options
Diffstat (limited to 'src/gui')
| -rw-r--r-- | src/gui/core/panels.c | 37 | ||||
| -rw-r--r-- | src/gui/core/panels.h | 3 | ||||
| -rw-r--r-- | src/gui/dialogs/Makefile.am | 2 | ||||
| -rw-r--r-- | src/gui/dialogs/about-int.h | 14 | ||||
| -rw-r--r-- | src/gui/dialogs/about.c | 57 | ||||
| -rw-r--r-- | src/gui/dialogs/about.css | 9 | ||||
| -rw-r--r-- | src/gui/dialogs/about.ui | 80 | ||||
| -rw-r--r-- | src/gui/dialogs/gresource.xml | 16 | ||||
| -rw-r--r-- | src/gui/panels/logs.c | 8 | ||||
| -rw-r--r-- | src/gui/style.css | 6 | ||||
| -rw-r--r-- | src/gui/window-int.h | 3 | ||||
| -rw-r--r-- | src/gui/window.c | 82 | ||||
| -rw-r--r-- | src/gui/window.h | 8 |
13 files changed, 162 insertions, 163 deletions
diff --git a/src/gui/core/panels.c b/src/gui/core/panels.c index 3232e0c..9fca411 100644 --- a/src/gui/core/panels.c +++ b/src/gui/core/panels.c @@ -299,6 +299,43 @@ bool register_framework_panel_definition(const panel_info_t *info) * * * Paramètres : target = type de définition de panneau recherchée. * * * +* Description : Récupère les particularités d'un panneau graphique. * +* * +* Retour : Détails du comportement associé au panneau visé. * +* * +* Remarques : - * +* * +******************************************************************************/ + +FrameworkPanelPersonality get_framework_panel_personality(GType target) +{ + FrameworkPanelPersonality result; /* Propriétées à retourner */ + size_t i; /* Boucle de parcours */ + ext_panel_info_t *info; /* Informations conservées */ + + result = FPP_NONE; + + for (i = 0; i < _panels_count; i++) + { + info = _panels_list[i]; + + if (info->panel_type == target) + { + result = info->personality; + break; + } + + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : target = type de définition de panneau recherchée. * +* * * Description : Met en place (au besoin) un panneau graphique unique. * * * * Retour : Instance de définition identifiée ou NULL en cas d'échec. * diff --git a/src/gui/core/panels.h b/src/gui/core/panels.h index 4d0ce41..e17ef8a 100644 --- a/src/gui/core/panels.h +++ b/src/gui/core/panels.h @@ -71,6 +71,9 @@ void unload_all_framework_panel_definitions(void); /* Enregistre la définition d'un panneau graphique. */ bool register_framework_panel_definition(const panel_info_t *); +/* Récupère les particularités d'un panneau graphique. */ +FrameworkPanelPersonality get_framework_panel_personality(GType); + /* Met en place (au besoin) un panneau graphique unique. */ GtkTiledPanel *get_framework_panel_singleton(GType); diff --git a/src/gui/dialogs/Makefile.am b/src/gui/dialogs/Makefile.am index e910c96..3492f63 100644 --- a/src/gui/dialogs/Makefile.am +++ b/src/gui/dialogs/Makefile.am @@ -3,7 +3,9 @@ BUILT_SOURCES = resources.h resources.c noinst_LTLIBRARIES = libguidialogs.la + UI_FILES = \ + about.css \ about.ui \ preferences.ui # bookmark.ui \ diff --git a/src/gui/dialogs/about-int.h b/src/gui/dialogs/about-int.h index 616c73f..96a470e 100644 --- a/src/gui/dialogs/about-int.h +++ b/src/gui/dialogs/about-int.h @@ -37,20 +37,6 @@ struct _GtkAppAboutDialog { GtkWindow parent; /* A laisser en premier */ - union - { - struct - { - GtkPicture *revision_0; /* Numéro #0 */ - GtkPicture *revision_1; /* Numéro #1 */ - GtkPicture *revision_2; /* Numéro #2 */ - GtkPicture *revision_3; /* Numéro #3 */ - GtkPicture *revision_4; /* Numéro #4 */ - GtkPicture *revision_5; /* Numéro #5 */ - }; - GtkPicture *revisions[6]; /* Tous les numéros d'un coup */ - }; - }; /* Boîte "A propos de" dédiée à l'application (classe) */ diff --git a/src/gui/dialogs/about.c b/src/gui/dialogs/about.c index 956918b..1dca752 100644 --- a/src/gui/dialogs/about.c +++ b/src/gui/dialogs/about.c @@ -44,10 +44,10 @@ static void gtk_app_about_dialog_class_init(GtkAppAboutDialogClass *); static void gtk_app_about_dialog_init(GtkAppAboutDialog *); /* Supprime toutes les références externes. */ -static void gtk_app_about_dialog_dispose(GtkAppAboutDialog *); +static void gtk_app_about_dialog_dispose(GObject *); /* Procède à la libération totale de la mémoire. */ -static void gtk_app_about_dialog_finalize(GtkAppAboutDialog *); +static void gtk_app_about_dialog_finalize(GObject *); @@ -74,22 +74,17 @@ static void gtk_app_about_dialog_class_init(GtkAppAboutDialogClass *class) object = G_OBJECT_CLASS(class); - object->dispose = (GObjectFinalizeFunc/* ! */)gtk_app_about_dialog_dispose; - object->finalize = (GObjectFinalizeFunc)gtk_app_about_dialog_finalize; + object->dispose = gtk_app_about_dialog_dispose; + object->finalize = gtk_app_about_dialog_finalize; widget = GTK_WIDGET_CLASS(class); + gtk_widget_class_set_css_name(widget, "aboutdialog"); + gtk_widget_class_add_binding_action(widget, GDK_KEY_Escape, 0, "window.close", NULL); gtk_widget_class_set_template_from_resource(widget, "/re/chrysalide/framework/gui/dialogs/about.ui"); - gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_0); - gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_1); - gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_2); - gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_3); - gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_4); - gtk_widget_class_bind_template_child(widget, GtkAppAboutDialog, revision_5); - } @@ -107,40 +102,14 @@ static void gtk_app_about_dialog_class_init(GtkAppAboutDialogClass *class) static void gtk_app_about_dialog_init(GtkAppAboutDialog *dialog) { - unsigned int revision; /* Numéro de révision */ - unsigned int max; /* Nbre. de boucles à effectuer*/ - unsigned int i; /* Boucle de parcours */ - unsigned int level; /* Unité la plus importante */ - char buffer[64]; /* Nom d'image à forger */ - gtk_widget_init_template(GTK_WIDGET(dialog)); - revision = REVISION; - max = log(revision) / log(10); - - assert(max <= 6); - - for (i = 0; i <= max; i++) - { - level = pow(10, max - i); - - snprintf(buffer, 64, "/org/chrysalide/gui/dialogs/about/revision_%u.png", revision / level); - - gtk_picture_set_resource(dialog->revisions[i], buffer); - - revision %= level; - - } - - for (; i < 6; i++) - gtk_widget_set_visible(GTK_WIDGET(dialog->revisions[i]), FALSE); - } /****************************************************************************** * * -* Paramètres : dialog = instance d'objet GLib à traiter. * +* Paramètres : object = instance d'objet GLib à traiter. * * * * Description : Supprime toutes les références externes. * * * @@ -150,18 +119,18 @@ static void gtk_app_about_dialog_init(GtkAppAboutDialog *dialog) * * ******************************************************************************/ -static void gtk_app_about_dialog_dispose(GtkAppAboutDialog *dialog) +static void gtk_app_about_dialog_dispose(GObject *object) { - gtk_widget_dispose_template(GTK_WIDGET(dialog), GTK_TYPE_APP_ABOUT_DIALOG); + gtk_widget_dispose_template(GTK_WIDGET(object), GTK_TYPE_APP_ABOUT_DIALOG); - G_OBJECT_CLASS(gtk_app_about_dialog_parent_class)->dispose(G_OBJECT(dialog)); + G_OBJECT_CLASS(gtk_app_about_dialog_parent_class)->dispose(object); } /****************************************************************************** * * -* Paramètres : dialog = instance d'objet GLib à traiter. * +* Paramètres : object = instance d'objet GLib à traiter. * * * * Description : Procède à la libération totale de la mémoire. * * * @@ -171,9 +140,9 @@ static void gtk_app_about_dialog_dispose(GtkAppAboutDialog *dialog) * * ******************************************************************************/ -static void gtk_app_about_dialog_finalize(GtkAppAboutDialog *dialog) +static void gtk_app_about_dialog_finalize(GObject *object) { - G_OBJECT_CLASS(gtk_app_about_dialog_parent_class)->finalize(G_OBJECT(dialog)); + G_OBJECT_CLASS(gtk_app_about_dialog_parent_class)->finalize(object); } diff --git a/src/gui/dialogs/about.css b/src/gui/dialogs/about.css new file mode 100644 index 0000000..af3fa97 --- /dev/null +++ b/src/gui/dialogs/about.css @@ -0,0 +1,9 @@ + +aboutdialog > box { + + background-color: black; + + background-image: url('resource:///re/chrysalide/framework/gui/dialogs/about/bg.png'); + background-repeat: no-repeat; + +} diff --git a/src/gui/dialogs/about.ui b/src/gui/dialogs/about.ui index 989e53b..7b519d2 100644 --- a/src/gui/dialogs/about.ui +++ b/src/gui/dialogs/about.ui @@ -8,91 +8,13 @@ <property name="modal">true</property> <property name="resizable">false</property> - <style> - <class name="black-bg"/> - </style> - <child> <object class="GtkBox"> <property name="orientation">vertical</property> - <child> - <object class="GtkPicture" id="logo"> - <property name="margin-top">10</property> - <property name="file">resource://org/chrysalide/gui/dialogs/about/chrysalide-full.png</property> - </object> - </child> - - <!-- - Etage intermédiaire pour ne pas que l'image se voie allouer la largeur entière - de la fenêtre. Sinon des marges sont placées autour du rendu lors que l'image - n'est pas étendue pour couvrir cette largeur entière. - --> - <child> - <object class="GtkBox"> - <property name="orientation">horizontal</property> - <property name="halign">center</property> - <property name="margin-top">14</property> - <child> - <object class="GtkPicture" id="text"> - <property name="width-request">253</property> - <property name="file">resource:///org/chrysalide/gui/dialogs/about/chrysalide_text.png</property> - </object> - </child> - </object> - </child> - - <child> - <object class="GtkBox"> - <property name="orientation">horizontal</property> - <property name="margin-start">149</property> - <child> - <object class="GtkPicture" id="revision"> - <property name="width-request">14</property> - <property name="file">resource:///org/chrysalide/gui/dialogs/about/revision.png</property> - </object> - </child> - <child> - <object class="GtkPicture" id="revision_0"> - <property name="width-request">14</property> - <property name="file">resource:///org/chrysalide/gui/dialogs/about/revision.png</property> - </object> - </child> - <child> - <object class="GtkPicture" id="revision_1"> - <property name="width-request">14</property> - <property name="file">resource:///org/chrysalide/gui/dialogs/about/revision.png</property> - </object> - </child> - <child> - <object class="GtkPicture" id="revision_2"> - <property name="width-request">14</property> - <property name="file">resource:///org/chrysalide/gui/dialogs/about/revision.png</property> - </object> - </child> - <child> - <object class="GtkPicture" id="revision_3"> - <property name="width-request">14</property> - <property name="file">resource:///org/chrysalide/gui/dialogs/about/revision.png</property> - </object> - </child> - <child> - <object class="GtkPicture" id="revision_4"> - <property name="width-request">14</property> - <property name="file">resource:///org/chrysalide/gui/dialogs/about/revision.png</property> - </object> - </child> - <child> - <object class="GtkPicture" id="revision_5"> - <property name="width-request">14</property> - <property name="file">resource:///org/chrysalide/gui/dialogs/about/revision.png</property> - </object> - </child> - </object> - </child> <child> <object class="GtkLabel"> - <property name="margin-top">22</property> + <property name="margin-top">368</property> <property name="margin-bottom">10</property> <property name="label" translatable="yes"><span fgcolor='white'>Copyright (C) 2008-2025 Cyrille Bagard</span></property> <property name="use-markup">True</property> diff --git a/src/gui/dialogs/gresource.xml b/src/gui/dialogs/gresource.xml index 169f440..966d9c8 100644 --- a/src/gui/dialogs/gresource.xml +++ b/src/gui/dialogs/gresource.xml @@ -1,22 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <gresources> <gresource prefix="/re/chrysalide/framework/gui/dialogs"> + <file compressed="true">about.css</file> <file compressed="true">about.ui</file> <file compressed="true">preferences.ui</file> </gresource> - <gresource prefix="/org/chrysalide/gui/dialogs/about"> - <file compressed="true" alias="chrysalide-full.png">../../../pixmaps/chrysalide-full.png</file> - <file compressed="true" alias="chrysalide_text.png">../../../pixmaps/chrysalide_text.png</file> - <file compressed="true" alias="revision.png">../../../pixmaps/revision.png</file> - <file compressed="true" alias="revision_0.png">../../../pixmaps/revision_0.png</file> - <file compressed="true" alias="revision_1.png">../../../pixmaps/revision_1.png</file> - <file compressed="true" alias="revision_2.png">../../../pixmaps/revision_2.png</file> - <file compressed="true" alias="revision_3.png">../../../pixmaps/revision_3.png</file> - <file compressed="true" alias="revision_4.png">../../../pixmaps/revision_4.png</file> - <file compressed="true" alias="revision_5.png">../../../pixmaps/revision_5.png</file> - <file compressed="true" alias="revision_6.png">../../../pixmaps/revision_6.png</file> - <file compressed="true" alias="revision_7.png">../../../pixmaps/revision_7.png</file> - <file compressed="true" alias="revision_8.png">../../../pixmaps/revision_8.png</file> - <file compressed="true" alias="revision_9.png">../../../pixmaps/revision_9.png</file> - </gresource> </gresources> diff --git a/src/gui/panels/logs.c b/src/gui/panels/logs.c index 729a62b..399c4c0 100644 --- a/src/gui/panels/logs.c +++ b/src/gui/panels/logs.c @@ -37,10 +37,10 @@ /* ------------------------- COEUR D'UN PANNEAU D'AFFICHAGE ------------------------- */ -/* Initialise la classe des panneaux d'accueil par défaut. */ +/* Initialise la classe des panneaux d'affichage des journaux. */ static void gtk_logs_panel_class_init(GtkLogsPanelClass *); -/* Initialise une instance de panneau d'accueil par défaut. */ +/* Initialise une instance de panneau d'affichage des journaux. */ static void gtk_logs_panel_init(GtkLogsPanel *); /* Supprime toutes les références externes. */ @@ -72,7 +72,7 @@ G_DEFINE_TYPE(GtkLogsPanel, gtk_logs_panel, GTK_TYPE_TILED_PANEL); * * * Paramètres : class = classe à initialiser. * * * -* Description : Initialise la classe des panneaux d'accueil par défaut. * +* Description : Initialise la classe des panneaux d'affichage des journaux. * * * * Retour : - * * * @@ -113,7 +113,7 @@ static void gtk_logs_panel_class_init(GtkLogsPanelClass *class) * * * Paramètres : panel = instance à initialiser. * * * -* Description : Initialise une instance de panneau d'accueil par défaut. * +* Description : Initialise une instance de panneau d'affichage des journaux. * * * * Retour : - * * * diff --git a/src/gui/style.css b/src/gui/style.css index e21d931..dce41fa 100644 --- a/src/gui/style.css +++ b/src/gui/style.css @@ -36,11 +36,7 @@ list.boxed-list, list.boxed-list > row:last-child { /* about.css */ -.black-bg { - - background-color: black; - -} +@import url('resource:///re/chrysalide/framework/gui/dialogs/about.css'); /* welcome.css */ diff --git a/src/gui/window-int.h b/src/gui/window-int.h index b72a499..4f3dd57 100644 --- a/src/gui/window-int.h +++ b/src/gui/window-int.h @@ -38,6 +38,9 @@ struct _GtkFrameworkWindow GSettings *settings; /* Paramètres globaux */ GtkTilingGrid *grid; /* Réceptacle de panneaux */ + GtkStatusStack *status; /* Barre de statut */ + + GtkTiledPanel *main; /* Panneau principal courant */ }; diff --git a/src/gui/window.c b/src/gui/window.c index dbe7e87..e14ecf7 100644 --- a/src/gui/window.c +++ b/src/gui/window.c @@ -33,7 +33,6 @@ #include "panels/welcome.h" #include "../gtkext/grid.h" #include "../gtkext/helpers.h" -#include "../gtkext/statusstack.h" @@ -106,6 +105,7 @@ static void gtk_framework_window_class_init(GtkFrameworkWindowClass *class) gtk_widget_class_set_template_from_resource(widget, "/re/chrysalide/framework/gui/window.ui"); gtk_widget_class_bind_template_child(widget, GtkFrameworkWindow, grid); + gtk_widget_class_bind_template_child(widget, GtkFrameworkWindow, status); /* Active une action native (cf. https://docs.gtk.org/gtk4/class.Window.html#actions) */ gtk_widget_class_add_binding_action(widget, GDK_KEY_Q, GDK_CONTROL_MASK, "window.close", NULL); @@ -148,6 +148,8 @@ static void gtk_framework_window_init(GtkFrameworkWindow *window) g_settings_bind(window->settings, "window-height", G_OBJECT(window), "default-height", G_SETTINGS_BIND_DEFAULT); g_settings_bind(window->settings, "window-maximized", G_OBJECT(window), "maximized", G_SETTINGS_BIND_DEFAULT); + window->main = NULL; + g_action_map_add_action_entries(G_ACTION_MAP(window), app_entries, G_N_ELEMENTS(app_entries), window); @@ -206,6 +208,8 @@ static void gtk_framework_window_dispose(GObject *object) g_clear_object(&window->settings); + g_clear_object(&window->main); + G_OBJECT_CLASS(gtk_framework_window_parent_class)->dispose(object); } @@ -488,6 +492,31 @@ static void gtk_framework_window_activate_about(GSimpleAction *action, GVariant /****************************************************************************** * * +* Paramètres : window = instance de fenêtre principale à consulter. * +* * +* Description : Fournit une référence à la barre de statut intégrée. * +* * +* Retour : Composant GTK en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkStatusStack *gtk_framework_window_get_status_stack(const GtkFrameworkWindow *window) +{ + GtkStatusStack *result; /* Instance à retourner */ + + result = window->status; + ref_object(result); + + return result; + +} + + + +/****************************************************************************** +* * * Paramètres : window = instance de fenêtre principale à remplir. * * panel = nouveau panneau à afficher. * * * @@ -506,6 +535,7 @@ void gtk_framework_window_add(GtkFrameworkWindow *window, /* __steal */GtkTiledP guint count; /* Nombre d'élements présents */ guint i; /* Boucle de parcours */ GtkWidget *widget; /* Composant à intégrer */ + FrameworkPanelPersonality personality; /* Propriétés du panneau */ @@ -538,4 +568,54 @@ void gtk_framework_window_add(GtkFrameworkWindow *window, /* __steal */GtkTiledP } + /* Mise à jour des liens vers un panneau principal */ + + personality = get_framework_panel_personality(G_OBJECT_TYPE(panel)); + + if (personality & FPP_MAIN_PANEL) + gtk_framework_window_notify_new_main_panel_state(window, panel, true); + + else + { + if (window->main != NULL) + gtk_tiled_panel_notify_new_main_panel_state(panel, window->main, true); + } + +} + + +/****************************************************************************** +* * +* Paramètres : window = instance de fenêtre principale à manipuler. * +* main = panneau principal visé par l'opération. * +* activated = nature du changement de statut : ajout, retrait ?* +* * +* Description : Note un ajout ou un retrait de panneau principal. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_framework_window_notify_new_main_panel_state(GtkFrameworkWindow *window, GtkTiledPanel *main, bool activated) +{ + if (activated) + { + g_clear_object(&window->main); + + window->main = main; + ref_object(main); + + } + + else + { + if (main == window->main) + g_clear_object(&window->main); + + } + + gtk_tiling_grid_notify_new_main_panel_state(window->grid, main, activated); + } diff --git a/src/gui/window.h b/src/gui/window.h index 56c56ec..077d51a 100644 --- a/src/gui/window.h +++ b/src/gui/window.h @@ -30,6 +30,7 @@ #include "../glibext/helpers.h" #include "../gtkext/panel.h" +#include "../gtkext/statusstack.h" @@ -43,13 +44,18 @@ DECLARE_GTYPE(GtkFrameworkWindow, gtk_framework_window, GTK, FRAMEWORK_WINDOW); - /* Crée une nouvelle application principale pour Chrysalide. */ GtkApplicationWindow *gtk_framework_window_new(GtkApplication *); +/* Fournit une référence à la barre de statut intégrée. */ +GtkStatusStack *gtk_framework_window_get_status_stack(const GtkFrameworkWindow *); + /* Ajoute un panneau à la fenêtre principale de Chrysalide. */ void gtk_framework_window_add(GtkFrameworkWindow *, GtkTiledPanel *); +/* Note un ajout ou un retrait de panneau principal. */ +void gtk_framework_window_notify_new_main_panel_state(GtkFrameworkWindow *, GtkTiledPanel *, bool); + #endif /* _GUI_WINDOW_H */ |
