diff options
author | Vivien Kraus <vivien@planete-kraus.eu> | 2021-10-05 19:09:23 +0200 |
---|---|---|
committer | Vivien Kraus <vivien@planete-kraus.eu> | 2021-10-07 12:34:19 +0200 |
commit | 84c881aec122036dc1f6f0c2e18f24ce5a28f06b (patch) | |
tree | f28cc57e50df5a48860b0c4468ccb7f1850b1953 | |
parent | 4f2cb622a522691fd13412af9ea4aac0fb36076e (diff) |
gui: use libhandy
-rw-r--r-- | guix/vkraus/packages/disfluid.scm | 6 | ||||
-rw-r--r-- | po/POTFILES.in | 3 | ||||
-rw-r--r-- | po/disfluid.pot | 22 | ||||
-rw-r--r-- | po/fr.po | 25 | ||||
-rw-r--r-- | src/scm/webid-oidc/client/gui/application.scm | 125 | ||||
-rw-r--r-- | src/ui/Makefile.am | 3 | ||||
-rw-r--r-- | src/ui/main-window.glade | 136 |
7 files changed, 271 insertions, 49 deletions
diff --git a/guix/vkraus/packages/disfluid.scm b/guix/vkraus/packages/disfluid.scm index 6b3d852..38f24ed 100644 --- a/guix/vkraus/packages/disfluid.scm +++ b/guix/vkraus/packages/disfluid.scm @@ -34,7 +34,8 @@ #:use-module (gnu packages gettext) #:use-module (gnu packages man) #:use-module (gnu packages tls) - #:use-module (gnu packages gtk)) + #:use-module (gnu packages gtk) + #:use-module (gnu packages gnome)) (define-public disfluid-snapshot (package @@ -130,7 +131,8 @@ ("guile-gi" ,guile-gi) ("gnutls" ,gnutls) ("nettle" ,nettle) - ("gtk+" ,gtk+))) + ("gtk+" ,gtk+) + ("libhandy" ,libhandy))) (synopsis "Demanding Interoperability to Strengthen the Free (Libre) Web: Introducing Disfluid") (description "Demanding Interoperability to Strengthen the Free (Libre) Web: Introducing Disfluid") (home-page "https://labo.planete-kraus.eu/webid-oidc.git") diff --git a/po/POTFILES.in b/po/POTFILES.in index d2b2a74..bde8044 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -83,4 +83,5 @@ src/scm/webid-oidc/token-endpoint.scm src/scm/webid-oidc/web-i18n.scm src/ui/account-widget.glade src/ui/authorization-prompt.glade -src/ui/client-widget.glade
\ No newline at end of file +src/ui/client-widget.glade +src/ui/main-window.glade
\ No newline at end of file diff --git a/po/disfluid.pot b/po/disfluid.pot index 539b72d..5e6e2e9 100644 --- a/po/disfluid.pot +++ b/po/disfluid.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: disfluid SNAPSHOT\n" "Report-Msgid-Bugs-To: vivien@planete-kraus.eu\n" -"POT-Creation-Date: 2021-10-05 22:57+0200\n" +"POT-Creation-Date: 2021-10-07 12:28+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -642,6 +642,10 @@ msgstr "" msgid "The application state changed: it is now ~a.\n" msgstr "" +#: src/scm/webid-oidc/client/gui/application.scm:116 +msgid "Coming soon!" +msgstr "" + #: src/scm/webid-oidc/client/gui/accounts-widget.scm:87 msgid "Please add an account." msgstr "" @@ -2283,3 +2287,19 @@ msgstr "" #: src/ui/client-widget.glade:149 msgid "Update" msgstr "" + +#: src/ui/main-window.glade:29 +msgid "Explore" +msgstr "" + +#: src/ui/main-window.glade:43 +msgid "Authorizations" +msgstr "" + +#: src/ui/main-window.glade:58 +msgid "Accounts" +msgstr "" + +#: src/ui/main-window.glade:73 +msgid "Settings" +msgstr "" @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: webid-oidc 0.0.0\n" "Report-Msgid-Bugs-To: vivien@planete-kraus.eu\n" -"POT-Creation-Date: 2021-10-05 22:57+0200\n" +"POT-Creation-Date: 2021-10-07 12:28+0200\n" "PO-Revision-Date: 2021-10-05 22:56+0200\n" "Last-Translator: Vivien Kraus <vivien@planete-kraus.eu>\n" "Language-Team: French <vivien@planete-kraus.eu>\n" @@ -695,6 +695,10 @@ msgstr "" msgid "The application state changed: it is now ~a.\n" msgstr "L’état de l’application a changé : c’est maintenant ~a.\n" +#: src/scm/webid-oidc/client/gui/application.scm:116 +msgid "Coming soon!" +msgstr "C’est pour bientôt !" + #: src/scm/webid-oidc/client/gui/accounts-widget.scm:87 msgid "Please add an account." msgstr "Veuillez ajouter un compte." @@ -2670,6 +2674,25 @@ msgstr "Annuler" msgid "Update" msgstr "Mettre à jour" +#: src/ui/main-window.glade:29 +msgid "Explore" +msgstr "Explorer" + +#: src/ui/main-window.glade:43 +msgid "Authorizations" +msgstr "Autorisations" + +#: src/ui/main-window.glade:58 +msgid "Accounts" +msgstr "Comptes" + +#: src/ui/main-window.glade:73 +msgid "Settings" +msgstr "Paramètres" + +#~ msgid "Disfluid" +#~ msgstr "Disfluid" + #, scheme-format #~ msgid "" #~ "The accounts changed: the main account is ~a, and the others are ~a.\n" diff --git a/src/scm/webid-oidc/client/gui/application.scm b/src/scm/webid-oidc/client/gui/application.scm index c2ee97d..ff7dce9 100644 --- a/src/scm/webid-oidc/client/gui/application.scm +++ b/src/scm/webid-oidc/client/gui/application.scm @@ -28,6 +28,7 @@ #:use-module (webid-oidc errors) #:use-module (webid-oidc web-i18n) #:use-module ((webid-oidc parameters) #:prefix p:) + #:use-module ((webid-oidc config) #:prefix config:) #:use-module ((webid-oidc stubs) #:prefix stubs:) #:use-module ((webid-oidc oidc-id-token) #:prefix id:) #:use-module ((webid-oidc jwk) #:prefix jwk:) @@ -48,7 +49,7 @@ #:duplicates (merge-generics) #:export ( - application + (the-application . application) )) (push-duplicate-handler! 'merge-generics) @@ -58,7 +59,8 @@ (use-typelibs (("Gio" "2.0") #:renamer (protect 'application:new)) ("Gtk" "3.0") - ("GLib" "2.0")) + ("GLib" "2.0") + ("Handy" "1")) (define gi:connect (@ (gi) connect)) @@ -69,7 +71,7 @@ (define gi:make (@ (gi) make)) -(define application +(define the-application (application:new "eu.planete_kraus.Disfluid" (list->application-flags '(flags-none)))) @@ -77,52 +79,89 @@ (define app:client (@ (webid-oidc client application) client)) -(define-method (->widget (application <application-state>)) - (let ((content (box:new (symbol->orientation 'horizontal) 12))) - (call-with-values - (lambda () - (client:->widget (app:client application))) - (lambda (client-builder client) - (call-with-values - (lambda () - (accounts:->widget application)) - (lambda (accounts-builder accounts) - (call-with-values - (lambda () - (authorizations:->widget application)) - (lambda (authorizations-builder authorizations) - (box:pack-start content client #t #t 0) - (box:pack-start content accounts #t #t 0) - (box:pack-start content authorizations #t #t 0) - (values - `(,client-builder ,accounts-builder ,authorizations-builder) - content))))))))) - +(define window-builder #f) (define main-window #f) - -(define current-state #f) -(define current-state-widget #f) -(define additional-gc-roots '()) - -(define-method (set-state! (state <application-state>)) - (when (and main-window current-state-widget) - (remove main-window current-state-widget)) - (set! current-state state) +(define explorer-container #f) +(define authorizations-container #f) +(define accounts-container #f) +(define settings-container #f) + +(define content-builder #f) +(define explorer-widget #f) +(define authorizations-widget #f) +(define accounts-widget #f) +(define settings-widget #f) + +(define (set-state! application) (call-with-values (lambda () - (->widget state)) - (lambda (roots widget) - (set! current-state-widget widget) - (set! additional-gc-roots roots))) + (client:->widget (app:client application))) + (lambda (client-builder client) + (call-with-values + (lambda () + (accounts:->widget application)) + (lambda (accounts-builder accounts) + (call-with-values + (lambda () + (authorizations:->widget application)) + (lambda (authorizations-builder authorizations) + (when (and explorer-container explorer-widget) + (container:remove explorer-container explorer-widget)) + (when (and authorizations-container authorizations-widget) + (container:remove authorizations-container authorizations-widget)) + (when (and accounts-container accounts-widget) + (container:remove accounts-container accounts-widget)) + (when (and settings-container settings-widget) + (container:remove settings-container settings-widget)) + (set! explorer-widget (label:new (G_ "Coming soon!"))) + (set! authorizations-widget authorizations) + (set! accounts-widget accounts) + (set! settings-widget client) + (when explorer-container + (box:pack-end explorer-container explorer-widget #t #t 0)) + (when authorizations-container + (box:pack-end authorizations-container authorizations-widget #t #t 0)) + (when accounts-container + (box:pack-end accounts-container accounts-widget #t #t 0)) + (when settings-container + (box:pack-end settings-container settings-widget #t #t 0)) + (set! content-builder + `(,client-builder ,accounts-builder ,authorizations-builder)))))))) (when main-window - (add main-window current-state-widget) (show-all main-window))) -(define (on-activate application) +(define (on-activate app) + (set! window-builder + (builder:new-from-file (string-append config:uidir "/main-window.glade"))) (set! main-window - (gi:make <GtkApplicationWindow> - #:application application)) + (builder:get-object window-builder "main_window")) + (set-object-property! main-window application app) + (add-window app main-window) + (set! explorer-container + (builder:get-object window-builder "explorer_container")) + (set! authorizations-container + (builder:get-object window-builder "authorizations_container")) + (set! accounts-container + (builder:get-object window-builder "accounts_container")) + (set! settings-container + (builder:get-object window-builder "settings_container")) + (let ((squeezer + (builder:get-object window-builder "squeezer")) + (headerbar-switcher + (builder:get-object window-builder "headerbar_switcher")) + (bottom-switcher + (builder:get-object window-builder "bottom_switcher")) + (notify + (gi:make <signal> + #:name "notify" + #:param-types (list G_TYPE_OBJECT)))) + (gi:connect squeezer notify + (lambda _ + (let ((child (get-visible-child squeezer))) + (set-reveal bottom-switcher + (not (is-a? child <HdyViewSwitcher>))))))) (add-hook! application-state-changed-hook set-state! #t) - (run-hook application-activated-hook application)) + (run-hook application-activated-hook the-application) + (show-all main-window)) -(gi:connect application activate on-activate) +(gi:connect the-application activate on-activate) diff --git a/src/ui/Makefile.am b/src/ui/Makefile.am index 706725c..cbd7b0f 100644 --- a/src/ui/Makefile.am +++ b/src/ui/Makefile.am @@ -19,4 +19,5 @@ dist_uipkgdata_DATA = \ %reldir%/client-widget.glade \ %reldir%/account-widget.glade \ %reldir%/accounts-widget.glade \ - %reldir%/authorization-prompt.glade + %reldir%/authorization-prompt.glade \ + %reldir%/main-window.glade diff --git a/src/ui/main-window.glade b/src/ui/main-window.glade new file mode 100644 index 0000000..63ecda1 --- /dev/null +++ b/src/ui/main-window.glade @@ -0,0 +1,136 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.36.0 --> +<interface> + <requires lib="gtk+" version="3.24"/> + <requires lib="libhandy" version="0.0"/> + <object class="GtkApplicationWindow" id="main_window"> + <property name="can_focus">False</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="vexpand">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkStack" id="stack1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="transition_type">crossfade</property> + <child> + <object class="GtkBox" id="explorer_container"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="name">explore</property> + <property name="title" translatable="yes">Explore</property> + <property name="icon_name">eu.planete_kraus.Disfluid-symbolic</property> + </packing> + </child> + <child> + <object class="GtkBox" id="authorizations_container"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="name">authorizations</property> + <property name="title" translatable="yes">Authorizations</property> + <property name="icon_name">preferences-system-privacy-symbolic</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="accounts_container"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="name">accounts</property> + <property name="title" translatable="yes">Accounts</property> + <property name="icon_name">emoji-people-symbolic</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkBox" id="settings_container"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="name">settings</property> + <property name="title" translatable="yes">Settings</property> + <property name="icon_name">preferences-system-symbolic</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="HdyViewSwitcherBar" id="bottom_switcher"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="policy">auto</property> + <property name="stack">stack1</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <child type="titlebar"> + <object class="HdyHeaderBar"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="show_close_button">True</property> + <property name="centering_policy">strict</property> + <child type="title"> + <object class="HdySqueezer" id="squeezer"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="homogeneous">True</property> + <property name="transition_type">crossfade</property> + <child> + <object class="HdyViewSwitcher" id="headerbar_switcher"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stack">stack1</property> + </object> + </child> + <child> + <object class="GtkLabel"> + <property name="name">title_label</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label">Disfluid</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + </child> + </object> + </child> + </object> +</interface> |