mirror of
https://gitlab.com/gabmus/envision.git
synced 2025-08-01 05:38:44 +00:00
feat: don't treat generic trackers differently from other xr devices; refactor devices box
This commit is contained in:
parent
0f3bea883f
commit
d533a05cb4
2 changed files with 52 additions and 68 deletions
|
@ -43,52 +43,37 @@ impl SimpleComponent for DevicesBox {
|
||||||
self.set_devices(devs);
|
self.set_devices(devs);
|
||||||
let mut guard = self.device_rows.guard();
|
let mut guard = self.device_rows.guard();
|
||||||
guard.clear();
|
guard.clear();
|
||||||
if !self.devices.is_empty() {
|
if self.devices.is_empty() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let mut has_head = false;
|
let mut has_head = false;
|
||||||
let mut has_left = false;
|
let mut has_left = false;
|
||||||
let mut has_right = false;
|
let mut has_right = false;
|
||||||
let mut models: Vec<DeviceRowModelInit> = vec![];
|
let mut models: Vec<DeviceRowModelInit> = Vec::new();
|
||||||
let mut generic: Vec<&XRDevice> = vec![];
|
|
||||||
for dev in &self.devices {
|
for dev in &self.devices {
|
||||||
match dev.dev_type {
|
match dev.dev_type {
|
||||||
XRDeviceRole::Head => {
|
XRDeviceRole::Head => {
|
||||||
has_head = true;
|
has_head = true;
|
||||||
let mut init = DeviceRowModelInit::from_xr_device(dev);
|
let mut init = DeviceRowModelInit::from(dev);
|
||||||
if dev.name == "Simulated HMD" {
|
if dev.name == "Simulated HMD" || dev.name == "Qwerty HMD" {
|
||||||
init.state = Some(DeviceRowState::Warning);
|
init.state = Some(DeviceRowState::Warning);
|
||||||
init.subtitle = Some("No HMD detected (Simulated HMD)".into());
|
init.subtitle = Some(format!("No HMD detected ({})", dev.name));
|
||||||
}
|
}
|
||||||
models.push(init);
|
models.push(init);
|
||||||
}
|
}
|
||||||
XRDeviceRole::Left => {
|
XRDeviceRole::Left => {
|
||||||
has_left = true;
|
has_left = true;
|
||||||
models.push(DeviceRowModelInit::from_xr_device(dev));
|
models.push(DeviceRowModelInit::from(dev));
|
||||||
}
|
}
|
||||||
XRDeviceRole::Right => {
|
XRDeviceRole::Right => {
|
||||||
has_right = true;
|
has_right = true;
|
||||||
models.push(DeviceRowModelInit::from_xr_device(dev));
|
models.push(DeviceRowModelInit::from(dev));
|
||||||
}
|
|
||||||
XRDeviceRole::GenericTracker => {
|
|
||||||
generic.push(dev);
|
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
models.push(DeviceRowModelInit::from_xr_device(dev));
|
models.push(DeviceRowModelInit::from(dev));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if !generic.is_empty() {
|
|
||||||
models.push(DeviceRowModelInit {
|
|
||||||
title: Some(XRDeviceRole::GenericTracker.to_string()),
|
|
||||||
subtitle: Some(
|
|
||||||
generic
|
|
||||||
.iter()
|
|
||||||
.map(|d| format!("{} ({})", d.name, d.index))
|
|
||||||
.collect::<Vec<String>>()
|
|
||||||
.join("\n"),
|
|
||||||
),
|
|
||||||
..Default::default()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if !has_right {
|
if !has_right {
|
||||||
models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Right));
|
models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Right));
|
||||||
}
|
}
|
||||||
|
@ -100,12 +85,10 @@ impl SimpleComponent for DevicesBox {
|
||||||
}
|
}
|
||||||
|
|
||||||
models.sort_by(|m1, m2| {
|
models.sort_by(|m1, m2| {
|
||||||
let dt1 = XRDeviceRole::from_display_str(
|
let dt1 =
|
||||||
m1.title.as_ref().unwrap_or(&String::new()),
|
XRDeviceRole::from_display_str(m1.title.as_deref().unwrap_or_default());
|
||||||
);
|
let dt2 =
|
||||||
let dt2 = XRDeviceRole::from_display_str(
|
XRDeviceRole::from_display_str(m2.title.as_deref().unwrap_or_default());
|
||||||
m2.title.as_ref().unwrap_or(&String::new()),
|
|
||||||
);
|
|
||||||
dt1.cmp(&dt2)
|
dt1.cmp(&dt2)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -115,7 +98,6 @@ impl SimpleComponent for DevicesBox {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fn init(
|
fn init(
|
||||||
_init: Self::Init,
|
_init: Self::Init,
|
||||||
|
|
|
@ -54,8 +54,8 @@ pub struct DeviceRowModelInit {
|
||||||
pub battery_status: Option<EnvisionBatteryStatus>,
|
pub battery_status: Option<EnvisionBatteryStatus>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DeviceRowModelInit {
|
impl From<&XRDevice> for DeviceRowModelInit {
|
||||||
pub fn from_xr_device(d: &XRDevice) -> Self {
|
fn from(d: &XRDevice) -> Self {
|
||||||
Self {
|
Self {
|
||||||
title: Some(d.dev_type.to_string()),
|
title: Some(d.dev_type.to_string()),
|
||||||
subtitle: Some(d.name.clone()),
|
subtitle: Some(d.name.clone()),
|
||||||
|
@ -63,7 +63,9 @@ impl DeviceRowModelInit {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DeviceRowModelInit {
|
||||||
pub fn new_missing(t: XRDeviceRole) -> Self {
|
pub fn new_missing(t: XRDeviceRole) -> Self {
|
||||||
DeviceRowModelInit {
|
DeviceRowModelInit {
|
||||||
title: Some(t.to_string()),
|
title: Some(t.to_string()),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue