From 224300f3eaa3119522e8aa398a298c0726476124 Mon Sep 17 00:00:00 2001 From: zxq5 Date: Thu, 17 Jul 2025 02:18:29 +0100 Subject: [PATCH] progress --- Cargo.lock | 608 ++++++------------ Cargo.toml | 10 +- editor/Cargo.toml | 2 +- editor/src/lib.rs | 30 +- project/assets/the prophet.png | Bin 0 -> 148129 bytes .../09fb1e02-055b-4a02-b23e-5e5e9e0ca52d.json | 4 - .../ee0fa255-9a71-44b1-9556-e7b3157f1f77.json | 1 - .../0078bb24-2fb0-4ecb-b5cb-20d29c5f2f77.json | 10 - .../20beeb2f-363c-49bf-9621-f156d7c7cdd7.json | 10 - .../8d76fdcd-0c3e-41a9-abc4-66fe21c0cb73.json | 23 + .../bd13d252-3f19-4618-bb10-cc45e9f7d301.json | 16 - .../a24b3ab7-2572-4af4-8457-df26937fd773.json | 37 -- .../b5745688-3c1c-40de-bc3a-2a3e354dd19d.json | 13 - .../c96f5e87-7517-44cc-a5ab-42ffd537801d.json | 25 - .../d1223e6b-ade0-405a-8c3b-657c743a21cc.json | 37 ++ src/editors/asset_editor.rs | 74 +++ src/editors/content_editor.rs | 306 +++++++++ src/editors/mod.rs | 6 + src/editors/note_editor.rs | 152 +++++ src/editors/object_editor.rs | 364 +++++++++++ src/editors/tags.rs | 244 +++++++ .../template_editor.rs} | 156 +++-- src/error.rs | 22 - src/explorer.rs | 248 +++++-- src/main.rs | 263 ++++---- src/main_editor.rs | 211 ------ src/note.rs | 109 ---- src/object.rs | 276 -------- src/util.rs | 62 ++ 29 files changed, 1880 insertions(+), 1439 deletions(-) create mode 100644 project/assets/the prophet.png delete mode 100644 project/documents/09fb1e02-055b-4a02-b23e-5e5e9e0ca52d.json delete mode 100644 project/notes/ee0fa255-9a71-44b1-9556-e7b3157f1f77.json delete mode 100644 project/objects/0078bb24-2fb0-4ecb-b5cb-20d29c5f2f77.json delete mode 100644 project/objects/20beeb2f-363c-49bf-9621-f156d7c7cdd7.json create mode 100644 project/objects/8d76fdcd-0c3e-41a9-abc4-66fe21c0cb73.json delete mode 100644 project/objects/bd13d252-3f19-4618-bb10-cc45e9f7d301.json delete mode 100644 project/templates/a24b3ab7-2572-4af4-8457-df26937fd773.json delete mode 100644 project/templates/b5745688-3c1c-40de-bc3a-2a3e354dd19d.json delete mode 100644 project/templates/c96f5e87-7517-44cc-a5ab-42ffd537801d.json create mode 100644 project/templates/d1223e6b-ade0-405a-8c3b-657c743a21cc.json create mode 100644 src/editors/asset_editor.rs create mode 100644 src/editors/content_editor.rs create mode 100644 src/editors/mod.rs create mode 100644 src/editors/note_editor.rs create mode 100644 src/editors/object_editor.rs create mode 100644 src/editors/tags.rs rename src/{template.rs => editors/template_editor.rs} (75%) delete mode 100644 src/error.rs delete mode 100644 src/main_editor.rs delete mode 100644 src/note.rs delete mode 100644 src/object.rs create mode 100644 src/util.rs diff --git a/Cargo.lock b/Cargo.lock index 2a93bc6..02fefa7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,15 +20,19 @@ checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169" [[package]] name = "accesskit" -version = "0.17.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" +checksum = "e25ae84c0260bdf5df07796d7cc4882460de26a2b406ec0e6c42461a723b271b" +dependencies = [ + "enumn", + "serde", +] [[package]] name = "accesskit_atspi_common" -version = "0.10.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f" +checksum = "29bd41de2e54451a8ca0dd95ebf45b54d349d29ebceb7f20be264eee14e3d477" dependencies = [ "accesskit", "accesskit_consumer", @@ -40,20 +44,19 @@ dependencies = [ [[package]] name = "accesskit_consumer" -version = "0.26.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" +checksum = "8bfae7c152994a31dc7d99b8eeac7784a919f71d1b306f4b83217e110fd3824c" dependencies = [ "accesskit", "hashbrown", - "immutable-chunkmap", ] [[package]] name = "accesskit_macos" -version = "0.18.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" +checksum = "692dd318ff8a7a0ffda67271c4bd10cf32249656f4e49390db0b26ca92b095f2" dependencies = [ "accesskit", "accesskit_consumer", @@ -65,9 +68,9 @@ dependencies = [ [[package]] name = "accesskit_unix" -version = "0.13.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5" +checksum = "c5f7474c36606d0fe4f438291d667bae7042ea2760f506650ad2366926358fc8" dependencies = [ "accesskit", "accesskit_atspi_common", @@ -83,24 +86,23 @@ dependencies = [ [[package]] name = "accesskit_windows" -version = "0.24.1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" +checksum = "70a042b62c9c05bf7b616f015515c17d2813f3ba89978d6f4fc369735d60700a" dependencies = [ "accesskit", "accesskit_consumer", "hashbrown", - "paste", "static_assertions", "windows", - "windows-core 0.58.0", + "windows-core", ] [[package]] name = "accesskit_winit" -version = "0.23.1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" +checksum = "5c1f0d3d13113d8857542a4f8d1a1c24d1dc1527b77aee8426127f4901588708" dependencies = [ "accesskit", "accesskit_macos", @@ -125,6 +127,7 @@ dependencies = [ "cfg-if", "getrandom 0.3.3", "once_cell", + "serde", "version_check", "zerocopy", ] @@ -154,7 +157,7 @@ dependencies = [ "log", "ndk", "ndk-context", - "ndk-sys 0.6.0+11769913", + "ndk-sys", "num_enum", "thiserror 1.0.69", ] @@ -241,15 +244,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" -[[package]] -name = "ash" -version = "0.38.0+1.3.281" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" -dependencies = [ - "libloading", -] - [[package]] name = "async-broadcast" version = "0.7.2" @@ -288,17 +282,6 @@ dependencies = [ "slab", ] -[[package]] -name = "async-fs" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" -dependencies = [ - "async-lock", - "blocking", - "futures-lite", -] - [[package]] name = "async-io" version = "2.4.1" @@ -402,9 +385,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "atspi" -version = "0.22.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf" +checksum = "c83247582e7508838caf5f316c00791eee0e15c0bf743e6880585b867e16815c" dependencies = [ "atspi-common", "atspi-connection", @@ -413,9 +396,9 @@ dependencies = [ [[package]] name = "atspi-common" -version = "0.6.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7" +checksum = "33dfc05e7cdf90988a197803bf24f5788f94f7c94a69efa95683e8ffe76cfdfb" dependencies = [ "enumflags2", "serde", @@ -429,9 +412,9 @@ dependencies = [ [[package]] name = "atspi-connection" -version = "0.6.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333" +checksum = "4193d51303d8332304056ae0004714256b46b6635a5c556109b319c0d3784938" dependencies = [ "atspi-common", "atspi-proxies", @@ -441,14 +424,13 @@ dependencies = [ [[package]] name = "atspi-proxies" -version = "0.6.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496" +checksum = "d2eebcb9e7e76f26d0bcfd6f0295e1cd1e6f33bedbc5698a971db8dc43d7751c" dependencies = [ "atspi-common", "serde", "zbus", - "zvariant", ] [[package]] @@ -522,21 +504,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - [[package]] name = "block2" version = "0.5.1" @@ -703,10 +670,11 @@ dependencies = [ [[package]] name = "codespan-reporting" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ + "serde", "termcolor", "unicode-width", ] @@ -786,15 +754,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - [[package]] name = "crc32fast" version = "1.4.2" @@ -835,16 +794,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "cursor-icon" version = "1.2.0" @@ -857,16 +806,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - [[package]] name = "dispatch" version = "0.2.0" @@ -932,12 +871,13 @@ checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" [[package]] name = "ecolor" -version = "0.31.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1" +checksum = "4a631732d995184114016fab22fc7e3faf73d6841c2d7650395fe251fbcd9285" dependencies = [ "bytemuck", "emath", + "serde", ] [[package]] @@ -950,9 +890,9 @@ dependencies = [ [[package]] name = "eframe" -version = "0.31.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0dfe0859f3fb1bc6424c57d41e10e9093fe938f426b691e42272c2f336d915c" +checksum = "0c790ccfbb3dd556588342463454b2b2b13909e5fdce5bc2a1432a8aa69c8b7a" dependencies = [ "ahash", "bytemuck", @@ -986,9 +926,9 @@ dependencies = [ [[package]] name = "egui" -version = "0.31.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3" +checksum = "8470210c95a42cc985d9ffebfd5067eea55bdb1c3f7611484907db9639675e28" dependencies = [ "accesskit", "ahash", @@ -998,13 +938,16 @@ dependencies = [ "log", "nohash-hasher", "profiling", + "serde", + "smallvec", + "unicode-segmentation", ] [[package]] name = "egui-wgpu" -version = "0.31.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d319dfef570f699b6e9114e235e862a2ddcf75f0d1a061de9e1328d92146d820" +checksum = "14de9942d8b9e99e2d830403c208ab1a6e052e925a7456a4f6f66d567d90de1d" dependencies = [ "ahash", "bytemuck", @@ -1022,9 +965,9 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.31.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9dfbb78fe4eb9c3a39ad528b90ee5915c252e77bbab9d4ebc576541ab67e13" +checksum = "c490804a035cec9c826082894a3e1ecf4198accd3817deb10f7919108ebafab0" dependencies = [ "accesskit_winit", "ahash", @@ -1042,9 +985,9 @@ dependencies = [ [[package]] name = "egui_commonmark" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1e5d9a91b1b7a320c9b7f56d1878416d7c9bab3eaf337b036e0ddfabf58623" +checksum = "26c9caff9c964af1e3d913acd85e86d2170e3169a43cf4ff84eea3106691c14d" dependencies = [ "egui", "egui_commonmark_backend", @@ -1054,9 +997,9 @@ dependencies = [ [[package]] name = "egui_commonmark_backend" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb41b6833a6aaa99ca5c4f8e75b2410d69a7b3e30148d413f541147404a0dfa" +checksum = "6e317aa4031f27be77d4c1c33cb038cdf02d77790c28e5cf1283a66cceb88695" dependencies = [ "data-url", "egui", @@ -1066,9 +1009,9 @@ dependencies = [ [[package]] name = "egui_extras" -version = "0.31.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624659a2e972a46f4d5f646557906c55f1cd5a0836eddbe610fdf1afba1b4226" +checksum = "0f791a5937f518249016b276b3639ad2aa3824048b6f2161ec2b431ab325880a" dependencies = [ "ahash", "chrono", @@ -1082,9 +1025,9 @@ dependencies = [ [[package]] name = "egui_file" -version = "0.22.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e7289fecaa1af3f4944a7ac6e1c187d0700e32716c2a4c76d6bad7ffd255d72" +checksum = "cd34f5785805b134a7f7a739140cee3af03e36022639348952024b136a19790d" dependencies = [ "dyn-clone", "egui", @@ -1092,9 +1035,9 @@ dependencies = [ [[package]] name = "egui_glow" -version = "0.31.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "910906e3f042ea6d2378ec12a6fd07698e14ddae68aed2d819ffe944a73aab9e" +checksum = "d44f3fd4fdc5f960c9e9ef7327c26647edc3141abf96102980647129d49358e6" dependencies = [ "ahash", "bytemuck", @@ -1116,11 +1059,12 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "emath" -version = "0.31.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b" +checksum = "45f057b141e7e46340c321400be74b793543b1b213036f0f989c35d35957c32e" dependencies = [ "bytemuck", + "serde", ] [[package]] @@ -1136,7 +1080,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" dependencies = [ "enum-map-derive", - "serde", ] [[package]] @@ -1172,10 +1115,21 @@ dependencies = [ ] [[package]] -name = "epaint" -version = "0.31.1" +name = "enumn" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "epaint" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94cca02195f0552c17cabdc02f39aa9ab6fbd815dac60ab1cd3d5b0aa6f9551c" dependencies = [ "ab_glyph", "ahash", @@ -1187,13 +1141,14 @@ dependencies = [ "nohash-hasher", "parking_lot", "profiling", + "serde", ] [[package]] name = "epaint_default_fonts" -version = "0.31.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7e7a64c02cf7a5b51e745a9e45f60660a286f151c238b9d397b3e923f5082f" +checksum = "e8495e11ed527dff39663b8c36b6c2b2799d7e4287fb90556e455d72eca0b4d3" [[package]] name = "equator" @@ -1376,12 +1331,6 @@ dependencies = [ "syn", ] -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - [[package]] name = "futures-task" version = "0.3.31" @@ -1395,26 +1344,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", - "futures-io", "futures-macro", - "futures-sink", "futures-task", - "memchr", "pin-project-lite", "pin-utils", "slab", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "gethostname" version = "0.4.3" @@ -1547,45 +1483,6 @@ dependencies = [ "gl_generator", ] -[[package]] -name = "gpu-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" -dependencies = [ - "bitflags 2.9.1", - "gpu-alloc-types", -] - -[[package]] -name = "gpu-alloc-types" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "gpu-descriptor" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" -dependencies = [ - "bitflags 2.9.1", - "gpu-descriptor-types", - "hashbrown", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" -dependencies = [ - "bitflags 2.9.1", -] - [[package]] name = "half" version = "2.6.0" @@ -1594,6 +1491,7 @@ checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", + "num-traits", ] [[package]] @@ -1641,7 +1539,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core", ] [[package]] @@ -1799,15 +1697,6 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" -[[package]] -name = "immutable-chunkmap" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" -dependencies = [ - "arrayvec", -] - [[package]] name = "indexmap" version = "2.10.0" @@ -1892,17 +1781,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "khronos-egl" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" -dependencies = [ - "libc", - "libloading", - "pkg-config", -] - [[package]] name = "khronos_api" version = "3.1.0" @@ -1941,6 +1819,12 @@ dependencies = [ "windows-targets 0.53.2", ] +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + [[package]] name = "libredox" version = "0.1.4" @@ -2001,15 +1885,6 @@ dependencies = [ "imgref", ] -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - [[package]] name = "maybe-rayon" version = "0.1.1" @@ -2044,21 +1919,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "metal" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" -dependencies = [ - "bitflags 2.9.1", - "block", - "core-graphics-types", - "foreign-types", - "log", - "objc", - "paste", -] - [[package]] name = "mime" version = "0.3.17" @@ -2095,24 +1955,26 @@ dependencies = [ [[package]] name = "naga" -version = "24.0.0" +version = "25.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" +checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632" dependencies = [ "arrayvec", "bit-set", "bitflags 2.9.1", "cfg_aliases", "codespan-reporting", + "half", + "hashbrown", "hexf-parse", "indexmap", "log", + "num-traits", + "once_cell", "rustc-hash 1.1.0", - "spirv", "strum", - "termcolor", "thiserror 2.0.12", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -2124,7 +1986,7 @@ dependencies = [ "bitflags 2.9.1", "jni-sys", "log", - "ndk-sys 0.6.0+11769913", + "ndk-sys", "num_enum", "raw-window-handle", "thiserror 1.0.69", @@ -2136,15 +1998,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" -[[package]] -name = "ndk-sys" -version = "0.5.0+25.2.9519653" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" -dependencies = [ - "jni-sys", -] - [[package]] name = "ndk-sys" version = "0.6.0+11769913" @@ -2162,9 +2015,9 @@ checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nix" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ "bitflags 2.9.1", "cfg-if", @@ -2243,6 +2096,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -2267,15 +2121,6 @@ dependencies = [ "syn", ] -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - [[package]] name = "objc-sys" version = "0.3.5" @@ -2562,15 +2407,6 @@ dependencies = [ "libredox", ] -[[package]] -name = "ordered-float" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-stream" version = "0.2.0" @@ -2752,6 +2588,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + [[package]] name = "potential_utf" version = "0.1.2" @@ -2809,9 +2651,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.12.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86ba2052aebccc42cbbb3ed234b8b13ce76f75c3551a303cb2bcffcff12bb14" +checksum = "1e8bbe1a966bd2f362681a44f6edce3c2310ac21e4d5067a6e7ec396297a6ea0" dependencies = [ "bitflags 2.9.1", "memchr", @@ -2835,9 +2677,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.30.0" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" dependencies = [ "memchr", "serde", @@ -3139,17 +2981,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "shlex" version = "1.3.0" @@ -3271,15 +3102,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "spirv" -version = "0.3.0+sdk-1.3.268.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" -dependencies = [ - "bitflags 2.9.1", -] - [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -3549,12 +3371,6 @@ dependencies = [ "rustc-hash 2.1.1", ] -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - [[package]] name = "uds_windows" version = "1.1.0" @@ -3590,12 +3406,6 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "url" version = "2.5.4" @@ -3896,23 +3706,24 @@ checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[package]] name = "wgpu" -version = "24.0.5" +version = "25.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353" +checksum = "ec8fb398f119472be4d80bc3647339f56eb63b2a331f6a3d16e25d8144197dd9" dependencies = [ "arrayvec", "bitflags 2.9.1", "cfg_aliases", "document-features", + "hashbrown", "js-sys", "log", "parking_lot", + "portable-atomic", "profiling", "raw-window-handle", "smallvec", "static_assertions", "wasm-bindgen", - "wasm-bindgen-futures", "web-sys", "wgpu-core", "wgpu-hal", @@ -3921,79 +3732,72 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "24.0.5" +version = "25.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" +checksum = "f7b882196f8368511d613c6aeec80655160db6646aebddf8328879a88d54e500" dependencies = [ "arrayvec", + "bit-set", "bit-vec", "bitflags 2.9.1", "cfg_aliases", "document-features", + "hashbrown", "indexmap", "log", "naga", "once_cell", "parking_lot", + "portable-atomic", "profiling", "raw-window-handle", "rustc-hash 1.1.0", "smallvec", "thiserror 2.0.12", + "wgpu-core-deps-windows-linux-android", "wgpu-hal", "wgpu-types", ] [[package]] -name = "wgpu-hal" -version = "24.0.4" +name = "wgpu-core-deps-windows-linux-android" +version = "25.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" +checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "25.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f968767fe4d3d33747bbd1473ccd55bf0f6451f55d733b5597e67b5deab4ad17" dependencies = [ - "android_system_properties", - "arrayvec", - "ash", "bitflags 2.9.1", - "bytemuck", "cfg_aliases", - "core-graphics-types", - "glow", - "glutin_wgl_sys", - "gpu-alloc", - "gpu-descriptor", - "js-sys", - "khronos-egl", - "libc", "libloading", "log", - "metal", "naga", - "ndk-sys 0.5.0+25.2.9519653", - "objc", - "once_cell", - "ordered-float", "parking_lot", - "profiling", + "portable-atomic", "raw-window-handle", "renderdoc-sys", - "rustc-hash 1.1.0", - "smallvec", "thiserror 2.0.12", - "wasm-bindgen", - "web-sys", "wgpu-types", - "windows", ] [[package]] name = "wgpu-types" -version = "24.0.0" +version = "25.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" +checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc" dependencies = [ "bitflags 2.9.1", + "bytemuck", "js-sys", "log", + "thiserror 2.0.12", "web-sys", ] @@ -4030,25 +3834,24 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.58.0" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", + "windows-collections", + "windows-core", + "windows-future", + "windows-link", + "windows-numerics", ] [[package]] -name = "windows-core" -version = "0.58.0" +name = "windows-collections" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-core", ] [[package]] @@ -4057,22 +3860,22 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-implement", + "windows-interface", "windows-link", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "windows-result", + "windows-strings", ] [[package]] -name = "windows-implement" -version = "0.58.0" +name = "windows-future" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ - "proc-macro2", - "quote", - "syn", + "windows-core", + "windows-link", + "windows-threading", ] [[package]] @@ -4086,17 +3889,6 @@ dependencies = [ "syn", ] -[[package]] -name = "windows-interface" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-interface" version = "0.59.1" @@ -4115,12 +3907,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] -name = "windows-result" +name = "windows-numerics" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-targets 0.52.6", + "windows-core", + "windows-link", ] [[package]] @@ -4132,16 +3925,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-strings" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows-strings" version = "0.4.2" @@ -4249,6 +4032,15 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -4543,16 +4335,6 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" -[[package]] -name = "xdg-home" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "xkbcommon-dl" version = "0.4.2" @@ -4604,13 +4386,12 @@ dependencies = [ [[package]] name = "zbus" -version = "4.4.0" +version = "5.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" +checksum = "597f45e98bc7e6f0988276012797855613cd8269e23b5be62cc4e5d28b7e515d" dependencies = [ "async-broadcast", "async-executor", - "async-fs", "async-io", "async-lock", "async-process", @@ -4621,20 +4402,16 @@ dependencies = [ "enumflags2", "event-listener", "futures-core", - "futures-sink", - "futures-util", + "futures-lite", "hex", "nix", "ordered-stream", - "rand", "serde", "serde_repr", - "sha1", - "static_assertions", "tracing", "uds_windows", - "windows-sys 0.52.0", - "xdg-home", + "windows-sys 0.59.0", + "winnow", "zbus_macros", "zbus_names", "zvariant", @@ -4642,9 +4419,9 @@ dependencies = [ [[package]] name = "zbus-lockstep" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d" +checksum = "29e96e38ded30eeab90b6ba88cb888d70aef4e7489b6cd212c5e5b5ec38045b6" dependencies = [ "zbus_xml", "zvariant", @@ -4652,9 +4429,9 @@ dependencies = [ [[package]] name = "zbus-lockstep-macros" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" +checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836" dependencies = [ "proc-macro2", "quote", @@ -4666,35 +4443,38 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "4.4.0" +version = "5.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" +checksum = "e5c8e4e14dcdd9d97a98b189cd1220f30e8394ad271e8c987da84f73693862c2" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "syn", + "zbus_names", + "zvariant", "zvariant_utils", ] [[package]] name = "zbus_names" -version = "3.0.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", + "winnow", "zvariant", ] [[package]] name = "zbus_xml" -version = "4.0.0" +version = "5.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233" +checksum = "589e9a02bfafb9754bb2340a9e3b38f389772684c63d9637e76b1870377bec29" dependencies = [ - "quick-xml 0.30.0", + "quick-xml 0.36.2", "serde", "static_assertions", "zbus_names", @@ -4801,22 +4581,23 @@ dependencies = [ [[package]] name = "zvariant" -version = "4.2.0" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" +checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" dependencies = [ "endi", "enumflags2", "serde", - "static_assertions", + "winnow", "zvariant_derive", + "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "4.2.0" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" +checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -4827,11 +4608,14 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "2.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" dependencies = [ "proc-macro2", "quote", + "serde", + "static_assertions", "syn", + "winnow", ] diff --git a/Cargo.toml b/Cargo.toml index 5409042..2a47beb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,22 +4,22 @@ version = "0.1.0" edition = "2024" [dependencies] -eframe = "0.31.1" -egui = "0.31.1" +eframe = "0.32.0" +egui = { version = "0.32.0", features = ["serde"] } editor = { path = "./editor" } -egui_extras = { version = "0.31.1", features = [ +egui_extras = { version = "0.32.0", features = [ "chrono", "datepicker", "file", "image", ] } -egui_file = "0.22.1" +egui_file = "0.23.0" image = { version = "0.25.6", features = ["jpeg", "png"] } serde = { version = "1.0.219", features = ["derive"] } serde_json = "1.0.140" chrono = { version = "0.4.41", features = ["serde"] } thiserror = "2.0.12" -egui_commonmark = { version = "0.20.0", features = ["embedded_image"] } +egui_commonmark = { version = "0.21.1", features = ["embedded_image"] } walkdir = "2.5.0" uuid = { version = "1.17.0", features = ["v4"] } diff --git a/editor/Cargo.toml b/editor/Cargo.toml index 687d1b1..636badb 100644 --- a/editor/Cargo.toml +++ b/editor/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" description = "a basic text editor widget with line numbers" [dependencies] -egui = "0.31.1" +egui = "0.32.0" serde = "1" [lib] diff --git a/editor/src/lib.rs b/editor/src/lib.rs index b191250..eeeade4 100644 --- a/editor/src/lib.rs +++ b/editor/src/lib.rs @@ -1,7 +1,6 @@ - - -use egui::{text::LayoutJob, Color32}; +use egui::TextBuffer; use egui::widgets::text_edit::TextEditOutput; +use egui::{Color32, text::LayoutJob}; use std::hash::{Hash, Hasher}; @@ -137,9 +136,10 @@ impl CodeEditor { text.lines().count() } as isize; - let max_indent = total.to_string().len().max( - !self.numlines_only_natural as usize * self.numlines_shift.to_string().len(), - ); + let max_indent = total + .to_string() + .len() + .max(!self.numlines_only_natural as usize * self.numlines_shift.to_string().len()); let mut counter = (1..=total) .map(|i| { let num = i + self.numlines_shift; @@ -160,16 +160,12 @@ impl CodeEditor { let width = max_indent as f32 * self.fontsize * 0.5 - * !(total + self.numlines_shift <= 0 && self.numlines_only_natural) as u8 - as f32; + * !(total + self.numlines_shift <= 0 && self.numlines_only_natural) as u8 as f32; - let mut layouter = |ui: &egui::Ui, string: &str, _wrap_width: f32| { + let mut layouter = |ui: &egui::Ui, string: &dyn TextBuffer, _wrap_width: f32| { let layout_job = egui::text::LayoutJob::single_section( - string.to_string(), - egui::TextFormat::simple( - egui::FontId::monospace(self.fontsize), - Color32::WHITE, - ), + string.as_str().to_string(), // Convert TextBuffer to String + egui::TextFormat::simple(egui::FontId::monospace(self.fontsize), Color32::WHITE), ); ui.fonts(|f| f.layout_job(layout_job)) }; @@ -186,11 +182,7 @@ impl CodeEditor { } /// Show Code Editor - pub fn show( - &mut self, - ui: &mut egui::Ui, - text: &mut dyn egui::TextBuffer, - ) -> TextEditOutput { + pub fn show(&mut self, ui: &mut egui::Ui, text: &mut dyn egui::TextBuffer) -> TextEditOutput { let mut text_edit_output: Option = None; let code_editor = |ui: &mut egui::Ui| { ui.horizontal_top(|h| { diff --git a/project/assets/the prophet.png b/project/assets/the prophet.png new file mode 100644 index 0000000000000000000000000000000000000000..f586eff9d2b571c018a060906821dbad89457857 GIT binary patch literal 148129 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�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

`Xa3)%Q`!^5{;9#!UMum>fb_X- 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 Self { + Self { + old_name: name.clone(), + name, + saved: false, + } + } + + pub fn save(&mut self) { + let old_path = Self::path(&self.old_name); + let new_path = Self::path(&self.name); + + // move from src dir to name path + std::fs::rename(&old_path, &new_path).unwrap(); + self.saved = true; + self.old_name = self.name.clone(); + } + + pub fn path(name: &str) -> std::path::PathBuf { + PROJECT_FOLDER.join("assets").join(format!("{name}.png")) + } + + pub fn ui(&mut self, ui: &mut egui::Ui) { + ui.vertical(|ui| { + util::saved_status(ui, self.saved, &self.name, &self.name); + + if ui.input(|i| i.key_pressed(egui::Key::S) && i.modifiers.ctrl) + || ui.button("Save").clicked() + { + self.save(); + } + + ui.separator(); + + ui.horizontal(|ui| { + ui.strong("Filename:"); + if TextEdit::singleline(&mut self.name) + .desired_width(f32::INFINITY) + .frame(false) + .show(ui) + .response + .changed() + { + self.saved = false; + } + }); + + ui.separator(); + + if let Ok(bytes) = std::fs::read(Self::path(&self.name)) { + let image_source = egui::ImageSource::Bytes { + uri: std::borrow::Cow::Owned(self.name.clone()), + bytes: bytes.into(), + }; + ui.add( + egui::Image::new(image_source) + .max_size(vec2(ui.available_width(), f32::INFINITY)), + ); + } + }); + } +} diff --git a/src/editors/content_editor.rs b/src/editors/content_editor.rs new file mode 100644 index 0000000..9d9ffb2 --- /dev/null +++ b/src/editors/content_editor.rs @@ -0,0 +1,306 @@ +use egui::TextEdit; +use egui_commonmark::{CommonMarkCache, CommonMarkViewer}; +use serde::{self, Deserialize, Serialize}; + +use crate::{PROJECT_FOLDER, editors::tags::Tag, util}; + +pub struct MainEditor { + pub content: ContentSection, + pub show_editor: bool, + pub show_preview: bool, + preview_cache: CommonMarkCache, +} + +impl Clone for MainEditor { + fn clone(&self) -> Self { + Self { + content: self.content.clone(), + + show_editor: self.show_editor, + show_preview: self.show_preview, + preview_cache: CommonMarkCache::default(), + } + } +} + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct ContentSection { + #[serde(default)] + pub title: String, + + #[serde(default)] + pub id: String, + + #[serde(default)] + pub description: String, + + #[serde(default)] + pub tags: Vec, + + #[serde(default)] + pub content: String, + + // parent id + #[serde(default)] + pub parent: Option, + + #[serde(skip)] + pub saved: bool, +} + +impl ContentSection { + pub fn new() -> Self { + Self { + title: String::new(), + id: uuid::Uuid::new_v4().to_string(), + description: String::new(), + tags: Vec::new(), + content: String::new(), + parent: None, + saved: false, + } + } + + pub fn save(&mut self) -> Result<(), Box> { + let path = PROJECT_FOLDER + .join("documents") + .join(format!("{}.json", &self.id)); + + let content = serde_json::to_string_pretty(self)?; + std::fs::write(path, content)?; + self.saved = true; + Ok(()) + } + + pub fn load(id: &str) -> Result> { + let path = PROJECT_FOLDER.join("documents").join(format!("{id}.json")); + + let content = std::fs::read_to_string(&path)?; + let mut section: Self = serde_json::from_str(&content)?; + section.saved = true; + section.id = id.to_string(); + Ok(section) + } + + pub fn create_child(&self) -> Self { + let mut child = Self::new(); + child.title = format!("{} (Child)", self.title); + child.parent = Some(self.id.clone()); + child + } +} + +impl MainEditor { + pub fn new() -> Self { + Self { + content: ContentSection::new(), + show_editor: false, // Start with editor hidden + show_preview: true, + preview_cache: CommonMarkCache::default(), + } + } + + pub fn open(content: ContentSection) -> Self { + Self { + content, + show_editor: true, + show_preview: true, + preview_cache: CommonMarkCache::default(), + } + } + + pub fn ui(&mut self, ctx: &egui::Context) { + // Show the editor window if enabled + let mut show = self.show_editor; + if show { + egui::Window::new("Markdown Editor") + .resizable(true) + .default_width(1000.0) + .default_height(800.0) + .open(&mut show) + .show(ctx, |ui| { + ui.vertical(|ui| { + // check for Ctrl+S to save + if ui.input(|i| i.key_pressed(egui::Key::S) && i.modifiers.ctrl) { + if let Err(e) = self.content.save() { + eprintln!("Failed to save: {e}"); + } + } + + // display save state + util::saved_status( + ui, + self.content.saved, + &self.content.id, + &self.content.title, + ); + + // Save/Cancel buttons + ui.horizontal(|ui| { + // save button + if ui.button("Save").clicked() { + if let Err(e) = self.content.save() { + eprintln!("Failed to save: {e}"); + } + } + + // create copy button + if ui.button("Create Copy").clicked() { + let mut copy = self.clone(); + copy.content.id = uuid::Uuid::new_v4().to_string(); + copy.content.title = format!("{} (Copy)", self.content.title); + copy.content.save().unwrap(); + } + + // delete button + if ui.button("Delete").clicked() { + std::fs::remove_file( + PROJECT_FOLDER + .join("documents") + .join(format!("{}.json", self.content.id)), + ) + .unwrap(); + + *self = Self::new(); + } + + // revert changes button + if ui.button("Revert changes").clicked() { + self.content = ContentSection::load(&self.content.id).unwrap(); + } + + // preview toggle + ui.checkbox(&mut self.show_preview, "Preview"); + }); + }); + + ui.separator(); + + // Name and description grid + egui::Grid::new("top_grid") + .striped(true) + .num_columns(2) + .show(ui, |ui| { + ui.strong("Name"); + if ui + .add( + TextEdit::singleline(&mut self.content.title) + .desired_width(f32::INFINITY) + .frame(false), + ) + .changed() + { + self.content.saved = false; + } + ui.end_row(); + + ui.strong("Description"); + if ui + .add( + TextEdit::singleline(&mut self.content.description) + .desired_width(f32::INFINITY) + .frame(false), + ) + .changed() + { + self.content.saved = false; + } + ui.end_row(); + + ui.strong("Tags"); + Tag::selector_ui( + &mut self.content.tags, + ui, + Some(&mut self.content.saved), + ); + ui.end_row(); + }); + + ui.separator(); + + if self.show_preview { + self.preview_ui(ui); + } + + self.editor_ui(ui); + }); + } + + self.show_editor = show; + } + + fn preview_ui(&mut self, ui: &mut egui::Ui) { + // Preview area + egui::SidePanel::right("preview_panel") + .resizable(true) + .default_width(ui.available_width() / 2.0) + .show_inside(ui, |ui| { + // Preview area with centered content and max width + egui::ScrollArea::both() + .auto_shrink([false, false]) + .id_salt("preview_scroll") + .show(ui, |ui| { + let max_width = 600; + let available_width = ui.available_width(); + let content_width = (max_width as f32).min(available_width); + let padding = (available_width - content_width) / 2.0; + + ui.horizontal(|ui| { + ui.add_space(padding); + ui.vertical(|ui| { + ui.set_width(content_width); + ui.add_space(15.0); + + ui.set_min_width(max_width as f32); + + CommonMarkViewer::new() + .default_width(Some(max_width)) + .max_image_width(Some(512)) + .show(ui, &mut self.preview_cache, &self.content.content); + }); + }); + }); + }); + } + + fn editor_ui(&mut self, ui: &mut egui::Ui) { + egui::ScrollArea::both() + .auto_shrink([false, false]) + .id_salt("editor_scroll") + .show(ui, |ui| { + let max_width = 600; + let available_width = ui.available_width(); + let content_width = (max_width as f32).min(available_width); + let padding = (available_width - content_width).max(30.0) / 2.0; + + ui.horizontal(|ui| { + ui.add_space(padding); + ui.vertical(|ui| { + ui.set_width(content_width); + ui.add_space(15.0); + + ui.set_min_width(max_width as f32); + + let text_edit = TextEdit::multiline(&mut self.content.content) + .id_source("MainEditor_editor") + .font(egui::TextStyle::Monospace) + .interactive(true) + .frame(false) + .lock_focus(true) + .hint_text("Type here...") + .desired_width(max_width as f32); + + if ui + .add_sized( + egui::vec2(max_width as f32 - 30.0, ui.available_height()), + text_edit, + ) + .changed() + { + self.content.saved = false; + } + }); + }); + }); + } +} diff --git a/src/editors/mod.rs b/src/editors/mod.rs new file mode 100644 index 0000000..49d0d61 --- /dev/null +++ b/src/editors/mod.rs @@ -0,0 +1,6 @@ +pub mod asset_editor; +pub mod content_editor; +pub mod note_editor; +pub mod object_editor; +pub mod tags; +pub mod template_editor; diff --git a/src/editors/note_editor.rs b/src/editors/note_editor.rs new file mode 100644 index 0000000..7232b68 --- /dev/null +++ b/src/editors/note_editor.rs @@ -0,0 +1,152 @@ +use std::fs; + +use egui::TextEdit; +use serde::{Deserialize, Serialize}; + +use crate::{PROJECT_FOLDER, editors::tags::Tag, util}; + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct Note { + pub name: String, + #[serde(default)] + pub content: String, + #[serde(default)] + pub subject: String, + + #[serde(default)] + pub tags: Vec, + + #[serde(skip)] + pub id: String, + + #[serde(skip)] + pub saved: bool, +} + +impl Default for Note { + fn default() -> Self { + Self { + id: uuid::Uuid::new_v4().to_string(), + name: "New Note".to_string(), + subject: "".to_string(), + content: "".to_string(), + tags: Vec::new(), + saved: false, + } + } +} + +impl Note { + pub fn new() -> Self { + Self { + id: uuid::Uuid::new_v4().to_string(), + name: "New Note".to_string(), + subject: "".to_string(), + content: "".to_string(), + tags: Vec::new(), + saved: false, + } + } + + pub fn save(&mut self) -> std::io::Result<()> { + let id = &self.id; + let path = PROJECT_FOLDER.join("notes").join(format!("{id}.json")); + fs::write(path, serde_json::to_string(&self)?)?; + self.saved = true; + Ok(()) + } + + pub fn load(id: &str) -> std::io::Result { + let path = PROJECT_FOLDER.join("notes").join(format!("{id}.json")); + let content = fs::read_to_string(path)?; + let mut note: Note = serde_json::from_str(&content)?; + note.id = id.to_string(); + note.saved = true; + Ok(note) + } + + pub fn ui(&mut self, ui: &mut egui::Ui) { + if ui.input(|i| i.key_pressed(egui::Key::S) && i.modifiers.ctrl) { + if let Err(e) = self.save() { + eprintln!("Failed to save: {e}"); + } + } + + util::saved_status(ui, self.saved, &self.id, &self.name); + + if ui.button("Save").clicked() { + if let Err(e) = self.save() { + eprintln!("Failed to save: {e}"); + } + } + + let id = ui.make_persistent_id("note_name"); + egui::collapsing_header::CollapsingState::load_with_default_open(ui.ctx(), id, true) + .show_header(ui, |ui| { + ui.strong("Name"); + }) + .body(|ui| { + ui.separator(); + if TextEdit::singleline(&mut self.name) + .desired_width(f32::INFINITY) + .frame(false) + .show(ui) + .response + .changed() + { + self.saved = false; + } + ui.separator(); + }); + + let id = ui.make_persistent_id("note_tags"); + egui::collapsing_header::CollapsingState::load_with_default_open(ui.ctx(), id, true) + .show_header(ui, |ui| { + ui.strong("Tags"); + }) + .body(|ui| { + ui.separator(); + Tag::selector_ui(&mut self.tags, ui, Some(&mut self.saved)); + ui.separator(); + }); + + let id = ui.make_persistent_id("note_subject"); + egui::collapsing_header::CollapsingState::load_with_default_open(ui.ctx(), id, true) + .show_header(ui, |ui| { + ui.strong("Subject"); + }) + .body(|ui| { + ui.separator(); + if TextEdit::singleline(&mut self.subject) + .desired_width(f32::INFINITY) + .frame(false) + .show(ui) + .response + .changed() + { + self.saved = false; + } + ui.separator(); + }); + + let id = ui.make_persistent_id("note_content"); + egui::collapsing_header::CollapsingState::load_with_default_open(ui.ctx(), id, true) + .show_header(ui, |ui| { + ui.strong("Content"); + }) + .body(|ui| { + ui.separator(); + if TextEdit::multiline(&mut self.content) + .desired_width(f32::INFINITY) + .desired_rows(5) + .frame(false) + .show(ui) + .response + .changed() + { + self.saved = false; + } + ui.separator(); + }); + } +} diff --git a/src/editors/object_editor.rs b/src/editors/object_editor.rs new file mode 100644 index 0000000..ef9343c --- /dev/null +++ b/src/editors/object_editor.rs @@ -0,0 +1,364 @@ +use core::f32; +use std::path::Path; + +use chrono::NaiveDate; +use egui::{CollapsingHeader, Response, RichText, Sense, TextEdit, Ui, UiBuilder, vec2}; +use serde::{Deserialize, Serialize}; + +use crate::{ + PROJECT_FOLDER, RightPanelContent, + editors::{ + tags::Tag, + template_editor::{FieldDefinition, FieldType, FieldValue, Template}, + }, + util, +}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct ObjectInstance { + // template info + pub id: String, + pub template_id: String, + + // instance info + pub name: String, + pub fields: std::collections::HashMap, + + #[serde(default)] + pub tags: Vec, + + #[serde(skip)] + pub saved: bool, + + #[serde(skip)] + pub dialog: Option, +} + +impl Clone for ObjectInstance { + fn clone(&self) -> Self { + Self { + id: self.id.clone(), + template_id: self.template_id.clone(), + name: self.name.clone(), + fields: self.fields.clone(), + tags: self.tags.clone(), + saved: self.saved, + dialog: None, + } + } +} + +impl Default for ObjectInstance { + fn default() -> Self { + Self { + id: uuid::Uuid::new_v4().to_string(), + template_id: "new_template_instance".to_string(), + name: "new_object".to_string(), + fields: std::collections::HashMap::new(), + tags: Vec::new(), + saved: false, + dialog: None, + } + } +} + +impl ObjectInstance { + pub fn new(template: &Template) -> Self { + let mut fields = std::collections::HashMap::new(); + + for field in &template.fields { + fields.insert(field.name.clone(), FieldValue::default()); + } + + Self { + id: uuid::Uuid::new_v4().to_string(), + template_id: template.id.clone(), + name: "new_object".to_string(), + fields, + tags: Vec::new(), + saved: false, + dialog: None, + } + } + + pub fn save(&mut self) -> Result<(), Box> { + let path = PROJECT_FOLDER + .join("objects") + .join(format!("{}.json", &self.id)); + + let content = serde_json::to_string_pretty(self)?; + std::fs::write(&path, content)?; + self.saved = true; + Ok(()) + } + + pub fn load(id: &str) -> Result> { + let path = PROJECT_FOLDER.join("objects").join(format!("{id}.json")); + + let content = std::fs::read_to_string(&path)?; + let mut instance: ObjectInstance = serde_json::from_str(&content)?; + instance.saved = true; + Ok(instance) + } + + pub fn ui( + &mut self, + ui: &mut Ui, + template: &Template, + right_panel: &mut Option, + objects: &mut Vec, + ) { + let _ = right_panel; + if ui.input(|i| i.key_pressed(egui::Key::S) && i.modifiers.ctrl) { + if let Err(e) = self.save() { + eprintln!("Failed to save: {e}"); + } + } + + ui.vertical(|ui| { + // Show save status and button + + util::saved_status(ui, self.saved, &self.id, &self.name); + + ui.horizontal(|ui| { + if ui.button("Save").clicked() { + if let Err(e) = self.save() { + eprintln!("Failed to save: {e}"); + } + } + + if ui.button("Create Copy").clicked() { + let mut copy = self.clone(); + copy.id = uuid::Uuid::new_v4().to_string(); + copy.dialog = None; + copy.name = format!("{} (Copy)", self.name); + copy.save().unwrap(); + + *right_panel = Some(RightPanelContent::Object(Box::new(copy))); + } + + if ui.button("Delete").clicked() { + std::fs::remove_file( + PROJECT_FOLDER + .join("objects") + .join(format!("{}.json", self.id)), + ) + .unwrap(); + + *right_panel = Some(RightPanelContent::None); + } + }); + + ui.separator(); + + egui::ScrollArea::vertical().show(ui, |ui| { + // Render each field + + // allow name to be edited + CollapsingHeader::new("Name") + .default_open(true) + .show(ui, |ui| { + ui.separator(); + let _ = TextEdit::singleline(&mut self.name) + .desired_width(f32::INFINITY) + .frame(false) + .show(ui) + .response; + ui.separator(); + }); + + CollapsingHeader::new("Tags") + .default_open(true) + .show(ui, |ui| { + ui.separator(); + Tag::selector_ui(&mut self.tags, ui, Some(&mut self.saved)); + ui.separator(); + }); + + for field_def in &template.fields { + if let Some(field_value) = self.fields.get_mut(&field_def.name) { + let id = ui.make_persistent_id(format!("field_{}", field_def.name)); + egui::collapsing_header::CollapsingState::load_with_default_open( + ui.ctx(), + id, + true, + ) + .show_header(ui, |ui| { + ui.strong(&field_def.name); + }) + .body(|ui| { + if let Some(desc) = &field_def.description { + ui.label(RichText::new(desc).italics().weak()); + } + + ui.separator(); + + Self::render_field( + field_def, + field_value, + ui, + &mut self.saved, + objects, + ); + + ui.separator(); + }); + } + } + }); + }); + } + + fn render_field( + field_def: &FieldDefinition, + field_value: &mut FieldValue, + ui: &mut egui::Ui, + saved: &mut bool, + objects: &mut Vec, + ) { + match field_def.field_type { + FieldType::SingleLine => { + if TextEdit::singleline(&mut field_value.value) + .desired_width(f32::INFINITY) + .frame(false) + .show(ui) + .response + .changed() + { + field_value.modified = true; + *saved = false; + } + } + FieldType::MultiLine => { + if TextEdit::multiline(&mut field_value.value) + .desired_width(f32::INFINITY) + .desired_rows(5) + .frame(false) + .show(ui) + .response + .changed() + { + field_value.modified = true; + *saved = false; + } + } + FieldType::Date => { + let date_str = &field_value.value; + let mut date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d") + .unwrap_or_else(|_| chrono::Local::now().date_naive()); + + let response = ui.add(egui_extras::DatePickerButton::new(&mut date)); + + if response.changed() { + field_value.value = date.format("%Y-%m-%d").to_string(); + field_value.modified = true; + *saved = false; + } + } + FieldType::Number => { + let mut num = field_value.value.parse::().unwrap_or(0.0); + let response = ui.add(egui::DragValue::new(&mut num).speed(0.1)); + + if response.changed() { + field_value.value = num.to_string(); + field_value.modified = true; + *saved = false; + } + } + FieldType::Image => { + ui.scope_builder(UiBuilder::new().sense(Sense::HOVER), |ui| { + let id = ui.make_persistent_id("is_hovered"); + let should_show = field_value.value.is_empty() + || ui.response().hovered() + || ui.memory(|mem| mem.data.get_temp(id).unwrap_or(false)); + + // Simple path input for now + if should_show { + let response = TextEdit::singleline(&mut field_value.value) + .hint_text("Path to image") + .desired_width(f32::INFINITY) + .frame(false) + .show(ui) + .response; + + if response.changed() { + field_value.modified = true; + *saved = false; + } + + ui.memory_mut(|mem| { + *mem.data.get_temp_mut_or_insert_with(id, || true) = response.hovered(); + }); + } + + // If we have a valid path, try to display a preview + if !field_value.value.is_empty() { + if let Ok(bytes) = std::fs::read(&field_value.value) { + let path = PROJECT_FOLDER.join(&field_value.value); + + let image_source = egui::ImageSource::Bytes { + uri: std::borrow::Cow::Owned(path.to_str().unwrap().to_string()), + bytes: bytes.into(), + }; + ui.add( + egui::Image::new(image_source).max_size(vec2(256.0, f32::INFINITY)), + ); + } + } + }); + } + FieldType::Link => ObjectInstance::selector_ui(field_value, objects, ui, saved), + FieldType::Links => { + if ui.text_edit_singleline(&mut field_value.value).changed() { + field_value.modified = true; + *saved = false; + } + } + }; + } + + fn selector_ui( + field_value: &mut FieldValue, + objects: &mut Vec, + ui: &mut egui::Ui, + saved: &mut bool, + ) { + if !field_value.value.is_empty() { + if let Ok(object) = ObjectInstance::load(&field_value.value) { + ui.strong(&object.name); + } + } + + ui.horizontal(|ui| { + let id = ui.make_persistent_id("new_object"); + + let ctx = ui.ctx(); + let mut object_selection: usize = + ctx.memory_mut(|mem| *mem.data.get_temp_mut_or_default::(id)); + + if objects.is_empty() { + ui.label("No objects available"); + } else { + egui::ComboBox::from_id_salt(id) + .selected_text(&objects[object_selection].name) + .show_ui(ui, |ui| { + for (i, obj) in objects.iter().enumerate() { + ui.selectable_value(&mut object_selection, i, &obj.name); + } + }); + } + + if ui.button("Set").clicked() && object_selection < objects.len() { + field_value.value = objects[object_selection].id.clone(); + field_value.modified = true; + *saved = false; + } + + if ui.button("Remove").clicked() { + field_value.value.clear(); + field_value.modified = true; + *saved = false; + } + }); + } +} diff --git a/src/editors/tags.rs b/src/editors/tags.rs new file mode 100644 index 0000000..5606e7a --- /dev/null +++ b/src/editors/tags.rs @@ -0,0 +1,244 @@ +use egui::{Response, RichText, TextEdit, UiBuilder}; +use serde::{Deserialize, Serialize}; + +use crate::{PROJECT_FOLDER, util}; + +#[derive(Serialize, Deserialize)] +pub struct Tag { + pub id: String, + pub name: String, + pub description: String, + pub color: egui::Color32, + + #[serde(skip)] + pub saved: bool, + + #[serde(skip)] + pub error: Option, +} + +impl Default for Tag { + fn default() -> Self { + Self { + id: uuid::Uuid::new_v4().to_string(), + name: String::new(), + description: String::new(), + color: egui::Color32::from_rgb(20, 20, 20), + saved: false, + error: None, + } + } +} + +impl Clone for Tag { + fn clone(&self) -> Self { + Self { + id: self.id.clone(), + name: self.name.clone(), + description: self.description.clone(), + color: self.color, + saved: self.saved, + error: None, + } + } +} + +impl Tag { + pub fn display_ui(&mut self, ui: &mut egui::Ui) -> bool { + let mut remove = false; + + egui::Frame::new() + .shadow(egui::Shadow { + offset: [2, 2], + blur: 16, + spread: 0, + color: egui::Color32::from_black_alpha(180), + }) + .stroke(egui::Stroke::new(2.0, self.color)) + .corner_radius(4.0) + .show(ui, |ui| { + ui.horizontal(|ui| { + if ui.add(egui::Button::new("").frame(false)).clicked() { + remove = true; + } + ui.strong(&self.name); + }); + }); + + remove + } + + pub fn list_ui(&mut self, ui: &mut egui::Ui) -> Response { + ui.add( + egui::Button::new(RichText::new(self.name.clone()).strong()) + .frame(false) + .stroke(egui::Stroke::new(2.0, self.color)) + .corner_radius(4.0), + ) + } + + pub fn ui(&mut self, ui: &mut egui::Ui) { + util::saved_status(ui, self.saved, &self.id, &self.name); + + if let Some(error) = &mut self.error { + error.show(ui); + } + + if ui.input(|i| i.key_pressed(egui::Key::S) && i.modifiers.ctrl) { + if let Err(e) = self.save() { + self.error = Some(util::Error::new(format!("Failed to save tag: {e}"))); + } + } + + egui::Grid::new("tag_grid") + .striped(true) + .num_columns(2) + .show(ui, |ui| { + ui.strong("Name"); + if ui + .add( + TextEdit::singleline(&mut self.name) + .desired_width(f32::INFINITY) + .frame(false), + ) + .changed() + { + self.saved = false; + } + ui.end_row(); + + ui.strong("Description"); + if ui + .add( + TextEdit::singleline(&mut self.description) + .desired_width(f32::INFINITY) + .frame(false), + ) + .changed() + { + self.saved = false; + } + ui.end_row(); + + ui.strong("Color"); + if ui.color_edit_button_srgba(&mut self.color).changed() { + self.saved = false; + } + ui.end_row(); + }); + } + + pub fn selector_ui(tag_ids: &mut Vec, ui: &mut egui::Ui, saved: Option<&mut bool>) { + // remove duplicate tag ids + tag_ids.sort(); + tag_ids.dedup(); + + let mut remove: Vec = Vec::new(); + let mut modified = false; + let id = ui.make_persistent_id("new_tag"); + let available_tags = Self::load_all(); + + ui.horizontal(|ui| { + let ctx = ui.ctx(); + let mut tag_selection: usize = + ctx.memory_mut(|mem| *mem.data.get_temp_mut_or_default::(id)); + + if available_tags.is_empty() { + ui.label("No tags available"); + } else { + egui::ComboBox::from_id_salt(id) + .selected_text(&available_tags[tag_selection].name) + .show_ui(ui, |ui| { + for (i, tag) in available_tags.iter().enumerate() { + if ui + .add( + egui::Button::new(RichText::new(tag.name.clone()).strong()) + .frame(false) + .stroke(egui::Stroke::new(2.0, tag.color)) + .corner_radius(4.0), + ) + .clicked() + { + tag_selection = i; + } + } + }); + } + + if ui.button("Add").clicked() && tag_selection < available_tags.len() { + tag_ids.push(available_tags[tag_selection].id.clone()); + tag_selection = 0; + modified = true; + } + + let ctx = ui.ctx(); + ctx.memory_mut(|mem| { + *mem.data.get_temp_mut_or_default::(id) = tag_selection; + }); + + for (i, tag_id) in tag_ids.iter().enumerate() { + if let Ok(mut tag) = Self::load(tag_id) { + if tag.display_ui(ui) { + remove.push(i) + } + } else { + // if the tag doesn't exist (AKA it's been deleted) + remove.push(i) + } + } + + if !remove.is_empty() { + modified = true; + for i in remove { + tag_ids.remove(i); + } + } + + if let Some(saved) = saved { + if modified { + *saved = false; + } + } + }); + } + + pub fn load(id: &str) -> Result> { + let path = PROJECT_FOLDER.join("tags").join(format!("{id}.json")); + Ok(serde_json::from_str(&std::fs::read_to_string(path)?)?) + } + + pub fn save(&mut self) -> Result<(), Box> { + if self.name.is_empty() { + self.error = Some(util::Error::new("Tag name cannot be empty".to_string())); + return Ok(()); + } + + self.error = None; + + let path = PROJECT_FOLDER + .join("tags") + .join(format!("{}.json", &self.id)); + let content = serde_json::to_string_pretty(self)?; + std::fs::write(path, content)?; + self.saved = true; + Ok(()) + } + + pub fn load_all() -> Vec { + let mut tags = Vec::new(); + + // scan tags folder. load tag json files + let tags_folder = PROJECT_FOLDER.join("tags"); + if tags_folder.exists() { + for entry in std::fs::read_dir(tags_folder).unwrap() { + let path = entry.unwrap().path(); + if path.is_file() && path.extension().unwrap() == "json" { + let tag = + serde_json::from_str(&std::fs::read_to_string(path).unwrap()).unwrap(); + tags.push(tag); + } + } + } + tags + } +} diff --git a/src/template.rs b/src/editors/template_editor.rs similarity index 75% rename from src/template.rs rename to src/editors/template_editor.rs index 6a7861e..eacfc89 100644 --- a/src/template.rs +++ b/src/editors/template_editor.rs @@ -1,9 +1,13 @@ use core::fmt; -use egui::{RichText, ScrollArea}; +use egui::ScrollArea; use serde::{Deserialize, Serialize}; -use crate::{PROJECT_FOLDER, RightPanelContent, error::Error, object::ObjectInstance}; +use crate::{ + PROJECT_FOLDER, RightPanelContent, + editors::object_editor::ObjectInstance, + util::{self, Error}, +}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub enum FieldType { @@ -12,6 +16,28 @@ pub enum FieldType { MultiLine, Date, Number, + Link, + Links, +} + +impl Default for FieldType { + fn default() -> Self { + Self::SingleLine + } +} + +impl FieldType { + fn types() -> Vec { + vec![ + FieldType::Image, + FieldType::SingleLine, + FieldType::MultiLine, + FieldType::Date, + FieldType::Number, + FieldType::Link, + FieldType::Links, + ] + } } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -35,6 +61,18 @@ pub struct Template { #[serde(skip)] pub error: Option, + + #[serde(skip)] + pub new_field_name: String, + + #[serde(skip)] + pub new_field_type: FieldType, + + #[serde(skip)] + pub new_field_required: bool, + + #[serde(skip)] + pub new_field_description: String, } impl fmt::Debug for Template { @@ -45,6 +83,10 @@ impl fmt::Debug for Template { .field("description", &self.description) .field("fields", &self.fields) .field("saved", &self.saved) + .field("new_field_name", &self.new_field_name) + .field("new_field_type", &self.new_field_type) + .field("new_field_required", &self.new_field_required) + .field("new_field_description", &self.new_field_description) .finish() } } @@ -58,6 +100,11 @@ impl Clone for Template { fields: self.fields.clone(), saved: self.saved, error: None, + + new_field_name: "".to_string(), + new_field_type: FieldType::default(), + new_field_required: false, + new_field_description: "".to_string(), } } } @@ -71,6 +118,11 @@ impl Default for Template { fields: Vec::new(), saved: false, error: None, + + new_field_name: "".to_string(), + new_field_type: FieldType::default(), + new_field_required: false, + new_field_description: "".to_string(), } } } @@ -96,15 +148,7 @@ impl Template { Ok(()) } - pub fn ui( - &mut self, - ui: &mut egui::Ui, - new_instance: &mut Option, - new_field_name: &mut String, - new_field_type: &mut FieldType, - new_field_required: &mut bool, - new_field_description: &mut String, - ) { + pub fn ui(&mut self, ui: &mut egui::Ui, new_instance: &mut Option) { if let Some(error) = &mut self.error { error.show(ui); } @@ -117,16 +161,17 @@ impl Template { ScrollArea::vertical().show(ui, |ui| { ui.vertical(|ui| { - ui.group(|ui| { - ui.horizontal(|ui| { - if self.saved { - ui.label(RichText::new("✓ Saved").color(egui::Color32::GREEN)); - } else { - ui.label(RichText::new("* Unsaved").color(egui::Color32::YELLOW)); - } - ui.label(format!("id: {}", self.id)); - }); - }); + // ui.group(|ui| { + // ui.horizontal(|ui| { + // if self.saved { + // ui.label(RichText::new("✓ Saved").color(egui::Color32::GREEN)); + // } else { + // ui.label(RichText::new("* Unsaved").color(egui::Color32::YELLOW)); + // } + // ui.label(format!("id: {}", self.id)); + // }); + // }); + util::saved_status(ui, self.saved, &self.id, &self.name); // Save/Cancel buttons ui.horizontal(|ui| { @@ -161,9 +206,9 @@ impl Template { if ui.button("Use Template").clicked() { if self.saved { - *new_instance = Some(RightPanelContent::Object { - object: Box::new(ObjectInstance::new(self)), - }); + *new_instance = Some(RightPanelContent::Object(Box::new( + ObjectInstance::new(self), + ))); } else { self.error = Some(Error::new( "You must save the template before creating a new instance!" @@ -173,25 +218,12 @@ impl Template { } }); - self.editor_ui( - ui, - new_field_name, - new_field_type, - new_field_required, - new_field_description, - ); + self.editor_ui(ui); }); }); } - pub fn editor_ui( - &mut self, - ui: &mut egui::Ui, - new_field_name: &mut String, - new_field_type: &mut FieldType, - new_field_required: &mut bool, - new_field_description: &mut String, - ) { + pub fn editor_ui(&mut self, ui: &mut egui::Ui) { egui::Grid::new("template_grid") .num_columns(2) .striped(true) @@ -254,7 +286,7 @@ impl Template { if ui.button("❌").clicked() { to_remove = Some(i); } - ui.label(field.name.clone()); + ui.strong(field.name.clone()); }) .body(|ui| { ui.separator(); @@ -272,13 +304,7 @@ impl Template { egui::ComboBox::from_id_salt(format!("field_type_{i}")) .selected_text(format!("{:?}", field.field_type)) .show_ui(ui, |ui| { - for variant in [ - FieldType::SingleLine, - FieldType::MultiLine, - FieldType::Number, - FieldType::Date, - FieldType::Image, - ] { + for variant in FieldType::types() { if ui .selectable_value( &mut field.field_type, @@ -330,22 +356,16 @@ impl Template { .striped(true) .show(ui, |ui| { ui.label("Name:"); - ui.text_edit_singleline(new_field_name); + ui.text_edit_singleline(&mut self.new_field_name); ui.end_row(); ui.label("Type:"); egui::ComboBox::from_id_salt("new_field_type") - .selected_text(format!("{new_field_type:?}")) + .selected_text(format!("{:?}", self.new_field_type)) .show_ui(ui, |ui| { - for variant in [ - FieldType::SingleLine, - FieldType::MultiLine, - FieldType::Number, - FieldType::Date, - FieldType::Image, - ] { + for variant in FieldType::types() { ui.selectable_value( - new_field_type, + &mut self.new_field_type, variant.clone(), format!("{variant:?}"), ); @@ -354,31 +374,31 @@ impl Template { ui.end_row(); ui.label("Required:"); - ui.checkbox(new_field_required, ""); + ui.checkbox(&mut self.new_field_required, ""); ui.end_row(); ui.label("Description:"); - ui.text_edit_singleline(new_field_description); + ui.text_edit_singleline(&mut self.new_field_description); ui.end_row(); - if ui.button("Add Field").clicked() && !new_field_name.is_empty() { + if ui.button("Add Field").clicked() && !self.new_field_name.is_empty() { self.fields.push(FieldDefinition { - name: new_field_name.clone(), - field_type: new_field_type.clone(), - required: *new_field_required, - description: if new_field_description.is_empty() { + name: self.new_field_name.clone(), + field_type: self.new_field_type.clone(), + required: self.new_field_required, + description: if self.new_field_description.is_empty() { None } else { - Some(new_field_description.clone()) + Some(self.new_field_description.clone()) }, }); self.saved = false; // Reset new field form - new_field_name.clear(); - *new_field_required = false; - new_field_description.clear(); + self.new_field_name.clear(); + self.new_field_required = false; + self.new_field_description.clear(); } }); }); diff --git a/src/error.rs b/src/error.rs deleted file mode 100644 index 441e43c..0000000 --- a/src/error.rs +++ /dev/null @@ -1,22 +0,0 @@ -pub struct Error { - message: String, - visible: bool, -} - -impl Error { - pub fn new(message: String) -> Self { - Self { - message, - visible: true, - } - } - - pub fn show(&mut self, ui: &mut egui::Ui) { - egui::Window::new("Error") - .open(&mut self.visible) - .fixed_size([200.0, 100.0]) - .show(ui.ctx(), |ui| { - ui.label(self.message.clone()); - }); - } -} diff --git a/src/explorer.rs b/src/explorer.rs index 316772d..cb2f656 100644 --- a/src/explorer.rs +++ b/src/explorer.rs @@ -1,18 +1,36 @@ -use egui::RichText; - use crate::{ PROJECT_FOLDER, RightPanelContent, - main_editor::MainEditor, - note::Note, - object::ObjectInstance, - template::{FieldType, Template}, + content_editor::MainEditor, + editors::{ + asset_editor::Asset, content_editor::ContentSection, object_editor::ObjectInstance, + tags::Tag, template_editor::Template, + }, + note_editor::Note, }; -pub struct Explorer {} +pub struct Explorer { + templates: Vec