diff --git a/Cargo.lock b/Cargo.lock
index 23cd241..dbf8e0a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -30,6 +30,12 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
[[package]]
name = "bitvec"
version = "1.0.1"
@@ -51,6 +57,12 @@ dependencies = [
"generic-array",
]
+[[package]]
+name = "bumpalo"
+version = "3.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+
[[package]]
name = "byteorder"
version = "1.5.0"
@@ -244,6 +256,30 @@ version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+[[package]]
+name = "futures-core"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+
+[[package]]
+name = "futures-task"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
+
+[[package]]
+name = "futures-util"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "slab",
+]
+
[[package]]
name = "generic-array"
version = "0.14.7"
@@ -282,12 +318,36 @@ dependencies = [
"hashbrown",
]
+[[package]]
+name = "js-sys"
+version = "0.3.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "once_cell",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
[[package]]
name = "libc"
version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
+[[package]]
+name = "libm"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a"
+
[[package]]
name = "libsvld"
version = "0.1.0"
@@ -332,6 +392,43 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+[[package]]
+name = "native-windows-derive"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76134ae81020d89d154f619fd2495a2cecad204276b1dc21174b55e4d0975edd"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "native-windows-gui"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f7003a669f68deb6b7c57d74fff4f8e533c44a3f0b297492440ef4ff5a28454"
+dependencies = [
+ "bitflags",
+ "lazy_static",
+ "newline-converter",
+ "plotters",
+ "plotters-backend",
+ "stretch",
+ "winapi",
+ "winapi-build",
+]
+
+[[package]]
+name = "newline-converter"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f"
+dependencies = [
+ "unicode-segmentation",
+]
+
[[package]]
name = "nom"
version = "7.1.3"
@@ -360,6 +457,12 @@ dependencies = [
"autocfg",
]
+[[package]]
+name = "once_cell"
+version = "1.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+
[[package]]
name = "page_size"
version = "0.6.0"
@@ -413,6 +516,30 @@ dependencies = [
"sha2",
]
+[[package]]
+name = "pin-project-lite"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+
+[[package]]
+name = "plotters"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a"
+
[[package]]
name = "positioned-io"
version = "0.3.5"
@@ -424,6 +551,15 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml",
+]
+
[[package]]
name = "proc-macro2"
version = "1.0.106"
@@ -515,6 +651,22 @@ dependencies = [
"digest",
]
+[[package]]
+name = "slab"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+
+[[package]]
+name = "stretch"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b0dc6d20ce137f302edf90f9cd3d278866fd7fb139efca6f246161222ad6d87"
+dependencies = [
+ "lazy_static",
+ "libm",
+]
+
[[package]]
name = "svldcli"
version = "0.1.0"
@@ -523,6 +675,16 @@ dependencies = [
"libsvld",
]
+[[package]]
+name = "svldgui"
+version = "0.1.0"
+dependencies = [
+ "can-dbc 9.1.0",
+ "libsvld",
+ "native-windows-derive",
+ "native-windows-gui",
+]
+
[[package]]
name = "syn"
version = "1.0.109"
@@ -571,6 +733,15 @@ dependencies = [
"syn 2.0.117",
]
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "typenum"
version = "1.20.0"
@@ -589,6 +760,12 @@ version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+[[package]]
+name = "unicode-segmentation"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
+
[[package]]
name = "version_check"
version = "0.9.5"
@@ -604,6 +781,61 @@ dependencies = [
"rayon",
]
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.121"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.121"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.121"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2"
+dependencies = [
+ "bumpalo",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.121"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
[[package]]
name = "winapi"
version = "0.3.9"
@@ -614,6 +846,12 @@ dependencies = [
"winapi-x86_64-pc-windows-gnu",
]
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
diff --git a/Cargo.toml b/Cargo.toml
index 1641b98..e8002e0 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -5,7 +5,7 @@
[workspace]
resolver = "3"
-members = ["libsvld", "svldcli"]
+members = ["libsvld", "svldcli", "svldgui"]
[profile.release]
lto = "fat"
@@ -15,7 +15,8 @@ panic = "abort"
[profile.release-dbg]
inherits = "release"
-lto = "thin"
+# lto = "thin"
+lto = false
opt-level = 3
debug = true
diff --git a/svldgui/Cargo.toml b/svldgui/Cargo.toml
new file mode 100644
index 0000000..6c450d0
--- /dev/null
+++ b/svldgui/Cargo.toml
@@ -0,0 +1,15 @@
+[package]
+name = "svldgui"
+version = "0.1.0"
+edition = "2024"
+
+[[bin]]
+name = "svldgui"
+test = false
+bench = false
+
+[dependencies]
+libsvld = { path = "../libsvld" }
+native-windows-gui = { version = "1.0.13", features = ["file-dialog"] }
+native-windows-derive = "1.0.5"
+can-dbc = "9.1.0"
diff --git a/svldgui/src/main.rs b/svldgui/src/main.rs
new file mode 100644
index 0000000..e9248ad
--- /dev/null
+++ b/svldgui/src/main.rs
@@ -0,0 +1,131 @@
+#![windows_subsystem = "windows"]
+
+extern crate native_windows_gui as nwg;
+extern crate native_windows_derive as nwd;
+
+use std::{cell::RefCell, ffi::OsStr, fs, path::PathBuf};
+
+use can_dbc::Dbc;
+use nwd::NwgUi;
+use nwg::NativeUi;
+
+#[derive(Default, NwgUi)]
+pub struct BasicApp {
+ #[nwg_control(size: (800, 200), title: "Sane Vector Log Decoder", flags: "WINDOW|VISIBLE")]
+ #[nwg_events( OnWindowClose: [BasicApp::say_goodbye] )]
+ window: nwg::Window,
+
+ #[nwg_layout(parent: window, spacing: 1)]
+ grid: nwg::GridLayout,
+
+ #[nwg_resource(title: "Select DBC", action: nwg::FileDialogAction::Open, filters: "DBC(*.dbc)|Any(*.*)")]
+ dbc_dialog: nwg::FileDialog,
+
+ #[nwg_resource(title: "Select ASC(s)", action: nwg::FileDialogAction::Open, multiselect: true, filters: "ASC(*.asc)|Any(*.*)")]
+ asc_dialog: nwg::FileDialog,
+
+ #[nwg_resource(title: "Select output directory", action: nwg::FileDialogAction::OpenDirectory)]
+ out_dialog: nwg::FileDialog,
+
+ #[nwg_control(readonly: true)]
+ #[nwg_layout_item(layout: grid, col: 1, row: 0, col_span: 2)]
+ dbc_file_name: nwg::TextInput,
+
+ #[nwg_control(readonly: true)]
+ #[nwg_layout_item(layout: grid, col: 1, row: 1, col_span: 2)]
+ asc_file_names: nwg::TextInput,
+
+ #[nwg_control(readonly: true)]
+ #[nwg_layout_item(layout: grid, col: 1, row: 2, col_span: 2)]
+ out_directory: nwg::TextInput,
+
+ #[nwg_control(text: "Select DBC")]
+ #[nwg_layout_item(layout: grid, col: 0, row: 0)]
+ #[nwg_events( OnButtonClick: [BasicApp::pick_dbc] )]
+ dbc_button: nwg::Button,
+
+ #[nwg_control(text: "Select ASC(s)")]
+ #[nwg_layout_item(layout: grid, col: 0, row: 1)]
+ #[nwg_events( OnButtonClick: [BasicApp::pick_asc] )]
+ asc_button: nwg::Button,
+
+ #[nwg_control(text: "Select output dir")]
+ #[nwg_layout_item(layout: grid, col: 0, row: 2)]
+ #[nwg_events( OnButtonClick: [BasicApp::pick_out] )]
+ outdir_button: nwg::Button,
+
+ #[nwg_control(text: "Zrób fikołka")]
+ #[nwg_layout_item(layout: grid, col: 0, row: 3, col_span: 3)]
+ #[nwg_events( OnButtonClick: [BasicApp::action] )]
+ action_button: nwg::Button,
+
+ dbc_path: RefCell