settings.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. from PyQt4 import QtGui, QtCore
  2. import kcgwidget as kcgw
  3. from .. import config
  4. tr = kcgw.tr
  5. class Settings(kcgw.KCGWidgets):
  6. """
  7. Settings Window
  8. """
  9. changed = QtCore.pyqtSignal(list)
  10. def __init__(self, storage_handler):
  11. """
  12. Initialise the Settings Window
  13. :param storage_handler: the container class used to store settings
  14. :return: -
  15. """
  16. super(Settings, self).__init__()
  17. self.storage_handler = storage_handler
  18. self.local_storage = []
  19. self.langlist = ["de_DE", "en_GB"]
  20. # --------[ Instance Objects ]-----------
  21. self.layout = QtGui.QVBoxLayout()
  22. self.grid = QtGui.QGridLayout()
  23. self.headerTick = self.build_new_setting(QtGui.QCheckBox(tr("Button", "Header")), 'header')
  24. self.subDirName = self.build_new_setting(self.createInput(self.storage_handler.subdirname, width=320), 'subdirname')
  25. self.dirName = self.build_new_setting(self.createInput(self.storage_handler.save_location, width=320), 'save_location')
  26. self.timescan_offset_correction = self.build_new_setting(self.createInput(self.storage_handler.offset_correction, width=320), 'offset_correction')
  27. self.language = self.build_new_setting(QtGui.QComboBox(), 'language')
  28. self.advanced_control = self.build_new_setting(self.createCheckbox(tr("Label", "Enable Advanced Table View")), 'advanced_control')
  29. for lang in self.langlist:
  30. self.language.addItem(lang)
  31. self.local_storage.append(self.headerTick)
  32. self.applyButton = self.createButton(tr("Button", "Apply"), connect=self._apply)
  33. self.okButton = self.createButton(tr("Button", "OK"), connect=self._ok)
  34. self.cancelButton = self.createButton(tr("Button", "Cancel"), connect=self._cancel)
  35. # ------[ End Instance Objects ]--------
  36. # ------[ Apply Layout and read Settings ] ---------
  37. self.initUI()
  38. self._setSettings()
  39. # ------[ End Apply... ]----------------------------
  40. self.show()
  41. def initUI(self):
  42. """
  43. Initialise the UI
  44. """
  45. self.setLayout(self.layout)
  46. self.layout.addLayout(self.grid)
  47. self.headerTick.setToolTip(tr("Tooltip", "Save header in output file")) # TODO: better tooltip
  48. self.applyButton.setToolTip(tr("Tooltip", "Save settings"))
  49. self.okButton.setToolTip(tr("Tooltip", "Save settings and close settings-window"))
  50. self.cancelButton.setToolTip(tr("Tooltip", "Discard changes and close settings-window"))
  51. # self.grid.addWidget(self.createLabel("Settings"), 0, 0)
  52. self.grid.addWidget(self.headerTick, 0, 0)
  53. self.grid.addWidget(self.createLabel(tr("Label", "Subdirectory Name:")), 1, 0)
  54. self.grid.addWidget(self.subDirName, 1, 1)
  55. self.grid.addWidget(self.createLabel(tr("Label", "Save location:")), 2, 0)
  56. self.grid.addWidget(self.dirName, 2, 1)
  57. self.grid.addWidget(self.createLabel(tr("Label", "Timescan Offset Correction:")), 3, 0)
  58. self.grid.addWidget(self.timescan_offset_correction, 3, 1)
  59. self.grid.addWidget(self.createLabel(tr("Label", "Language")), 4, 0)
  60. self.grid.addWidget(self.language, 4, 1)
  61. self.grid.addWidget(self.advanced_control, 5, 0)
  62. self.hbox = QtGui.QHBoxLayout()
  63. self.layout.addLayout(self.hbox)
  64. self.hbox.addStretch(1)
  65. self.hbox.addWidget(self.okButton)
  66. self.hbox.addWidget(self.applyButton)
  67. self.hbox.addWidget(self.cancelButton)
  68. self.setWindowTitle(tr("Heading", "KCG - Settings"))
  69. self.setWindowIcon(QtGui.QIcon(config.install_path + config.guiIcon))
  70. def build_new_setting(self, handle, value):
  71. """
  72. Build a new setting.
  73. This will add the setting to the local_storage.
  74. :param handle: the handle of the new setting (input field, checkbox etc)
  75. :param value: (str) key for this setting
  76. :return: the handle :)
  77. """
  78. self.local_storage.append(handle)
  79. self.local_storage[-1].setting_name = value
  80. return handle
  81. def _read_setting_from_object(self, object):
  82. """
  83. Get the value from a settings object
  84. :param object: the object to read the value from
  85. :return:
  86. """
  87. if type(object).__name__ == 'QCheckBox':
  88. return object.isChecked()
  89. if isinstance(object, QtGui.QLineEdit):
  90. return str(object.text())
  91. if isinstance(object, QtGui.QComboBox):
  92. return object.currentText()
  93. def _setSettings(self):
  94. """
  95. Set the values in the settings window to the current values
  96. :return:
  97. """
  98. self.headerTick.setChecked(self.storage_handler.header)
  99. self.subDirName.setText(self.storage_handler.subdirname)
  100. self.dirName.setText(self.storage_handler.save_location)
  101. self.language.setCurrentIndex(self.langlist.index(self.storage_handler.language))
  102. self.advanced_control.setChecked(self.storage_handler.advanced_control)
  103. def _apply(self):
  104. """
  105. Called when the apply button is pressed. It emits the changed signal if anything was changed
  106. """
  107. hasChanged = False
  108. changedSettings = []
  109. for object in self.local_storage:
  110. if self.storage_handler.__getattr__(object.setting_name) != self._read_setting_from_object(object):
  111. hasChanged = True
  112. self.storage_handler.__setattr__(object.setting_name, self._read_setting_from_object(object))
  113. changedSettings.append(object.setting_name)
  114. if hasChanged:
  115. self.changed.emit(changedSettings)
  116. def _ok(self):
  117. """
  118. Handler for the ok button. It calls _apply and close
  119. :return:
  120. """
  121. self._apply()
  122. self.close()
  123. def _cancel(self):
  124. """
  125. Handler for the cancel button. It calls close() and discards changed values
  126. :return:
  127. """
  128. self.close()
  129. def show(self):
  130. """
  131. Shows the window and sets the current values (calls _setSettings)
  132. :return:
  133. """
  134. self._setSettings()
  135. super(Settings, self).show()
  136. def keyPressEvent(self, QKeyEvent):
  137. """
  138. Reimplementation of the keyPressEvent of QWidget to close the window on ESC press.
  139. """
  140. if QKeyEvent.key() == QtCore.Qt.Key_Escape:
  141. self.close()