diff --git a/assets/icons/audit.svg b/assets/icons/audit.svg
new file mode 100644
index 000000000..7e0bcd4ec
--- /dev/null
+++ b/assets/icons/audit.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/icons/cui_export.svg b/assets/icons/cui_export.svg
new file mode 100644
index 000000000..e967690e0
--- /dev/null
+++ b/assets/icons/cui_export.svg
@@ -0,0 +1,9 @@
+
diff --git a/assets/icons/cui_import.svg b/assets/icons/cui_import.svg
new file mode 100644
index 000000000..32aec0259
--- /dev/null
+++ b/assets/icons/cui_import.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/edit_aliases.svg b/assets/icons/edit_aliases.svg
new file mode 100644
index 000000000..f13172e32
--- /dev/null
+++ b/assets/icons/edit_aliases.svg
@@ -0,0 +1,16 @@
+
diff --git a/assets/icons/find_nonpurgeable.svg b/assets/icons/find_nonpurgeable.svg
new file mode 100644
index 000000000..bbb0cb507
--- /dev/null
+++ b/assets/icons/find_nonpurgeable.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/overkill.svg b/assets/icons/overkill.svg
new file mode 100644
index 000000000..9670a2cb1
--- /dev/null
+++ b/assets/icons/overkill.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/purge.svg b/assets/icons/purge.svg
new file mode 100644
index 000000000..cc57f88d0
--- /dev/null
+++ b/assets/icons/purge.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/icons/user_interface.svg b/assets/icons/user_interface.svg
new file mode 100644
index 000000000..87826d6c1
--- /dev/null
+++ b/assets/icons/user_interface.svg
@@ -0,0 +1,12 @@
+
diff --git a/src/modules/manage/audit.rs b/src/modules/manage/audit.rs
new file mode 100644
index 000000000..225c9ab0f
--- /dev/null
+++ b/src/modules/manage/audit.rs
@@ -0,0 +1,5 @@
+use crate::modules::{IconKind, ModuleEvent, ToolDef};
+pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/audit.svg"));
+pub fn tool() -> ToolDef {
+ ToolDef { id: "AUDIT", label: "Audit", icon: ICON, event: ModuleEvent::Command("AUDIT".to_string()) }
+}
diff --git a/src/modules/manage/cui_export.rs b/src/modules/manage/cui_export.rs
new file mode 100644
index 000000000..4bcbded4c
--- /dev/null
+++ b/src/modules/manage/cui_export.rs
@@ -0,0 +1,5 @@
+use crate::modules::{IconKind, ModuleEvent, ToolDef};
+pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/cui_export.svg"));
+pub fn tool() -> ToolDef {
+ ToolDef { id: "CUIEXPORT", label: "Export", icon: ICON, event: ModuleEvent::Command("CUIEXPORT".to_string()) }
+}
diff --git a/src/modules/manage/cui_import.rs b/src/modules/manage/cui_import.rs
new file mode 100644
index 000000000..5b5c6c4df
--- /dev/null
+++ b/src/modules/manage/cui_import.rs
@@ -0,0 +1,5 @@
+use crate::modules::{IconKind, ModuleEvent, ToolDef};
+pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/cui_import.svg"));
+pub fn tool() -> ToolDef {
+ ToolDef { id: "CUIIMPORT", label: "Import", icon: ICON, event: ModuleEvent::Command("CUIIMPORT".to_string()) }
+}
diff --git a/src/modules/manage/edit_aliases.rs b/src/modules/manage/edit_aliases.rs
new file mode 100644
index 000000000..0cf8e79b6
--- /dev/null
+++ b/src/modules/manage/edit_aliases.rs
@@ -0,0 +1,7 @@
+use crate::modules::{IconKind, ModuleEvent, ToolDef};
+#[allow(dead_code)]
+pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/edit_aliases.svg"));
+#[allow(dead_code)]
+pub fn tool() -> ToolDef {
+ ToolDef { id: "ALIASEDIT", label: "Edit Aliases", icon: ICON, event: ModuleEvent::Command("ALIASEDIT".to_string()) }
+}
diff --git a/src/modules/manage/find_nonpurgeable.rs b/src/modules/manage/find_nonpurgeable.rs
new file mode 100644
index 000000000..f14c924ac
--- /dev/null
+++ b/src/modules/manage/find_nonpurgeable.rs
@@ -0,0 +1,5 @@
+use crate::modules::{IconKind, ModuleEvent, ToolDef};
+pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/find_nonpurgeable.svg"));
+pub fn tool() -> ToolDef {
+ ToolDef { id: "FINDNONPURGEABLE", label: "Find Non-\nPurgeable Items", icon: ICON, event: ModuleEvent::Command("FINDNONPURGEABLE".to_string()) }
+}
diff --git a/src/modules/manage/mod.rs b/src/modules/manage/mod.rs
index a6f491cb0..1dc891a43 100644
--- a/src/modules/manage/mod.rs
+++ b/src/modules/manage/mod.rs
@@ -1,8 +1,16 @@
-// Manage module — application settings and customization tools.
+// Manage module — customization and drawing cleanup tools.
+mod audit;
+mod cui_export;
+mod cui_import;
+mod edit_aliases;
+mod find_nonpurgeable;
mod options;
+mod overkill;
+mod purge;
+mod user_interface;
-use crate::modules::{CadModule, RibbonGroup};
+use crate::modules::{CadModule, IconKind, RibbonGroup, RibbonItem};
pub struct ManageModule;
@@ -15,9 +23,41 @@ impl CadModule for ManageModule {
}
fn ribbon_groups(&self) -> Vec {
- vec![RibbonGroup {
- title: "Settings",
- tools: vec![options::tool().into()],
- }]
+ vec![
+ // ── Customization ─────────────────────────────────────────────────
+ RibbonGroup {
+ title: "Customization",
+ tools: vec![
+ RibbonItem::LargeTool(user_interface::tool()),
+ RibbonItem::LargeTool(crate::modules::ToolDef {
+ id: "TOOLPALETTES",
+ label: "Tool\nPalettes",
+ icon: IconKind::Svg(include_bytes!("../../../assets/icons/tool_palettes.svg")),
+ event: crate::modules::ModuleEvent::Command("TOOLPALETTES".to_string()),
+ }),
+ RibbonItem::Tool(cui_import::tool()),
+ RibbonItem::Tool(cui_export::tool()),
+ RibbonItem::Dropdown {
+ id: "ALIASEDIT_DROPDOWN",
+ icon: IconKind::Svg(include_bytes!("../../../assets/icons/edit_aliases.svg")),
+ items: vec![
+ ("ALIASEDIT", "Edit Aliases", IconKind::Svg(include_bytes!("../../../assets/icons/edit_aliases.svg"))),
+ ("CUILOAD", "Load Partial CUI", IconKind::Svg(include_bytes!("../../../assets/icons/cui_import.svg"))),
+ ],
+ default: "ALIASEDIT",
+ },
+ ],
+ },
+ // ── Cleanup ───────────────────────────────────────────────────────
+ RibbonGroup {
+ title: "Cleanup",
+ tools: vec![
+ RibbonItem::LargeTool(find_nonpurgeable::tool()),
+ RibbonItem::Tool(purge::tool()),
+ RibbonItem::Tool(overkill::tool()),
+ RibbonItem::Tool(audit::tool()),
+ ],
+ },
+ ]
}
}
diff --git a/src/modules/manage/options.rs b/src/modules/manage/options.rs
index 4dde0f2db..de3e535ad 100644
--- a/src/modules/manage/options.rs
+++ b/src/modules/manage/options.rs
@@ -1,4 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
+#[allow(dead_code)]
pub fn tool() -> ToolDef {
ToolDef {
id: "OPTIONS",
diff --git a/src/modules/manage/overkill.rs b/src/modules/manage/overkill.rs
new file mode 100644
index 000000000..7875304ac
--- /dev/null
+++ b/src/modules/manage/overkill.rs
@@ -0,0 +1,5 @@
+use crate::modules::{IconKind, ModuleEvent, ToolDef};
+pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/overkill.svg"));
+pub fn tool() -> ToolDef {
+ ToolDef { id: "OVERKILL", label: "Overkill", icon: ICON, event: ModuleEvent::Command("OVERKILL".to_string()) }
+}
diff --git a/src/modules/manage/purge.rs b/src/modules/manage/purge.rs
new file mode 100644
index 000000000..826aa48cf
--- /dev/null
+++ b/src/modules/manage/purge.rs
@@ -0,0 +1,5 @@
+use crate::modules::{IconKind, ModuleEvent, ToolDef};
+pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/purge.svg"));
+pub fn tool() -> ToolDef {
+ ToolDef { id: "PURGE", label: "Purge", icon: ICON, event: ModuleEvent::Command("PURGE".to_string()) }
+}
diff --git a/src/modules/manage/user_interface.rs b/src/modules/manage/user_interface.rs
new file mode 100644
index 000000000..2849ee625
--- /dev/null
+++ b/src/modules/manage/user_interface.rs
@@ -0,0 +1,5 @@
+use crate::modules::{IconKind, ModuleEvent, ToolDef};
+pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/user_interface.svg"));
+pub fn tool() -> ToolDef {
+ ToolDef { id: "CUI", label: "User\nInterface", icon: ICON, event: ModuleEvent::Command("CUI".to_string()) }
+}