mirror of
https://gitlab.com/gabmus/envision.git
synced 2025-04-20 03:24:52 +00:00
feat: redesign devices list
This commit is contained in:
parent
138b756d9e
commit
a7534529cb
1 changed files with 55 additions and 147 deletions
|
@ -3,6 +3,7 @@ use crate::{
|
|||
xr_devices::{XRDevice, XRDevices},
|
||||
};
|
||||
use gtk::prelude::*;
|
||||
use adw::prelude::*;
|
||||
use relm4::prelude::*;
|
||||
|
||||
use super::alert::alert;
|
||||
|
@ -57,18 +58,12 @@ impl SimpleComponent for DevicesBox {
|
|||
set_margin_top: 12,
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_visible: model.devices.is_some(),
|
||||
gtk::Separator {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_hexpand: true,
|
||||
},
|
||||
// Head
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_hexpand: true,
|
||||
set_spacing: 12,
|
||||
set_margin_start: 12,
|
||||
set_margin_end: 12,
|
||||
gtk::Image {
|
||||
gtk::ListBox {
|
||||
add_css_class: "boxed-list",
|
||||
set_selection_mode: gtk::SelectionMode::None,
|
||||
set_margin_all: 12,
|
||||
// Head
|
||||
adw::ActionRow {
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_icon_name: Some(match model.get_dev(XRDevice::Head) {
|
||||
Some(_) => "emblem-ok-symbolic",
|
||||
|
@ -76,28 +71,15 @@ impl SimpleComponent for DevicesBox {
|
|||
}),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_class_active: ("error", model.get_dev(XRDevice::Head).is_none()),
|
||||
},
|
||||
gtk::Label {
|
||||
set_xalign: 0.0,
|
||||
set_hexpand: true,
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_label: format!("Head: {}", match model.get_dev(XRDevice::Head) {
|
||||
set_title: format!("Head: {}", match model.get_dev(XRDevice::Head) {
|
||||
Some(v) => v.clone(),
|
||||
None => "None".to_string(),
|
||||
}).as_str(),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_class_active: ("error", model.get_dev(XRDevice::Head).is_none()),
|
||||
// TODO: status icon with popover
|
||||
},
|
||||
},
|
||||
// Left
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_hexpand: true,
|
||||
set_spacing: 12,
|
||||
set_margin_start: 12,
|
||||
set_margin_end: 12,
|
||||
gtk::Image {
|
||||
// Left
|
||||
adw::ActionRow {
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_icon_name: Some(match model.get_dev(XRDevice::Left) {
|
||||
Some(_) => "emblem-ok-symbolic",
|
||||
|
@ -105,28 +87,15 @@ impl SimpleComponent for DevicesBox {
|
|||
}),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_class_active: ("error", model.get_dev(XRDevice::Left).is_none()),
|
||||
},
|
||||
gtk::Label {
|
||||
set_xalign: 0.0,
|
||||
set_hexpand: true,
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_label: format!("Left: {}", match model.get_dev(XRDevice::Left) {
|
||||
set_title: format!("Left: {}", match model.get_dev(XRDevice::Left) {
|
||||
Some(v) => v.clone(),
|
||||
None => "None".to_string(),
|
||||
}).as_str(),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_class_active: ("error", model.get_dev(XRDevice::Left).is_none()),
|
||||
// TODO: status icon with popover
|
||||
},
|
||||
},
|
||||
// Right
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_hexpand: true,
|
||||
set_spacing: 12,
|
||||
set_margin_start: 12,
|
||||
set_margin_end: 12,
|
||||
gtk::Image {
|
||||
// Right
|
||||
adw::ActionRow {
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_icon_name: Some(match model.get_dev(XRDevice::Right) {
|
||||
Some(_) => "emblem-ok-symbolic",
|
||||
|
@ -134,140 +103,79 @@ impl SimpleComponent for DevicesBox {
|
|||
}),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_class_active: ("error", model.get_dev(XRDevice::Right).is_none()),
|
||||
},
|
||||
gtk::Label {
|
||||
set_xalign: 0.0,
|
||||
set_hexpand: true,
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_label: format!("Right: {}", match model.get_dev(XRDevice::Right) {
|
||||
set_title: format!("Right: {}", match model.get_dev(XRDevice::Right) {
|
||||
Some(v) => v.clone(),
|
||||
None => "None".to_string(),
|
||||
}).as_str(),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_class_active: ("error", model.get_dev(XRDevice::Right).is_none()),
|
||||
// TODO: status icon with popover
|
||||
},
|
||||
},
|
||||
// Gamepad
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_hexpand: true,
|
||||
set_spacing: 12,
|
||||
set_margin_start: 12,
|
||||
set_margin_end: 12,
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_visible: model.get_dev(XRDevice::Gamepad).is_some(),
|
||||
gtk::Image {
|
||||
set_icon_name: Some("emblem-ok-symbolic"),
|
||||
},
|
||||
gtk::Label {
|
||||
set_xalign: 0.0,
|
||||
set_hexpand: true,
|
||||
// Gamepad
|
||||
adw::ActionRow {
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_label: format!("Gamepad: {}", match model.get_dev(XRDevice::Gamepad) {
|
||||
set_visible: model.get_dev(XRDevice::Gamepad).is_some(),
|
||||
set_icon_name: Some("emblem-ok-symbolic"),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_title: format!("Gamepad: {}", match model.get_dev(XRDevice::Gamepad) {
|
||||
Some(v) => v.clone(),
|
||||
None => "None".to_string(),
|
||||
}).as_str(),
|
||||
},
|
||||
},
|
||||
// Eyes
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_hexpand: true,
|
||||
set_spacing: 12,
|
||||
set_margin_start: 12,
|
||||
set_margin_end: 12,
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_visible: model.get_dev(XRDevice::Eyes).is_some(),
|
||||
gtk::Image {
|
||||
set_icon_name: Some("emblem-ok-symbolic"),
|
||||
},
|
||||
gtk::Label {
|
||||
set_xalign: 0.0,
|
||||
set_hexpand: true,
|
||||
// Eyes
|
||||
adw::ActionRow {
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_label: format!("Eye Tracking: {}", match model.get_dev(XRDevice::Eyes) {
|
||||
set_visible: model.get_dev(XRDevice::Eyes).is_some(),
|
||||
set_icon_name: Some("emblem-ok-symbolic"),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_title: format!("Eye Tracking: {}", match model.get_dev(XRDevice::Eyes) {
|
||||
Some(v) => v.clone(),
|
||||
None => "None".to_string(),
|
||||
}).as_str(),
|
||||
},
|
||||
},
|
||||
// Hand Tracking Left
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_hexpand: true,
|
||||
set_spacing: 12,
|
||||
set_margin_start: 12,
|
||||
set_margin_end: 12,
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_visible: model.get_dev(XRDevice::HandTrackingLeft).is_some(),
|
||||
gtk::Image {
|
||||
set_icon_name: Some("emblem-ok-symbolic"),
|
||||
},
|
||||
gtk::Label {
|
||||
set_xalign: 0.0,
|
||||
set_hexpand: true,
|
||||
// Hand Tracking Left
|
||||
adw::ActionRow {
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_label: format!("Hand Tracking Left: {}", match model.get_dev(XRDevice::HandTrackingLeft) {
|
||||
set_visible: model.get_dev(XRDevice::HandTrackingLeft).is_some(),
|
||||
set_icon_name: Some("emblem-ok-symbolic"),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_title: format!("Hand Tracking Left: {}", match model.get_dev(XRDevice::HandTrackingLeft) {
|
||||
Some(v) => v.clone(),
|
||||
None => "None".to_string(),
|
||||
}).as_str(),
|
||||
},
|
||||
},
|
||||
// Hand Tracking Right
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_hexpand: true,
|
||||
set_spacing: 12,
|
||||
set_margin_start: 12,
|
||||
set_margin_end: 12,
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_visible: model.get_dev(XRDevice::HandTrackingRight).is_some(),
|
||||
gtk::Image {
|
||||
set_icon_name: Some("emblem-ok-symbolic"),
|
||||
},
|
||||
gtk::Label {
|
||||
set_xalign: 0.0,
|
||||
set_hexpand: true,
|
||||
// Hand Tracking Right
|
||||
adw::ActionRow {
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_label: format!("Hand Tracking Left: {}", match model.get_dev(XRDevice::HandTrackingRight) {
|
||||
set_visible: model.get_dev(XRDevice::HandTrackingRight).is_some(),
|
||||
set_icon_name: Some("emblem-ok-symbolic"),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_title: format!("Hand Tracking Left: {}", match model.get_dev(XRDevice::HandTrackingRight) {
|
||||
Some(v) => v.clone(),
|
||||
None => "None".to_string(),
|
||||
}).as_str(),
|
||||
},
|
||||
},
|
||||
// Generic Trackers
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Horizontal,
|
||||
set_hexpand: true,
|
||||
set_spacing: 12,
|
||||
set_margin_start: 12,
|
||||
set_margin_end: 12,
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_visible: model.get_dev(XRDevice::GenericTracker).is_some(),
|
||||
gtk::Image {
|
||||
set_icon_name: Some("emblem-ok-symbolic"),
|
||||
},
|
||||
gtk::Label {
|
||||
set_xalign: 0.0,
|
||||
set_hexpand: true,
|
||||
// Generic Trackers
|
||||
adw::ActionRow {
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_label: format!("Generic Trackers: {}", match model.get_dev(XRDevice::GenericTracker) {
|
||||
set_visible: model.get_dev(XRDevice::GenericTracker).is_some(),
|
||||
set_icon_name: Some("emblem-ok-symbolic"),
|
||||
#[track = "model.changed(Self::devices())"]
|
||||
set_title: format!("Generic Trackers: {}", match model.get_dev(XRDevice::GenericTracker) {
|
||||
Some(v) => v.clone(),
|
||||
None => "None".to_string(),
|
||||
}).as_str(),
|
||||
add_suffix: save_trackers_btn = >k::Button {
|
||||
set_halign: gtk::Align::Center,
|
||||
set_valign: gtk::Align::Center,
|
||||
set_icon_name: "document-save-symbolic",
|
||||
set_tooltip_text: Some("Save current trackers"),
|
||||
set_css_classes: &["circular", "flat"],
|
||||
connect_clicked => move |_| {
|
||||
sender.input(Self::Input::DumpGenericTrackers);
|
||||
}
|
||||
},
|
||||
},
|
||||
gtk::Button {
|
||||
set_halign: gtk::Align::Start,
|
||||
set_hexpand: false,
|
||||
set_icon_name: "document-save-symbolic",
|
||||
set_tooltip_text: Some("Save current trackers"),
|
||||
set_css_classes: &["circular", "flat"],
|
||||
connect_clicked => move |_| {
|
||||
sender.input(Self::Input::DumpGenericTrackers);
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue