/* '(C) Ventis Media, Licensed under the Ventis Limited Reciprocal License - see: license.txt for details' */ "use strict"; requirejs("controls/listview"); requirejs("controls/gridview"); requirejs('controls/popupmenu'); // to show devtools and inspect element in debug mode var optionPanels = { pnl_General: { name: _('General'), subPanels: { pnl_Hotkeys: { name: _('Hotkeys'), order: 20 }, pnl_Confirmations: { name: _('Confirmations'), order: 30 }, pnl_PartyMode: { name: _('Party Mode'), order: 40 }, /* pnl_Network: { name: _('Network'), order: 50 },*/ pnl_Performance: { name: _('Performance'), order: 60 } }, order: 10 }, pnl_Player: { name: _('Player'), subPanels: { pnl_Streaming: { name: _('Streaming'), order: 10 }, pnl_AutoDJ: { name: _('Auto-DJ') + ' / ' + _('Playing list'), order: 20 }, pnl_VolumeLeveling: { name: _('Volume leveling'), order: 30 }, pnl_PlaybackRules: { name: _('Playback rules'), order: 40 }, pnl_InputPlugins: { name: _('Codecs') + ' / ' + _('Input') + ' (' + _('plug-ins') + ')', order: 50 }, pnl_OutputPlugins: { name: _('Audio Output') + ' (' + _('plug-ins') + ')', order: 60 }, pnl_DSPModules: { name: _('Audio DSP') + ' (' + _('plug-ins') + ')', order: 70 } }, order: 20 }, pnl_Layouts: { name: _('Layout'), order: 30, subPanels: { pnl_LayoutPlayer: { name: _('Player'), order: 10 }, pnl_LayoutPreview: { name: _('Preview'), order: 20 }, pnl_LayoutSkin: { name: _('Skin'), order: 30 }, } }, pnl_Library: { name: _('Library'), subPanels: { pnl_MediaTree: { name: _('Collections & Views'), order: 10 }, pnl_Appearance: { name: _('Fields'), order: 20 }, pnl_TagsAndPlaylists: { name: _('Tags & playlists'), order: 30 }, pnl_MetadataLookup: { name: _('Metadata lookup'), order: 40 }, pnl_AutoOrganize: { name: _('Auto-organize'), order: 50 }, pnl_Search: { name: _('Search'), order: 60 }, pnl_MediaServers: { name: _('Media Sharing'), order: 70 }, pnl_Download: { name: _('Downloads') + '/' + _('Podcasts'), order: 80 }, }, order: 40 }, pnl_Addons: { name: _('Addons'), subPanels: {}, order: 999 } }; if (!app.utils.getPortableMode()) optionPanels.pnl_General.subPanels.pnl_OSIntegration = { name: _('OS integration'), order: 10 }; function init(params) { var wnd = this; wnd.title = 'Options'; wnd.resizeable = true; var lvPanelList = qid('lvPanelList'); lvPanelList.controlClass.setContentBox(qid('right-box')); var addPanels = function (panelArray, parentKey, level) { level = level || 0; var panels = getSortedAsArray(panelArray); for (var iPnl = 0; iPnl < panels.length; iPnl++) { var panel = panels[iPnl]; if (parentKey) panel.parent = parentKey; panel.level = level; lvPanelList.controlClass.addPanel(panel); if (panel.subPanels) { addPanels(panel.subPanels, panel.key, level + 1); } } } addPanels(optionPanels); window.localListen(lvPanelList, 'loadpanel', function (e) { loadPanel(e.detail.panelID); }); lvPanelList.focus(); window.localListen(qid('btnOK'), 'click', btnOkClick); window.localListen(qid('btnCancel'), 'click', btnCancelClick, true); this.state = { selectedPanel: getFirstPanelKey() } app.getValue('dlg_options', this.state); var defaultPanel = this.state.selectedPanel; if (params && params.defaultPanel) defaultPanel = params.defaultPanel; selectPanel(defaultPanel); } function getFirstPanelKey() { for (var iPnl in optionPanels) { var panel = optionPanels[iPnl]; return panel.key; } } function getPanelByKey(panelID, panelArray) { panelArray = panelArray || optionPanels; for (var iPnl in panelArray) { var panel = panelArray[iPnl]; if (panel.key == panelID) return panel; if (panel.subPanels) { var retval = getPanelByKey(panelID, panel.subPanels); if (retval) return retval; } } } function selectPanel(panelID) { qid('lvPanelList').controlClass.selectPanel(panelID); if (getPanelByKey(panelID)) loadPanel(panelID); else { ODS(panelID + ' no longer exists!'); loadPanel(getFirstPanelKey()); } }; function loadPanel(panelID) { var panelsLV = qid('lvPanelList').controlClass; var pnl; if (!panelsLV.isPanelLoaded(panelID)) { var sheetsPath = 'file:///dialogs/dlgOptions/'; requirejs(sheetsPath + panelID + '.js'); var tempDiv = document.createElement('div'); tempDiv.innerHTML = window.loadFile(sheetsPath + panelID + '.html', undefined, { required: false }); pnl = tempDiv.firstElementChild; if (!pnl) pnl = tempDiv; pnl.setAttribute('data-id', panelID); qid('right-box').appendChild(pnl); initializeControls(pnl); var sett = window.settings.get(); getPanelByKey(panelID).load(sett, pnl); panelsLV.loadedPanels.push(panelID); } else { pnl = qid(panelID); setVisibility(pnl, true); } window.document.body.setAttribute('data-help', uitools.getHelpContext(pnl)); // set context help from panel window.state.selectedPanel = panelID; app.setValue('dlg_options', window.state); } function btnOkClick() { var sett = window.settings.get(); qid('lvPanelList').controlClass.forAllLoadedPanels(function (key) { getPanelByKey(key).save(sett); }); window.settings.set(sett); app.flushState(); if (window.reloadNeeded) modalResult = 2; else modalResult = 1; } function btnCancelClick() { var sett = window.settings.get(); qid('lvPanelList').controlClass.forAllLoadedPanels(function (key) { if (getPanelByKey(key).cancel) getPanelByKey(key).cancel(sett); }); }