mirror of
https://github.com/13hannes11/toolbx-tuner.git
synced 2024-09-03 23:21:00 +02:00
add actual settings that get saved (not yet loaded)
This commit is contained in:
@@ -2,6 +2,7 @@ use crate::gtk::Align;
|
|||||||
use crate::util::prerequisit::get_installed_terminals;
|
use crate::util::prerequisit::get_installed_terminals;
|
||||||
use crate::util::prerequisit::is_toolbox_installed;
|
use crate::util::prerequisit::is_toolbox_installed;
|
||||||
|
|
||||||
|
use crate::modals::settings::SettingsMsg;
|
||||||
use crate::util::toolbox::ToolbxContainer;
|
use crate::util::toolbox::ToolbxContainer;
|
||||||
use relm4::adw::prelude::PreferencesGroupExt;
|
use relm4::adw::prelude::PreferencesGroupExt;
|
||||||
use relm4::factory::FactoryHashMap;
|
use relm4::factory::FactoryHashMap;
|
||||||
@@ -180,7 +181,7 @@ impl Component for App {
|
|||||||
let preference_action = {
|
let preference_action = {
|
||||||
let settings = model.settings_dialog.sender().clone();
|
let settings = model.settings_dialog.sender().clone();
|
||||||
RelmAction::<PreferencesAction>::new_stateless(move |_| {
|
RelmAction::<PreferencesAction>::new_stateless(move |_| {
|
||||||
settings.send(()).unwrap();
|
settings.send(SettingsMsg::OpenSettings).unwrap();
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,18 +2,30 @@ use crate::util::prerequisit::get_installed_terminals;
|
|||||||
use relm4::adw::prelude::{
|
use relm4::adw::prelude::{
|
||||||
ComboRowExt, PreferencesGroupExt, PreferencesPageExt, PreferencesRowExt, PreferencesWindowExt,
|
ComboRowExt, PreferencesGroupExt, PreferencesPageExt, PreferencesRowExt, PreferencesWindowExt,
|
||||||
};
|
};
|
||||||
|
use relm4::gtk::prelude::WidgetExt;
|
||||||
use relm4::gtk::prelude::GtkWindowExt;
|
use relm4::gtk::prelude::GtkWindowExt;
|
||||||
|
use relm4::gtk::prelude::ListModelExt;
|
||||||
use relm4::view;
|
use relm4::view;
|
||||||
use relm4::{adw, gtk, ComponentParts, ComponentSender, SimpleComponent};
|
use relm4::{adw, gtk, ComponentParts, ComponentSender, SimpleComponent};
|
||||||
pub struct SettingsDialog {}
|
pub struct SettingsDialog {
|
||||||
|
hidden: bool,
|
||||||
|
terminal: String,
|
||||||
|
}
|
||||||
use crate::APP_ID;
|
use crate::APP_ID;
|
||||||
use gtk::gio;
|
use gtk::gio;
|
||||||
|
use relm4::gtk::prelude::CastNone;
|
||||||
use relm4::gtk::prelude::SettingsExt;
|
use relm4::gtk::prelude::SettingsExt;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum SettingsMsg {
|
||||||
|
OpenSettings,
|
||||||
|
TerminalSelectionChanged(String),
|
||||||
|
}
|
||||||
|
|
||||||
impl SimpleComponent for SettingsDialog {
|
impl SimpleComponent for SettingsDialog {
|
||||||
type Init = ();
|
type Init = ();
|
||||||
type Widgets = adw::PreferencesWindow;
|
type Widgets = adw::PreferencesWindow;
|
||||||
type Input = ();
|
type Input = SettingsMsg;
|
||||||
type Output = ();
|
type Output = ();
|
||||||
type Root = adw::PreferencesWindow;
|
type Root = adw::PreferencesWindow;
|
||||||
|
|
||||||
@@ -24,9 +36,12 @@ impl SimpleComponent for SettingsDialog {
|
|||||||
fn init(
|
fn init(
|
||||||
_: Self::Init,
|
_: Self::Init,
|
||||||
root: Self::Root,
|
root: Self::Root,
|
||||||
_sender: ComponentSender<Self>,
|
sender: ComponentSender<Self>,
|
||||||
) -> ComponentParts<Self> {
|
) -> ComponentParts<Self> {
|
||||||
let model = Self {};
|
let model = Self {
|
||||||
|
hidden: true,
|
||||||
|
terminal: "".to_string(),
|
||||||
|
};
|
||||||
let terminal_selection_model = gtk::gio::ListStore::new::<gtk::StringObject>();
|
let terminal_selection_model = gtk::gio::ListStore::new::<gtk::StringObject>();
|
||||||
|
|
||||||
let sort_function = |to_insert: >k::glib::Object,
|
let sort_function = |to_insert: >k::glib::Object,
|
||||||
@@ -49,10 +64,16 @@ impl SimpleComponent for SettingsDialog {
|
|||||||
.find_with_equal_func(|obj| obj == >k::StringObject::new(terminal.as_str()))
|
.find_with_equal_func(|obj| obj == >k::StringObject::new(terminal.as_str()))
|
||||||
.unwrap_or(0);
|
.unwrap_or(0);
|
||||||
|
|
||||||
// TODO: save settings on drop down change
|
let str_object: String = terminal_selection_model
|
||||||
|
.item(terminal_selection)
|
||||||
|
.and_downcast::<gtk::StringObject>()
|
||||||
|
.expect("The item has to be an `StringObject`.")
|
||||||
|
.into();
|
||||||
|
sender.input(SettingsMsg::TerminalSelectionChanged(str_object));
|
||||||
|
|
||||||
view! {
|
view! {
|
||||||
widgets = root.clone() {
|
widgets = root.clone() {
|
||||||
|
|
||||||
add = &adw::PreferencesPage::new() {
|
add = &adw::PreferencesPage::new() {
|
||||||
add = &adw::PreferencesGroup::new() {
|
add = &adw::PreferencesGroup::new() {
|
||||||
set_title: "Terminal settings",
|
set_title: "Terminal settings",
|
||||||
@@ -62,6 +83,10 @@ impl SimpleComponent for SettingsDialog {
|
|||||||
set_model = >k::SingleSelection::new(Some(terminal_selection_model)),
|
set_model = >k::SingleSelection::new(Some(terminal_selection_model)),
|
||||||
#[watch]
|
#[watch]
|
||||||
set_selected: terminal_selection,
|
set_selected: terminal_selection,
|
||||||
|
connect_selected_item_notify[sender] => move |combo_row| {
|
||||||
|
let str_object: String = combo_row.selected_item().and_downcast::<gtk::StringObject>().expect("The item has to be an `StringObject`.").into();
|
||||||
|
sender.input(SettingsMsg::TerminalSelectionChanged(str_object));
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -71,6 +96,15 @@ impl SimpleComponent for SettingsDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn update_view(&self, dialog: &mut Self::Widgets, _sender: ComponentSender<Self>) {
|
fn update_view(&self, dialog: &mut Self::Widgets, _sender: ComponentSender<Self>) {
|
||||||
dialog.present();
|
dialog.show();
|
||||||
|
}
|
||||||
|
fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
|
||||||
|
match msg {
|
||||||
|
SettingsMsg::OpenSettings => { }
|
||||||
|
SettingsMsg::TerminalSelectionChanged(terminal) => {
|
||||||
|
let settings = gio::Settings::new(APP_ID);
|
||||||
|
settings.set_string("terminal", &terminal);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
use crate::util::toolbox::ToolbxError;
|
use crate::util::toolbox::ToolbxError;
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
pub enum TerminalType {
|
pub enum TerminalType {
|
||||||
GnomeTerminal,
|
GnomeTerminal,
|
||||||
|
Konsole,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_installed_terminals() -> Result<Vec<TerminalType>, ToolbxError> {
|
pub fn get_installed_terminals() -> Result<Vec<TerminalType>, ToolbxError> {
|
||||||
@@ -20,7 +22,7 @@ pub fn get_installed_terminals() -> Result<Vec<TerminalType>, ToolbxError> {
|
|||||||
let output = output.unwrap();
|
let output = output.unwrap();
|
||||||
|
|
||||||
if output.status.code() == Some(0) {
|
if output.status.code() == Some(0) {
|
||||||
Ok(vec![TerminalType::GnomeTerminal])
|
Ok(vec![TerminalType::GnomeTerminal, TerminalType::Konsole])
|
||||||
} else {
|
} else {
|
||||||
Err(ToolbxError::CommandUnsuccessfulError(
|
Err(ToolbxError::CommandUnsuccessfulError(
|
||||||
String::from_utf8_lossy(&output.stderr).into_owned(),
|
String::from_utf8_lossy(&output.stderr).into_owned(),
|
||||||
|
|||||||
Reference in New Issue
Block a user