commit a48aab16a363ef8a001d753977e9805ca655c9db
parent 2830cd336ab3db18af4905896a76806502b9ef92
Author: Jacki <jacki@thejackimonster.de>
Date: Thu, 20 Jun 2024 01:44:59 +0200
Add stack and offline page to visualize state of no subscribed members in discourse
Signed-off-by: Jacki <jacki@thejackimonster.de>
Diffstat:
3 files changed, 83 insertions(+), 13 deletions(-)
diff --git a/resources/ui/discourse.ui b/resources/ui/discourse.ui
@@ -99,29 +99,78 @@ Author: Tobias Frisch
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
- <object class="GtkScrolledWindow">
- <property name="width-request">280</property>
- <property name="height-request">180</property>
+ <object class="GtkStack" id="discourse_stack">
<property name="visible">True</property>
- <property name="can-focus">True</property>
+ <property name="can-focus">False</property>
<child>
- <object class="GtkViewport">
+ <object class="GtkBox" id="offline_page">
<property name="visible">True</property>
<property name="can-focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">8</property>
<child>
- <object class="GtkFlowBox" id="members_flowbox">
+ <object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="border-width">16</property>
- <property name="column-spacing">2</property>
- <property name="row-spacing">2</property>
- <property name="min-children-per-line">2</property>
- <property name="selection-mode">none</property>
+ <property name="pixel-size">64</property>
+ <property name="icon-name">user-offline-symbolic</property>
+ <property name="icon_size">3</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">Offline</property>
</object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
+ <packing>
+ <property name="name">page_offline</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="members_page">
+ <property name="width-request">280</property>
+ <property name="height-request">180</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <child>
+ <object class="GtkViewport">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <child>
+ <object class="GtkFlowBox" id="members_flowbox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="border-width">16</property>
+ <property name="column-spacing">2</property>
+ <property name="row-spacing">2</property>
+ <property name="min-children-per-line">2</property>
+ <property name="selection-mode">none</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">members_page</property>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
<packing>
diff --git a/src/ui/discourse.c b/src/ui/discourse.c
@@ -239,6 +239,18 @@ ui_discourse_window_init(MESSENGER_Application *app,
handle
);
+ handle->discourse_stack = GTK_STACK(
+ gtk_builder_get_object(handle->builder, "discourse_stack")
+ );
+
+ handle->offline_page = GTK_WIDGET(
+ gtk_builder_get_object(handle->builder, "offline_page")
+ );
+
+ handle->members_page = GTK_WIDGET(
+ gtk_builder_get_object(handle->builder, "members_page")
+ );
+
handle->members_flowbox = GTK_FLOW_BOX(
gtk_builder_get_object(handle->builder, "members_flowbox")
);
@@ -443,7 +455,12 @@ _discourse_update_members(UI_DISCOURSE_Handle *handle)
);
if (list)
+ {
+ gtk_stack_set_visible_child(handle->discourse_stack, handle->members_page);
g_list_free(list);
+ }
+ else
+ gtk_stack_set_visible_child(handle->discourse_stack, handle->offline_page);
if (!(handle->context))
return;
diff --git a/src/ui/discourse.h b/src/ui/discourse.h
@@ -53,6 +53,10 @@ typedef struct UI_DISCOURSE_Handle
HdyFlap *details_flap;
+ GtkStack *discourse_stack;
+ GtkWidget *offline_page;
+ GtkWidget *members_page;
+
GtkFlowBox *members_flowbox;
GtkButton *microphone_button;