TopBar/Footer: Referenzlinien in die Statusleiste, Ansichten bleiben sichtbar

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.
This commit is contained in:
2026-07-03 23:52:26 +02:00
parent b03614c35b
commit e29f5a2a7c
6 changed files with 126 additions and 100 deletions
+25 -19
View File
@@ -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({
<Sep />
<SnapControl snap={snap} onSnapChange={onSnapChange} />
<Sep />
{/* Referenzlinien-Schalter (aus der TopBar hierher gewandert). */}
<button
type="button"
className={`sb-toggle${referenceLines ? " active" : ""}`}
aria-pressed={referenceLines}
disabled={!referenceLinesEnabled}
onClick={() => onReferenceLines(!referenceLines)}
title={
referenceLinesEnabled
? t("status.referenceLines.hint")
: t("status.referenceLines.hintDisabled")
}
>
{t("status.referenceLines")}
</button>
<Sep />
<span className="sb-field">
<span className="sb-key">{t("status.renderer")}</span>
<span className="sb-renderer-toggle" role="group" aria-label={t("status.renderer")}>
@@ -321,16 +337,6 @@ export function StatusBar({
<Sep />
<Field label={t("status.unit")} value={unit} />
<Sep />
<Field
label={t("status.scale")}
value={scaleDenominator == null ? "—" : `1:${Math.round(scaleDenominator)}`}
/>
<Sep />
<Field
label={t("status.zoom")}
value={zoomPercent == null ? "—" : `${Math.round(zoomPercent)}%`}
/>
<Sep />
<Field label={t("status.floor")} value={activeFloor} />
<Sep />
<Field label={t("status.layer")} value={activeLayer} />
+59 -76
View File
@@ -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 && (
<>
<div className="tb-group" role="group" aria-label={t("topbar.viewGroup")}>
<div className="view-grid view-grid-4">
<button
className={`view-icon${viewType === "grundriss" ? " active" : ""}`}
onClick={() => onViewType("grundriss")}
title={t("topbar.grundriss")}
aria-label={t("topbar.grundriss")}
>
<ViewIcon name="grundriss" />
</button>
{(
[
["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]) => (
<button
key={key}
className={`view-icon${
viewType === "perspektive" && view3d === key ? " active" : ""
}`}
onClick={() => {
onView3d(key);
if (viewType !== "perspektive") onViewType("perspektive");
}}
title={`${label}${t(`view3d.${key}.hint`)}`}
aria-label={label}
>
<ViewIcon name={key} />
</button>
))}
<CameraMenu
fov={fov}
onFov={onFov}
disabled={viewType !== "perspektive"}
/>
</div>
</div>
<Sep />
</>
)}
{/* 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. */}
<div className="tb-group" role="group" aria-label={t("topbar.viewGroup")}>
<div className="view-grid view-grid-4">
<button
className={`view-icon${
viewToggleEnabled && viewType === "grundriss" ? " active" : ""
}`}
onClick={() => onViewType("grundriss")}
disabled={!viewToggleEnabled}
title={
viewToggleEnabled
? t("topbar.grundriss")
: t("topbar.viewGroup.disabled")
}
aria-label={t("topbar.grundriss")}
>
<ViewIcon name="grundriss" />
</button>
{(
[
["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]) => (
<button
key={key}
className={`view-icon${
viewToggleEnabled && viewType === "perspektive" && view3d === key
? " active"
: ""
}`}
onClick={() => {
onView3d(key);
if (viewType !== "perspektive") onViewType("perspektive");
}}
disabled={!viewToggleEnabled}
title={
viewToggleEnabled
? `${label}${t(`view3d.${key}.hint`)}`
: t("topbar.viewGroup.disabled")
}
aria-label={label}
>
<ViewIcon name={key} />
</button>
))}
<CameraMenu
fov={fov}
onFov={onFov}
disabled={!viewToggleEnabled || viewType !== "perspektive"}
/>
</div>
</div>
<Sep />
{/* Sichtbarkeits-Kombinationen (Vectorworks: Ebenen-/Zeichnungs-
kombinationen). Sitzt direkt nach dem Ansichts-Umschalter, weil beides
@@ -1172,27 +1176,6 @@ export function TopBar({
<Sep />
{/* Referenzlinien (Wandachsen) — zeigt/versteckt die gestrichelten
Achslinien im Grundriss. Nur im Grundriss sinnvoll → sonst deaktiviert. */}
<div className="tb-group" role="group" aria-label={t("topbar.referenceLinesGroup")}>
<button
className={`view-icon${referenceLines ? " active" : ""}`}
onClick={() => onReferenceLines(!referenceLines)}
disabled={!referenceLinesEnabled}
aria-pressed={referenceLines}
aria-label={t("topbar.referenceLines")}
title={
referenceLinesEnabled
? `${t("topbar.referenceLines")}${t("topbar.referenceLines.hint")}`
: t("topbar.referenceLines.hintDisabled")
}
>
<TbIcon name="straighten" />
</button>
</div>
<Sep />
{/* Rechte Gruppe: Layout-Menü · Ressourcen · Projektname. */}
<div className="topbar-right">
{layoutMenu}