feat: device rows use title for dev type and subtitle for name

This commit is contained in:
Gabriele Musco 2023-09-10 16:05:25 +02:00
commit 2f259d48e9
No known key found for this signature in database
GPG key ID: 1068D795C80E51DE

View file

@ -3,7 +3,6 @@ use crate::{
xr_devices::{XRDevice, XRDevices}, xr_devices::{XRDevice, XRDevices},
}; };
use adw::prelude::*; use adw::prelude::*;
use gtk::prelude::*;
use relm4::prelude::*; use relm4::prelude::*;
use super::alert::alert; use super::alert::alert;
@ -41,6 +40,10 @@ impl DevicesBox {
}, },
} }
} }
fn get_dev_or_none(&self, key: XRDevice) -> String {
self.get_dev(key).unwrap_or("None".into())
}
} }
#[relm4::component(pub)] #[relm4::component(pub)]
@ -71,11 +74,9 @@ impl SimpleComponent for DevicesBox {
}), }),
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_class_active: ("error", model.get_dev(XRDevice::Head).is_none()), set_class_active: ("error", model.get_dev(XRDevice::Head).is_none()),
set_title: "Head",
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_title: format!("Head: {}", match model.get_dev(XRDevice::Head) { set_subtitle: model.get_dev_or_none(XRDevice::Head).as_str(),
Some(v) => v.clone(),
None => "None".to_string(),
}).as_str(),
// TODO: status icon with popover // TODO: status icon with popover
}, },
// Left // Left
@ -87,11 +88,9 @@ impl SimpleComponent for DevicesBox {
}), }),
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_class_active: ("error", model.get_dev(XRDevice::Left).is_none()), set_class_active: ("error", model.get_dev(XRDevice::Left).is_none()),
set_title: "Left",
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_title: format!("Left: {}", match model.get_dev(XRDevice::Left) { set_subtitle: model.get_dev_or_none(XRDevice::Left).as_str(),
Some(v) => v.clone(),
None => "None".to_string(),
}).as_str(),
// TODO: status icon with popover // TODO: status icon with popover
}, },
// Right // Right
@ -103,11 +102,9 @@ impl SimpleComponent for DevicesBox {
}), }),
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_class_active: ("error", model.get_dev(XRDevice::Right).is_none()), set_class_active: ("error", model.get_dev(XRDevice::Right).is_none()),
set_title: "Right",
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_title: format!("Right: {}", match model.get_dev(XRDevice::Right) { set_subtitle: model.get_dev_or_none(XRDevice::Right).as_str(),
Some(v) => v.clone(),
None => "None".to_string(),
}).as_str(),
// TODO: status icon with popover // TODO: status icon with popover
}, },
// Gamepad // Gamepad
@ -115,55 +112,45 @@ impl SimpleComponent for DevicesBox {
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_visible: model.get_dev(XRDevice::Gamepad).is_some(), set_visible: model.get_dev(XRDevice::Gamepad).is_some(),
set_icon_name: Some("emblem-ok-symbolic"), set_icon_name: Some("emblem-ok-symbolic"),
set_title: "Gamepad",
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_title: format!("Gamepad: {}", match model.get_dev(XRDevice::Gamepad) { set_subtitle: model.get_dev_or_none(XRDevice::Gamepad).as_str(),
Some(v) => v.clone(),
None => "None".to_string(),
}).as_str(),
}, },
// Eyes // Eyes
adw::ActionRow { adw::ActionRow {
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_visible: model.get_dev(XRDevice::Eyes).is_some(), set_visible: model.get_dev(XRDevice::Eyes).is_some(),
set_icon_name: Some("emblem-ok-symbolic"), set_icon_name: Some("emblem-ok-symbolic"),
set_title: "Eye Tracking",
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_title: format!("Eye Tracking: {}", match model.get_dev(XRDevice::Eyes) { set_subtitle: model.get_dev_or_none(XRDevice::Eyes).as_str(),
Some(v) => v.clone(),
None => "None".to_string(),
}).as_str(),
}, },
// Hand Tracking Left // Hand Tracking Left
adw::ActionRow { adw::ActionRow {
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_visible: model.get_dev(XRDevice::HandTrackingLeft).is_some(), set_visible: model.get_dev(XRDevice::HandTrackingLeft).is_some(),
set_icon_name: Some("emblem-ok-symbolic"), set_icon_name: Some("emblem-ok-symbolic"),
set_title: "Hand Tracking Left",
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_title: format!("Hand Tracking Left: {}", match model.get_dev(XRDevice::HandTrackingLeft) { set_subtitle: model.get_dev_or_none(XRDevice::HandTrackingLeft).as_str(),
Some(v) => v.clone(),
None => "None".to_string(),
}).as_str(),
}, },
// Hand Tracking Right // Hand Tracking Right
adw::ActionRow { adw::ActionRow {
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_visible: model.get_dev(XRDevice::HandTrackingRight).is_some(), set_visible: model.get_dev(XRDevice::HandTrackingRight).is_some(),
set_icon_name: Some("emblem-ok-symbolic"), set_icon_name: Some("emblem-ok-symbolic"),
set_title: "Hand Tracking Right",
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_title: format!("Hand Tracking Left: {}", match model.get_dev(XRDevice::HandTrackingRight) { set_subtitle: model.get_dev_or_none(XRDevice::HandTrackingRight).as_str(),
Some(v) => v.clone(),
None => "None".to_string(),
}).as_str(),
}, },
// Generic Trackers // Generic Trackers
adw::ActionRow { adw::ActionRow {
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_visible: model.get_dev(XRDevice::GenericTracker).is_some(), set_visible: model.get_dev(XRDevice::GenericTracker).is_some(),
set_icon_name: Some("emblem-ok-symbolic"), set_icon_name: Some("emblem-ok-symbolic"),
set_title: "Generic Trackers",
#[track = "model.changed(Self::devices())"] #[track = "model.changed(Self::devices())"]
set_title: format!("Generic Trackers: {}", match model.get_dev(XRDevice::GenericTracker) { set_subtitle: model.get_dev_or_none(XRDevice::GenericTracker).as_str(),
Some(v) => v.clone(),
None => "None".to_string(),
}).as_str(),
add_suffix: save_trackers_btn = &gtk::Button { add_suffix: save_trackers_btn = &gtk::Button {
set_halign: gtk::Align::Center, set_halign: gtk::Align::Center,
set_valign: gtk::Align::Center, set_valign: gtk::Align::Center,