Refactored UI to not use view macro
Placeholders for serializing configuration
This commit is contained in:
parent
e07a3bbb1b
commit
beb24e985e
75
Linux/Cargo.lock
generated
75
Linux/Cargo.lock
generated
@ -9,9 +9,11 @@ dependencies = [
|
|||||||
"env_logger",
|
"env_logger",
|
||||||
"log",
|
"log",
|
||||||
"min-rs",
|
"min-rs",
|
||||||
|
"platform-dirs",
|
||||||
"relm4",
|
"relm4",
|
||||||
"relm4-icons",
|
"relm4-icons",
|
||||||
"rust-i18n",
|
"rust-i18n",
|
||||||
|
"serde",
|
||||||
"slint-build",
|
"slint-build",
|
||||||
"walkdir",
|
"walkdir",
|
||||||
]
|
]
|
||||||
@ -358,6 +360,27 @@ dependencies = [
|
|||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dirs-next"
|
||||||
|
version = "1.0.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cf36e65a80337bea855cd4ef9b8401ffce06a7baedf2e85ec467b1ac3f6e82b6"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"dirs-sys-next",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dirs-sys-next"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"redox_users",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "displaydoc"
|
name = "displaydoc"
|
||||||
version = "0.2.4"
|
version = "0.2.4"
|
||||||
@ -1297,6 +1320,16 @@ version = "0.2.8"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
|
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libredox"
|
||||||
|
version = "0.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.5.0",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "linked-hash-map"
|
name = "linked-hash-map"
|
||||||
version = "0.5.6"
|
version = "0.5.6"
|
||||||
@ -1535,6 +1568,15 @@ version = "0.3.30"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
|
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "platform-dirs"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e188d043c1a692985f78b5464853a263f1a27e5bd6322bad3a4078ee3c998a38"
|
||||||
|
dependencies = [
|
||||||
|
"dirs-next",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "png"
|
name = "png"
|
||||||
version = "0.17.13"
|
version = "0.17.13"
|
||||||
@ -1624,6 +1666,17 @@ dependencies = [
|
|||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "redox_users"
|
||||||
|
version = "0.4.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom",
|
||||||
|
"libredox",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.10.5"
|
version = "1.10.5"
|
||||||
@ -2514,6 +2567,22 @@ version = "0.1.8"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
|
checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi"
|
||||||
|
version = "0.3.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||||
|
dependencies = [
|
||||||
|
"winapi-i686-pc-windows-gnu",
|
||||||
|
"winapi-x86_64-pc-windows-gnu",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-i686-pc-windows-gnu"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winapi-util"
|
name = "winapi-util"
|
||||||
version = "0.1.8"
|
version = "0.1.8"
|
||||||
@ -2523,6 +2592,12 @@ dependencies = [
|
|||||||
"windows-sys",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-x86_64-pc-windows-gnu"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-sys"
|
name = "windows-sys"
|
||||||
version = "0.52.0"
|
version = "0.52.0"
|
||||||
|
@ -7,9 +7,11 @@ build = "build.rs"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
env_logger = "0.11.3"
|
env_logger = "0.11.3"
|
||||||
log = "0.4.21"
|
log = "0.4.21"
|
||||||
|
platform-dirs = "0.3.0"
|
||||||
relm4 = "0.8.1"
|
relm4 = "0.8.1"
|
||||||
relm4-icons = "0.8.3"
|
relm4-icons = "0.8.3"
|
||||||
rust-i18n = "3.0.1"
|
rust-i18n = "3.0.1"
|
||||||
|
serde = "1.0.203"
|
||||||
|
|
||||||
[dependencies.min-rs]
|
[dependencies.min-rs]
|
||||||
git = "https://github.com/MvRens/min-rs.git"
|
git = "https://github.com/MvRens/min-rs.git"
|
||||||
|
@ -3,3 +3,14 @@ _version: 2
|
|||||||
mainwindow:
|
mainwindow:
|
||||||
title:
|
title:
|
||||||
en: MassiveKnob
|
en: MassiveKnob
|
||||||
|
tab:
|
||||||
|
device:
|
||||||
|
en: Device
|
||||||
|
analoginputs:
|
||||||
|
en: Analog inputs
|
||||||
|
digitalinputs:
|
||||||
|
en: Digital inputs
|
||||||
|
analogoutputs:
|
||||||
|
en: Analog outputs
|
||||||
|
digitaloutputs:
|
||||||
|
en: Digital outputs
|
55
Linux/src/config.rs
Normal file
55
Linux/src/config.rs
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
use std::io::{Error, Read, Write};
|
||||||
|
use platform_dirs::AppDirs;
|
||||||
|
|
||||||
|
|
||||||
|
pub struct Config
|
||||||
|
{
|
||||||
|
root: PathBuf
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
impl Config
|
||||||
|
{
|
||||||
|
pub fn new() -> Self
|
||||||
|
{
|
||||||
|
let appdirs = AppDirs::new(Some("massiveknob"), false).unwrap();
|
||||||
|
|
||||||
|
Self
|
||||||
|
{
|
||||||
|
root: appdirs.data_dir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub fn get_reader(&self, name: &str) -> Option<impl Read>
|
||||||
|
{
|
||||||
|
let path = Path::join(&self.root, name);
|
||||||
|
if !path.exists()
|
||||||
|
{
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
match std::fs::File::open(path)
|
||||||
|
{
|
||||||
|
Ok(v) => Some(v),
|
||||||
|
Err(_) => None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub fn get_writer(&self, name: &str) -> Result<impl Write, Error>
|
||||||
|
{
|
||||||
|
let path = Path::join(&self.root, name);
|
||||||
|
if !path.exists()
|
||||||
|
{
|
||||||
|
match std::fs::create_dir_all(path.clone())
|
||||||
|
{
|
||||||
|
Ok(_v) => (),
|
||||||
|
Err(e) => return Err(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::fs::File::create(path)
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
use emulatorwindow::EmulatorWindow;
|
//use emulatorwindow::EmulatorWindow;
|
||||||
use relm4::prelude::*;
|
//use relm4::prelude::*;
|
||||||
use relm4::gtk::prelude::GtkApplicationExt;
|
//use relm4::gtk::prelude::GtkApplicationExt;
|
||||||
|
|
||||||
|
|
||||||
use super::registry::{MkDevice, register_device};
|
use super::registry::{MkDevice, register_device};
|
||||||
@ -12,10 +12,12 @@ pub mod emulatorwindow;
|
|||||||
pub fn register()
|
pub fn register()
|
||||||
{
|
{
|
||||||
register_device(MkDevice::new("Emulator"));
|
register_device(MkDevice::new("Emulator"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
let app = relm4::main_application();
|
let app = relm4::main_application();
|
||||||
let builder = EmulatorWindow::builder();
|
let builder = EmulatorWindow::builder();
|
||||||
app.add_window(&builder.root);
|
app.add_window(&builder.root);
|
||||||
|
|
||||||
builder.launch(()).detach_runtime();
|
builder.launch(()).detach_runtime();
|
||||||
}
|
*/
|
@ -10,6 +10,7 @@ i18n!("locales");
|
|||||||
pub mod devices;
|
pub mod devices;
|
||||||
pub mod actions;
|
pub mod actions;
|
||||||
|
|
||||||
|
pub mod config;
|
||||||
pub mod mainwindow;
|
pub mod mainwindow;
|
||||||
|
|
||||||
fn main()
|
fn main()
|
||||||
@ -18,12 +19,20 @@ fn main()
|
|||||||
// .format_timestamp(None)
|
// .format_timestamp(None)
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
//devices::register();
|
devices::register();
|
||||||
actions::register();
|
actions::register();
|
||||||
|
|
||||||
relm4_icons::initialize_icons();
|
relm4_icons::initialize_icons();
|
||||||
|
|
||||||
let app = RelmApp::new("com.github.mvrens.massiveknob");
|
load_config();
|
||||||
|
|
||||||
|
let app = RelmApp::new("com.github.mvrens.massiveknob");
|
||||||
app.run::<mainwindow::MainWindow>(());
|
app.run::<mainwindow::MainWindow>(());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn load_config()
|
||||||
|
{
|
||||||
|
//let config = config::Config::new();
|
||||||
|
//config.get_reader(name)
|
||||||
}
|
}
|
@ -7,36 +7,51 @@ pub struct MainWindow
|
|||||||
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Msg
|
pub enum MainWindowMsg
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub struct MainWindowWidgets
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[relm4::component(pub)]
|
|
||||||
impl SimpleComponent for MainWindow
|
impl SimpleComponent for MainWindow
|
||||||
{
|
{
|
||||||
type Init = ();
|
type Init = ();
|
||||||
type Input = Msg;
|
type Input = MainWindowMsg;
|
||||||
type Output = ();
|
type Output = ();
|
||||||
|
type Root = gtk::Window;
|
||||||
|
type Widgets = MainWindowWidgets;
|
||||||
|
|
||||||
view!
|
|
||||||
{
|
fn init_root() -> Self::Root
|
||||||
gtk::Window
|
{
|
||||||
{
|
// I prefer not to use the view! macro, as VSCode / rust-analyzer will not provide autocompletion
|
||||||
set_title: Some(&t!("mainwindow.title")),
|
gtk::Window::builder()
|
||||||
set_default_size: (300, 100)
|
.title(t!("mainwindow.title"))
|
||||||
}
|
.default_width(500)
|
||||||
|
.default_height(500)
|
||||||
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn init(_data: Self::Init, root: Self::Root, _sender: ComponentSender<Self>, ) -> ComponentParts<Self>
|
fn init(_data: Self::Init, window: Self::Root, _sender: ComponentSender<Self>, ) -> ComponentParts<Self>
|
||||||
{
|
{
|
||||||
// TEMP - device should not use GTK at register time
|
|
||||||
crate::devices::register();
|
|
||||||
|
|
||||||
let model = MainWindow {};
|
let model = MainWindow {};
|
||||||
|
|
||||||
let widgets = view_output!();
|
let tabs = gtk::Notebook::builder().build();
|
||||||
|
window.set_child(Some(&tabs));
|
||||||
|
|
||||||
|
add_box_tab(&tabs, "mainwindow.tab.device");
|
||||||
|
add_box_tab(&tabs, "mainwindow.tab.analoginputs");
|
||||||
|
add_box_tab(&tabs, "mainwindow.tab.digitalinputs");
|
||||||
|
//add_box_tab(&tabs, "mainwindow.tab.analogoutputs");
|
||||||
|
//add_box_tab(&tabs, "mainwindow.tab.digitaloutputs");
|
||||||
|
|
||||||
|
|
||||||
|
let widgets = MainWindowWidgets {};
|
||||||
ComponentParts { model, widgets }
|
ComponentParts { model, widgets }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,4 +62,20 @@ impl SimpleComponent for MainWindow
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn add_box_tab(notebook: >k::Notebook, title_key: &str) -> gtk::Box
|
||||||
|
{
|
||||||
|
let tab = gtk::Box::builder()
|
||||||
|
.orientation(gtk::Orientation::Vertical)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let tab_label = gtk::Label::builder()
|
||||||
|
.label(t!(title_key))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
notebook.append_page(&tab, Some(&tab_label));
|
||||||
|
|
||||||
|
tab
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user