mirror of
https://gitlab.com/gabmus/envision.git
synced 2025-09-01 15:15:54 +00:00
feat!: upgrade to relm 0.8; upgrade crates
This commit is contained in:
parent
93eaefbabe
commit
27325e2b65
23 changed files with 537 additions and 446 deletions
720
Cargo.lock
generated
720
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
17
Cargo.toml
17
Cargo.toml
|
@ -11,25 +11,26 @@ gettext-rs = { version = "0.7.0", features = [
|
|||
"gettext-system"
|
||||
] }
|
||||
git2 = "0.18.2"
|
||||
gtk4 = { version = "0.7.2", features = [
|
||||
gtk4 = { version = "0.8.2", features = [
|
||||
"v4_10",
|
||||
] }
|
||||
lazy_static = "1.4.0"
|
||||
libadwaita = { version = "0.5.3", features = [
|
||||
libadwaita = { version = "0.6.0", features = [
|
||||
"v1_4"
|
||||
] }
|
||||
libmonado-rs = { git = "https://github.com/technobaboo/libmonado-rs", version = "0.1.0" }
|
||||
libusb = "0.3.0"
|
||||
nix = { version = "0.26.4", features = [
|
||||
"fs"
|
||||
nix = { version = "0.29.0", features = [
|
||||
"fs",
|
||||
"signal"
|
||||
] }
|
||||
phf = "0.11.2"
|
||||
phf_macros = "0.11.2"
|
||||
relm4 = { version = "0.7.0-beta.1", features = [
|
||||
relm4 = { version = "0.8.1", features = [
|
||||
"libadwaita"
|
||||
] }
|
||||
relm4-components = "0.7.0-alpha.1"
|
||||
reqwest = { version = "0.11.20", features = [
|
||||
relm4-components = "0.8.1"
|
||||
reqwest = { version = "0.12.4", features = [
|
||||
"blocking"
|
||||
] }
|
||||
serde = { version = "1.0.188", features = [
|
||||
|
@ -38,4 +39,4 @@ serde = { version = "1.0.188", features = [
|
|||
serde_json = "1.0.106"
|
||||
tracker = "0.2.1"
|
||||
uuid = { version = "1.4.1", features = ["v4", "fast-rng"] }
|
||||
zoha-vte4 = { version = "0.0.2", features = ["v0_72"] }
|
||||
vte4 = { version = "0.7.1", features = ["v0_72"] }
|
||||
|
|
|
@ -1,8 +1,3 @@
|
|||
use crate::{
|
||||
file_utils::get_writer,
|
||||
profile::{Profile, XRServiceType},
|
||||
runner::{Runner, RunnerStatus},
|
||||
};
|
||||
use nix::{
|
||||
sys::signal::{
|
||||
kill,
|
||||
|
@ -10,6 +5,12 @@ use nix::{
|
|||
},
|
||||
unistd::Pid,
|
||||
};
|
||||
|
||||
use crate::{
|
||||
file_utils::get_writer,
|
||||
profile::{Profile, XRServiceType},
|
||||
runner::{Runner, RunnerStatus},
|
||||
};
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
io::{BufRead, BufReader, Write},
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use crate::constants::{get_developers, APP_ID, APP_NAME, REPO_URL, SINGLE_DEVELOPER, VERSION};
|
||||
use relm4::gtk::traits::GtkWindowExt;
|
||||
use relm4::gtk::prelude::GtkWindowExt;
|
||||
use relm4::prelude::*;
|
||||
use relm4::{ComponentParts, SimpleComponent};
|
||||
|
||||
|
@ -28,7 +28,7 @@ impl SimpleComponent for AboutDialog {
|
|||
|
||||
fn init(
|
||||
_init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
_sender: relm4::ComponentSender<Self>,
|
||||
) -> relm4::ComponentParts<Self> {
|
||||
let model = AboutDialog {};
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use gtk::traits::{GtkApplicationExt, GtkWindowExt};
|
||||
use relm4::{adw::traits::MessageDialogExt, prelude::*};
|
||||
use gtk::prelude::{GtkApplicationExt, GtkWindowExt};
|
||||
use relm4::{adw::prelude::MessageDialogExt, prelude::*};
|
||||
|
||||
fn alert_base(title: &str, msg: Option<&str>, parent: Option<>k::Window>) -> adw::MessageDialog {
|
||||
let d = adw::MessageDialog::builder()
|
||||
|
|
|
@ -47,7 +47,7 @@ use crate::xr_devices::XRDevice;
|
|||
use gtk::glib::clone;
|
||||
use gtk::prelude::*;
|
||||
use relm4::actions::{AccelsPlus, ActionGroupName, RelmAction, RelmActionGroup};
|
||||
use relm4::adw::traits::MessageDialogExt;
|
||||
use relm4::adw::prelude::MessageDialogExt;
|
||||
use relm4::adw::ResponseAppearance;
|
||||
use relm4::gtk::glib;
|
||||
use relm4::{new_action_group, new_stateful_action, new_stateless_action, prelude::*};
|
||||
|
@ -743,7 +743,7 @@ impl SimpleComponent for App {
|
|||
|
||||
fn init(
|
||||
init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let config = Config::get_config();
|
||||
|
@ -751,7 +751,7 @@ impl SimpleComponent for App {
|
|||
let profiles = config.profiles();
|
||||
let setcap_confirm_dialog = adw::MessageDialog::builder()
|
||||
.modal(true)
|
||||
.transient_for(root)
|
||||
.transient_for(&root)
|
||||
.heading("Set Capabilities")
|
||||
.body(concat!(
|
||||
"We need to set certain capabilities (CAP_SYS_NICE=eip) on the ",
|
||||
|
@ -801,17 +801,17 @@ impl SimpleComponent for App {
|
|||
},
|
||||
),
|
||||
about_dialog: AboutDialog::builder()
|
||||
.transient_for(root)
|
||||
.transient_for(&root)
|
||||
.launch(())
|
||||
.detach(),
|
||||
build_window: BuildWindow::builder()
|
||||
.transient_for(root)
|
||||
.transient_for(&root)
|
||||
.launch(())
|
||||
.forward(sender.input_sender(), |msg| match msg {
|
||||
BuildWindowOutMsg::CancelBuild => Msg::CancelBuild,
|
||||
}),
|
||||
libsurvive_setup_window: LibsurviveSetupWindow::builder()
|
||||
.transient_for(root)
|
||||
.transient_for(&root)
|
||||
.launch(())
|
||||
.detach(),
|
||||
split_view: None,
|
||||
|
|
|
@ -163,7 +163,7 @@ impl SimpleComponent for BuildWindow {
|
|||
|
||||
fn init(
|
||||
_init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let mut model = Self {
|
||||
|
|
|
@ -4,7 +4,7 @@ use gtk4::{
|
|||
prelude::{ApplicationCommandLineExt, ApplicationExt},
|
||||
Application, ApplicationCommandLine,
|
||||
},
|
||||
glib::{self, IsA},
|
||||
glib::{self, prelude::IsA},
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
|
|
@ -7,7 +7,7 @@ use gtk::glib::clone;
|
|||
use gtk::prelude::*;
|
||||
use relm4::prelude::*;
|
||||
use relm4::{ComponentSender, SimpleComponent};
|
||||
use zoha_vte4::TerminalExt;
|
||||
use vte4::TerminalExt;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum SearchDirection {
|
||||
|
@ -195,7 +195,7 @@ impl SimpleComponent for DebugView {
|
|||
|
||||
fn init(
|
||||
_init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let log_level_dropdown = gtk::DropDown::from_strings(
|
||||
|
@ -240,10 +240,10 @@ impl SimpleComponent for DebugView {
|
|||
sc.add_shortcut(gtk::Shortcut::new(
|
||||
gtk::ShortcutTrigger::parse_string("<Control>c"),
|
||||
Some(gtk::CallbackAction::new(move |_, _| {
|
||||
if let Some(text) = term.text_selected(zoha_vte4::Format::Text) {
|
||||
if let Some(text) = term.text_selected(vte4::Format::Text) {
|
||||
copy_text(text.as_str());
|
||||
}
|
||||
true
|
||||
gtk::glib::Propagation::Proceed
|
||||
})),
|
||||
));
|
||||
let term = model.term.term.clone();
|
||||
|
@ -251,7 +251,7 @@ impl SimpleComponent for DebugView {
|
|||
gtk::ShortcutTrigger::parse_string("<Control>a"),
|
||||
Some(gtk::CallbackAction::new(move |_, _| {
|
||||
term.select_all();
|
||||
true
|
||||
gtk::glib::Propagation::Proceed
|
||||
})),
|
||||
));
|
||||
model.term.term.add_controller(sc);
|
||||
|
|
|
@ -182,8 +182,8 @@ impl SimpleComponent for DevicesBox {
|
|||
|
||||
fn init(
|
||||
_init: Self::Init,
|
||||
root: &Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
root: Self::Root,
|
||||
_sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let devices_listbox = gtk::ListBox::builder()
|
||||
.css_classes(["boxed-list"])
|
||||
|
@ -193,7 +193,9 @@ impl SimpleComponent for DevicesBox {
|
|||
let model = Self {
|
||||
tracker: 0,
|
||||
devices: vec![],
|
||||
device_rows: AsyncFactoryVecDeque::new(devices_listbox.clone(), sender.input_sender()),
|
||||
device_rows: AsyncFactoryVecDeque::builder()
|
||||
.launch(devices_listbox.clone())
|
||||
.detach(),
|
||||
};
|
||||
|
||||
let widgets = view_output!();
|
||||
|
|
|
@ -82,7 +82,6 @@ impl AsyncFactoryComponent for DeviceRowModel {
|
|||
type Input = ();
|
||||
type Output = ();
|
||||
type CommandOutput = ();
|
||||
type ParentInput = DevicesBoxMsg;
|
||||
type ParentWidget = gtk::ListBox;
|
||||
|
||||
view! {
|
||||
|
@ -115,7 +114,7 @@ impl AsyncFactoryComponent for DeviceRowModel {
|
|||
fn init_widgets(
|
||||
&mut self,
|
||||
_index: &DynamicIndex,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
_returned_widget: &<Self::ParentWidget as relm4::factory::FactoryView>::ReturnedWidget,
|
||||
_sender: AsyncFactorySender<Self>,
|
||||
) -> Self::Widgets {
|
||||
|
|
|
@ -1,24 +1,15 @@
|
|||
use crate::ui::profile_editor::ProfileEditorMsg;
|
||||
use adw::prelude::*;
|
||||
use relm4::{factory::AsyncFactoryComponent, prelude::*, AsyncFactorySender};
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum VarType {
|
||||
EnvVar,
|
||||
XrServiceCmakeFlags,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct EnvVarModel {
|
||||
pub name: String,
|
||||
value: String,
|
||||
var_type: VarType,
|
||||
}
|
||||
|
||||
pub struct EnvVarModelInit {
|
||||
pub name: String,
|
||||
pub value: String,
|
||||
pub var_type: VarType,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
@ -29,8 +20,8 @@ pub enum EnvVarModelMsg {
|
|||
|
||||
#[derive(Debug)]
|
||||
pub enum EnvVarModelOutMsg {
|
||||
Changed(VarType, String, String),
|
||||
Delete(VarType, String),
|
||||
Changed(String, String),
|
||||
Delete(String),
|
||||
}
|
||||
|
||||
#[relm4::factory(async pub)]
|
||||
|
@ -39,7 +30,6 @@ impl AsyncFactoryComponent for EnvVarModel {
|
|||
type Input = EnvVarModelMsg;
|
||||
type Output = EnvVarModelOutMsg;
|
||||
type CommandOutput = ();
|
||||
type ParentInput = ProfileEditorMsg;
|
||||
type ParentWidget = adw::PreferencesGroup;
|
||||
|
||||
view! {
|
||||
|
@ -66,33 +56,16 @@ impl AsyncFactoryComponent for EnvVarModel {
|
|||
match message {
|
||||
Self::Input::Changed(val) => {
|
||||
self.value = val.clone();
|
||||
sender.output_sender().emit(Self::Output::Changed(
|
||||
self.var_type,
|
||||
self.name.clone(),
|
||||
val,
|
||||
));
|
||||
sender
|
||||
.output_sender()
|
||||
.emit(Self::Output::Changed(self.name.clone(), val));
|
||||
}
|
||||
Self::Input::Delete => {
|
||||
sender.output(Self::Output::Delete(self.var_type, self.name.clone()));
|
||||
sender.output(Self::Output::Delete(self.name.clone()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn forward_to_parent(output: Self::Output) -> Option<Self::ParentInput> {
|
||||
Some(match output {
|
||||
Self::Output::Changed(var_type, name, value) => match var_type {
|
||||
VarType::EnvVar => ProfileEditorMsg::EnvVarChanged(name, value),
|
||||
VarType::XrServiceCmakeFlags => {
|
||||
ProfileEditorMsg::XrServiceCmakeFlagsChanged(name, value)
|
||||
}
|
||||
},
|
||||
Self::Output::Delete(var_type, name) => match var_type {
|
||||
VarType::EnvVar => ProfileEditorMsg::EnvVarDelete(name),
|
||||
VarType::XrServiceCmakeFlags => ProfileEditorMsg::XrServiceCmakeFlagsDelete(name),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
async fn init_model(
|
||||
init: Self::Init,
|
||||
_index: &DynamicIndex,
|
||||
|
@ -101,7 +74,6 @@ impl AsyncFactoryComponent for EnvVarModel {
|
|||
Self {
|
||||
name: init.name,
|
||||
value: init.value,
|
||||
var_type: init.var_type,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,7 +36,6 @@ impl AsyncFactoryComponent for TrackerRoleModel {
|
|||
type Input = TrackerRoleModelMsg;
|
||||
type Output = TrackerRoleModelOutMsg;
|
||||
type CommandOutput = ();
|
||||
type ParentInput = FbtConfigEditorMsg;
|
||||
type ParentWidget = adw::PreferencesPage;
|
||||
|
||||
view! {
|
||||
|
@ -82,22 +81,15 @@ impl AsyncFactoryComponent for TrackerRoleModel {
|
|||
}
|
||||
}
|
||||
|
||||
fn forward_to_parent(output: Self::Output) -> Option<Self::ParentInput> {
|
||||
Some(match output {
|
||||
Self::Output::Changed(index, tracker_role) => {
|
||||
Self::ParentInput::TrackerRoleChanged(index, tracker_role.clone())
|
||||
}
|
||||
Self::Output::Delete(index) => Self::ParentInput::TrackerRoleDeleted(index),
|
||||
})
|
||||
}
|
||||
|
||||
async fn update(&mut self, message: Self::Input, sender: AsyncFactorySender<Self>) {
|
||||
match message {
|
||||
Self::Input::Changed(r) => {
|
||||
self.tracker_role = r;
|
||||
sender.output(Self::Output::Changed(self.index, self.tracker_role.clone()));
|
||||
}
|
||||
Self::Input::Delete => sender.output(Self::Output::Delete(self.index)),
|
||||
Self::Input::Delete => {
|
||||
sender.output(Self::Output::Delete(self.index));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,8 @@
|
|||
use crate::{
|
||||
file_builders::wivrn_config::{Codec, Encoder, WivrnConfEncoder},
|
||||
ui::{
|
||||
preference_rows::{combo_row, number_entry_row, spin_row},
|
||||
util::{bits_from_mbits, bits_to_mbits},
|
||||
wivrn_conf_editor::WivrnConfEditorMsg,
|
||||
},
|
||||
};
|
||||
use relm4::{
|
||||
adw::prelude::*, factory::AsyncFactoryComponent, gtk::prelude::*, prelude::*,
|
||||
AsyncFactorySender,
|
||||
ui::preference_rows::{combo_row, spin_row},
|
||||
};
|
||||
use relm4::{adw::prelude::*, factory::AsyncFactoryComponent, prelude::*, AsyncFactorySender};
|
||||
use uuid::Uuid;
|
||||
|
||||
#[derive(Debug)]
|
||||
|
@ -46,7 +39,6 @@ impl AsyncFactoryComponent for WivrnEncoderModel {
|
|||
type Input = WivrnEncoderModelMsg;
|
||||
type Output = WivrnEncoderModelOutMsg;
|
||||
type CommandOutput = ();
|
||||
type ParentInput = WivrnConfEditorMsg;
|
||||
type ParentWidget = adw::PreferencesPage;
|
||||
|
||||
view! {
|
||||
|
@ -190,16 +182,12 @@ impl AsyncFactoryComponent for WivrnEncoderModel {
|
|||
Self::Input::GroupChanged(val) => {
|
||||
self.encoder_conf.group = val;
|
||||
}
|
||||
Self::Input::Delete => sender.output(Self::Output::Delete(self.uid.clone())),
|
||||
Self::Input::Delete => {
|
||||
sender.output(Self::Output::Delete(self.uid.clone()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn forward_to_parent(output: Self::Output) -> Option<Self::ParentInput> {
|
||||
Some(match output {
|
||||
Self::Output::Delete(id) => Self::ParentInput::DeleteEncoder(id),
|
||||
})
|
||||
}
|
||||
|
||||
async fn init_model(
|
||||
init: Self::Init,
|
||||
_index: &DynamicIndex,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use super::factories::tracker_role_group_factory::TrackerRoleModel;
|
||||
use super::factories::tracker_role_group_factory::{TrackerRoleModel, TrackerRoleModelOutMsg};
|
||||
use crate::{
|
||||
file_builders::monado_config_v0::{
|
||||
dump_monado_config_v0, get_monado_config_v0, MonadoConfigV0, TrackerRole,
|
||||
|
@ -101,7 +101,7 @@ impl SimpleComponent for FbtConfigEditor {
|
|||
|
||||
fn init(
|
||||
init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let page = adw::PreferencesPage::builder().build();
|
||||
|
@ -124,7 +124,15 @@ impl SimpleComponent for FbtConfigEditor {
|
|||
win: None,
|
||||
tracker: 0,
|
||||
monado_config_v0: get_monado_config_v0(),
|
||||
tracker_role_groups: AsyncFactoryVecDeque::new(page, sender.input_sender()),
|
||||
tracker_role_groups: AsyncFactoryVecDeque::builder().launch(page).forward(
|
||||
sender.input_sender(),
|
||||
|msg| match msg {
|
||||
TrackerRoleModelOutMsg::Changed(index, tracker_role) => {
|
||||
Self::Input::TrackerRoleChanged(index, tracker_role.clone())
|
||||
}
|
||||
TrackerRoleModelOutMsg::Delete(index) => Self::Input::TrackerRoleDeleted(index),
|
||||
},
|
||||
),
|
||||
};
|
||||
|
||||
model.populate_tracker_roles();
|
||||
|
@ -141,7 +149,7 @@ impl SimpleComponent for FbtConfigEditor {
|
|||
gtk::ShortcutTrigger::parse_string("Escape"),
|
||||
Some(gtk::CallbackAction::new(move |_, _| {
|
||||
win.close();
|
||||
true
|
||||
gtk::glib::Propagation::Proceed
|
||||
})),
|
||||
));
|
||||
widgets.win.add_controller(sc);
|
||||
|
|
|
@ -196,7 +196,7 @@ impl SimpleComponent for InstallWivrnBox {
|
|||
|
||||
fn init(
|
||||
init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let model = Self {
|
||||
|
|
|
@ -480,7 +480,7 @@ impl SimpleComponent for LibsurviveSetupWindow {
|
|||
|
||||
fn init(
|
||||
_init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: relm4::ComponentSender<Self>,
|
||||
) -> relm4::ComponentParts<Self> {
|
||||
let json_filter = gtk::FileFilter::new();
|
||||
|
|
|
@ -22,8 +22,7 @@ use crate::ui::steamvr_calibration_box::SteamVrCalibrationBoxMsg;
|
|||
use crate::ui::util::{copy_text, limit_dropdown_width, warning_heading};
|
||||
use crate::xr_devices::XRDevice;
|
||||
use gtk::prelude::*;
|
||||
use relm4::adw::traits::MessageDialogExt;
|
||||
use relm4::adw::ResponseAppearance;
|
||||
use relm4::adw::{prelude::MessageDialogExt, ResponseAppearance};
|
||||
use relm4::prelude::*;
|
||||
use relm4::{ComponentParts, ComponentSender, SimpleComponent};
|
||||
|
||||
|
@ -622,7 +621,7 @@ impl SimpleComponent for MainView {
|
|||
|
||||
fn init(
|
||||
init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let profile_not_editable_dialog = adw::MessageDialog::builder()
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
use super::{
|
||||
alert::alert,
|
||||
factories::env_var_row_factory::{EnvVarModel, EnvVarModelInit, VarType},
|
||||
factories::env_var_row_factory::{EnvVarModel, EnvVarModelInit},
|
||||
};
|
||||
use crate::{
|
||||
env_var_descriptions::env_var_descriptions_as_paragraph,
|
||||
profile::{LighthouseDriver, Profile, XRServiceType},
|
||||
ui::preference_rows::{combo_row, entry_row, path_row, switch_row},
|
||||
ui::{
|
||||
factories::env_var_row_factory::EnvVarModelOutMsg,
|
||||
preference_rows::{combo_row, entry_row, path_row, switch_row},
|
||||
},
|
||||
};
|
||||
use adw::prelude::*;
|
||||
use gtk::glib::clone;
|
||||
|
@ -415,11 +418,9 @@ impl SimpleComponent for ProfileEditor {
|
|||
(var, "".to_string())
|
||||
};
|
||||
prof.environment.insert(name.clone(), value.clone());
|
||||
self.env_rows.guard().push_back(EnvVarModelInit {
|
||||
name,
|
||||
value,
|
||||
var_type: VarType::EnvVar,
|
||||
});
|
||||
self.env_rows
|
||||
.guard()
|
||||
.push_back(EnvVarModelInit { name, value });
|
||||
}
|
||||
}
|
||||
Self::Input::AddXrServiceCmakeFlag(name) => {
|
||||
|
@ -432,7 +433,6 @@ impl SimpleComponent for ProfileEditor {
|
|||
.push_back(EnvVarModelInit {
|
||||
name,
|
||||
value: "".to_string(),
|
||||
var_type: VarType::XrServiceCmakeFlags,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -441,7 +441,7 @@ impl SimpleComponent for ProfileEditor {
|
|||
|
||||
fn init(
|
||||
init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let (add_env_var_btn, add_cmake_flag_btn) = {
|
||||
|
@ -499,21 +499,35 @@ impl SimpleComponent for ProfileEditor {
|
|||
let mut model = Self {
|
||||
profile,
|
||||
win: None,
|
||||
env_rows: AsyncFactoryVecDeque::new(
|
||||
adw::PreferencesGroup::builder()
|
||||
.title("Environment Variables")
|
||||
.description(env_var_descriptions_as_paragraph())
|
||||
.header_suffix(&add_env_var_btn)
|
||||
.build(),
|
||||
sender.input_sender(),
|
||||
),
|
||||
xrservice_cmake_flags_rows: AsyncFactoryVecDeque::new(
|
||||
adw::PreferencesGroup::builder()
|
||||
.title("XR Service CMake Flags")
|
||||
.header_suffix(&add_cmake_flag_btn)
|
||||
.build(),
|
||||
sender.input_sender(),
|
||||
),
|
||||
env_rows: AsyncFactoryVecDeque::builder()
|
||||
.launch(
|
||||
adw::PreferencesGroup::builder()
|
||||
.title("Environment Variables")
|
||||
.description(env_var_descriptions_as_paragraph())
|
||||
.header_suffix(&add_env_var_btn)
|
||||
.build(),
|
||||
)
|
||||
.forward(sender.input_sender(), |msg| match msg {
|
||||
EnvVarModelOutMsg::Changed(name, value) => {
|
||||
ProfileEditorMsg::EnvVarChanged(name, value)
|
||||
}
|
||||
EnvVarModelOutMsg::Delete(name) => ProfileEditorMsg::EnvVarDelete(name),
|
||||
}),
|
||||
xrservice_cmake_flags_rows: AsyncFactoryVecDeque::builder()
|
||||
.launch(
|
||||
adw::PreferencesGroup::builder()
|
||||
.title("XR Service CMake Flags")
|
||||
.header_suffix(&add_cmake_flag_btn)
|
||||
.build(),
|
||||
)
|
||||
.forward(sender.input_sender(), |msg| match msg {
|
||||
EnvVarModelOutMsg::Changed(name, value) => {
|
||||
ProfileEditorMsg::XrServiceCmakeFlagsChanged(name, value)
|
||||
}
|
||||
EnvVarModelOutMsg::Delete(name) => {
|
||||
ProfileEditorMsg::XrServiceCmakeFlagsDelete(name)
|
||||
}
|
||||
}),
|
||||
tracker: 0,
|
||||
};
|
||||
{
|
||||
|
@ -523,7 +537,6 @@ impl SimpleComponent for ProfileEditor {
|
|||
guard.push_back(EnvVarModelInit {
|
||||
name: k.clone(),
|
||||
value: v.clone(),
|
||||
var_type: VarType::EnvVar,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -534,7 +547,6 @@ impl SimpleComponent for ProfileEditor {
|
|||
guard.push_back(EnvVarModelInit {
|
||||
name: k.clone(),
|
||||
value: v.clone(),
|
||||
var_type: VarType::XrServiceCmakeFlags,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,7 +108,7 @@ impl SimpleComponent for SteamLaunchOptionsBox {
|
|||
|
||||
fn init(
|
||||
_init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let model = Self {
|
||||
|
|
|
@ -211,7 +211,7 @@ impl SimpleComponent for SteamVrCalibrationBox {
|
|||
|
||||
fn init(
|
||||
init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let model = Self {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use gtk4::gdk;
|
||||
use relm4::adw;
|
||||
use zoha_vte4::{Terminal, TerminalExt};
|
||||
use vte4::{Terminal, TerminalExt};
|
||||
|
||||
const MAX_SCROLLBACK: u32 = 2000;
|
||||
|
||||
|
@ -51,7 +51,7 @@ impl TermWidget {
|
|||
|
||||
pub fn set_search_term(&self, term: Option<&str>) {
|
||||
self.term.search_set_regex(
|
||||
term.map(|txt| zoha_vte4::Regex::for_search(txt, 0).ok())
|
||||
term.map(|txt| vte4::Regex::for_search(txt, 0).ok())
|
||||
.flatten()
|
||||
.as_ref(),
|
||||
0,
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
use super::{
|
||||
factories::wivrn_encoder_group_factory::{WivrnEncoderModel, WivrnEncoderModelInit},
|
||||
factories::wivrn_encoder_group_factory::{
|
||||
WivrnEncoderModel, WivrnEncoderModelInit, WivrnEncoderModelOutMsg,
|
||||
},
|
||||
util::bits_from_mbits,
|
||||
};
|
||||
use crate::{
|
||||
|
@ -121,10 +123,7 @@ impl SimpleComponent for WivrnConfEditor {
|
|||
})
|
||||
.unwrap_or_default(),
|
||||
false,
|
||||
{
|
||||
let sender = sender.clone();
|
||||
move |_| {}
|
||||
}
|
||||
move |_| {}
|
||||
) -> adw::EntryRow,
|
||||
},
|
||||
add: encodersrgp = &adw::PreferencesGroup {
|
||||
|
@ -207,7 +206,7 @@ impl SimpleComponent for WivrnConfEditor {
|
|||
|
||||
fn init(
|
||||
init: Self::Init,
|
||||
root: &Self::Root,
|
||||
root: Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
let mut model = Self {
|
||||
|
@ -227,7 +226,11 @@ impl SimpleComponent for WivrnConfEditor {
|
|||
model.bitrate_row = Some(widgets.bitrate_row.clone());
|
||||
|
||||
let mut encoder_models: AsyncFactoryVecDeque<WivrnEncoderModel> =
|
||||
AsyncFactoryVecDeque::new(widgets.pref_page.clone(), sender.input_sender());
|
||||
AsyncFactoryVecDeque::builder()
|
||||
.launch(widgets.pref_page.clone())
|
||||
.forward(sender.input_sender(), |msg| match msg {
|
||||
WivrnEncoderModelOutMsg::Delete(id) => WivrnConfEditorMsg::DeleteEncoder(id),
|
||||
});
|
||||
for encoder_conf in model.conf.encoders.clone() {
|
||||
encoder_models.guard().push_back(WivrnEncoderModelInit {
|
||||
encoder_conf: Some(encoder_conf),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue