diff --git a/rhino/layer_builder.py b/rhino/layer_builder.py index 0166532..2684966 100644 --- a/rhino/layer_builder.py +++ b/rhino/layer_builder.py @@ -767,10 +767,15 @@ def apply_visibility(doc, zeichnungsebenen, ebenen, active_z_id, active_code, z_ is_active_e = (code == active_code) eye_v = e_eye_vis.get(code, True) eye_l = e_eye_locked.get(code, False) + # 'all_force' ueberschreibt das Eye-Flag (zeigt jede Ebene auch + # wenn die User-Sichtbarkeit aus war). 'all' respektiert das + # Flag (= "Ausgewählte" im UI). if is_active_e: e_vis, e_grey, e_lock = True, False, False elif e_mode == "active": e_vis, e_grey, e_lock = False, False, False + elif e_mode == "all_force": + e_vis, e_grey, e_lock = True, False, False elif not eye_v: e_vis, e_grey, e_lock = False, False, False elif e_mode == "all": diff --git a/src/components/EbenenManager.jsx b/src/components/EbenenManager.jsx index 430167e..37cc0e7 100644 --- a/src/components/EbenenManager.jsx +++ b/src/components/EbenenManager.jsx @@ -5,7 +5,8 @@ import ContextMenu from './ContextMenu' import { setLayerStyle, deleteEbene, moveSelectionToEbene, openEbenenSettings } from '../lib/rhinoBridge' const MODES = [ - { value: 'all', label: 'Alle anzeigen' }, + { value: 'all_force', label: 'Alle anzeigen' }, + { value: 'all', label: 'Ausgewählte' }, { value: 'active', label: 'Nur aktive' }, { value: 'grey', label: 'Andere grau' }, { value: 'grey_locked', label: 'Andere grau & gesperrt' }, @@ -208,11 +209,33 @@ function _allCodes(ebenen) { } function EbeneRow({ e, depth, hasChildren, expanded, onToggleExpand, active, mode, onClick, onContextMenu, onToggleVisible, onToggleLock, onColorChange, onLwChange, onNameChange, onCodeChange, onDelete, autoEditCode, autoEditName, rowRef }) { - // Auge zeigt den Eye-State (User-Intention) — auch fuer die aktive Ebene. - // So sieht man auf einen Blick ob sie "normalerweise" sichtbar waere. - // Aktive Ebene rendert Rhino zwar immer sichtbar, das visible-Flag bleibt - // aber die gespeicherte Intention bis sie wieder de-aktiviert wird. - const eyeShown = mode !== 'active' + // Auge-Logik analog GeschossManager: immer rendern, nur dimmen wenn Mode + // das Eye-Flag ueberschreibt (active / all_force). Klick auf Auge in + // diesen Modi wechselt zu "Ausgewählte" damit die Aktion wirkt. + let eyeIcon, eyeOn, eyeOpacity, eyeTitle + if (active) { + eyeIcon = e.visible !== false ? 'visibility' : 'visibility_off' + eyeOn = true + eyeOpacity = 1 + eyeTitle = e.visible !== false + ? 'Normalerweise sichtbar (aktive Ebene wird trotzdem gezeigt)' + : 'Normalerweise ausgeblendet — wird nur sichtbar weil aktiv' + } else if (mode === 'all_force') { + eyeIcon = 'visibility' + eyeOn = true + eyeOpacity = 0.35 + eyeTitle = 'Im „Alle anzeigen"-Mode immer sichtbar — Klick wechselt in „Ausgewählte"' + } else if (mode === 'active') { + eyeIcon = e.visible !== false ? 'visibility' : 'visibility_off' + eyeOn = false + eyeOpacity = 0.35 + eyeTitle = 'Im „Nur aktive"-Mode ausgeblendet — Klick wechselt in „Ausgewählte"' + } else { + eyeIcon = e.visible !== false ? 'visibility' : 'visibility_off' + eyeOn = e.visible !== false + eyeOpacity = 1 + eyeTitle = e.visible !== false ? 'Ausblenden' : 'Einblenden' + } return (
)} - {eyeShown ? ( - - ) : ( - - )} + { const cur = _findInTree(ebenen, code) if (cur) updateByCode(code, { visible: !(cur.visible !== false) }) + // In "active" / "all_force" greift visible-Flag nicht — wer aufs Auge + // klickt will offensichtlich Sichtbarkeit kontrollieren, also direkt + // in den "Ausgewählte"-Mode wechseln damit die Aktion wirkt. + if (mode === 'active' || mode === 'all_force') onModeChange('all') } const handleToggleLock = (code) => { const cur = _findInTree(ebenen, code) @@ -555,11 +573,13 @@ export default function EbenenManager({ const anyVisible = ebenen.some(e => e.visible !== false) // Wenn irgendeine sichtbar -> alle aus. Wenn keine sichtbar -> alle an. onChange(ebenen.map(e => ({ ...e, visible: !anyVisible }))) + if (mode === 'active' || mode === 'all_force') onModeChange('all') }} title={ebenen.every(e => e.visible !== false) ? 'Alle Ebenen ausblenden' : 'Alle Ebenen einblenden'} - style={{ width: 18, height: 18 }} + style={{ width: 18, height: 18, + opacity: (mode === 'active' || mode === 'all_force') ? 0.5 : 1 }} > e.visible !== false) ? 'visibility' : 'visibility_off'}