From e29f5a2a7c39828c1115c8e55eb61cc7e8ec9940 Mon Sep 17 00:00:00 2001 From: Karim Date: Fri, 3 Jul 2026 23:52:26 +0200 Subject: [PATCH] TopBar/Footer: Referenzlinien in die Statusleiste, Ansichten bleiben sichtbar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Referenzlinien-Schalter wandert aus der TopBar in die Statusleiste (neben Fang) — dort passt er besser zu den übrigen Anzeige-/Fang-Kontrollen. Die doppelt gezeigten Werte Massstab und Zoom fallen aus der Statusleiste weg; sie stehen weiterhin im TopBar-Cluster. Die Ansichts-Icons blenden sich auf Nicht-Geschoss-Ebenen (Schnitt/Ansicht/2D) nicht mehr komplett aus, sondern bleiben sichtbar und werden nur deaktiviert. --- src/App.tsx | 8 +-- src/i18n/de.ts | 4 ++ src/i18n/en.ts | 4 ++ src/styles.css | 31 ++++++++++ src/ui/StatusBar.tsx | 44 ++++++++------ src/ui/TopBar.tsx | 135 +++++++++++++++++++------------------------ 6 files changed, 126 insertions(+), 100 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index c2e5a90..5a693e3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2747,9 +2747,6 @@ export default function App() { renderModeEnabled={viewType === "perspektive"} planColorMode={planColorMode} onPlanColorMode={setPlanColorMode} - referenceLines={referenceLines} - onReferenceLines={setReferenceLines} - referenceLinesEnabled={planActive} combos={{ // Ebenen-Kombinationen: Speichern = Snapshot des Layer-Baums → // localStorage; Laden = Map lesen → Sichtbarkeits-Flags anwenden. @@ -2985,8 +2982,9 @@ export default function App() { hint={toolHint} cursor={planActive ? cursor : null} unit="m" - scaleDenominator={planActive ? liveScale : null} - zoomPercent={planActive ? zoomPercent : null} + referenceLines={referenceLines} + onReferenceLines={setReferenceLines} + referenceLinesEnabled={planActive} activeFloor={activeLevel.name} activeLayer={activeLayerName} rendererMode={rendererMode} diff --git a/src/i18n/de.ts b/src/i18n/de.ts index 8fcfc51..2ac1f9f 100644 --- a/src/i18n/de.ts +++ b/src/i18n/de.ts @@ -10,6 +10,7 @@ export const de = { "brand.tag": "Dokumentmodell", "topbar.viewGroup": "Ansicht", + "topbar.viewGroup.disabled": "Ansichten nur für Geschosse", "topbar.grundriss": "Grundriss", "topbar.perspektive": "Perspektive", @@ -183,6 +184,9 @@ export const de = { "status.unit": "Einheit", "status.scale": "Massstab", "status.zoom": "Zoom", + "status.referenceLines": "Achsen", + "status.referenceLines.hint": "Referenzlinien (Wandachsen) ein-/ausblenden", + "status.referenceLines.hintDisabled": "Referenzlinien wirken im Grundriss", "status.floor": "Geschoss", "status.layer": "Ebene", "status.none": "—", diff --git a/src/i18n/en.ts b/src/i18n/en.ts index fa3f277..3560e7e 100644 --- a/src/i18n/en.ts +++ b/src/i18n/en.ts @@ -9,6 +9,7 @@ export const en: Record = { "brand.tag": "Document model", "topbar.viewGroup": "View", + "topbar.viewGroup.disabled": "Views available for floors only", "topbar.grundriss": "Plan", "topbar.perspektive": "Perspective", @@ -182,6 +183,9 @@ export const en: Record = { "status.unit": "Unit", "status.scale": "Scale", "status.zoom": "Zoom", + "status.referenceLines": "Axes", + "status.referenceLines.hint": "Show/hide reference lines (wall axes)", + "status.referenceLines.hintDisabled": "Reference lines apply in the plan", "status.floor": "Floor", "status.layer": "Layer", "status.none": "—", diff --git a/src/styles.css b/src/styles.css index 0cf84b8..400e16c 100644 --- a/src/styles.css +++ b/src/styles.css @@ -803,6 +803,37 @@ body { cursor: default; } +/* Einzelner Umschalt-Button in der Statusleiste (z. B. Referenzlinien). */ +.sb-toggle { + display: inline-flex; + align-items: center; + border: 1px solid var(--border); + border-radius: 5px; + background: transparent; + color: var(--muted); + font-family: inherit; + font-size: 10px; + font-weight: 600; + letter-spacing: 0.02em; + padding: 2px 8px; + cursor: pointer; + transition: background 0.14s, color 0.14s, border-color 0.14s; +} +.sb-toggle:hover:not(:disabled) { + background: var(--accent-dim); + color: var(--accent); + border-color: var(--accent); +} +.sb-toggle.active { + background: var(--accent); + border-color: var(--accent); + color: #fff; +} +.sb-toggle:disabled { + opacity: 0.4; + cursor: default; +} + /* Generische Segment-Pille für die Statusleiste (Linien-Darstellung, Fang) — gleiche Masse/Optik wie .sb-renderer-toggle, aber nicht renderer-spezifisch. */ .sb-seg { diff --git a/src/ui/StatusBar.tsx b/src/ui/StatusBar.tsx index 8f418d9..0cbd137 100644 --- a/src/ui/StatusBar.tsx +++ b/src/ui/StatusBar.tsx @@ -23,13 +23,12 @@ export interface StatusBarProps { cursor: Vec2 | null; /** Einheit aus dem Projekt (vorerst fix „m"). */ unit: string; - /** - * LIVE Papier-Massstab-Nenner (1:N) aus der View-Transform oder `null` - * (keine Plan-Ansicht aktiv → „—"). - */ - scaleDenominator: number | null; - /** Live-Zoom in Prozent oder `null` (keine zoombare Ansicht aktiv). */ - zoomPercent: number | null; + /** Referenzlinien (Wandachsen) an/aus — sitzt jetzt in der Statusleiste. */ + referenceLines: boolean; + /** Referenzlinien umschalten. */ + onReferenceLines: (on: boolean) => void; + /** Nur im Grundriss sinnvoll — deaktiviert den Schalter wenn `false`. */ + referenceLinesEnabled: boolean; /** Name des aktiven Geschosses / der aktiven Zeichnungsebene. */ activeFloor: string; /** Name der aktiven Ebene (Kategorie) oder „—". */ @@ -260,8 +259,9 @@ export function StatusBar({ hint, cursor, unit, - scaleDenominator, - zoomPercent, + referenceLines, + onReferenceLines, + referenceLinesEnabled, activeFloor, activeLayer, rendererMode, @@ -293,6 +293,22 @@ export function StatusBar({ + {/* Referenzlinien-Schalter (aus der TopBar hierher gewandert). */} + + {t("status.renderer")} @@ -321,16 +337,6 @@ export function StatusBar({ - - - - diff --git a/src/ui/TopBar.tsx b/src/ui/TopBar.tsx index 9535316..5eef6d4 100644 --- a/src/ui/TopBar.tsx +++ b/src/ui/TopBar.tsx @@ -135,12 +135,6 @@ export interface TopBarProps { planColorMode: PlanColorMode; onPlanColorMode: (m: PlanColorMode) => void; - // Referenzlinien (Wandachsen). - referenceLines: boolean; - onReferenceLines: (on: boolean) => void; - /** Referenzlinien nur im Grundriss sinnvoll (sonst deaktiviert). */ - referenceLinesEnabled: boolean; - // Sichtbarkeits-Kombinationen (Ebenen-/Zeichnungskombinationen). /** Handler-Satz für die beiden Kombinations-Dropdowns. */ combos: ComboMenuHandlers; @@ -846,9 +840,6 @@ export function TopBar({ renderModeEnabled, planColorMode, onPlanColorMode, - referenceLines, - onReferenceLines, - referenceLinesEnabled, combos, resourcesOpen, onToggleResources, @@ -921,52 +912,65 @@ export function TopBar({ „Grundriss" schaltet auf den 2D-Plan, die übrigen auf die jeweilige 3D-Ansicht (Perspektive wird dabei automatisch aktiviert). 4 oben / 3 unten. Tooltip nennt jede Ansicht im Klartext. */} - {viewToggleEnabled && ( - <> -
-
- - {( - [ - ["top", t("view3d.top")], - ["iso", t("view3d.iso")], - ["perspective", t("view3d.perspective")], - ["front", t("view3d.front")], - ["side", t("view3d.side")], - ] as [View3d, string][] - ).map(([key, label]) => ( - - ))} - -
-
- - - )} + {/* Ansichts-Icons bleiben immer sichtbar; auf Nicht-Geschoss-Ebenen + (Schnitt/Ansicht/2D-Zeichnung) sind sie deaktiviert, weil dort keine + 2D/3D-Umschaltung greift — die Serie verschwindet nicht mehr ganz. */} +
+
+ + {( + [ + ["top", t("view3d.top")], + ["iso", t("view3d.iso")], + ["perspective", t("view3d.perspective")], + ["front", t("view3d.front")], + ["side", t("view3d.side")], + ] as [View3d, string][] + ).map(([key, label]) => ( + + ))} + +
+
+ {/* Sichtbarkeits-Kombinationen (Vectorworks: Ebenen-/Zeichnungs- kombinationen). Sitzt direkt nach dem Ansichts-Umschalter, weil beides @@ -1172,27 +1176,6 @@ export function TopBar({ - {/* Referenzlinien (Wandachsen) — zeigt/versteckt die gestrichelten - Achslinien im Grundriss. Nur im Grundriss sinnvoll → sonst deaktiviert. */} -
- -
- - - {/* Rechte Gruppe: Layout-Menü · Ressourcen · Projektname. */}
{layoutMenu}