settings.py 6.0 KB

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