feat!: new adwaita 1.4 styling

This commit is contained in:
Gabriele Musco 2023-09-24 13:14:40 +02:00
parent 356e1152e8
commit 376c7ce01f
No known key found for this signature in database
GPG key ID: 1068D795C80E51DE
13 changed files with 195 additions and 201 deletions

126
Cargo.lock generated
View file

@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "aho-corasick"
version = "1.0.5"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783"
checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab"
dependencies = [
"memchr",
]
@ -40,7 +40,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -89,7 +89,7 @@ dependencies = [
"regex",
"rustc-hash",
"shlex",
"syn 2.0.33",
"syn 2.0.37",
"which",
]
@ -128,9 +128,9 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
[[package]]
name = "bumpalo"
version = "3.13.0"
version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
[[package]]
name = "bytes"
@ -140,9 +140,9 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
[[package]]
name = "cairo-rs"
version = "0.18.0"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d859b656775a6b1dd078d3e5924884e6ea88aa649a7fdde03d5b2ec56ffcc10b"
checksum = "1c0466dfa8c0ee78deef390c274ad756801e0a6dbb86c5ef0924a298c5761c4d"
dependencies = [
"bitflags 2.4.0",
"cairo-sys-rs",
@ -154,9 +154,9 @@ dependencies = [
[[package]]
name = "cairo-sys-rs"
version = "0.18.0"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd4d115132e01c0165e3bf5f56aedee8980b0b96ede4eb000b693c05a8adb8ff"
checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
dependencies = [
"glib-sys",
"libc",
@ -263,7 +263,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -459,7 +459,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -520,9 +520,9 @@ dependencies = [
[[package]]
name = "gdk4"
version = "0.7.2"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6982d9815ed6ac95b0467b189e81f29dea26d08a732926ec113e65744ed3f96c"
checksum = "7edb019ad581f8ecf8ea8e4baa6df7c483a95b5a59be3140be6a9c3b0c632af6"
dependencies = [
"cairo-rs",
"gdk-pixbuf",
@ -591,9 +591,9 @@ checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
[[package]]
name = "gio"
version = "0.18.1"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7884cba6b1c5db1607d970cadf44b14a43913d42bc68766eea6a5e2fe0891524"
checksum = "57052f84e8e5999b258e8adf8f5f2af0ac69033864936b8b6838321db2f759b1"
dependencies = [
"futures-channel",
"futures-core",
@ -638,9 +638,9 @@ dependencies = [
[[package]]
name = "glib"
version = "0.18.1"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "331156127e8166dd815cf8d2db3a5beb492610c716c03ee6db4f2d07092af0a7"
checksum = "1c316afb01ce8067c5eaab1fc4f2cd47dc21ce7b6296358605e2ffab23ccbd19"
dependencies = [
"bitflags 2.4.0",
"futures-channel",
@ -661,16 +661,16 @@ dependencies = [
[[package]]
name = "glib-macros"
version = "0.18.0"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "179643c50bf28d20d2f6eacd2531a88f2f5d9747dd0b86b8af1e8bb5dd0de3c0"
checksum = "f8da903822b136d42360518653fcf154455defc437d3e7a81475bf9a95ff1e47"
dependencies = [
"heck",
"proc-macro-crate",
"proc-macro-error",
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -725,9 +725,9 @@ dependencies = [
[[package]]
name = "gsk4"
version = "0.7.2"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc25855255120f294d874acd6eaf4fbed7ce1cdc550e2d8415ea57fafbe816d5"
checksum = "0d958e351d2f210309b32d081c832d7de0aca0b077aa10d88336c6379bd01f7e"
dependencies = [
"cairo-rs",
"gdk4",
@ -740,9 +740,9 @@ dependencies = [
[[package]]
name = "gsk4-sys"
version = "0.7.2"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1ecf3a63bf1223d68f80f72cc896c4d8c80482fbce1c9a12c66d3de7290ee46"
checksum = "12bd9e3effea989f020e8f1ff3fa3b8c63ba93d43b899c11a118868853a56d55"
dependencies = [
"cairo-sys-rs",
"gdk4-sys",
@ -756,9 +756,9 @@ dependencies = [
[[package]]
name = "gtk4"
version = "0.7.2"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3b095b26f2a2df70be1805d3590eeb9d7a05ecb5be9649b82defc72dc56228c"
checksum = "5aeb51aa3e9728575a053e1f43543cd9992ac2477e1b186ad824fd4adfb70842"
dependencies = [
"cairo-rs",
"field-offset",
@ -791,9 +791,9 @@ dependencies = [
[[package]]
name = "gtk4-sys"
version = "0.7.2"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b0bdde87c50317b4f355bcbb4a9c2c414ece1b7c824fb4ad4ba8f3bdb2c6603"
checksum = "54d8c4aa23638ce9faa2caf7e2a27d4a1295af2155c8e8d28c4d4eeca7a65eb8"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@ -847,9 +847,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
version = "0.3.2"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
name = "home"
@ -1005,9 +1005,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libadwaita"
version = "0.5.2"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06444f4ca05a60693da6e9e2b591bd40a298e65a118a8d5e830771718b3e0253"
checksum = "2fe7e70c06507ed10a16cda707f358fbe60fe0dc237498f78c686ade92fd979c"
dependencies = [
"gdk-pixbuf",
"gdk4",
@ -1021,9 +1021,9 @@ dependencies = [
[[package]]
name = "libadwaita-sys"
version = "0.5.2"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "021cfe3d1fcfa82411765a791f7e9b32f35dd98ce88d2e3fa10e7320f5cc8ce7"
checksum = "5e10aaa38de1d53374f90deeb4535209adc40cc5dba37f9704724169bceec69a"
dependencies = [
"gdk4-sys",
"gio-sys",
@ -1352,7 +1352,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -1439,7 +1439,7 @@ dependencies = [
"phf_shared",
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -1482,7 +1482,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
dependencies = [
"proc-macro2",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -1607,9 +1607,9 @@ checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
[[package]]
name = "relm4"
version = "0.7.0-alpha.1"
version = "0.7.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d307673e36bb450a4823d500d661f53e1622a685b330149c193b791687146b3f"
checksum = "0f324ac78fb652034ff63c392b3aabad02b4a04cd802e73555e0bff07a21e08b"
dependencies = [
"async-trait",
"flume",
@ -1625,9 +1625,9 @@ dependencies = [
[[package]]
name = "relm4-components"
version = "0.7.0-alpha.1"
version = "0.7.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfffa2b1c9e0f2c9a35602ebe9d55358728a3dd1a7e10ed1f2df0216e6b04634"
checksum = "5b28bfc632d7e26eea6481c52f4ef3f718155fe5bf962504c2a283620b38df0a"
dependencies = [
"once_cell",
"relm4",
@ -1636,13 +1636,13 @@ dependencies = [
[[package]]
name = "relm4-macros"
version = "0.7.0-alpha.1"
version = "0.7.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d1892cdfb2df6c8bbe5a84451d3979125255e31437c0bfd14c81bde93ff0cf6"
checksum = "7cdf60cdb41e28131b6c0d830db742dc2b9ea311ef319f08cfac28567ec1d938"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -1705,9 +1705,9 @@ dependencies = [
[[package]]
name = "rustix"
version = "0.38.13"
version = "0.38.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7db8590df6dfcd144d22afd1b83b36c21a18d7cbc1dc4bb5295a8712e9eb662"
checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f"
dependencies = [
"bitflags 2.4.0",
"errno",
@ -1762,9 +1762,9 @@ dependencies = [
[[package]]
name = "semver"
version = "1.0.18"
version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0"
[[package]]
name = "serde"
@ -1783,14 +1783,14 @@ checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
name = "serde_json"
version = "1.0.106"
version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2cc66a619ed80bf7a0f6b17dd063a84b88f6dea1813737cf469aef1d081142c2"
checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
dependencies = [
"itoa",
"ryu",
@ -1841,9 +1841,9 @@ dependencies = [
[[package]]
name = "smallvec"
version = "1.11.0"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
[[package]]
name = "socket2"
@ -1922,9 +1922,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.33"
version = "2.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9caece70c63bfba29ec2fed841a09851b14a235c60010fa4de58089b6c025668"
checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"
dependencies = [
"proc-macro2",
"quote",
@ -1986,7 +1986,7 @@ checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -2032,9 +2032,9 @@ dependencies = [
[[package]]
name = "tokio-util"
version = "0.7.8"
version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
dependencies = [
"bytes",
"futures-core",
@ -2104,7 +2104,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -2133,7 +2133,7 @@ checksum = "ca029746fbe0efda3298205de77bf759d7fef23ac97902641e0b49a623b0455f"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
]
[[package]]
@ -2244,7 +2244,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
"wasm-bindgen-shared",
]
@ -2278,7 +2278,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.33",
"syn 2.0.37",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]

View file

@ -15,8 +15,8 @@ gtk4 = { version = "0.7.2", features = [
"v4_10",
] }
lazy_static = "1.4.0"
libadwaita = { version = "0.5.2", features = [
"v1_3"
libadwaita = { version = "0.5.3", features = [
"v1_4"
] }
libmonado-rs = { git = "https://github.com/technobaboo/libmonado-rs", version = "0.1.0" }
libusb = "0.3.0"
@ -25,7 +25,7 @@ nix = { version = "0.26.4", features = [
] }
phf = "0.11.2"
phf_macros = "0.11.2"
relm4 = { version = "0.7.0-alpha.1", features = [
relm4 = { version = "0.7.0-beta.1", features = [
"libadwaita"
] }
relm4-components = "0.7.0-alpha.1"

View file

@ -73,6 +73,8 @@ pub struct App {
#[tracker::do_not_track]
debug_view: Controller<DebugView>,
#[tracker::do_not_track]
split_view: Option<adw::OverlaySplitView>,
#[tracker::do_not_track]
about_dialog: Controller<AboutDialog>,
#[tracker::do_not_track]
build_window: Controller<BuildWindow>,
@ -258,21 +260,23 @@ impl SimpleComponent for App {
adw::ApplicationWindow {
set_title: Some(APP_NAME),
set_default_size: (win_size[0], win_size[1]),
set_width_request: 390,
gtk::Box {
set_orientation: gtk::Orientation::Vertical,
set_hexpand: true,
set_vexpand: true,
gtk::Box {
set_orientation: gtk::Orientation::Horizontal,
#[name = "split_view"]
adw::OverlaySplitView {
set_hexpand: true,
set_vexpand: true,
model.main_view.widget(),
gtk::Separator {
set_orientation: gtk::Orientation::Vertical,
#[track = "model.changed(App::enable_debug_view())"]
set_visible: model.enable_debug_view,
},
model.debug_view.widget(),
set_content: Some(model.main_view.widget()),
set_sidebar: Some(model.debug_view.widget()),
set_sidebar_position: gtk::PackType::End,
set_show_sidebar: model.config.debug_view_enabled,
set_sidebar_width_fraction: 1.0,
// stupid way to make sidebar hexpand
set_max_sidebar_width: 999999.9,
set_pin_sidebar: true,
}
},
connect_close_request[sender] => move |win| {
@ -365,9 +369,7 @@ impl SimpleComponent for App {
self.set_enable_debug_view(val);
self.config.debug_view_enabled = val;
self.config.save();
self.debug_view
.sender()
.emit(DebugViewMsg::EnableDebugViewChanged(val));
self.split_view.clone().unwrap().set_show_sidebar(val);
self.main_view
.sender()
.emit(MainViewMsg::EnableDebugViewChanged(val));
@ -623,7 +625,7 @@ impl SimpleComponent for App {
});
}
let model = App {
let mut model = App {
application: init.application,
app_win: root.clone(),
inhibit_id: None,
@ -642,13 +644,12 @@ impl SimpleComponent for App {
MainViewOutMsg::SaveProfile(p) => Msg::SaveProfile(p),
MainViewOutMsg::OpenLibsurviveSetup => Msg::OpenLibsurviveSetup,
}),
debug_view: DebugView::builder()
.launch(DebugViewInit {
enable_debug_view: config.debug_view_enabled,
})
.forward(sender.input_sender(), |message| match message {
debug_view: DebugView::builder().launch(DebugViewInit {}).forward(
sender.input_sender(),
|message| match message {
_ => Msg::ClockTicking,
}),
},
),
about_dialog: AboutDialog::builder()
.transient_for(root)
.launch(())
@ -663,6 +664,7 @@ impl SimpleComponent for App {
.transient_for(root)
.launch(())
.detach(),
split_view: None,
setcap_confirm_dialog,
enable_debug_view: config.debug_view_enabled,
config,
@ -743,6 +745,8 @@ impl SimpleComponent for App {
});
}
model.split_view = Some(widgets.split_view.clone());
ComponentParts { model, widgets }
}
}

View file

@ -16,7 +16,6 @@ pub enum SearchDirection {
pub enum DebugViewMsg {
LogUpdated(Vec<String>),
ClearLog,
EnableDebugViewChanged(bool),
FilterLog(SearchDirection),
LogLevelChanged(LogLevel),
}
@ -45,13 +44,9 @@ pub struct DebugView {
search_mark: Option<gtk::TextMark>,
#[tracker::do_not_track]
log_level: LogLevel,
enable_debug_view: bool,
}
pub struct DebugViewInit {
pub enable_debug_view: bool,
}
pub struct DebugViewInit {}
#[relm4::component(pub)]
impl SimpleComponent for DebugView {
@ -64,34 +59,23 @@ impl SimpleComponent for DebugView {
set_orientation: gtk::Orientation::Vertical,
set_hexpand: true,
set_vexpand: true,
#[track = "model.changed(DebugView::enable_debug_view())"]
set_visible: model.enable_debug_view,
gtk::WindowHandle {
adw::HeaderBar {
set_hexpand: true,
set_vexpand: false,
adw::HeaderBar {
#[wrap(Some)]
set_title_widget: title_label = &gtk::Label {
set_label: "Debug View",
add_css_class: "title",
},
pack_end: search_toggle = &gtk::ToggleButton {
set_icon_name: "edit-find-symbolic",
set_tooltip_text: Some("Filter Log"),
},
pack_start: log_level_dropdown = &gtk::DropDown::from_strings(
LogLevel::iter()
.map(|lvl| lvl.to_string())
.collect::<Vec<String>>()
.iter()
.map(|s| s.as_str())
.collect::<Vec<&str>>()
.as_slice()
),
add_css_class: "flat",
#[wrap(Some)]
set_title_widget: title_label = &adw::WindowTitle {
set_title: "Debug View",
},
pack_end: search_toggle = &gtk::ToggleButton {
set_icon_name: "edit-find-symbolic",
set_tooltip_text: Some("Filter Log"),
},
pack_start: &log_level_dropdown,
},
#[name(searchbar)]
gtk::SearchBar {
set_margin_start: 1,
set_hexpand: true,
#[chain(flags(gtk::glib::BindingFlags::BIDIRECTIONAL).build())]
bind_property: ("search-mode-enabled", &search_toggle, "active"),
@ -131,8 +115,10 @@ impl SimpleComponent for DebugView {
gtk::ScrolledWindow {
set_hexpand: true,
set_vexpand: true,
add_css_class: "undershoot-top",
#[name(textview)]
sourceview5::View {
set_margin_start: 1,
set_hexpand: true,
set_vexpand: true,
set_editable: false,
@ -227,21 +213,21 @@ impl SimpleComponent for DebugView {
self.log = vec![];
self.textbuf.set_text("");
}
Self::Input::EnableDebugViewChanged(val) => self.set_enable_debug_view(val),
}
}
fn init(
init: Self::Init,
_init: Self::Init,
root: &Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let textbuf = sourceview5::Buffer::builder()
.highlight_syntax(false)
.build();
match &sourceview5::StyleSchemeManager::new().scheme("Adwaita-dark") {
Some(scheme) => textbuf.set_style_scheme(Some(scheme)),
None => {}
if let Some(scheme) = &sourceview5::StyleSchemeManager::new().scheme("Adwaita-dark") {
textbuf.set_style_scheme(Some(scheme));
} else {
println!("gtksourceview style scheme not found")
}
let search_settings = sourceview5::SearchSettings::builder()
.wrap_around(true)
@ -251,12 +237,36 @@ impl SimpleComponent for DebugView {
.buffer(&textbuf)
.settings(&search_settings)
.build();
let log_level_dropdown = gtk::DropDown::from_strings(
LogLevel::iter()
.map(|lvl| lvl.to_string())
.collect::<Vec<String>>()
.iter()
.map(|s| s.as_str())
.collect::<Vec<&str>>()
.as_slice(),
);
if let Some(btn) = log_level_dropdown.first_child() {
btn.add_css_class("flat");
}
{
withclones![sender];
log_level_dropdown.connect_selected_notify(move |dd| {
sender.input(Self::Input::LogLevelChanged(
*LogLevel::iter()
.as_slice()
.get(dd.selected() as usize)
.unwrap(),
));
});
}
let mut model = Self {
tracker: 0,
log: vec![],
textbuf,
textview: None,
enable_debug_view: init.enable_debug_view,
searchbar: None,
search_entry: None,
dropdown: None,
@ -271,23 +281,9 @@ impl SimpleComponent for DebugView {
model.searchbar = Some(widgets.searchbar.clone());
model.search_entry = Some(widgets.search_entry.clone());
model.textview = Some(widgets.textview.clone());
model.dropdown = Some(widgets.log_level_dropdown.clone());
model.dropdown = Some(log_level_dropdown.clone());
model.scrolledwin = Some(widgets.scrolledwin.clone());
{
withclones![sender];
widgets
.log_level_dropdown
.connect_selected_notify(move |dd| {
sender.input(Self::Input::LogLevelChanged(
*LogLevel::iter()
.as_slice()
.get(dd.selected() as usize)
.unwrap(),
));
});
}
ComponentParts { model, widgets }
}
}

View file

@ -7,14 +7,14 @@ use crate::{
xr_devices::{XRDevice, XRDeviceType},
};
use adw::prelude::*;
use relm4::{factory::FactoryVecDeque, prelude::*, Sender};
use relm4::{factory::AsyncFactoryVecDeque, prelude::*, Sender};
#[tracker::track]
pub struct DevicesBox {
devices: Vec<XRDevice>,
#[tracker::do_not_track]
device_rows: FactoryVecDeque<DeviceRowModel>,
device_rows: AsyncFactoryVecDeque<DeviceRowModel>,
}
#[derive(Debug)]
@ -53,10 +53,8 @@ impl SimpleComponent for DevicesBox {
set_hexpand: true,
set_vexpand: false,
set_spacing: 12,
set_margin_top: 12,
#[track = "model.changed(Self::devices())"]
set_visible: !model.devices.is_empty(),
append: &devices_listbox,
}
}
@ -190,16 +188,12 @@ impl SimpleComponent for DevicesBox {
let devices_listbox = gtk::ListBox::builder()
.css_classes(["boxed-list"])
.selection_mode(gtk::SelectionMode::None)
.margin_start(12)
.margin_end(12)
.margin_top(12)
.margin_bottom(12)
.build();
let model = Self {
tracker: 0,
devices: vec![],
device_rows: FactoryVecDeque::new(devices_listbox.clone(), sender.input_sender()),
device_rows: AsyncFactoryVecDeque::new(devices_listbox.clone(), sender.input_sender()),
};
let widgets = view_output!();

View file

@ -1,5 +1,5 @@
use adw::prelude::*;
use relm4::prelude::*;
use relm4::{factory::AsyncFactoryComponent, prelude::*, AsyncFactorySender};
use crate::{
ui::devices_box::DevicesBoxMsg,
@ -72,13 +72,12 @@ impl DeviceRowModelInit {
}
}
#[relm4::factory(pub)]
impl FactoryComponent for DeviceRowModel {
#[relm4::factory(async pub)]
impl AsyncFactoryComponent for DeviceRowModel {
type Init = DeviceRowModelInit;
type Input = ();
type Output = ();
type CommandOutput = ();
type Widgets = DeviceRowModelWidgets;
type ParentInput = DevicesBoxMsg;
type ParentWidget = gtk::ListBox;
@ -95,10 +94,10 @@ impl FactoryComponent for DeviceRowModel {
fn init_widgets(
&mut self,
_index: &Self::Index,
_index: &DynamicIndex,
root: &Self::Root,
_returned_widget: &<Self::ParentWidget as relm4::factory::FactoryView>::ReturnedWidget,
_sender: FactorySender<Self>,
_sender: AsyncFactorySender<Self>,
) -> Self::Widgets {
let widgets = view_output!();
@ -113,7 +112,11 @@ impl FactoryComponent for DeviceRowModel {
widgets
}
fn init_model(init: Self::Init, _index: &Self::Index, _sender: FactorySender<Self>) -> Self {
async fn init_model(
init: Self::Init,
_index: &DynamicIndex,
_sender: AsyncFactorySender<Self>,
) -> Self {
Self {
title: init.title.unwrap_or_default(),
subtitle: init.subtitle.unwrap_or_default(),

View file

@ -1,6 +1,6 @@
use crate::ui::profile_editor::ProfileEditorMsg;
use adw::prelude::*;
use relm4::prelude::*;
use relm4::{factory::AsyncFactoryComponent, prelude::*, AsyncFactorySender};
#[derive(Debug)]
pub struct EnvVarModel {
@ -25,13 +25,12 @@ pub enum EnvVarModelOutMsg {
Delete(String),
}
#[relm4::factory(pub)]
impl FactoryComponent for EnvVarModel {
#[relm4::factory(async pub)]
impl AsyncFactoryComponent for EnvVarModel {
type Init = EnvVarModelInit;
type Input = EnvVarModelMsg;
type Output = EnvVarModelOutMsg;
type CommandOutput = ();
type Widgets = EnvVarModelWidgets;
type ParentInput = ProfileEditorMsg;
type ParentWidget = adw::PreferencesGroup;
@ -55,7 +54,7 @@ impl FactoryComponent for EnvVarModel {
}
}
fn update(&mut self, message: Self::Input, sender: FactorySender<Self>) {
async fn update(&mut self, message: Self::Input, sender: AsyncFactorySender<Self>) {
match message {
Self::Input::Changed(val) => {
self.value = val.clone();
@ -76,7 +75,11 @@ impl FactoryComponent for EnvVarModel {
})
}
fn init_model(init: Self::Init, _index: &Self::Index, _sender: FactorySender<Self>) -> Self {
async fn init_model(
init: Self::Init,
_index: &DynamicIndex,
_sender: AsyncFactorySender<Self>,
) -> Self {
Self {
name: init.name,
value: init.value,

View file

@ -5,7 +5,7 @@ use crate::{
withclones,
};
use adw::prelude::*;
use relm4::prelude::*;
use relm4::{factory::AsyncFactoryComponent, prelude::*, AsyncFactorySender};
#[derive(Debug)]
pub struct TrackerRoleModel {
@ -30,13 +30,12 @@ pub enum TrackerRoleModelOutMsg {
Delete(usize),
}
#[relm4::factory(pub)]
impl FactoryComponent for TrackerRoleModel {
#[relm4::factory(async pub)]
impl AsyncFactoryComponent for TrackerRoleModel {
type Init = TrackerRoleModelInit;
type Input = TrackerRoleModelMsg;
type Output = TrackerRoleModelOutMsg;
type CommandOutput = ();
type Widgets = TrackerRoleModelWidgets;
type ParentInput = FbtConfigEditorMsg;
type ParentWidget = adw::PreferencesPage;
@ -90,7 +89,7 @@ impl FactoryComponent for TrackerRoleModel {
})
}
fn update(&mut self, message: Self::Input, sender: FactorySender<Self>) {
async fn update(&mut self, message: Self::Input, sender: AsyncFactorySender<Self>) {
match message {
Self::Input::Changed(r) => {
self.tracker_role = r;
@ -100,7 +99,11 @@ impl FactoryComponent for TrackerRoleModel {
}
}
fn init_model(init: Self::Init, _index: &Self::Index, _sender: FactorySender<Self>) -> Self {
async fn init_model(
init: Self::Init,
_index: &DynamicIndex,
_sender: AsyncFactorySender<Self>,
) -> Self {
Self {
index: init.index,
tracker_role: init.tracker_role.unwrap_or_else(|| TrackerRole::default()),

View file

@ -7,7 +7,10 @@ use crate::{
withclones,
};
use adw::prelude::*;
use relm4::{factory::FactoryVecDeque, prelude::*};
use relm4::{
factory::{AsyncFactoryVecDeque, FactoryVecDeque},
prelude::*,
};
#[tracker::track]
pub struct FbtConfigEditor {
@ -17,7 +20,7 @@ pub struct FbtConfigEditor {
win: Option<adw::Window>,
#[tracker::do_not_track]
tracker_role_groups: FactoryVecDeque<TrackerRoleModel>,
tracker_role_groups: AsyncFactoryVecDeque<TrackerRoleModel>,
}
#[derive(Debug)]
@ -137,7 +140,7 @@ impl SimpleComponent for FbtConfigEditor {
win: None,
tracker: 0,
monado_config_v0: get_monado_config_v0(),
tracker_role_groups: FactoryVecDeque::new(page, sender.input_sender()),
tracker_role_groups: AsyncFactoryVecDeque::new(page, sender.input_sender()),
};
model.populate_tracker_roles();

View file

@ -70,7 +70,6 @@ impl SimpleComponent for InstallWivrnBox {
gtk::Box {
set_orientation: gtk::Orientation::Vertical,
set_spacing: 12,
set_margin_all: 12,
add_css_class: "card",
add_css_class: "padded",
#[track = "model.changed(Self::selected_profile())"]

View file

@ -123,37 +123,36 @@ impl SimpleComponent for MainView {
}
view! {
gtk::Box {
set_orientation: gtk::Orientation::Vertical,
// TODO: refactor with adw.toolbarview
adw::ToolbarView {
set_top_bar_style: adw::ToolbarStyle::Flat,
set_bottom_bar_style: adw::ToolbarStyle::Flat,
#[track = "model.changed(Self::enable_debug_view())"]
set_hexpand: !model.enable_debug_view,
set_vexpand: true,
set_size_request: (360, 350),
gtk::WindowHandle {
add_top_bar: top_bar = &adw::HeaderBar {
set_hexpand: true,
set_vexpand: false,
adw::HeaderBar {
#[wrap(Some)]
set_title_widget: title_label = &gtk::Label {
set_label: APP_NAME,
add_css_class: "title",
},
pack_end: menu_btn = &gtk::MenuButton {
set_icon_name: "open-menu-symbolic",
set_menu_model: Some(&app_menu),
},
#[track = "model.changed(Self::enable_debug_view())"]
set_show_end_title_buttons: !model.enable_debug_view,
#[wrap(Some)]
set_title_widget: title_label = &adw::WindowTitle {
set_title: APP_NAME,
},
pack_end: menu_btn = &gtk::MenuButton {
set_icon_name: "open-menu-symbolic",
set_menu_model: Some(&app_menu),
},
#[track = "model.changed(Self::enable_debug_view())"]
set_show_end_title_buttons: !model.enable_debug_view,
},
gtk::ScrolledWindow {
#[wrap(Some)]
set_content: content = &gtk::ScrolledWindow {
set_hscrollbar_policy: gtk::PolicyType::Never,
set_hexpand: true,
set_vexpand: true,
gtk::Box {
set_spacing: 6,
set_margin_top: 12,
set_margin_bottom: 12,
set_spacing: 12,
set_margin_all: 12,
set_orientation: gtk::Orientation::Vertical,
gtk::Box {
set_halign: gtk::Align::Center,
@ -195,7 +194,6 @@ impl SimpleComponent for MainView {
set_hexpand: true,
set_vexpand: false,
set_spacing: 12,
set_margin_all: 12,
add_css_class: "card",
add_css_class: "padded",
#[track = "model.changed(Self::selected_profile())"]
@ -229,7 +227,6 @@ impl SimpleComponent for MainView {
set_hexpand: true,
set_vexpand: false,
set_spacing: 12,
set_margin_all: 12,
add_css_class: "card",
add_css_class: "padded",
#[track = "model.changed(Self::selected_profile())"]
@ -252,7 +249,6 @@ impl SimpleComponent for MainView {
set_hexpand: true,
set_vexpand: false,
set_spacing: 12,
set_margin_all: 12,
add_css_class: "card",
add_css_class: "padded",
#[track = "model.changed(Self::selected_profile())"]
@ -335,7 +331,6 @@ impl SimpleComponent for MainView {
set_hexpand: true,
set_vexpand: false,
set_spacing: 12,
set_margin_all: 12,
add_css_class: "card",
add_css_class: "padded",
#[track = "model.changed(Self::selected_profile())"]
@ -371,15 +366,10 @@ impl SimpleComponent for MainView {
},
}
},
gtk::Separator {
set_orientation: gtk::Orientation::Horizontal,
set_hexpand: true,
},
gtk::Box {
add_bottom_bar: bottom_bar = &gtk::Box {
set_orientation: gtk::Orientation::Horizontal,
set_spacing: 12,
add_css_class: "toolbar",
add_css_class: "view",
set_margin_all: 12,
gtk::Box {
set_orientation: gtk::Orientation::Horizontal,
add_css_class: "linked",

View file

@ -9,7 +9,7 @@ use crate::{
withclones,
};
use adw::prelude::*;
use relm4::{factory::FactoryVecDeque, prelude::*};
use relm4::{factory::AsyncFactoryVecDeque, prelude::*};
use std::{cell::RefCell, rc::Rc};
#[tracker::track]
@ -18,7 +18,7 @@ pub struct ProfileEditor {
#[tracker::do_not_track]
win: Option<adw::Window>,
#[tracker::do_not_track]
env_rows: FactoryVecDeque<EnvVarModel>,
env_rows: AsyncFactoryVecDeque<EnvVarModel>,
}
#[derive(Debug)]
@ -360,7 +360,7 @@ impl SimpleComponent for ProfileEditor {
.env_rows
.guard()
.iter()
.position(|evr| evr.name == name);
.position(|evr| evr.unwrap().name == name);
if let Some(p) = pos {
self.env_rows.guard().remove(p);
}
@ -415,7 +415,7 @@ impl SimpleComponent for ProfileEditor {
let mut model = Self {
profile,
win: None,
env_rows: FactoryVecDeque::new(
env_rows: AsyncFactoryVecDeque::new(
adw::PreferencesGroup::builder()
.title("Environment Variables")
.description(env_var_descriptions_as_paragraph())

View file

@ -27,7 +27,6 @@ impl SimpleComponent for SteamLaunchOptionsBox {
set_hexpand: true,
set_vexpand: false,
set_spacing: 12,
set_margin_all: 12,
add_css_class: "card",
add_css_class: "padded",
#[track = "model.changed(Self::xrservice_active())"]