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.

248 lines
12KB

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