feat: view tab widget toggle commands and unified SVG icon color scheme

Integrate NAVVCUBE, NAVBAR, PROPERTIES, FILETAB, LAYOUTTAB, TOOLPALETTES
and SHEETSET commands to toggle UI widgets at runtime. Add 15 new SVG icons
for view module tools previously using glyph fallbacks. Restyle all SVG
icons to use the established two-color scheme: #e0e0e0 for passive geometry,
#4cc9f0 for active/accent elements.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Hakan Seven 2026-04-24 01:23:06 +03:00
commit 1ec53a4730
81 changed files with 533 additions and 597 deletions

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/hidden.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "HIDDENLINE",
label: "Hidden",
icon: IconKind::Glyph("◫"),
event: ModuleEvent::Command("HIDDENLINE".to_string()),
}
ToolDef { id: "HIDDENLINE", label: "Hidden", icon: ICON, event: ModuleEvent::Command("HIDDENLINE".to_string()) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/orbit.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "3DORBIT",
label: "3D Orbit",
icon: IconKind::Glyph("⟳"),
event: ModuleEvent::Command("3DORBIT".to_string()),
}
ToolDef { id: "3DORBIT", label: "3D Orbit", icon: ICON, event: ModuleEvent::Command("3DORBIT".to_string()) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/ortho.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "ORTHO",
label: "Ortho",
icon: IconKind::Glyph("⊡"),
event: ModuleEvent::Command("ORTHO".into()),
}
ToolDef { id: "ORTHO", label: "Ortho", icon: ICON, event: ModuleEvent::Command("ORTHO".into()) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/pan.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "PAN",
label: "Pan",
icon: IconKind::Glyph("✥"),
event: ModuleEvent::Command("PAN".to_string()),
}
ToolDef { id: "PAN", label: "Pan", icon: ICON, event: ModuleEvent::Command("PAN".to_string()) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/persp.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "PERSP",
label: "Persp",
icon: IconKind::Glyph("⟁"),
event: ModuleEvent::Command("PERSP".into()),
}
ToolDef { id: "PERSP", label: "Persp", icon: ICON, event: ModuleEvent::Command("PERSP".into()) }
}

View file

@ -2,11 +2,7 @@
// id "SOLID" is special-cased in ribbon.rs for active-state highlighting.
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/solid.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "SOLID",
label: "Solid",
icon: IconKind::Glyph("■"),
event: ModuleEvent::SetWireframe(false),
}
ToolDef { id: "SOLID", label: "Solid", icon: ICON, event: ModuleEvent::SetWireframe(false) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/view_front.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "VIEW_FRONT",
label: "Front",
icon: IconKind::Glyph("⊥"),
event: ModuleEvent::Command("VIEW FRONT".to_string()),
}
ToolDef { id: "VIEW_FRONT", label: "Front", icon: ICON, event: ModuleEvent::Command("VIEW FRONT".to_string()) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/view_iso.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "VIEW_ISO",
label: "Iso",
icon: IconKind::Glyph("◈"),
event: ModuleEvent::Command("VIEW ISO".to_string()),
}
ToolDef { id: "VIEW_ISO", label: "Iso", icon: ICON, event: ModuleEvent::Command("VIEW ISO".to_string()) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/view_right.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "VIEW_RIGHT",
label: "Right",
icon: IconKind::Glyph("⊣"),
event: ModuleEvent::Command("VIEW RIGHT".to_string()),
}
ToolDef { id: "VIEW_RIGHT", label: "Right", icon: ICON, event: ModuleEvent::Command("VIEW RIGHT".to_string()) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/view_top.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "VIEW_TOP",
label: "Top",
icon: IconKind::Glyph("⊤"),
event: ModuleEvent::Command("VIEW TOP".to_string()),
}
ToolDef { id: "VIEW_TOP", label: "Top", icon: ICON, event: ModuleEvent::Command("VIEW TOP".to_string()) }
}

View file

@ -2,11 +2,7 @@
// id "WIREFRAME" is special-cased in ribbon.rs for active-state highlighting.
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/wireframe.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "WIREFRAME",
label: "Wireframe",
icon: IconKind::Glyph("□"),
event: ModuleEvent::SetWireframe(true),
}
ToolDef { id: "WIREFRAME", label: "Wireframe", icon: ICON, event: ModuleEvent::SetWireframe(true) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/xray.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "XRAY",
label: "X-Ray",
icon: IconKind::Glyph("◈"),
event: ModuleEvent::Command("XRAY".to_string()),
}
ToolDef { id: "XRAY", label: "X-Ray", icon: ICON, event: ModuleEvent::Command("XRAY".to_string()) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/zoom_ext.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "ZOOM_EXT",
label: "Zoom Ext",
icon: IconKind::Glyph("⊡"),
event: ModuleEvent::Command("ZOOM EXTENTS".to_string()),
}
ToolDef { id: "ZOOM_EXT", label: "Zoom\nExtents", icon: ICON, event: ModuleEvent::Command("ZOOM EXTENTS".to_string()) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/zoom_in.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "ZOOM_IN",
label: "Zoom In",
icon: IconKind::Glyph("🔍"),
event: ModuleEvent::Command("ZOOM IN".to_string()),
}
ToolDef { id: "ZOOM_IN", label: "Zoom In", icon: ICON, event: ModuleEvent::Command("ZOOM IN".to_string()) }
}

View file

@ -1,9 +1,5 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/zoom_out.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "ZOOM_OUT",
label: "Zoom Out",
icon: IconKind::Glyph("🔎"),
event: ModuleEvent::Command("ZOOM OUT".to_string()),
}
ToolDef { id: "ZOOM_OUT", label: "Zoom Out", icon: ICON, event: ModuleEvent::Command("ZOOM OUT".to_string()) }
}