Browse Source

room-details: Support empty list of members with assigned power levels

fractal-12
Kévin Commaille 8 months ago
parent
commit
98fc1110df
No known key found for this signature in database
GPG Key ID: F26F4BE20A08255B
  1. 1
      po/POTFILES.in
  2. 2
      src/session/view/content/room_details/members_page/members_list_view/mod.rs
  3. 39
      src/session/view/content/room_details/permissions/members_subpage.rs
  4. 54
      src/session/view/content/room_details/permissions/members_subpage.ui

1
po/POTFILES.in

@ -142,6 +142,7 @@ src/session/view/content/room_details/members_page/members_list_view/mod.ui
src/session/view/content/room_details/mod.rs
src/session/view/content/room_details/mod.ui
src/session/view/content/room_details/permissions/add_members_subpage.ui
src/session/view/content/room_details/permissions/members_subpage.rs
src/session/view/content/room_details/permissions/members_subpage.ui
src/session/view/content/room_details/permissions/permissions_subpage.rs
src/session/view/content/room_details/permissions/permissions_subpage.ui

2
src/session/view/content/room_details/members_page/members_list_view/mod.rs

@ -347,7 +347,7 @@ mod imp {
/// Update the view for the current state.
fn update_view(&self) {
let Some(members) = self.members.obj() else {
self.stack.set_visible_child_name("no-members");
self.stack.set_visible_child_name("empty");
return;
};

39
src/session/view/content/room_details/permissions/members_subpage.rs

@ -1,4 +1,5 @@
use adw::{prelude::*, subclass::prelude::*};
use gettextrs::gettext;
use gtk::{
CompositeTemplate, glib,
glib::{clone, closure},
@ -26,6 +27,10 @@ mod imp {
#[template_child]
search_entry: TemplateChild<gtk::SearchEntry>,
#[template_child]
stack: TemplateChild<gtk::Stack>,
#[template_child]
empty_page: TemplateChild<adw::StatusPage>,
#[template_child]
list_view: TemplateChild<gtk::ListView>,
filtered_model: gtk::FilterListModel,
/// The list used for this view.
@ -82,6 +87,22 @@ mod imp {
self.filtered_model.set_filter(Some(&search_filter));
self.filtered_model.connect_items_changed(clone!(
#[weak(rename_to = imp)]
self,
move |_, _, _, _| {
imp.update_visible_page();
}
));
self.search_entry.connect_text_notify(clone!(
#[weak(rename_to = imp)]
self,
move |_| {
imp.update_visible_page();
}
));
self.update_visible_page();
// Sort members by power level, then display name, then user ID.
let power_level_expr = MemberPowerLevel::this_expression("power-level");
let power_level_sorter = gtk::NumericSorter::builder()
@ -161,6 +182,24 @@ mod imp {
self.editable.set(editable);
self.obj().notify_editable();
}
/// Update the visible page for the current state.
fn update_visible_page(&self) {
if self.filtered_model.n_items() > 0 {
self.stack.set_visible_child_name("members");
return;
}
// Update the empty page before showing it.
let description = if self.search_entry.text().is_empty() {
gettext("There are no room members with assigned power levels in this room")
} else {
gettext("There are no room members with assigned power levels matching the search")
};
self.empty_page.set_description(Some(&description));
self.stack.set_visible_child_name("empty");
}
}
}

54
src/session/view/content/room_details/permissions/members_subpage.ui

@ -40,26 +40,48 @@
<property name="content">
<object class="GtkOverlay">
<child>
<object class="GtkScrolledWindow">
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="hscrollbar-policy">never</property>
<property name="propagate-natural-height">True</property>
<property name="child">
<object class="AdwClampScrollable">
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<object class="GtkStack" id="stack">
<property name="transition-type">crossfade</property>
<child>
<object class="GtkStackPage">
<property name="name">empty</property>
<property name="child">
<object class="GtkListView" id="list_view">
<property name="single-click-activate">True</property>
<property name="tab-behavior">item</property>
<style>
<class name="permissions-member-list" />
</style>
<object class="AdwStatusPage" id="empty_page">
<property name="vexpand">true</property>
<property name="icon-name">users-symbolic</property>
<property name="title" translatable="yes">No Room Members</property>
</object>
</property>
</object>
</property>
</child>
<child>
<object class="GtkStackPage">
<property name="name">members</property>
<property name="child">
<object class="GtkScrolledWindow">
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="hscrollbar-policy">never</property>
<property name="propagate-natural-height">True</property>
<property name="child">
<object class="AdwClampScrollable">
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="child">
<object class="GtkListView" id="list_view">
<property name="single-click-activate">True</property>
<property name="tab-behavior">item</property>
<style>
<class name="permissions-member-list" />
</style>
</object>
</property>
</object>
</property>
</object>
</property>
</object>
</child>
</object>
</child>
<child type="overlay">

Loading…
Cancel
Save