375487c10c
i18n: - src/i18n/de.json + en.json: 200+ keys covering all main panels - src/i18n/index.js: t(key, vars) reads window.DOSSIER_LANG - panel_base.py: injects window.DOSSIER_LANG from dossier_settings.json - EbenenManager, GeschossManager, AusschnitteApp, LayoutsApp: all context menus and main labels use t() DossierSettings panel: - DossierSettingsApp.jsx: language toggle (DE/EN pill) + launcher status - toolbar.py: OPEN_SETTINGS opens new Rhino-hosted satellite window, SAVE_LANG writes lang to dossier_settings.json + reloads all panels File renames (JSX → English): - ZeichnungsebenenApp → DrawingLevelsApp - GeschossManager/Dialog/Settings → Floor* - AusschnitteApp/Settings → Viewports* - EbenenManager/Settings → Layer* - GestaltungApp → StylesApp, OberleisteApp → ToolbarApp - WerkzeugeApp → ToolsApp, DimensionenApp → DimensionsApp - MassstabApp → ScaleApp, KameraApp → CameraApp - MasseSettingsApp → UnitsSettingsApp - ConfirmDeleteEbene → ConfirmDeleteLayer - AusschnittLayerDialog → ViewportLayerDialog Python module renames: - rhinopanel.py → layers_panel.py - oberleiste.py → toolbar.py - gestaltung.py → styles.py - werkzeuge.py → tools.py - dimensionen.py → dimensions.py - startup.py _MODULE_TO_PY updated, all cross-imports fixed
47 lines
1.5 KiB
React
47 lines
1.5 KiB
React
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
// Copyright (C) 2026 Karim Gabriele Varano
|
|
import { useState, useEffect } from 'react'
|
|
import AusschnittLayerDialog from './components/ViewportLayerDialog'
|
|
import { onMessage, notifyReady } from './lib/rhinoBridge'
|
|
|
|
function send(type, payload) {
|
|
if (!window.RHINO_MODE) { console.log('[LayerCombinations] →', type, payload); return }
|
|
document.title = 'RHINOMSG::' + JSON.stringify({ type, payload: payload || {} })
|
|
}
|
|
|
|
export default function LayerCombinationsApp() {
|
|
const [layers, setLayers] = useState([])
|
|
const [presets, setPresets] = useState([])
|
|
|
|
useEffect(() => {
|
|
onMessage('LAYER_COMBINATIONS_STATE', ({ layers: ls, presets: ps }) => {
|
|
if (Array.isArray(ls)) setLayers(ls)
|
|
if (Array.isArray(ps)) setPresets(ps)
|
|
})
|
|
notifyReady()
|
|
}, [])
|
|
|
|
return (
|
|
<div style={{
|
|
position: 'absolute', inset: 0,
|
|
background: 'var(--bg-base)',
|
|
display: 'flex',
|
|
fontFamily: 'var(--font)',
|
|
color: 'var(--text-primary)',
|
|
}}>
|
|
<AusschnittLayerDialog
|
|
embedded
|
|
snapName="Ebenenkombinationen"
|
|
layers={layers}
|
|
presets={presets}
|
|
onClose={() => send('CANCEL')}
|
|
onSave={(draft) => send('APPLY_COMBINATION', {
|
|
layers: draft.map(l => ({ id: l.id, visible: l.visible, locked: l.locked })),
|
|
})}
|
|
onSavePreset={(name, layerStates) => send('SAVE_PRESET', { name, layers: layerStates })}
|
|
onDeletePreset={(name) => send('DELETE_PRESET', { name })}
|
|
/>
|
|
</div>
|
|
)
|
|
}
|