From e4e2eb5cc0b641f9f0654347c1c53e49ae78f1de Mon Sep 17 00:00:00 2001 From: aOK Date: Mon, 3 Feb 2025 09:30:39 +0300 Subject: [PATCH] first commit --- Cargo.lock | 944 +++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 11 + README.md | 15 + resources/back.svg | 4 + src/app.rs | 38 ++ src/indicators.rs | 258 +++++++++++++ src/lib.rs | 3 + src/main.rs | 3 + src/ui.rs | 151 ++++++++ 9 files changed, 1427 insertions(+) create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100755 resources/back.svg create mode 100644 src/app.rs create mode 100644 src/indicators.rs create mode 100644 src/lib.rs create mode 100644 src/main.rs create mode 100644 src/ui.rs diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..eed7b45 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,944 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" + +[[package]] +name = "bytemuck" +version = "1.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "ctor" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "data-url" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gropu" +version = "0.6.0" +dependencies = [ + "makepad-widgets", +] + +[[package]] +name = "hilog-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b570882b8450bb0c9edfc3e4bdd3bd298667d38cb15e5b5c67586a7fb78429a" + +[[package]] +name = "imagesize" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" + +[[package]] +name = "kurbo" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89234b2cc610a7dd927ebde6b41dd1a5d4214cffaef4cf1fb2195d592f92518f" +dependencies = [ + "arrayvec", + "smallvec", +] + +[[package]] +name = "libloading" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + +[[package]] +name = "log" +version = "0.4.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" + +[[package]] +name = "makepad-android-state" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd004cda8be459fd76954218b76a1249a079fb9360bbca4e724cb7ddb2962857" +dependencies = [ + "makepad-jni-sys", +] + +[[package]] +name = "makepad-derive-live" +version = "0.4.0" +dependencies = [ + "makepad-live-id", + "makepad-micro-proc-macro", +] + +[[package]] +name = "makepad-derive-wasm-bridge" +version = "0.4.0" +dependencies = [ + "makepad-micro-proc-macro", +] + +[[package]] +name = "makepad-derive-widget" +version = "0.4.0" +dependencies = [ + "makepad-live-id", + "makepad-micro-proc-macro", +] + +[[package]] +name = "makepad-draw" +version = "0.6.0" +dependencies = [ + "ab_glyph_rasterizer", + "fxhash", + "makepad-html", + "makepad-platform", + "makepad-rustybuzz", + "makepad-vector", + "sdfer", + "unicode-bidi", + "unicode-linebreak", + "unicode-segmentation", +] + +[[package]] +name = "makepad-futures" +version = "0.4.0" + +[[package]] +name = "makepad-futures-legacy" +version = "0.7.0" + +[[package]] +name = "makepad-html" +version = "0.4.0" +dependencies = [ + "makepad-live-id", +] + +[[package]] +name = "makepad-http" +version = "0.4.0" + +[[package]] +name = "makepad-jni-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9775cbec5fa0647500c3e5de7c850280a88335d1d2d770e5aa2332b801ba7064" + +[[package]] +name = "makepad-live-compiler" +version = "0.5.0" +dependencies = [ + "makepad-derive-live", + "makepad-live-tokenizer", + "makepad-math", +] + +[[package]] +name = "makepad-live-id" +version = "0.4.0" +dependencies = [ + "makepad-live-id-macros", +] + +[[package]] +name = "makepad-live-id-macros" +version = "0.4.0" +dependencies = [ + "makepad-micro-proc-macro", +] + +[[package]] +name = "makepad-live-tokenizer" +version = "0.4.0" +dependencies = [ + "makepad-live-id", + "makepad-math", + "makepad-micro-serde", +] + +[[package]] +name = "makepad-markdown" +version = "0.4.0" +dependencies = [ + "makepad-live-id", +] + +[[package]] +name = "makepad-math" +version = "0.4.0" + +[[package]] +name = "makepad-micro-proc-macro" +version = "0.4.0" + +[[package]] +name = "makepad-micro-serde" +version = "0.4.0" +dependencies = [ + "makepad-live-id", + "makepad-micro-serde-derive", +] + +[[package]] +name = "makepad-micro-serde-derive" +version = "0.4.0" +dependencies = [ + "makepad-micro-proc-macro", +] + +[[package]] +name = "makepad-objc-sys" +version = "0.4.0" + +[[package]] +name = "makepad-platform" +version = "0.6.0" +dependencies = [ + "bitflags 2.8.0", + "hilog-sys", + "makepad-android-state", + "makepad-futures", + "makepad-futures-legacy", + "makepad-http", + "makepad-jni-sys", + "makepad-objc-sys", + "makepad-shader-compiler", + "makepad-wasm-bridge", + "napi-derive-ohos", + "napi-ohos", + "ohos-sys", + "smallvec", + "windows", + "windows-core", + "windows-targets 0.48.5", +] + +[[package]] +name = "makepad-rustybuzz" +version = "0.8.0" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "smallvec", + "ttf-parser", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-properties", + "unicode-script", +] + +[[package]] +name = "makepad-shader-compiler" +version = "0.5.0" +dependencies = [ + "makepad-live-compiler", +] + +[[package]] +name = "makepad-vector" +version = "0.4.0" +dependencies = [ + "resvg", + "ttf-parser", +] + +[[package]] +name = "makepad-wasm-bridge" +version = "0.4.0" +dependencies = [ + "makepad-derive-wasm-bridge", + "makepad-live-id", +] + +[[package]] +name = "makepad-widgets" +version = "0.6.0" +dependencies = [ + "makepad-derive-widget", + "makepad-draw", + "makepad-html", + "makepad-markdown", + "makepad-zune-png", + "unicode-segmentation", + "zune-jpeg", +] + +[[package]] +name = "makepad-zune-png" +version = "0.4.10" +dependencies = [ + "zune-core", + "zune-inflate", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "miniz_oxide" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "napi-derive-backend-ohos" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b18d697bedddd2d4c9f8f76b49fe65bd81ed1c55a7eec21ba40c176c236ddc" +dependencies = [ + "convert_case", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn", +] + +[[package]] +name = "napi-derive-ohos" +version = "0.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8462d74a2d6c7a671bd610f99f9ba34c739aadd2da4d8dd9f109a7e666cc2ad2" +dependencies = [ + "cfg-if", + "convert_case", + "napi-derive-backend-ohos", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "napi-ohos" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad5a3bbb2ae61f345b8c11776f2e79fc2bb71d1901af9a5f81f03c9238a05d86" +dependencies = [ + "bitflags 2.8.0", + "ctor", + "napi-sys-ohos", + "once_cell", +] + +[[package]] +name = "napi-sys-ohos" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f101404db01422d034db5afa63eefff6d9c8f66c0894278bc456b4c30954e166" +dependencies = [ + "libloading", +] + +[[package]] +name = "ohos-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d380ab6c951261a0e44306245bc960b3b3367f099a7da7156bd1a3cacaf783c" + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "proc-macro2" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "resvg" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "944d052815156ac8fa77eaac055220e95ba0b01fa8887108ca710c03805d9051" +dependencies = [ + "log", + "pico-args", + "rgb", + "svgtypes", + "tiny-skia", + "usvg", +] + +[[package]] +name = "rgb" +version = "0.8.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + +[[package]] +name = "sdfer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27fd75ebc7c721a70d202c7cdd2beb108bbe5dfaaea68e06aff4de2f4cc240ed" + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simplecss" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9c6883ca9c3c7c90e888de77b7a5c849c779d25d74a1269b0218b14e8b136c" +dependencies = [ + "log", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] + +[[package]] +name = "svgtypes" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" +dependencies = [ + "kurbo", + "siphasher", +] + +[[package]] +name = "syn" +version = "2.0.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "ttf-parser" +version = "0.21.1" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" + +[[package]] +name = "unicode-ccc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" + +[[package]] +name = "unicode-ident" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" + +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-script" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "usvg" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84ea542ae85c715f07b082438a4231c3760539d902e11d093847a0b22963032" +dependencies = [ + "base64", + "data-url", + "flate2", + "imagesize", + "kurbo", + "log", + "pico-args", + "roxmltree", + "simplecss", + "siphasher", + "strict-num", + "svgtypes", + "tiny-skia-path", + "xmlwriter", +] + +[[package]] +name = "windows" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1de69df01bdf1ead2f4ac895dc77c9351aefff65b2f3db429a343f9cbf05e132" +dependencies = [ + "windows-core", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zune-jpeg" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" +dependencies = [ + "zune-core", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..bf656b4 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "gropu" +version = "0.6.0" +authors = ["Makepad "] +edition = "2021" +description = "Makepad simple example" +license = "MIT OR Apache-2.0" +metadata.makepad-auto-version = "db3R5Gxh5Njhx8E-8kuZ2plQ1AI=" + +[dependencies] +makepad-widgets = { path = "../makepad/widgets", version = "0.6.0" } diff --git a/README.md b/README.md new file mode 100644 index 0000000..c2845fe --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# gropu + +- Creating a new repository on the command line + +touch README.md +git init +git checkout -b main +git add README.md +git commit -m "first commit" +git remote add origin https://gitdab.com/andodeki/gropu.git +git push -u origin main + +- Pushing an existing repository from the command line +git remote add origin https://gitdab.com/andodeki/gropu.git +git push -u origin main diff --git a/resources/back.svg b/resources/back.svg new file mode 100755 index 0000000..7178c73 --- /dev/null +++ b/resources/back.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/app.rs b/src/app.rs new file mode 100644 index 0000000..e672e98 --- /dev/null +++ b/src/app.rs @@ -0,0 +1,38 @@ +use makepad_widgets::*; + +live_design!( + use link::theme::*; + use link::shaders::*; + use link::widgets::*; + use crate::ui::*; + + App = {{App}} { + ui:{ + { + body = {} + } + } + } +); + +#[derive(Live, LiveHook)] +struct App { + #[live] + ui: WidgetRef, +} + +impl AppMain for App { + fn handle_event(&mut self, cx: &mut Cx, event: &Event) { + self.ui.handle_event(cx, event, &mut Scope::empty()); + } +} + +impl LiveRegister for App { + fn live_register(cx: &mut Cx) { + makepad_widgets::live_design(cx); + crate::ui::live_design(cx); + crate::indicators::live_design(cx); + } +} + +app_main!(App); diff --git a/src/indicators.rs b/src/indicators.rs new file mode 100644 index 0000000..c45bec1 --- /dev/null +++ b/src/indicators.rs @@ -0,0 +1,258 @@ +use makepad_widgets::*; + +use crate::ui::NextBackAction; + +const SELECTED: bool = false; + +live_design! { + use link::theme::*; + use link::shaders::*; + use link::widgets::*; + + IndicatorCheckBox = { + width: Fill, + height: 35, + margin: {left: 1}, + label_walk: {margin: {top: 15, bottom: 10}} + draw_check: { + uniform size: 3.5; + instance open: 0.0 + uniform length: 3.0 + uniform width: 1.0 + + fn pixel(self) -> vec4 { + let sdf = Sdf2d::viewport(self.pos * self.rect_size) + match self.check_type { + CheckType::Check => { + let sz = self.size; + let left = sz + 1.; + let up = sz + 7; + let c = self.rect_size * vec2(0.5, 0.5); + sdf.box( + left, + c.y - up, + 25. * sz + 5, + 1.8 * sz, + 1.8 + ); + + sdf.fill(#232323); + sdf.stroke(#000, 0.5 + 0.5 * self.dpi_dilate); + + let isz = sz * 0.5; + let ileft = isz + 3; + let iup = sz + 7; + sdf.box( + ileft, + c.y - iup, + 25. * sz + 5, + 1.8 * sz, + 1.8 + ); + sdf.fill(mix(#000, #016def, self.selected)); + sdf.stroke(mix( + #000, #016def, + self.selected), 1.25 + ); + } + } + return sdf.result + } + } + draw_text: {text_style: {}} + + } + pub Indicators = {{Indicators}} { + width: Fit, + height: Fit, + flow: Right, + spacing: 5, + indicator_titles: [] + template: { + width: 100, height: 20, + margin: 0, padding: 0 + align: {x: 0.5, y: 0.5}, + text: "Here", + draw_text: { + fn get_color(self) -> vec4 { + return #f60; + } + } + draw_check: { + check_type: Check, + } + animator: { + selected = { + default: on + } + } + } + } +} + +#[derive(Live, Widget)] +pub struct Indicators { + #[redraw] + #[rust] + area: Area, + + #[walk] + walk: Walk, + + #[layout] + layout: Layout, + + #[live] + indicator_titles: Vec, + + #[live] + template: Option, + + #[rust] + items: ComponentMap, + + #[rust(0)] + page_no: u8, +} + +impl LiveHook for Indicators { + fn after_new_from_doc(&mut self, cx: &mut Cx) { + // let tags = ["test1", "test2", "test3"]; + // log!("Indicators: after_apply"); + + self.items.clear(); + self.page_no = 0; // Assign initial page + if self.page_no < self.indicator_titles.len() as u8 { + for (i, title_text) in self.indicator_titles.iter().enumerate() { + let item_id = LiveId::from_str(&format!("items{}", i)); + let item_widget = WidgetRef::new_from_ptr(cx, self.template); + item_widget.apply_over(cx, live! {text: (title_text)}); + + let indicator = item_widget.check_box(&[item_id]); + if usize::from(self.page_no) == i { + if indicator.selected(cx) != SELECTED { + indicator.set_selected(cx, SELECTED); + } + } + self.items.insert(item_id, item_widget); + } + } + } +} + +impl WidgetMatchEvent for Indicators { + fn handle_actions(&mut self, cx: &mut Cx, actions: &Actions, _scope: &mut Scope) { + // if (self.page_no as usize) < arr.len() { + // // Iterate over the selected page's choices + let mut arr: Vec = Vec::new(); + for (_idx, inner_vec) in self.items.iter_mut() { + // Append the inner vector to the new variable + arr.push(inner_vec.clone()); + } + if (self.page_no as usize) < arr.len() { + for (inneridx, indicator_arr) in arr.iter().enumerate() { + let index: u8 = inneridx as u8; + let widget_id = LiveId::from_str(&format!("items{}", index)); + let item = self.items.get_or_insert(cx, widget_id, |cx| { + WidgetRef::new_from_ptr(cx, self.template) + }); + let indicator = item.check_box(&[widget_id]); + + // if usize::from(self.page_no) == inneridx { + if indicator.selected(cx) != SELECTED { + indicator.set_selected(cx, SELECTED); + } + // } + // item.check_box(&[widget_id]).set_selected(cx, SELECTED); + // let _ = item.draw_all(cx, scope); + } + } + // } else { + // log!("Invalid page_no: {}", self.page_no); + // } + + for action in actions { + if let NextBackAction::NextButton { clicked, page_no } = + action.as_widget_action().cast() + { + if clicked { + self.increment_page_no(cx); // Increment the page number + } + } + if let NextBackAction::BackButton { clicked, page_no } = + action.as_widget_action().cast() + { + if clicked { + self.decrement_page_no(cx); // Increment the page number + } + } + } + } +} +impl Widget for Indicators { + fn handle_event(&mut self, cx: &mut Cx, event: &Event, scope: &mut Scope) { + for (_id, item) in self.items.iter_mut() { + item.handle_event(cx, event, scope); + } + self.widget_match_event(cx, event, scope); + } + + fn draw_walk(&mut self, cx: &mut Cx2d, scope: &mut Scope, walk: Walk) -> DrawStep { + // let state = scope.data.get_mut::().unwrap(); + // state.select_choices_values.len(); + self.draw_walkd(cx, scope, walk); + DrawStep::done() + } +} + +impl Indicators { + fn draw_walkd(&mut self, cx: &mut Cx2d, scope: &mut Scope, walk: Walk) { + cx.begin_turtle(walk, Layout::default()); + let mut arr: Vec = Vec::new(); + for (_idx, inner_vec) in self.items.iter_mut() { + // Append the inner vector to the new variable + arr.push(inner_vec.clone()); + } + if (self.page_no as usize) < arr.len() { + for (inneridx, indicator_arr) in arr.iter().enumerate() { + let index: u8 = inneridx as u8; + let widget_id = LiveId::from_str(&format!("items{}", index)); + let item = self.items.get_or_insert(cx, widget_id, |cx| { + WidgetRef::new_from_ptr(cx, self.template) + }); + let indicator = item.check_box(&[widget_id]); + + // if usize::from(self.page_no) == inneridx { + if indicator.selected(cx) != SELECTED { + indicator.set_selected(cx, SELECTED); + } + // } + let _ = item.draw_all(cx, scope); + } + } + cx.end_turtle_with_area(&mut self.area); + // cx.end_turtle_with_area(&mut self.custom_button.area()); + } + pub fn increment_page_no(&mut self, cx: &mut Cx) { + self.page_no = (self.page_no + 1).min(2); // Ensure page_no doesn't exceed max value + log!("SelectOption - Navigated to page: {}", self.page_no); + self.update_view(cx); + } + + pub fn decrement_page_no(&mut self, cx: &mut Cx) { + if self.page_no > 0 { + self.page_no -= 1; + log!("SelectOption - Navigated to page: {}", self.page_no); + self.update_view(cx); + } + } + + fn update_view(&mut self, cx: &mut Cx) { + match self.page_no { + 0 => log!("SelectOption - Showing Step One"), + 1 => log!("SelectOption - Showing Step Two"), + 2 => log!("SelectOption - Showing Step Three"), + _ => log!("SelectOption - Unknown Page"), + } + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..40fab53 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,3 @@ +pub mod app; +mod indicators; +mod ui; diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..c2279b3 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + gropu::app::app_main() +} diff --git a/src/ui.rs b/src/ui.rs new file mode 100644 index 0000000..58de556 --- /dev/null +++ b/src/ui.rs @@ -0,0 +1,151 @@ +use makepad_widgets::*; +const SELECTED: bool = false; + +live_design!( + use link::theme::*; + use link::shaders::*; + use link::widgets::*; + + use crate::indicators::Indicators; + + + pub Ui = {{Ui}} { + + { + align: {x: 0.5, y: 0.5} + width: Fit, + height: Fit, + flow: Down + padding: 100 + indicators = { + height: Fit, + width: Fit, + margin: {bottom: 20.0} + ind = { + indicator_titles: [ + "Step One", + "Step Two", + "Step Three" + ] + } + } + back = { + // debug: A + align: {x: 1, y: 0.} + width: Fit, height: Fit, + back_left_button =