From cd0e55aa9b336a23be32ef297e2eb71673900b41 Mon Sep 17 00:00:00 2001 From: Gabriele Musco Date: Tue, 26 Dec 2023 07:57:37 +0000 Subject: [PATCH] feat: normal window for wivrn config editor --- src/ui/wivrn_conf_editor.rs | 161 ++++++++++++++++++++---------------- 1 file changed, 90 insertions(+), 71 deletions(-) diff --git a/src/ui/wivrn_conf_editor.rs b/src/ui/wivrn_conf_editor.rs index f4fc860..460e533 100644 --- a/src/ui/wivrn_conf_editor.rs +++ b/src/ui/wivrn_conf_editor.rs @@ -8,7 +8,7 @@ use relm4::prelude::*; pub struct WivrnConfEditor { conf: WivrnConfig, #[tracker::do_not_track] - win: Option, + win: Option, #[tracker::do_not_track] scalex_entry: Option, #[tracker::do_not_track] @@ -37,81 +37,100 @@ impl SimpleComponent for WivrnConfEditor { view! { #[name(win)] - adw::PreferencesWindow { - set_hide_on_close: true, + adw::Window { set_modal: true, set_transient_for: Some(&init.root_win), set_title: Some("WiVRn Configuration"), - add: mainpage = &adw::PreferencesPage { - 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::>() - .iter() - .map(String::as_str) - .collect::>() - .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); - }, + set_default_height: 500, + set_default_width: 600, + adw::ToolbarView { + set_top_bar_style: adw::ToolbarStyle::Flat, + set_hexpand: true, + set_vexpand: true, + add_top_bar: top_bar = &adw::HeaderBar { + set_vexpand: false, + pack_end: save_btn = >k::Button { + set_label: "Save", + 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::>() + .iter() + .map(String::as_str) + .collect::>() + .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); + }, + }, + } + }, + } + } } }