mirror of
https://gitlab.com/gabmus/envision.git
synced 2025-08-03 14:49:04 +00:00
feat: normal window for wivrn config editor
This commit is contained in:
parent
9b5d74594b
commit
cd0e55aa9b
1 changed files with 90 additions and 71 deletions
|
@ -8,7 +8,7 @@ use relm4::prelude::*;
|
||||||
pub struct WivrnConfEditor {
|
pub struct WivrnConfEditor {
|
||||||
conf: WivrnConfig,
|
conf: WivrnConfig,
|
||||||
#[tracker::do_not_track]
|
#[tracker::do_not_track]
|
||||||
win: Option<adw::PreferencesWindow>,
|
win: Option<adw::Window>,
|
||||||
#[tracker::do_not_track]
|
#[tracker::do_not_track]
|
||||||
scalex_entry: Option<adw::EntryRow>,
|
scalex_entry: Option<adw::EntryRow>,
|
||||||
#[tracker::do_not_track]
|
#[tracker::do_not_track]
|
||||||
|
@ -37,81 +37,100 @@ impl SimpleComponent for WivrnConfEditor {
|
||||||
|
|
||||||
view! {
|
view! {
|
||||||
#[name(win)]
|
#[name(win)]
|
||||||
adw::PreferencesWindow {
|
adw::Window {
|
||||||
set_hide_on_close: true,
|
|
||||||
set_modal: true,
|
set_modal: true,
|
||||||
set_transient_for: Some(&init.root_win),
|
set_transient_for: Some(&init.root_win),
|
||||||
set_title: Some("WiVRn Configuration"),
|
set_title: Some("WiVRn Configuration"),
|
||||||
add: mainpage = &adw::PreferencesPage {
|
set_default_height: 500,
|
||||||
add: scalegrp = &adw::PreferencesGroup {
|
set_default_width: 600,
|
||||||
set_title: "Scale",
|
adw::ToolbarView {
|
||||||
set_description: Some("Render resolution scale. 1.0 is 100%."),
|
set_top_bar_style: adw::ToolbarStyle::Flat,
|
||||||
#[name(scalex_entry)]
|
set_hexpand: true,
|
||||||
adw::EntryRow {
|
set_vexpand: true,
|
||||||
set_title: "Scale X",
|
add_top_bar: top_bar = &adw::HeaderBar {
|
||||||
#[track = "model.changed(Self::conf())"]
|
set_vexpand: false,
|
||||||
set_text: match model.conf.scale {
|
pack_end: save_btn = >k::Button {
|
||||||
Some([x, _]) => x.to_string(),
|
set_label: "Save",
|
||||||
None => "".to_string(),
|
add_css_class: "suggested-action",
|
||||||
}.as_str(),
|
connect_clicked[sender] => move |_| {
|
||||||
set_input_purpose: gtk::InputPurpose::Number,
|
sender.input(Self::Input::Save);
|
||||||
},
|
|
||||||
#[name(scaley_entry)]
|
|
||||||
adw::EntryRow {
|
|
||||||
set_title: "Scale Y",
|
|
||||||
#[track = "model.changed(Self::conf())"]
|
|
||||||
set_text: match model.conf.scale {
|
|
||||||
Some([_, y]) => y.to_string(),
|
|
||||||
None => "".to_string(),
|
|
||||||
}.as_str(),
|
|
||||||
set_input_purpose: gtk::InputPurpose::Number,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
add: encgrp = &adw::PreferencesGroup {
|
|
||||||
set_title: "Encoder",
|
|
||||||
#[name(encoder_combo)]
|
|
||||||
adw::ComboRow {
|
|
||||||
set_title: "Encoder",
|
|
||||||
set_subtitle: "x264: CPU based h264 encoding\n\nNVEnc: Nvidia GPU encoding\n\nVAAPI: Intel or AMD GPU encoding",
|
|
||||||
set_model: Some(>k::StringList::new(
|
|
||||||
Encoder::iter()
|
|
||||||
.map(Encoder::to_string)
|
|
||||||
.collect::<Vec<String>>()
|
|
||||||
.iter()
|
|
||||||
.map(String::as_str)
|
|
||||||
.collect::<Vec<&str>>()
|
|
||||||
.as_slice()
|
|
||||||
)),
|
|
||||||
#[track = "model.changed(Self::conf())"]
|
|
||||||
set_selected: model.conf.encoders.get(0).unwrap().encoder.as_number(),
|
|
||||||
},
|
|
||||||
#[name(bitrate_entry)]
|
|
||||||
adw::EntryRow {
|
|
||||||
set_title: "Bitrate",
|
|
||||||
#[track = "model.changed(Self::conf())"]
|
|
||||||
set_text: match model.conf.encoders.get(0).unwrap().bitrate {
|
|
||||||
Some(br) => br.to_string(),
|
|
||||||
None => "".to_string()
|
|
||||||
}.as_str(),
|
|
||||||
set_input_purpose: gtk::InputPurpose::Number,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
add: save_grp = &adw::PreferencesGroup {
|
|
||||||
add: save_box = >k::Box {
|
|
||||||
set_orientation: gtk::Orientation::Vertical,
|
|
||||||
set_hexpand: true,
|
|
||||||
gtk::Button {
|
|
||||||
set_halign: gtk::Align::Center,
|
|
||||||
set_label: "Save",
|
|
||||||
add_css_class: "pill",
|
|
||||||
add_css_class: "suggested-action",
|
|
||||||
connect_clicked[sender] => move |_| {
|
|
||||||
sender.input(Self::Input::Save);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
},
|
#[wrap(Some)]
|
||||||
|
set_content: pref_page = &adw::PreferencesPage {
|
||||||
|
set_hexpand: true,
|
||||||
|
set_vexpand: true,
|
||||||
|
add: scalegrp = &adw::PreferencesGroup {
|
||||||
|
set_title: "Scale",
|
||||||
|
set_description: Some("Render resolution scale. 1.0 is 100%."),
|
||||||
|
#[name(scalex_entry)]
|
||||||
|
adw::EntryRow {
|
||||||
|
set_title: "Scale X",
|
||||||
|
#[track = "model.changed(Self::conf())"]
|
||||||
|
set_text: match model.conf.scale {
|
||||||
|
Some([x, _]) => x.to_string(),
|
||||||
|
None => "".to_string(),
|
||||||
|
}.as_str(),
|
||||||
|
set_input_purpose: gtk::InputPurpose::Number,
|
||||||
|
},
|
||||||
|
#[name(scaley_entry)]
|
||||||
|
adw::EntryRow {
|
||||||
|
set_title: "Scale Y",
|
||||||
|
#[track = "model.changed(Self::conf())"]
|
||||||
|
set_text: match model.conf.scale {
|
||||||
|
Some([_, y]) => y.to_string(),
|
||||||
|
None => "".to_string(),
|
||||||
|
}.as_str(),
|
||||||
|
set_input_purpose: gtk::InputPurpose::Number,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
add: encgrp = &adw::PreferencesGroup {
|
||||||
|
set_title: "Encoder",
|
||||||
|
#[name(encoder_combo)]
|
||||||
|
adw::ComboRow {
|
||||||
|
set_title: "Encoder",
|
||||||
|
set_subtitle: "x264: CPU based h264 encoding\n\nNVEnc: Nvidia GPU encoding\n\nVAAPI: Intel or AMD GPU encoding",
|
||||||
|
set_model: Some(>k::StringList::new(
|
||||||
|
Encoder::iter()
|
||||||
|
.map(Encoder::to_string)
|
||||||
|
.collect::<Vec<String>>()
|
||||||
|
.iter()
|
||||||
|
.map(String::as_str)
|
||||||
|
.collect::<Vec<&str>>()
|
||||||
|
.as_slice()
|
||||||
|
)),
|
||||||
|
#[track = "model.changed(Self::conf())"]
|
||||||
|
set_selected: model.conf.encoders.get(0).unwrap().encoder.as_number(),
|
||||||
|
},
|
||||||
|
#[name(bitrate_entry)]
|
||||||
|
adw::EntryRow {
|
||||||
|
set_title: "Bitrate",
|
||||||
|
#[track = "model.changed(Self::conf())"]
|
||||||
|
set_text: match model.conf.encoders.get(0).unwrap().bitrate {
|
||||||
|
Some(br) => br.to_string(),
|
||||||
|
None => "".to_string()
|
||||||
|
}.as_str(),
|
||||||
|
set_input_purpose: gtk::InputPurpose::Number,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
add: save_grp = &adw::PreferencesGroup {
|
||||||
|
add: save_box = >k::Box {
|
||||||
|
set_orientation: gtk::Orientation::Vertical,
|
||||||
|
set_hexpand: true,
|
||||||
|
gtk::Button {
|
||||||
|
set_halign: gtk::Align::Center,
|
||||||
|
set_label: "Save",
|
||||||
|
add_css_class: "pill",
|
||||||
|
add_css_class: "suggested-action",
|
||||||
|
connect_clicked[sender] => move |_| {
|
||||||
|
sender.input(Self::Input::Save);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue