mirror of
https://gitlab.com/gabmus/envision.git
synced 2025-04-22 04:24:50 +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,75 +43,57 @@ impl SimpleComponent for DevicesBox {
|
|||
self.set_devices(devs);
|
||||
let mut guard = self.device_rows.guard();
|
||||
guard.clear();
|
||||
if !self.devices.is_empty() {
|
||||
let mut has_head = false;
|
||||
let mut has_left = false;
|
||||
let mut has_right = false;
|
||||
let mut models: Vec<DeviceRowModelInit> = vec![];
|
||||
let mut generic: Vec<&XRDevice> = vec![];
|
||||
for dev in &self.devices {
|
||||
match dev.dev_type {
|
||||
XRDeviceRole::Head => {
|
||||
has_head = true;
|
||||
let mut init = DeviceRowModelInit::from_xr_device(dev);
|
||||
if dev.name == "Simulated HMD" {
|
||||
init.state = Some(DeviceRowState::Warning);
|
||||
init.subtitle = Some("No HMD detected (Simulated HMD)".into());
|
||||
}
|
||||
models.push(init);
|
||||
if self.devices.is_empty() {
|
||||
return;
|
||||
}
|
||||
let mut has_head = false;
|
||||
let mut has_left = false;
|
||||
let mut has_right = false;
|
||||
let mut models: Vec<DeviceRowModelInit> = Vec::new();
|
||||
for dev in &self.devices {
|
||||
match dev.dev_type {
|
||||
XRDeviceRole::Head => {
|
||||
has_head = true;
|
||||
let mut init = DeviceRowModelInit::from(dev);
|
||||
if dev.name == "Simulated HMD" || dev.name == "Qwerty HMD" {
|
||||
init.state = Some(DeviceRowState::Warning);
|
||||
init.subtitle = Some(format!("No HMD detected ({})", dev.name));
|
||||
}
|
||||
XRDeviceRole::Left => {
|
||||
has_left = true;
|
||||
models.push(DeviceRowModelInit::from_xr_device(dev));
|
||||
}
|
||||
XRDeviceRole::Right => {
|
||||
has_right = true;
|
||||
models.push(DeviceRowModelInit::from_xr_device(dev));
|
||||
}
|
||||
XRDeviceRole::GenericTracker => {
|
||||
generic.push(dev);
|
||||
}
|
||||
_ => {
|
||||
models.push(DeviceRowModelInit::from_xr_device(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 {
|
||||
models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Right));
|
||||
}
|
||||
if !has_left {
|
||||
models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Left));
|
||||
}
|
||||
if !has_head {
|
||||
models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Head));
|
||||
}
|
||||
models.push(init);
|
||||
}
|
||||
XRDeviceRole::Left => {
|
||||
has_left = true;
|
||||
models.push(DeviceRowModelInit::from(dev));
|
||||
}
|
||||
XRDeviceRole::Right => {
|
||||
has_right = true;
|
||||
models.push(DeviceRowModelInit::from(dev));
|
||||
}
|
||||
_ => {
|
||||
models.push(DeviceRowModelInit::from(dev));
|
||||
}
|
||||
};
|
||||
}
|
||||
if !has_right {
|
||||
models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Right));
|
||||
}
|
||||
if !has_left {
|
||||
models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Left));
|
||||
}
|
||||
if !has_head {
|
||||
models.push(DeviceRowModelInit::new_missing(XRDeviceRole::Head));
|
||||
}
|
||||
|
||||
models.sort_by(|m1, m2| {
|
||||
let dt1 = XRDeviceRole::from_display_str(
|
||||
m1.title.as_ref().unwrap_or(&String::new()),
|
||||
);
|
||||
let dt2 = XRDeviceRole::from_display_str(
|
||||
m2.title.as_ref().unwrap_or(&String::new()),
|
||||
);
|
||||
dt1.cmp(&dt2)
|
||||
});
|
||||
models.sort_by(|m1, m2| {
|
||||
let dt1 =
|
||||
XRDeviceRole::from_display_str(m1.title.as_deref().unwrap_or_default());
|
||||
let dt2 =
|
||||
XRDeviceRole::from_display_str(m2.title.as_deref().unwrap_or_default());
|
||||
dt1.cmp(&dt2)
|
||||
});
|
||||
|
||||
for model in models {
|
||||
guard.push_back(model);
|
||||
}
|
||||
for model in models {
|
||||
guard.push_back(model);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,8 +54,8 @@ pub struct DeviceRowModelInit {
|
|||
pub battery_status: Option<EnvisionBatteryStatus>,
|
||||
}
|
||||
|
||||
impl DeviceRowModelInit {
|
||||
pub fn from_xr_device(d: &XRDevice) -> Self {
|
||||
impl From<&XRDevice> for DeviceRowModelInit {
|
||||
fn from(d: &XRDevice) -> Self {
|
||||
Self {
|
||||
title: Some(d.dev_type.to_string()),
|
||||
subtitle: Some(d.name.clone()),
|
||||
|
@ -63,7 +63,9 @@ impl DeviceRowModelInit {
|
|||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl DeviceRowModelInit {
|
||||
pub fn new_missing(t: XRDeviceRole) -> Self {
|
||||
DeviceRowModelInit {
|
||||
title: Some(t.to_string()),
|
||||
|
|
Loading…
Add table
Reference in a new issue