|
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
-
- # Common/Shared code related to the Settings dialog
- # Copyright (C) 2010-2018 Filipe Coelho <falktx@falktx.com>
- #
- # 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
- # 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.
- #
- # For a full copy of the GNU General Public License see the COPYING file
-
- # ------------------------------------------------------------------------------------------------------------
- # Imports (Global)
-
- if True:
- from PyQt5.QtCore import pyqtSlot, QSettings
- from PyQt5.QtWidgets import QDialog, QDialogButtonBox
- else:
- from PyQt4.QtCore import pyqtSlot, QSettings
- from PyQt4.QtGui import QDialog, QDialogButtonBox
-
- # ------------------------------------------------------------------------------------------------------------
- # Imports (Custom Stuff)
-
- import ui_settings_app
- from shared import *
- from patchcanvas_theme import *
-
- # ------------------------------------------------------------------------------------------------------------
- # Global variables
-
- # Tab indexes
- TAB_INDEX_MAIN = 0
- TAB_INDEX_CANVAS = 1
- TAB_INDEX_LADISH = 2
- TAB_INDEX_NONE = 3
-
- # PatchCanvas defines
- CANVAS_ANTIALIASING_SMALL = 1
- CANVAS_EYECANDY_SMALL = 1
-
- # LADISH defines
- LADISH_CONF_KEY_DAEMON_NOTIFY = "/org/ladish/daemon/notify"
- LADISH_CONF_KEY_DAEMON_SHELL = "/org/ladish/daemon/shell"
- LADISH_CONF_KEY_DAEMON_TERMINAL = "/org/ladish/daemon/terminal"
- LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART = "/org/ladish/daemon/studio_autostart"
- LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY = "/org/ladish/daemon/js_save_delay"
-
- # LADISH defaults
- LADISH_CONF_KEY_DAEMON_NOTIFY_DEFAULT = True
- LADISH_CONF_KEY_DAEMON_SHELL_DEFAULT = "sh"
- LADISH_CONF_KEY_DAEMON_TERMINAL_DEFAULT = "xterm"
- LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART_DEFAULT = True
- LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY_DEFAULT = 0
-
- # Internal defaults
- global SETTINGS_DEFAULT_PROJECT_FOLDER
- SETTINGS_DEFAULT_PROJECT_FOLDER = HOME
-
- # ------------------------------------------------------------------------------------------------------------
- # Change internal defaults
-
- def setDefaultProjectFolder(folder):
- global SETTINGS_DEFAULT_PROJECT_FOLDER
- SETTINGS_DEFAULT_PROJECT_FOLDER = folder
-
- # ------------------------------------------------------------------------------------------------------------
- # Settings Dialog
-
- class SettingsW(QDialog):
- def __init__(self, parent, appName, hasOpenGL=False):
- QDialog.__init__(self, parent)
- self.ui = ui_settings_app.Ui_SettingsW()
- self.ui.setupUi(self)
-
- # -------------------------------------------------------------
- # Set default settings
-
- self.fRefreshInterval = 120
- self.fAutoHideGroups = True
- self.fUseSystemTray = True
- self.fCloseToTray = False
-
- # -------------------------------------------------------------
- # Set app-specific settings
-
- if appName == "catarina":
- self.fAutoHideGroups = False
- self.ui.lw_page.hideRow(TAB_INDEX_MAIN)
- self.ui.lw_page.hideRow(TAB_INDEX_LADISH)
- self.ui.lw_page.setCurrentCell(TAB_INDEX_CANVAS, 0)
-
- elif appName == "catia":
- self.fUseSystemTray = False
- self.ui.group_main_paths.setEnabled(False)
- self.ui.group_main_paths.setVisible(False)
- self.ui.group_tray.setEnabled(False)
- self.ui.group_tray.setVisible(False)
- self.ui.lw_page.hideRow(TAB_INDEX_LADISH)
- self.ui.lw_page.setCurrentCell(TAB_INDEX_MAIN, 0)
-
- elif appName == "claudia":
- self.ui.cb_jack_port_alias.setEnabled(False)
- self.ui.cb_jack_port_alias.setVisible(False)
- self.ui.label_jack_port_alias.setEnabled(False)
- self.ui.label_jack_port_alias.setVisible(False)
- self.ui.lw_page.setCurrentCell(TAB_INDEX_MAIN, 0)
-
- else:
- self.ui.lw_page.hideRow(TAB_INDEX_MAIN)
- self.ui.lw_page.hideRow(TAB_INDEX_CANVAS)
- self.ui.lw_page.hideRow(TAB_INDEX_LADISH)
- self.ui.stackedWidget.setCurrentIndex(TAB_INDEX_NONE)
- return
-
- # -------------------------------------------------------------
- # Load settings
-
- self.loadSettings()
-
- # -------------------------------------------------------------
- # Set-up GUI
-
- if not hasOpenGL:
- self.ui.cb_canvas_use_opengl.setChecked(False)
- self.ui.cb_canvas_use_opengl.setEnabled(False)
-
- self.ui.lw_page.item(0, 0).setIcon(getIcon(appName, 48))
- self.ui.label_icon_main.setPixmap(getIcon(appName, 48).pixmap(48, 48))
-
- # -------------------------------------------------------------
- # Set-up connections
-
- self.accepted.connect(self.slot_saveSettings)
- self.ui.buttonBox.button(QDialogButtonBox.Reset).clicked.connect(self.slot_resetSettings)
- self.ui.b_main_def_folder_open.clicked.connect(self.slot_getAndSetProjectPath)
-
- def loadSettings(self):
- settings = QSettings()
-
- if not self.ui.lw_page.isRowHidden(TAB_INDEX_MAIN):
- self.ui.le_main_def_folder.setText(settings.value("Main/DefaultProjectFolder", SETTINGS_DEFAULT_PROJECT_FOLDER, type=str))
- self.ui.cb_tray_enable.setChecked(settings.value("Main/UseSystemTray", self.fUseSystemTray, type=bool))
- self.ui.cb_tray_close_to.setChecked(settings.value("Main/CloseToTray", self.fCloseToTray, type=bool))
- self.ui.sb_gui_refresh.setValue(settings.value("Main/RefreshInterval", self.fRefreshInterval, type=int))
- self.ui.cb_jack_port_alias.setCurrentIndex(settings.value("Main/JackPortAlias", 2, type=int))
-
- # ---------------------------------------
-
- if not self.ui.lw_page.isRowHidden(TAB_INDEX_CANVAS):
- self.ui.cb_canvas_hide_groups.setChecked(settings.value("Canvas/AutoHideGroups", self.fAutoHideGroups, type=bool))
- self.ui.cb_canvas_bezier_lines.setChecked(settings.value("Canvas/UseBezierLines", True, type=bool))
- self.ui.cb_canvas_eyecandy.setCheckState(settings.value("Canvas/EyeCandy", CANVAS_EYECANDY_SMALL, type=int))
- self.ui.cb_canvas_use_opengl.setChecked(settings.value("Canvas/UseOpenGL", False, type=bool))
- self.ui.cb_canvas_render_aa.setCheckState(settings.value("Canvas/Antialiasing", CANVAS_ANTIALIASING_SMALL, type=int))
- self.ui.cb_canvas_render_hq_aa.setChecked(settings.value("Canvas/HighQualityAntialiasing", False, type=bool))
-
- themeName = settings.value("Canvas/Theme", getDefaultThemeName(), type=str)
-
- for i in range(Theme.THEME_MAX):
- thisThemeName = getThemeName(i)
- self.ui.cb_canvas_theme.addItem(thisThemeName)
- if thisThemeName == themeName:
- self.ui.cb_canvas_theme.setCurrentIndex(i)
-
- # ---------------------------------------
-
- if not self.ui.lw_page.isRowHidden(TAB_INDEX_LADISH):
- self.ui.cb_ladish_notify.setChecked(settings.value(LADISH_CONF_KEY_DAEMON_NOTIFY, LADISH_CONF_KEY_DAEMON_NOTIFY_DEFAULT, type=bool))
- self.ui.le_ladish_shell.setText(settings.value(LADISH_CONF_KEY_DAEMON_SHELL, LADISH_CONF_KEY_DAEMON_SHELL_DEFAULT, type=str))
- self.ui.le_ladish_terminal.setText(settings.value(LADISH_CONF_KEY_DAEMON_TERMINAL, LADISH_CONF_KEY_DAEMON_TERMINAL_DEFAULT, type=str))
- self.ui.cb_ladish_studio_autostart.setChecked(settings.value(LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART, LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART_DEFAULT, type=bool))
- self.ui.sb_ladish_jsdelay.setValue(settings.value(LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY, LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY_DEFAULT, type=int))
-
- @pyqtSlot()
- def slot_saveSettings(self):
- settings = QSettings()
-
- if not self.ui.lw_page.isRowHidden(TAB_INDEX_MAIN):
- settings.setValue("Main/RefreshInterval", self.ui.sb_gui_refresh.value())
-
- if self.ui.group_tray.isEnabled():
- settings.setValue("Main/UseSystemTray", self.ui.cb_tray_enable.isChecked())
- settings.setValue("Main/CloseToTray", self.ui.cb_tray_close_to.isChecked())
-
- if self.ui.group_main_paths.isEnabled():
- settings.setValue("Main/DefaultProjectFolder", self.ui.le_main_def_folder.text())
-
- if self.ui.cb_jack_port_alias.isEnabled():
- settings.setValue("Main/JackPortAlias", self.ui.cb_jack_port_alias.currentIndex())
-
- # ---------------------------------------
-
- if not self.ui.lw_page.isRowHidden(TAB_INDEX_CANVAS):
- settings.setValue("Canvas/Theme", self.ui.cb_canvas_theme.currentText())
- settings.setValue("Canvas/AutoHideGroups", self.ui.cb_canvas_hide_groups.isChecked())
- settings.setValue("Canvas/UseBezierLines", self.ui.cb_canvas_bezier_lines.isChecked())
- settings.setValue("Canvas/UseOpenGL", self.ui.cb_canvas_use_opengl.isChecked())
- settings.setValue("Canvas/HighQualityAntialiasing", self.ui.cb_canvas_render_hq_aa.isChecked())
-
- # 0, 1, 2 match their enum variants
- settings.setValue("Canvas/EyeCandy", self.ui.cb_canvas_eyecandy.checkState())
- settings.setValue("Canvas/Antialiasing", self.ui.cb_canvas_render_aa.checkState())
-
- # ---------------------------------------
-
- if not self.ui.lw_page.isRowHidden(TAB_INDEX_LADISH):
- settings.setValue(LADISH_CONF_KEY_DAEMON_NOTIFY, self.ui.cb_ladish_notify.isChecked())
- settings.setValue(LADISH_CONF_KEY_DAEMON_SHELL, self.ui.le_ladish_shell.text())
- settings.setValue(LADISH_CONF_KEY_DAEMON_TERMINAL, self.ui.le_ladish_terminal.text())
- settings.setValue(LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART, self.ui.cb_ladish_studio_autostart.isChecked())
- settings.setValue(LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY, self.ui.sb_ladish_jsdelay.value())
-
- @pyqtSlot()
- def slot_resetSettings(self):
- if self.ui.lw_page.currentRow() == TAB_INDEX_MAIN:
- self.ui.le_main_def_folder.setText(SETTINGS_DEFAULT_PROJECT_FOLDER)
- self.ui.cb_tray_enable.setChecked(self.fUseSystemTray)
- self.ui.cb_tray_close_to.setChecked(self.fCloseToTray)
- self.ui.sb_gui_refresh.setValue(self.fRefreshInterval)
- self.ui.cb_jack_port_alias.setCurrentIndex(2)
-
- elif self.ui.lw_page.currentRow() == TAB_INDEX_CANVAS:
- self.ui.cb_canvas_theme.setCurrentIndex(0)
- self.ui.cb_canvas_hide_groups.setChecked(self.fAutoHideGroups)
- self.ui.cb_canvas_bezier_lines.setChecked(True)
- self.ui.cb_canvas_eyecandy.setCheckState(Qt.PartiallyChecked)
- self.ui.cb_canvas_use_opengl.setChecked(False)
- self.ui.cb_canvas_render_aa.setCheckState(Qt.PartiallyChecked)
- self.ui.cb_canvas_render_hq_aa.setChecked(False)
-
- elif self.ui.lw_page.currentRow() == TAB_INDEX_LADISH:
- self.ui.cb_ladish_notify.setChecked(LADISH_CONF_KEY_DAEMON_NOTIFY_DEFAULT)
- self.ui.cb_ladish_studio_autostart.setChecked(LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART_DEFAULT)
- self.ui.le_ladish_shell.setText(LADISH_CONF_KEY_DAEMON_SHELL_DEFAULT)
- self.ui.le_ladish_terminal.setText(LADISH_CONF_KEY_DAEMON_TERMINAL_DEFAULT)
-
- @pyqtSlot()
- def slot_getAndSetProjectPath(self):
- getAndSetPath(self, self.ui.le_main_def_folder.text(), self.ui.le_main_def_folder)
-
- def done(self, r):
- QDialog.done(self, r)
- self.close()
|