/* * This file is part of the Dash-To-Panel extension for Gnome 3 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ import * as Pos from './panelPositions.js' /** Return object representing a settings value that is stored as JSON. */ export function getSettingsJson(settings, setting) { try { return JSON.parse(settings.get_string(setting)) } catch (e) { log('Error parsing positions: ' + e.message) } } /** Write value object as JSON to setting in settings. */ export function setSettingsJson(settings, setting, value) { try { const json = JSON.stringify(value) settings.set_string(setting, json) } catch (e) { log('Error serializing setting: ' + e.message) } } /** Returns size of panel on a specific monitor, in pixels. */ export function getPanelSize(settings, monitorIndex) { const sizes = getSettingsJson(settings, 'panel-sizes') // Pull in deprecated setting if panel-sizes does not have setting for monitor. const fallbackSize = settings.get_int('panel-size') const theDefault = 48 return sizes[monitorIndex] || fallbackSize || theDefault } export function setPanelSize(settings, monitorIndex, value) { if (!(Number.isInteger(value) && value <= 128 && value >= 16)) { log('Not setting invalid panel size: ' + value) return } let sizes = getSettingsJson(settings, 'panel-sizes') sizes[monitorIndex] = value setSettingsJson(settings, 'panel-sizes', sizes) } /** * Returns length of panel on a specific monitor, as a whole number percent, * from settings. e.g. 100 */ export function getPanelLength(settings, monitorIndex) { const lengths = getSettingsJson(settings, 'panel-lengths') const theDefault = 100 return lengths[monitorIndex] || theDefault } export function setPanelLength(settings, monitorIndex, value) { if (!(Number.isInteger(value) && value <= 100 && value >= 0)) { log('Not setting invalid panel length: ' + value) return } let lengths = getSettingsJson(settings, 'panel-lengths') lengths[monitorIndex] = value setSettingsJson(settings, 'panel-lengths', lengths) } /** Returns position of panel on a specific monitor. */ export function getPanelPosition(settings, monitorIndex) { const positions = getSettingsJson(settings, 'panel-positions') const fallbackPosition = settings.get_string('panel-position') const theDefault = Pos.BOTTOM return positions[monitorIndex] || fallbackPosition || theDefault } export function setPanelPosition(settings, monitorIndex, value) { if ( !( value === Pos.TOP || value === Pos.BOTTOM || value === Pos.LEFT || value === Pos.RIGHT ) ) { log('Not setting invalid panel position: ' + value) return } const positions = getSettingsJson(settings, 'panel-positions') positions[monitorIndex] = value setSettingsJson(settings, 'panel-positions', positions) } /** Returns anchor location of panel on a specific monitor. */ export function getPanelAnchor(settings, monitorIndex) { const anchors = getSettingsJson(settings, 'panel-anchors') const theDefault = Pos.MIDDLE return anchors[monitorIndex] || theDefault } export function setPanelAnchor(settings, monitorIndex, value) { if (!(value === Pos.START || value === Pos.MIDDLE || value === Pos.END)) { log('Not setting invalid panel anchor: ' + value) return } const anchors = getSettingsJson(settings, 'panel-anchors') anchors[monitorIndex] = value setSettingsJson(settings, 'panel-anchors', anchors) }