@@ -361,6 +361,22 @@ export class DirectorsBoard extends _AppBase {
|
||||
} catch (err) {
|
||||
console.warn('[ScryingPool] Failed to get auto-apply config for context:', err);
|
||||
}
|
||||
|
||||
// Dock layout selector
|
||||
const currentDockLayout = this._adapter.settings?.get?.('dockLayout') ?? 'vertical-sm';
|
||||
const DOCK_LAYOUTS = [
|
||||
{ key: 'vertical-sm', icon: 'fa-grip-vertical', size: 'S', sepAfter: false },
|
||||
{ key: 'vertical-md', icon: 'fa-grip-vertical', size: 'L', sepAfter: true },
|
||||
{ key: 'horizontal-sm', icon: 'fa-grip-horizontal', size: 'S', sepAfter: false },
|
||||
{ key: 'horizontal-md', icon: 'fa-grip-horizontal', size: 'L', sepAfter: true },
|
||||
{ key: 'mosaic-sm', icon: 'fa-border-all', size: 'S', sepAfter: false },
|
||||
{ key: 'mosaic-md', icon: 'fa-border-all', size: 'L', sepAfter: false },
|
||||
];
|
||||
const dockLayouts = DOCK_LAYOUTS.map(l => ({
|
||||
...l,
|
||||
isActive: l.key === currentDockLayout,
|
||||
label: (typeof game !== 'undefined' ? game.i18n?.localize?.(`scrying-pool.directorsBoard.dockLayout.${l.key}`) : null) ?? l.key,
|
||||
}));
|
||||
|
||||
return {
|
||||
...base,
|
||||
@@ -376,6 +392,8 @@ export class DirectorsBoard extends _AppBase {
|
||||
presets: this._scenePresetManager?.list?.() ?? [],
|
||||
// A/V mode — reflects current world AV state (0 = disabled, 3 = audio+video)
|
||||
avModeEnabled: (game.webrtc?.settings?.world?.mode ?? 0) !== 0,
|
||||
// Dock layout selector
|
||||
dockLayouts,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -420,6 +438,7 @@ export class DirectorsBoard extends _AppBase {
|
||||
case 'toggle-preset-panel': this._togglePresetPanel(); break;
|
||||
case 'toggle-av-mode': this._onToggleAVMode(); break;
|
||||
case 'open-av-config': this._onOpenAVConfig(); break;
|
||||
case 'set-dock-layout': this._onSetDockLayout(btn.dataset.layout); break;
|
||||
case 'close': this.close(); break;
|
||||
}
|
||||
};
|
||||
@@ -661,6 +680,21 @@ export class DirectorsBoard extends _AppBase {
|
||||
game.webrtc.config.render({ force: true });
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the selected dock layout and re-renders the board.
|
||||
* The strip re-renders automatically via the setting's onChange callback.
|
||||
* @param {string} layoutKey
|
||||
*/
|
||||
async _onSetDockLayout(layoutKey) {
|
||||
if (!layoutKey) return;
|
||||
try {
|
||||
await this._adapter.settings?.set?.('dockLayout', layoutKey);
|
||||
} catch (err) {
|
||||
console.error('[ScryingPool] Failed to set dockLayout:', err);
|
||||
}
|
||||
if (this.rendered) this.render({ force: true });
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens the PresetSaveDialog for saving the current visibility matrix as a preset.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user