// Inhalts-Panel „Werkzeuge" — die vertikale Werkzeug-Palette (ArchiCAD-/ // Vectorworks-Stil): eine Zeile je Zeichenwerkzeug, jeweils Icon + Name, das // aktive Werkzeug hervorgehoben. Darunter — wenn das Wand-Werkzeug aktiv ist — // ein Wandtyp-Auswahlfeld, und ein kompakter Fang-Abschnitt mit Checkboxen. // // Daten/Handler kommen über usePanelHost (kein Prop-Drilling). Die Werkzeug- // Liste und ihre Metadaten stammen aus der Tools-Registry (TOOL_ORDER/getTool). // // Bezeichner englisch, UI-Text/Kommentare deutsch (CONVENTIONS.md). Alle sichtbaren // Texte über t(...). import { t } from "../i18n"; import { usePanelHost } from "./host"; import type { ToolId } from "./host"; import { TOOL_ORDER, getTool } from "../tools/tools"; // ── Icons ────────────────────────────────────────────────────────────────── // Keine echten Asset-Icons vorhanden: schlichte Inline-SVG-Glyphen je Werkzeug // (~16×16, stroke=currentColor, fill=none), damit das Icon die Textfarbe der // Zeile übernimmt. function ToolIcon({ id }: { id: ToolId }) { const common = { width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: 1.4, strokeLinecap: "round" as const, strokeLinejoin: "round" as const, }; switch (id) { case "select": // Pfeil-Cursor. return ( ); case "wall": // Zwei parallele Linien (Wandband). return ( ); case "ceiling": // Deckenplatte: gefülltes Rechteck mit Diagonal-Schraffur (Slab-Symbol). return ( ); case "window": // Fenster: Rahmen-Rechteck mit Mittelsprosse (Verglasung). return ( ); case "door": // Tür: Pfosten + Türblatt mit Schwenkbogen. return ( ); case "stair": // Treppensymbol: gestufte Linie (Tritte) + Lauflinie mit Pfeil. return ( ); case "room": // Raum: umschlossene Fläche (Rechteck) mit Flächen-Marke (kleines Kreuz). return ( ); case "line": // Einzelne Diagonale. return ( ); case "polyline": // Dreisegmentiger Zickzack. return ( ); case "rect": // Rechteck-Umriss. return ( ); default: return null; } } // ── Panel ──────────────────────────────────────────────────────────────────── export function ToolsPanel() { const host = usePanelHost(); const snap = host.snap; return (
{/* Werkzeug-Zeilen: Icon + Name, aktives hervorgehoben. */} {TOOL_ORDER.map((id) => { const tool = getTool(id); const active = host.activeTool === id; const disabled = id !== "select" && !host.toolsEnabled; const title = disabled ? t("tool.floorOnlyDisabled") : t(tool.hintKey(tool.init())); const cls = "tool-row" + (active ? " active" : "") + (disabled ? " disabled" : ""); return ( ); })}
{/* Wandtyp-Auswahl — nur sichtbar, wenn das Wand-Werkzeug aktiv ist. */} {host.activeTool === "wall" && ( )} {host.activeTool === "wall" &&
} {/* Deckentyp-Auswahl — nur sichtbar, wenn das Decken-Werkzeug aktiv ist. Nutzt denselben Aufbau-Typ (WallType) wie die Wand. */} {host.activeTool === "ceiling" && ( )} {host.activeTool === "ceiling" &&
} {/* Fang-Abschnitt. Master-Checkbox steuert die übrigen Fang-Optionen. */}
); }