Add factory for dropdowns

Replace ListEntry with libadwaita components
This commit is contained in:
takotori 2023-11-21 14:21:56 +01:00
parent ba48f5ba33
commit babc0e8cc4
10 changed files with 182 additions and 307 deletions

View file

@ -1,27 +1,30 @@
use adw::prelude::PreferencesGroupExt;
use std::sync::Arc;
use std::time::{Duration, SystemTime};
use adw::{glib, prelude::ListBoxRowExt};
use adw::glib::Object;
use adw::prelude::{BoxExt, ButtonExt, CheckButtonExt, ComboRowExt, RangeExt};
use dbus::{Error, Path};
use dbus::blocking::Connection;
use dbus::message::SignalArgs;
use glib::{Cast, clone, Propagation, Variant};
use glib::subclass::prelude::ObjectSubclassIsExt;
use gtk::{Align, gio, SignalListItemFactory, StringObject};
use gtk::prelude::*;
use gtk::prelude::{ActionableExt, GObjectPropertyExpressionExt, ListItemExt};
use ReSet_Lib::audio::audio::{Card, InputStream, Sink};
use crate::components::base::cardEntry::CardEntry;
use crate::components::base::listEntry::ListEntry;
use crate::components::base::utils::{
InputStreamAdded, InputStreamChanged, InputStreamRemoved, SinkAdded, SinkChanged, SinkRemoved,
};
use crate::components::output::sinkEntry::set_sink_volume;
use adw::glib::Object;
use adw::prelude::{BoxExt, ButtonExt, CheckButtonExt, RangeExt};
use adw::{glib, prelude::ListBoxRowExt};
use dbus::blocking::Connection;
use dbus::message::SignalArgs;
use dbus::{Error, Path};
use glib::subclass::prelude::ObjectSubclassIsExt;
use glib::{clone, Cast, Propagation, Variant};
use gtk::prelude::ActionableExt;
use gtk::{gio, StringObject};
use ReSet_Lib::audio::audio::{Card, InputStream, Sink};
use super::inputStreamEntry::InputStreamEntry;
use super::sinkBoxImpl;
use super::sinkEntry::{set_default_sink, toggle_sink_mute, SinkEntry};
use super::sinkEntry::{set_default_sink, SinkEntry, toggle_sink_mute};
glib::wrapper! {
pub struct SinkBox(ObjectSubclass<sinkBoxImpl::SinkBox>)
@ -45,12 +48,14 @@ impl SinkBox {
pub fn setupCallbacks(&self) {
let selfImp = self.imp();
selfImp.resetSinksRow.set_activatable(true);
selfImp
.resetSinksRow
.set_action_name(Some("navigation.push"));
selfImp
.resetSinksRow
.set_action_target_value(Some(&Variant::from("outputDevices")));
selfImp.resetCardsRow.set_activatable(true);
selfImp
.resetCardsRow
.set_action_name(Some("navigation.push"));
@ -65,6 +70,19 @@ impl SinkBox {
selfImp
.resetInputCardsBackButton
.set_action_name(Some("navigation.pop"));
let factory = &SignalListItemFactory::new();
factory.connect_setup(|_, item| {
let item = item.downcast_ref::<gtk::ListItem>().unwrap();
let label = gtk::Label::new(None);
label.set_halign(Align::Start);
item.property_expression("item")
.chain_property::<StringObject>("string")
.bind(&label, "label", gtk::Widget::NONE);
item.set_child(Some(&label));
});
selfImp.resetSinkDropdown.set_factory(Some(factory));
}
}
@ -236,7 +254,7 @@ pub fn populate_cards(output_box: Arc<SinkBox>) {
let imp = output_box_ref.imp();
for card in cards {
imp.resetCards
.append(&ListEntry::new(&CardEntry::new(card)));
.add(&CardEntry::new(card));
}
});
});

View file

@ -2,6 +2,7 @@ use std::cell::RefCell;
use std::collections::HashMap;
use std::sync::{Arc, RwLock};
use std::time::SystemTime;
use adw::{ActionRow, ComboRow, PreferencesGroup};
use crate::components::base::listEntry::ListEntry;
use crate::components::output::inputStreamEntry::InputStreamEntry;
@ -20,11 +21,11 @@ use super::sinkEntry::SinkEntry;
#[template(resource = "/org/Xetibo/ReSet/resetAudioOutput.ui")]
pub struct SinkBox {
#[template_child]
pub resetSinksRow: TemplateChild<ListEntry>,
pub resetSinksRow: TemplateChild<ActionRow>,
#[template_child]
pub resetCardsRow: TemplateChild<ListEntry>,
pub resetCardsRow: TemplateChild<ActionRow>,
#[template_child]
pub resetSinkDropdown: TemplateChild<DropDown>,
pub resetSinkDropdown: TemplateChild<ComboRow>,
#[template_child]
pub resetSinkMute: TemplateChild<Button>,
#[template_child]
@ -42,7 +43,7 @@ pub struct SinkBox {
#[template_child]
pub resetInputCardsBackButton: TemplateChild<ListEntry>,
#[template_child]
pub resetCards: TemplateChild<Box>,
pub resetCards: TemplateChild<PreferencesGroup>,
pub resetDefaultCheckButton: Arc<CheckButton>,
pub resetDefaultSink: Arc<RefCell<Sink>>,
pub resetSinkList: Arc<RwLock<HashMap<u32, (Arc<ListEntry>, Arc<SinkEntry>, String)>>>,