add relm4
This commit is contained in:
parent
4ec48fc21c
commit
7a87a50764
207
Cargo.lock
generated
207
Cargo.lock
generated
@ -2,6 +2,15 @@
|
|||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "addr2line"
|
||||||
|
version = "0.20.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
|
||||||
|
dependencies = [
|
||||||
|
"gimli",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "adler"
|
name = "adler"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
@ -52,6 +61,17 @@ dependencies = [
|
|||||||
"num-traits",
|
"num-traits",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "async-trait"
|
||||||
|
version = "0.1.73"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.63",
|
||||||
|
"quote 1.0.29",
|
||||||
|
"syn 2.0.29",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "atty"
|
name = "atty"
|
||||||
version = "0.2.14"
|
version = "0.2.14"
|
||||||
@ -69,6 +89,21 @@ version = "1.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "backtrace"
|
||||||
|
version = "0.3.68"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
|
||||||
|
dependencies = [
|
||||||
|
"addr2line",
|
||||||
|
"cc",
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"miniz_oxide",
|
||||||
|
"object",
|
||||||
|
"rustc-demangle",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "base64ct"
|
name = "base64ct"
|
||||||
version = "1.6.0"
|
version = "1.6.0"
|
||||||
@ -255,6 +290,8 @@ dependencies = [
|
|||||||
"proj-sys",
|
"proj-sys",
|
||||||
"proj5",
|
"proj5",
|
||||||
"quadtree_rs",
|
"quadtree_rs",
|
||||||
|
"relm4",
|
||||||
|
"relm4-components",
|
||||||
"shapefile",
|
"shapefile",
|
||||||
"svg",
|
"svg",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
@ -609,6 +646,27 @@ version = "1.0.7"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fragile"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures"
|
||||||
|
version = "0.3.28"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
|
||||||
|
dependencies = [
|
||||||
|
"futures-channel",
|
||||||
|
"futures-core",
|
||||||
|
"futures-executor",
|
||||||
|
"futures-io",
|
||||||
|
"futures-sink",
|
||||||
|
"futures-task",
|
||||||
|
"futures-util",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-channel"
|
name = "futures-channel"
|
||||||
version = "0.3.28"
|
version = "0.3.28"
|
||||||
@ -616,6 +674,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
|
checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -649,7 +708,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.63",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.29",
|
"quote 1.0.29",
|
||||||
"syn 2.0.22",
|
"syn 2.0.29",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -670,9 +729,13 @@ version = "0.3.28"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
|
checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
"futures-io",
|
||||||
"futures-macro",
|
"futures-macro",
|
||||||
|
"futures-sink",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
|
"memchr",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"pin-utils",
|
"pin-utils",
|
||||||
"slab",
|
"slab",
|
||||||
@ -763,7 +826,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.63",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.29",
|
"quote 1.0.29",
|
||||||
"syn 2.0.22",
|
"syn 2.0.29",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -800,6 +863,12 @@ dependencies = [
|
|||||||
"weezl",
|
"weezl",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gimli"
|
||||||
|
version = "0.27.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gio"
|
name = "gio"
|
||||||
version = "0.17.10"
|
version = "0.17.10"
|
||||||
@ -1459,6 +1528,15 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "object"
|
||||||
|
version = "0.31.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "once_cell"
|
||||||
version = "1.18.0"
|
version = "1.18.0"
|
||||||
@ -1569,7 +1647,7 @@ dependencies = [
|
|||||||
"pest_meta",
|
"pest_meta",
|
||||||
"proc-macro2 1.0.63",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.29",
|
"quote 1.0.29",
|
||||||
"syn 2.0.22",
|
"syn 2.0.29",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1600,7 +1678,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.63",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.29",
|
"quote 1.0.29",
|
||||||
"syn 2.0.22",
|
"syn 2.0.29",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1837,6 +1915,45 @@ version = "0.7.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
|
checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "relm4"
|
||||||
|
version = "0.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "813306b9bc23e2f1e719801eb9aa59e4c2f96830be951a6168ad0c53363c6196"
|
||||||
|
dependencies = [
|
||||||
|
"async-trait",
|
||||||
|
"flume",
|
||||||
|
"fragile",
|
||||||
|
"futures",
|
||||||
|
"gtk4",
|
||||||
|
"once_cell",
|
||||||
|
"relm4-macros",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "relm4-components"
|
||||||
|
version = "0.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "edd02dd4c31b952cedb6f3ef200438963b1c4b7889f2ce760c607a1dc7f513e3"
|
||||||
|
dependencies = [
|
||||||
|
"once_cell",
|
||||||
|
"relm4",
|
||||||
|
"tracker",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "relm4-macros"
|
||||||
|
version = "0.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8ad8d946cf33654b1df3e2e7d1c4952a154f008368cdda03a99c1840a6fcab3b"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.63",
|
||||||
|
"quote 1.0.29",
|
||||||
|
"syn 2.0.29",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rgb"
|
name = "rgb"
|
||||||
version = "0.8.36"
|
version = "0.8.36"
|
||||||
@ -1846,6 +1963,12 @@ dependencies = [
|
|||||||
"bytemuck",
|
"bytemuck",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustc-demangle"
|
||||||
|
version = "0.1.23"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc-hash"
|
name = "rustc-hash"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
@ -1912,7 +2035,7 @@ checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.63",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.29",
|
"quote 1.0.29",
|
||||||
"syn 2.0.22",
|
"syn 2.0.29",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2060,9 +2183,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.22"
|
version = "2.0.29"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616"
|
checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.63",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.29",
|
"quote 1.0.29",
|
||||||
@ -2134,7 +2257,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.63",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.29",
|
"quote 1.0.29",
|
||||||
"syn 2.0.22",
|
"syn 2.0.29",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2164,6 +2287,18 @@ version = "0.1.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
|
checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio"
|
||||||
|
version = "1.29.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"backtrace",
|
||||||
|
"num_cpus",
|
||||||
|
"pin-project-lite",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml"
|
name = "toml"
|
||||||
version = "0.7.5"
|
version = "0.7.5"
|
||||||
@ -2198,6 +2333,58 @@ dependencies = [
|
|||||||
"winnow",
|
"winnow",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing"
|
||||||
|
version = "0.1.37"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tracing-attributes",
|
||||||
|
"tracing-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing-attributes"
|
||||||
|
version = "0.1.26"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.63",
|
||||||
|
"quote 1.0.29",
|
||||||
|
"syn 2.0.29",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing-core"
|
||||||
|
version = "0.1.31"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
|
||||||
|
dependencies = [
|
||||||
|
"once_cell",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracker"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ff9636d15e370187f6bf55b79ce62ebf4221998bc0ba1774d7fa208b007f6bf8"
|
||||||
|
dependencies = [
|
||||||
|
"tracker-macros",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracker-macros"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ca029746fbe0efda3298205de77bf759d7fef23ac97902641e0b49a623b0455f"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.63",
|
||||||
|
"quote 1.0.29",
|
||||||
|
"syn 2.0.29",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ttf-parser"
|
name = "ttf-parser"
|
||||||
version = "0.18.1"
|
version = "0.18.1"
|
||||||
@ -2315,7 +2502,7 @@ dependencies = [
|
|||||||
"once_cell",
|
"once_cell",
|
||||||
"proc-macro2 1.0.63",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.29",
|
"quote 1.0.29",
|
||||||
"syn 2.0.22",
|
"syn 2.0.29",
|
||||||
"wasm-bindgen-shared",
|
"wasm-bindgen-shared",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -2337,7 +2524,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.63",
|
"proc-macro2 1.0.63",
|
||||||
"quote 1.0.29",
|
"quote 1.0.29",
|
||||||
"syn 2.0.22",
|
"syn 2.0.29",
|
||||||
"wasm-bindgen-backend",
|
"wasm-bindgen-backend",
|
||||||
"wasm-bindgen-shared",
|
"wasm-bindgen-shared",
|
||||||
]
|
]
|
||||||
|
|||||||
@ -32,6 +32,9 @@ proj = "0.27.2"
|
|||||||
image = "0.24.7"
|
image = "0.24.7"
|
||||||
anyhow = "1.0.72"
|
anyhow = "1.0.72"
|
||||||
proj5 = { version = "0.1.7", features = ["multithreading"] }
|
proj5 = { version = "0.1.7", features = ["multithreading"] }
|
||||||
|
relm4 = "0.6.1"
|
||||||
|
relm4-components = "0.6.1"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
|||||||
61
src/components/app.rs
Normal file
61
src/components/app.rs
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
use super::control_panel::ControlPanelModel;
|
||||||
|
use gtk::prelude::{
|
||||||
|
ApplicationExt, ButtonExt, DialogExt, GtkWindowExt, ToggleButtonExt, WidgetExt,
|
||||||
|
};
|
||||||
|
use relm4::*;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum AppMode {
|
||||||
|
View,
|
||||||
|
Edit,
|
||||||
|
Export,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum AppMsg {
|
||||||
|
SetMode(AppMode),
|
||||||
|
CloseRequest,
|
||||||
|
Close,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct AppModel {
|
||||||
|
mode: AppMode,
|
||||||
|
control: Controller<ControlPanelModel>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[relm4::component(pub)]
|
||||||
|
impl SimpleComponent for AppModel {
|
||||||
|
type Init = AppMode;
|
||||||
|
type Input = AppMsg;
|
||||||
|
type Output = ();
|
||||||
|
|
||||||
|
view! {
|
||||||
|
main_window = gtk::Window {
|
||||||
|
set_default_width: 500,
|
||||||
|
set_default_height: 250,
|
||||||
|
set_titlebar: Some(>k::HeaderBar::new()),
|
||||||
|
connect_close_request[sender] => move |_| {
|
||||||
|
sender.input(AppMsg::CloseRequest);
|
||||||
|
gtk::Inhibit(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn init(
|
||||||
|
params: Self::Init,
|
||||||
|
root: &Self::Root,
|
||||||
|
sender: ComponentSender<Self>,
|
||||||
|
) -> ComponentParts<Self> {
|
||||||
|
let control = ControlPanelModel::builder()
|
||||||
|
.launch(0)
|
||||||
|
.forward(sender.input_sender(), |msg| AppMsg::Close);
|
||||||
|
let model = AppModel {
|
||||||
|
mode: AppMode::View,
|
||||||
|
control: control,
|
||||||
|
};
|
||||||
|
let widgets = view_output!();
|
||||||
|
ComponentParts { model, widgets }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {}
|
||||||
|
}
|
||||||
68
src/components/control_panel.rs
Normal file
68
src/components/control_panel.rs
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
use gtk::prelude::{BoxExt, ButtonExt, GtkWindowExt, OrientableExt, ToggleButtonExt};
|
||||||
|
use relm4::*;
|
||||||
|
|
||||||
|
pub struct ControlPanelModel;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum HeaderOutput {
|
||||||
|
View,
|
||||||
|
Edit,
|
||||||
|
Export,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[relm4::component(pub)]
|
||||||
|
impl SimpleComponent for ControlPanelModel {
|
||||||
|
type Init = i8;
|
||||||
|
type Output = HeaderOutput;
|
||||||
|
type Input = ();
|
||||||
|
|
||||||
|
view! {
|
||||||
|
#[root]
|
||||||
|
gtk::HeaderBar {
|
||||||
|
#[wrap(Some)]
|
||||||
|
set_title_widget = >k::Box {
|
||||||
|
#[name = "group"]
|
||||||
|
gtk::ToggleButton {
|
||||||
|
set_label: "View",
|
||||||
|
set_active: true,
|
||||||
|
connect_toggled[sender] => move |btn| {
|
||||||
|
if btn.is_active() {
|
||||||
|
sender.output(HeaderOutput::View).unwrap()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
gtk::ToggleButton {
|
||||||
|
set_label: "Edit",
|
||||||
|
set_group: Some(&group),
|
||||||
|
connect_toggled[sender] => move |btn| {
|
||||||
|
if btn.is_active() {
|
||||||
|
sender.output(HeaderOutput::Edit).unwrap()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
gtk::ToggleButton {
|
||||||
|
set_label: "Export",
|
||||||
|
set_group: Some(&group),
|
||||||
|
connect_toggled[sender] => move |btn| {
|
||||||
|
if btn.is_active() {
|
||||||
|
sender.output(HeaderOutput::Export).unwrap()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn init(
|
||||||
|
init: Self::Init,
|
||||||
|
root: &Self::Root,
|
||||||
|
sender: relm4::ComponentSender<Self>,
|
||||||
|
) -> relm4::ComponentParts<Self> {
|
||||||
|
let model = ControlPanelModel {};
|
||||||
|
// Insert the macro code generation here
|
||||||
|
let widgets = view_output!();
|
||||||
|
|
||||||
|
ComponentParts { model, widgets }
|
||||||
|
}
|
||||||
|
fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {}
|
||||||
|
}
|
||||||
2
src/components/mod.rs
Normal file
2
src/components/mod.rs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
pub mod app;
|
||||||
|
mod control_panel;
|
||||||
27
src/main.rs
27
src/main.rs
@ -1,10 +1,14 @@
|
|||||||
|
#![allow(deprecated)]
|
||||||
|
|
||||||
use coords::proj::Mercator;
|
use coords::proj::Mercator;
|
||||||
use coords::Mapper;
|
use coords::Mapper;
|
||||||
use data::{Npz, Radar2d};
|
use data::{Npz, Radar2d};
|
||||||
use femtovg::{Color, Paint};
|
use femtovg::{Color, Paint};
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk::{gio, glib, Application, ApplicationWindow};
|
use gtk::{gio, glib, Application, ApplicationWindow};
|
||||||
|
use relm4::RelmApp;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
mod components;
|
||||||
mod coords;
|
mod coords;
|
||||||
mod data;
|
mod data;
|
||||||
mod errors;
|
mod errors;
|
||||||
@ -12,12 +16,13 @@ mod monitor;
|
|||||||
mod pipeline;
|
mod pipeline;
|
||||||
mod render;
|
mod render;
|
||||||
mod window;
|
mod window;
|
||||||
|
use components::app::{AppMode, AppModel};
|
||||||
use monitor::Monitor;
|
use monitor::Monitor;
|
||||||
use render::{BackgroundConfig, BackgroundWidget, ForegroundConfig, ForegroundWidget, Render};
|
use render::{BackgroundConfig, BackgroundWidget, ForegroundConfig, ForegroundWidget, Render};
|
||||||
|
|
||||||
const APP_ID: &str = "org.gtk_rs.HelloWorld2";
|
const APP_ID: &str = "org.gtk_rs.HelloWorld2";
|
||||||
|
|
||||||
fn main() -> glib::ExitCode {
|
fn main() {
|
||||||
// Load GL pointers from epoxy (GL context management library used by GTK).
|
// Load GL pointers from epoxy (GL context management library used by GTK).
|
||||||
{
|
{
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
@ -29,11 +34,10 @@ fn main() -> glib::ExitCode {
|
|||||||
.or_else(|_| libloading::os::windows::Library::open_already_loaded("epoxy-0.dll"))
|
.or_else(|_| libloading::os::windows::Library::open_already_loaded("epoxy-0.dll"))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
gio::resources_register_include!("p.gresource")
|
gio::resources_register_include!("p.gresource").expect("Failed to register resources.");
|
||||||
.expect("Failed to register resources.");
|
|
||||||
|
|
||||||
epoxy::load_with(|name| {
|
epoxy::load_with(|name| {
|
||||||
unsafe { library.get::<>(name.as_bytes()) }
|
unsafe { library.get(name.as_bytes()) }
|
||||||
.map(|symbol| *symbol)
|
.map(|symbol| *symbol)
|
||||||
.unwrap_or(ptr::null())
|
.unwrap_or(ptr::null())
|
||||||
});
|
});
|
||||||
@ -41,11 +45,14 @@ fn main() -> glib::ExitCode {
|
|||||||
|
|
||||||
// gio::resources_register_include!("monitor.gresource").expect("Failed to register resources");
|
// gio::resources_register_include!("monitor.gresource").expect("Failed to register resources");
|
||||||
// Create a new application
|
// Create a new application
|
||||||
let app = Application::builder().application_id(APP_ID).build();
|
// let app = Application::builder().application_id(APP_ID).build();
|
||||||
// Connect to "activate" signal of `app`
|
// // Connect to "activate" signal of `app`
|
||||||
app.connect_activate(build_ui);
|
// app.connect_activate(build_ui);
|
||||||
// Run the application
|
// // Run the application
|
||||||
app.run()
|
// app.run()
|
||||||
|
|
||||||
|
let relm = RelmApp::new(APP_ID);
|
||||||
|
relm.run::<AppModel>(AppMode::Edit);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_ui(app: &Application) {
|
fn build_ui(app: &Application) {
|
||||||
@ -65,7 +72,7 @@ fn build_ui(app: &Application) {
|
|||||||
let foreground_widget = ForegroundWidget::new(foreground_config);
|
let foreground_widget = ForegroundWidget::new(foreground_config);
|
||||||
let render = Render::new(background_widget, foreground_widget);
|
let render = Render::new(background_widget, foreground_widget);
|
||||||
|
|
||||||
let path = "/Users/tsuki/projects/radar-g/test2.npz";
|
let path = "/Users/ruomu/projects/cinrad_g/test2.npz";
|
||||||
let data = Radar2d::<i8>::load(path, Npz).unwrap();
|
let data = Radar2d::<i8>::load(path, Npz).unwrap();
|
||||||
let projection = Mercator::new();
|
let projection = Mercator::new();
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user