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:
+3
-5
@@ -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}
|
||||
|
||||
@@ -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": "—",
|
||||
|
||||
@@ -9,6 +9,7 @@ export const en: Record<TranslationKey, string> = {
|
||||
"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<TranslationKey, string> = {
|
||||
"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": "—",
|
||||
|
||||
@@ -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 {
|
||||
|
||||
+25
-19
@@ -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} />
|
||||
|
||||
+22
-39
@@ -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,14 +912,22 @@ 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 && (
|
||||
<>
|
||||
{/* 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${viewType === "grundriss" ? " active" : ""}`}
|
||||
className={`view-icon${
|
||||
viewToggleEnabled && viewType === "grundriss" ? " active" : ""
|
||||
}`}
|
||||
onClick={() => onViewType("grundriss")}
|
||||
title={t("topbar.grundriss")}
|
||||
disabled={!viewToggleEnabled}
|
||||
title={
|
||||
viewToggleEnabled
|
||||
? t("topbar.grundriss")
|
||||
: t("topbar.viewGroup.disabled")
|
||||
}
|
||||
aria-label={t("topbar.grundriss")}
|
||||
>
|
||||
<ViewIcon name="grundriss" />
|
||||
@@ -945,13 +944,20 @@ export function TopBar({
|
||||
<button
|
||||
key={key}
|
||||
className={`view-icon${
|
||||
viewType === "perspektive" && view3d === key ? " active" : ""
|
||||
viewToggleEnabled && viewType === "perspektive" && view3d === key
|
||||
? " active"
|
||||
: ""
|
||||
}`}
|
||||
onClick={() => {
|
||||
onView3d(key);
|
||||
if (viewType !== "perspektive") onViewType("perspektive");
|
||||
}}
|
||||
title={`${label} — ${t(`view3d.${key}.hint`)}`}
|
||||
disabled={!viewToggleEnabled}
|
||||
title={
|
||||
viewToggleEnabled
|
||||
? `${label} — ${t(`view3d.${key}.hint`)}`
|
||||
: t("topbar.viewGroup.disabled")
|
||||
}
|
||||
aria-label={label}
|
||||
>
|
||||
<ViewIcon name={key} />
|
||||
@@ -960,13 +966,11 @@ export function TopBar({
|
||||
<CameraMenu
|
||||
fov={fov}
|
||||
onFov={onFov}
|
||||
disabled={viewType !== "perspektive"}
|
||||
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}
|
||||
|
||||
Reference in New Issue
Block a user