Collection of tools useful for audio production
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

252 lines
12KB

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. # Common/Shared code related to the Settings dialog
  4. # Copyright (C) 2010-2018 Filipe Coelho <falktx@falktx.com>
  5. #
  6. # This program is free software; you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation; either version 2 of the License, or
  9. # any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. #
  16. # For a full copy of the GNU General Public License see the COPYING file
  17. # ------------------------------------------------------------------------------------------------------------
  18. # Imports (Global)
  19. if True:
  20. from PyQt5.QtCore import pyqtSlot, QSettings
  21. from PyQt5.QtWidgets import QDialog, QDialogButtonBox
  22. else:
  23. from PyQt4.QtCore import pyqtSlot, QSettings
  24. from PyQt4.QtGui import QDialog, QDialogButtonBox
  25. # ------------------------------------------------------------------------------------------------------------
  26. # Imports (Custom Stuff)
  27. import ui_settings_app
  28. from shared import *
  29. from patchcanvas_theme import *
  30. # ------------------------------------------------------------------------------------------------------------
  31. # Global variables
  32. # Tab indexes
  33. TAB_INDEX_MAIN = 0
  34. TAB_INDEX_CANVAS = 1
  35. TAB_INDEX_LADISH = 2
  36. TAB_INDEX_NONE = 3
  37. # PatchCanvas defines
  38. CANVAS_ANTIALIASING_SMALL = 1
  39. CANVAS_EYECANDY_SMALL = 1
  40. # LADISH defines
  41. LADISH_CONF_KEY_DAEMON_NOTIFY = "/org/ladish/daemon/notify"
  42. LADISH_CONF_KEY_DAEMON_SHELL = "/org/ladish/daemon/shell"
  43. LADISH_CONF_KEY_DAEMON_TERMINAL = "/org/ladish/daemon/terminal"
  44. LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART = "/org/ladish/daemon/studio_autostart"
  45. LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY = "/org/ladish/daemon/js_save_delay"
  46. # LADISH defaults
  47. LADISH_CONF_KEY_DAEMON_NOTIFY_DEFAULT = True
  48. LADISH_CONF_KEY_DAEMON_SHELL_DEFAULT = "sh"
  49. LADISH_CONF_KEY_DAEMON_TERMINAL_DEFAULT = "xterm"
  50. LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART_DEFAULT = True
  51. LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY_DEFAULT = 0
  52. # Internal defaults
  53. global SETTINGS_DEFAULT_PROJECT_FOLDER
  54. SETTINGS_DEFAULT_PROJECT_FOLDER = HOME
  55. # ------------------------------------------------------------------------------------------------------------
  56. # Change internal defaults
  57. def setDefaultProjectFolder(folder):
  58. global SETTINGS_DEFAULT_PROJECT_FOLDER
  59. SETTINGS_DEFAULT_PROJECT_FOLDER = folder
  60. # ------------------------------------------------------------------------------------------------------------
  61. # Settings Dialog
  62. class SettingsW(QDialog):
  63. def __init__(self, parent, appName, hasOpenGL=False):
  64. QDialog.__init__(self, parent)
  65. self.ui = ui_settings_app.Ui_SettingsW()
  66. self.ui.setupUi(self)
  67. # -------------------------------------------------------------
  68. # Set default settings
  69. self.fRefreshInterval = 120
  70. self.fAutoHideGroups = True
  71. self.fUseSystemTray = True
  72. self.fCloseToTray = False
  73. # -------------------------------------------------------------
  74. # Set app-specific settings
  75. if appName == "catarina":
  76. self.fAutoHideGroups = False
  77. self.ui.lw_page.hideRow(TAB_INDEX_MAIN)
  78. self.ui.lw_page.hideRow(TAB_INDEX_LADISH)
  79. self.ui.lw_page.setCurrentCell(TAB_INDEX_CANVAS, 0)
  80. elif appName == "catia":
  81. self.fUseSystemTray = False
  82. self.ui.group_main_paths.setEnabled(False)
  83. self.ui.group_main_paths.setVisible(False)
  84. self.ui.group_tray.setEnabled(False)
  85. self.ui.group_tray.setVisible(False)
  86. self.ui.lw_page.hideRow(TAB_INDEX_LADISH)
  87. self.ui.lw_page.setCurrentCell(TAB_INDEX_MAIN, 0)
  88. elif appName == "claudia":
  89. self.ui.cb_jack_port_alias.setEnabled(False)
  90. self.ui.cb_jack_port_alias.setVisible(False)
  91. self.ui.label_jack_port_alias.setEnabled(False)
  92. self.ui.label_jack_port_alias.setVisible(False)
  93. self.ui.lw_page.setCurrentCell(TAB_INDEX_MAIN, 0)
  94. else:
  95. self.ui.lw_page.hideRow(TAB_INDEX_MAIN)
  96. self.ui.lw_page.hideRow(TAB_INDEX_CANVAS)
  97. self.ui.lw_page.hideRow(TAB_INDEX_LADISH)
  98. self.ui.stackedWidget.setCurrentIndex(TAB_INDEX_NONE)
  99. return
  100. # -------------------------------------------------------------
  101. # Load settings
  102. self.loadSettings()
  103. # -------------------------------------------------------------
  104. # Set-up GUI
  105. if not hasOpenGL:
  106. self.ui.cb_canvas_use_opengl.setChecked(False)
  107. self.ui.cb_canvas_use_opengl.setEnabled(False)
  108. self.ui.lw_page.item(0, 0).setIcon(getIcon(appName, 48))
  109. self.ui.label_icon_main.setPixmap(getIcon(appName, 48).pixmap(48, 48))
  110. # -------------------------------------------------------------
  111. # Set-up connections
  112. self.accepted.connect(self.slot_saveSettings)
  113. self.ui.buttonBox.button(QDialogButtonBox.Reset).clicked.connect(self.slot_resetSettings)
  114. self.ui.b_main_def_folder_open.clicked.connect(self.slot_getAndSetProjectPath)
  115. def loadSettings(self):
  116. settings = QSettings()
  117. if not self.ui.lw_page.isRowHidden(TAB_INDEX_MAIN):
  118. self.ui.le_main_def_folder.setText(settings.value("Main/DefaultProjectFolder", SETTINGS_DEFAULT_PROJECT_FOLDER, type=str))
  119. self.ui.cb_tray_enable.setChecked(settings.value("Main/UseSystemTray", self.fUseSystemTray, type=bool))
  120. self.ui.cb_tray_close_to.setChecked(settings.value("Main/CloseToTray", self.fCloseToTray, type=bool))
  121. self.ui.sb_gui_refresh.setValue(settings.value("Main/RefreshInterval", self.fRefreshInterval, type=int))
  122. self.ui.cb_jack_port_alias.setCurrentIndex(settings.value("Main/JackPortAlias", 2, type=int))
  123. # ---------------------------------------
  124. if not self.ui.lw_page.isRowHidden(TAB_INDEX_CANVAS):
  125. self.ui.cb_canvas_hide_groups.setChecked(settings.value("Canvas/AutoHideGroups", self.fAutoHideGroups, type=bool))
  126. self.ui.cb_canvas_bezier_lines.setChecked(settings.value("Canvas/UseBezierLines", True, type=bool))
  127. self.ui.cb_canvas_eyecandy.setCheckState(settings.value("Canvas/EyeCandy", CANVAS_EYECANDY_SMALL, type=int))
  128. self.ui.cb_canvas_use_opengl.setChecked(settings.value("Canvas/UseOpenGL", False, type=bool))
  129. self.ui.cb_canvas_render_aa.setCheckState(settings.value("Canvas/Antialiasing", CANVAS_ANTIALIASING_SMALL, type=int))
  130. self.ui.cb_canvas_render_hq_aa.setChecked(settings.value("Canvas/HighQualityAntialiasing", False, type=bool))
  131. themeName = settings.value("Canvas/Theme", getDefaultThemeName(), type=str)
  132. for i in range(Theme.THEME_MAX):
  133. thisThemeName = getThemeName(i)
  134. self.ui.cb_canvas_theme.addItem(thisThemeName)
  135. if thisThemeName == themeName:
  136. self.ui.cb_canvas_theme.setCurrentIndex(i)
  137. # ---------------------------------------
  138. if not self.ui.lw_page.isRowHidden(TAB_INDEX_LADISH):
  139. self.ui.cb_ladish_notify.setChecked(settings.value(LADISH_CONF_KEY_DAEMON_NOTIFY, LADISH_CONF_KEY_DAEMON_NOTIFY_DEFAULT, type=bool))
  140. self.ui.le_ladish_shell.setText(settings.value(LADISH_CONF_KEY_DAEMON_SHELL, LADISH_CONF_KEY_DAEMON_SHELL_DEFAULT, type=str))
  141. self.ui.le_ladish_terminal.setText(settings.value(LADISH_CONF_KEY_DAEMON_TERMINAL, LADISH_CONF_KEY_DAEMON_TERMINAL_DEFAULT, type=str))
  142. self.ui.cb_ladish_studio_autostart.setChecked(settings.value(LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART, LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART_DEFAULT, type=bool))
  143. 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))
  144. @pyqtSlot()
  145. def slot_saveSettings(self):
  146. settings = QSettings()
  147. if not self.ui.lw_page.isRowHidden(TAB_INDEX_MAIN):
  148. settings.setValue("Main/RefreshInterval", self.ui.sb_gui_refresh.value())
  149. if self.ui.group_tray.isEnabled():
  150. settings.setValue("Main/UseSystemTray", self.ui.cb_tray_enable.isChecked())
  151. settings.setValue("Main/CloseToTray", self.ui.cb_tray_close_to.isChecked())
  152. if self.ui.group_main_paths.isEnabled():
  153. settings.setValue("Main/DefaultProjectFolder", self.ui.le_main_def_folder.text())
  154. if self.ui.cb_jack_port_alias.isEnabled():
  155. settings.setValue("Main/JackPortAlias", self.ui.cb_jack_port_alias.currentIndex())
  156. # ---------------------------------------
  157. if not self.ui.lw_page.isRowHidden(TAB_INDEX_CANVAS):
  158. settings.setValue("Canvas/Theme", self.ui.cb_canvas_theme.currentText())
  159. settings.setValue("Canvas/AutoHideGroups", self.ui.cb_canvas_hide_groups.isChecked())
  160. settings.setValue("Canvas/UseBezierLines", self.ui.cb_canvas_bezier_lines.isChecked())
  161. settings.setValue("Canvas/UseOpenGL", self.ui.cb_canvas_use_opengl.isChecked())
  162. settings.setValue("Canvas/HighQualityAntialiasing", self.ui.cb_canvas_render_hq_aa.isChecked())
  163. # 0, 1, 2 match their enum variants
  164. settings.setValue("Canvas/EyeCandy", self.ui.cb_canvas_eyecandy.checkState())
  165. settings.setValue("Canvas/Antialiasing", self.ui.cb_canvas_render_aa.checkState())
  166. # ---------------------------------------
  167. if not self.ui.lw_page.isRowHidden(TAB_INDEX_LADISH):
  168. settings.setValue(LADISH_CONF_KEY_DAEMON_NOTIFY, self.ui.cb_ladish_notify.isChecked())
  169. settings.setValue(LADISH_CONF_KEY_DAEMON_SHELL, self.ui.le_ladish_shell.text())
  170. settings.setValue(LADISH_CONF_KEY_DAEMON_TERMINAL, self.ui.le_ladish_terminal.text())
  171. settings.setValue(LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART, self.ui.cb_ladish_studio_autostart.isChecked())
  172. settings.setValue(LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY, self.ui.sb_ladish_jsdelay.value())
  173. @pyqtSlot()
  174. def slot_resetSettings(self):
  175. if self.ui.lw_page.currentRow() == TAB_INDEX_MAIN:
  176. self.ui.le_main_def_folder.setText(SETTINGS_DEFAULT_PROJECT_FOLDER)
  177. self.ui.cb_tray_enable.setChecked(self.fUseSystemTray)
  178. self.ui.cb_tray_close_to.setChecked(self.fCloseToTray)
  179. self.ui.sb_gui_refresh.setValue(self.fRefreshInterval)
  180. self.ui.cb_jack_port_alias.setCurrentIndex(2)
  181. elif self.ui.lw_page.currentRow() == TAB_INDEX_CANVAS:
  182. self.ui.cb_canvas_theme.setCurrentIndex(0)
  183. self.ui.cb_canvas_hide_groups.setChecked(self.fAutoHideGroups)
  184. self.ui.cb_canvas_bezier_lines.setChecked(True)
  185. self.ui.cb_canvas_eyecandy.setCheckState(Qt.PartiallyChecked)
  186. self.ui.cb_canvas_use_opengl.setChecked(False)
  187. self.ui.cb_canvas_render_aa.setCheckState(Qt.PartiallyChecked)
  188. self.ui.cb_canvas_render_hq_aa.setChecked(False)
  189. elif self.ui.lw_page.currentRow() == TAB_INDEX_LADISH:
  190. self.ui.cb_ladish_notify.setChecked(LADISH_CONF_KEY_DAEMON_NOTIFY_DEFAULT)
  191. self.ui.cb_ladish_studio_autostart.setChecked(LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART_DEFAULT)
  192. self.ui.le_ladish_shell.setText(LADISH_CONF_KEY_DAEMON_SHELL_DEFAULT)
  193. self.ui.le_ladish_terminal.setText(LADISH_CONF_KEY_DAEMON_TERMINAL_DEFAULT)
  194. @pyqtSlot()
  195. def slot_getAndSetProjectPath(self):
  196. getAndSetPath(self, self.ui.le_main_def_folder.text(), self.ui.le_main_def_folder)
  197. def done(self, r):
  198. QDialog.done(self, r)
  199. self.close()