# -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui from colourterm import Highlight, fromUtf8, translate class Ui_SettingsDialog(object): def setupUi(self, settingsDialog): settingsDialog.setObjectName(fromUtf8('SettingsDialog')) settingsDialog.resize(587, 390) self.settingsLayout = QtGui.QVBoxLayout(settingsDialog) self.settingsLayout.setSpacing(8) self.settingsLayout.setMargin(8) self.settingsLayout.setObjectName(fromUtf8('settingsLayout')) self.splitter = QtGui.QSplitter(settingsDialog) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setObjectName(fromUtf8('splitter')) self.sectionListWidget = QtGui.QListWidget(self.splitter) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.sectionListWidget.sizePolicy().hasHeightForWidth()) self.sectionListWidget.setSizePolicy(sizePolicy) self.sectionListWidget.setMinimumSize(QtCore.QSize(100, 0)) self.sectionListWidget.setMaximumSize(QtCore.QSize(200, 16777215)) self.sectionListWidget.setObjectName(fromUtf8('sectionListWidget')) item = QtGui.QListWidgetItem() self.sectionListWidget.addItem(item) item = QtGui.QListWidgetItem() self.sectionListWidget.addItem(item) self.sectionStackedWidget = QtGui.QStackedWidget(self.splitter) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.sectionStackedWidget.sizePolicy().hasHeightForWidth()) self.sectionStackedWidget.setSizePolicy(sizePolicy) self.sectionStackedWidget.setObjectName(fromUtf8('sectionStackedWidget')) self.highlightPage = QtGui.QWidget() self.highlightPage.setObjectName(fromUtf8('highlightPage')) self.verticalLayout = QtGui.QVBoxLayout(self.highlightPage) self.verticalLayout.setObjectName(fromUtf8('verticalLayout')) self.highlightListWidget = QtGui.QListWidget(self.highlightPage) self.highlightListWidget.setObjectName(fromUtf8('highlightListWidget')) self.verticalLayout.addWidget(self.highlightListWidget) self.buttonLayout = QtGui.QHBoxLayout() self.buttonLayout.setSpacing(8) self.buttonLayout.setContentsMargins(0, -1, -1, -1) self.buttonLayout.setObjectName(fromUtf8('buttonLayout')) self.upButton = QtGui.QToolButton(self.highlightPage) self.upButton.setIcon(QtGui.QIcon(':/settings/move-up.png')) self.upButton.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) self.upButton.setFocusPolicy(QtCore.Qt.NoFocus) self.upButton.setObjectName(fromUtf8('upButton')) self.buttonLayout.addWidget(self.upButton) self.downButton = QtGui.QToolButton(self.highlightPage) self.downButton.setIcon(QtGui.QIcon(':/settings/move-down.png')) self.downButton.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) self.downButton.setFocusPolicy(QtCore.Qt.NoFocus) self.downButton.setObjectName(fromUtf8('downButton')) self.buttonLayout.addWidget(self.downButton) self.buttonLayout.addItem(QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)) self.addButton = QtGui.QPushButton(self.highlightPage) self.addButton.setIcon(QtGui.QIcon(':/settings/highlight-add.png')) self.addButton.setObjectName(fromUtf8('addButton')) self.buttonLayout.addWidget(self.addButton) self.editButton = QtGui.QPushButton(self.highlightPage) self.editButton.setIcon(QtGui.QIcon(':/settings/highlight-edit.png')) self.editButton.setObjectName(fromUtf8('editButton')) self.buttonLayout.addWidget(self.editButton) self.deleteButton = QtGui.QPushButton(self.highlightPage) self.deleteButton.setIcon(QtGui.QIcon(':/settings/highlight-remove.png')) self.deleteButton.setObjectName(fromUtf8('deleteButton')) self.buttonLayout.addWidget(self.deleteButton) self.saveButton = QtGui.QPushButton(self.highlightPage) self.saveButton.setIcon(QtGui.QIcon(':/settings/highlight-save.png')) self.saveButton.setObjectName(fromUtf8('saveButton')) self.saveButton.setVisible(False) self.buttonLayout.addWidget(self.saveButton) self.discardButton = QtGui.QPushButton(self.highlightPage) self.discardButton.setIcon(QtGui.QIcon(':/settings/highlight-discard.png')) self.discardButton.setObjectName(fromUtf8('discardButton')) self.discardButton.setVisible(False) self.buttonLayout.addWidget(self.discardButton) self.verticalLayout.addLayout(self.buttonLayout) self.highlightGroupBox = QtGui.QGroupBox(self.highlightPage) self.highlightGroupBox.setObjectName(fromUtf8('highlightGroupBox')) self.highlightLayout = QtGui.QFormLayout(self.highlightGroupBox) self.highlightLayout.setMargin(8) self.highlightLayout.setSpacing(8) self.highlightLayout.setObjectName(fromUtf8('highlightLayout')) self.regexLabel = QtGui.QLabel(self.highlightGroupBox) self.regexLabel.setObjectName(fromUtf8('regexLabel')) self.highlightLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.regexLabel) self.regexEdit = QtGui.QLineEdit(self.highlightGroupBox) self.regexEdit.setObjectName(fromUtf8('regexEdit')) self.highlightLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.regexEdit) self.foregroundLabel = QtGui.QLabel(self.highlightGroupBox) self.foregroundLabel.setObjectName(fromUtf8('foregroundLabel')) self.highlightLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.foregroundLabel) self.fgColourButton = QtGui.QPushButton(self.highlightGroupBox) self.fgColourButton.setText(fromUtf8('')) self.fgColourButton.setObjectName(fromUtf8('fgColourButton')) self.highlightLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.fgColourButton) self.backgroundCheckBox = QtGui.QCheckBox(self.highlightGroupBox) self.backgroundCheckBox.setObjectName(fromUtf8('backgroundCheckBox')) self.highlightLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.backgroundCheckBox) self.bgColourButton = QtGui.QPushButton(self.highlightGroupBox) self.bgColourButton.setText(fromUtf8('')) self.bgColourButton.setObjectName(fromUtf8('bgColourButton')) self.highlightLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.bgColourButton) self.verticalLayout.addWidget(self.highlightGroupBox) self.sectionStackedWidget.addWidget(self.highlightPage) self.fontPage = QtGui.QWidget() self.fontPage.setObjectName(fromUtf8('fontPage')) self.fontLayout = QtGui.QFormLayout(self.fontPage) self.fontLayout.setMargin(8) self.fontLayout.setSpacing(8) self.fontLayout.setObjectName(fromUtf8('fontLayout')) self.fontLabel = QtGui.QLabel(self.fontPage) self.fontLabel.setObjectName(fromUtf8('fontLabel')) self.fontLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.fontLabel) self.fontComboBox = QtGui.QFontComboBox(self.fontPage) self.fontComboBox.setObjectName(fromUtf8('fontComboBox')) self.fontLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.fontComboBox) self.sizeLabel = QtGui.QLabel(self.fontPage) self.sizeLabel.setObjectName(fromUtf8('sizeLabel')) self.fontLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.sizeLabel) self.sizeSpinBox = QtGui.QSpinBox(self.fontPage) self.sizeSpinBox.setReadOnly(True) self.sizeSpinBox.setSpecialValueText(fromUtf8('')) self.sizeSpinBox.setMinimum(6) self.sizeSpinBox.setMaximum(50) self.sizeSpinBox.setProperty('value', 12) self.sizeSpinBox.setObjectName(fromUtf8('sizeSpinBox')) self.fontLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.sizeSpinBox) self.sectionStackedWidget.addWidget(self.fontPage) self.settingsLayout.addWidget(self.splitter) self.buttonBox = QtGui.QDialogButtonBox(settingsDialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) self.buttonBox.setObjectName(fromUtf8('buttonBox')) self.settingsLayout.addWidget(self.buttonBox) self.retranslateUi(settingsDialog) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(fromUtf8('accepted()')), settingsDialog.accept) QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(fromUtf8('rejected()')), settingsDialog.reject) QtCore.QObject.connect(self.sectionListWidget, QtCore.SIGNAL(fromUtf8('currentRowChanged(int)')), self.sectionStackedWidget.setCurrentIndex) QtCore.QMetaObject.connectSlotsByName(settingsDialog) settingsDialog.setTabOrder(self.sectionListWidget, self.highlightListWidget) settingsDialog.setTabOrder(self.highlightListWidget, self.addButton) settingsDialog.setTabOrder(self.addButton, self.editButton) settingsDialog.setTabOrder(self.editButton, self.deleteButton) settingsDialog.setTabOrder(self.deleteButton, self.saveButton) settingsDialog.setTabOrder(self.saveButton, self.discardButton) settingsDialog.setTabOrder(self.discardButton, self.buttonBox) def retranslateUi(self, settingsDialog): settingsDialog.setWindowTitle(translate('SettingsDialog', 'Settings')) __sortingEnabled = self.sectionListWidget.isSortingEnabled() self.sectionListWidget.setSortingEnabled(False) item = self.sectionListWidget.item(0) item.setText(translate('SettingsDialog', 'Highlighting')) item = self.sectionListWidget.item(1) item.setText(translate('SettingsDialog', 'Font')) self.sectionListWidget.setSortingEnabled(__sortingEnabled) self.upButton.setText(translate('SettingsDialog', 'Move Up')) self.downButton.setText(translate('SettingsDialog', 'Move Down')) self.addButton.setText(translate('SettingsDialog', 'Add')) self.editButton.setText(translate('SettingsDialog', 'Edit')) self.deleteButton.setText(translate('SettingsDialog', 'Delete')) self.saveButton.setText(translate('SettingsDialog', 'Save')) self.discardButton.setText(translate('SettingsDialog', 'Discard')) self.highlightGroupBox.setTitle(translate('SettingsDialog', 'Highlight')) self.regexLabel.setText(translate('SettingsDialog', 'Regular Expression:')) self.foregroundLabel.setText(translate('SettingsDialog', 'Foreground:')) self.backgroundCheckBox.setText(translate('SettingsDialog', 'Background:')) self.fontLabel.setText(translate('SettingsDialog', 'Font:')) self.sizeLabel.setText(translate('SettingsDialog', 'Size:')) self.sizeSpinBox.setSuffix(translate('SettingsDialog', 'pt')) class SettingsDialog(QtGui.QDialog, Ui_SettingsDialog): def __init__(self): QtGui.QDialog.__init__(self) self.setupUi(self) self._highlights = {} self._currentHighlight = None self._currentRow = -1 self.highlightListWidget.itemSelectionChanged.connect(self.onHighlightItemSelected) self.regexEdit.textEdited.connect(self.onRegexEditTextEdited) self.fgColourButton.clicked.connect(self.onFgColourButtonClicked) self.backgroundCheckBox.toggled.connect(self.onBackgroundCheckboxToggled) self.bgColourButton.clicked.connect(self.onBgColourButtonClicked) self.upButton.clicked.connect(self.onUpButtonClicked) self.downButton.clicked.connect(self.onDownButtonClicked) self.addButton.clicked.connect(self.onAddButtonClicked) self.editButton.clicked.connect(self.onEditButtonClicked) self.deleteButton.clicked.connect(self.onDeleteButtonClicked) self.saveButton.clicked.connect(self.onSaveButtonClicked) self.discardButton.clicked.connect(self.onDiscardButtonClicked) def _setCurrentHighlight(self): self.regexEdit.setText(self._currentHighlight.pattern) if self._currentHighlight.background: self.backgroundCheckBox.setChecked(True) self.bgColourButton.setEnabled(True) self.bgColourButton.setStyleSheet('background-color: %s' % self._currentHighlight.background) else: self.backgroundCheckBox.setChecked(False) self.bgColourButton.setEnabled(False) self.bgColourButton.setStyleSheet('') self.fgColourButton.setStyleSheet('background-color: %s' % self._currentHighlight.foreground) self.setEditMode(True) def highlights(self): return self._highlights.values() def setHighlights(self, highlights): self._highlights = {} self.highlightListWidget.clear() for index, highlight in enumerate(highlights): self._highlights[index] = highlight item = QtGui.QListWidgetItem() if highlight.background: item.setBackgroundColor(QtGui.QColor(highlight.background)) item.setTextColor(QtGui.QColor(highlight.foreground)) item.setText(highlight.pattern) self.highlightListWidget.addItem(item) def onHighlightItemSelected(self): self._currentRow = self.highlightListWidget.currentRow() if self._currentRow > -1: self._currentHighlight = self._highlights[self._currentRow] def onRegexEditTextEdited(self): self._currentHighlight.setPattern(unicode(self.regexEdit.text())) def onBackgroundCheckboxToggled(self, checked): self.bgColourButton.setEnabled(checked) if not checked: self._currentHighlight.background = None def onFgColourButtonClicked(self): colour = QtGui.QColor(self._currentHighlight.foreground) colour = QtGui.QColorDialog.getColor(colour, self) if colour.isValid(): self.fgColourButton.setStyleSheet('background-color: %s' % colour.name()) self._currentHighlight.foreground = colour.name() def onBgColourButtonClicked(self): if self._currentHighlight.background: colour = QtGui.QColor(self._currentHighlight.background) colour = QtGui.QColorDialog.getColor(colour, self) else: colour = QtGui.QColorDialog.getColor(QtCore.Qt.white, self) if colour.isValid(): self.bgColourButton.setStyleSheet('background-color: %s' % colour.name()) self._currentHighlight.background = colour.name() def onUpButtonClicked(self): if self._currentRow == 0: return row = self._currentRow item = self.highlightListWidget.takeItem(row) self.highlightListWidget.insertItem(row - 1, item) self._highlights[row - 1], self._highlights[row] = \ self._highlights[row], self._highlights[row - 1] self.highlightListWidget.setCurrentRow(row - 1) self.onHighlightItemSelected() def onDownButtonClicked(self): if self._currentRow == len(self._highlights) - 1: return row = self._currentRow item = self.highlightListWidget.takeItem(row) self.highlightListWidget.insertItem(row + 1, item) self._highlights[row + 1], self._highlights[row] = \ self._highlights[row], self._highlights[row + 1] self.highlightListWidget.setCurrentRow(row + 1) self.onHighlightItemSelected() def onAddButtonClicked(self): self._currentRow = -1 self._currentHighlight = Highlight(u'', QtGui.QColor(QtGui.QPalette.WindowText).name()) self._setCurrentHighlight() self.setEditMode(True) def onEditButtonClicked(self): self._setCurrentHighlight() self.setEditMode(True) def onDeleteButtonClicked(self): if QtGui.QMessageBox.question(self, translate('SettingsDialog', 'Confirm Delete'), translate('SettingsDialog', 'Are you sure you want to delete ' 'this highlight?'), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) == QtGui.QMessageBox.Yes: del self._highlights[self._currentRow] self.highlightListWidget.takeItem(self._currentRow) self._currentRow = -1 self._currentHighlight = None def onSaveButtonClicked(self): if self._currentRow < 0: new_index = len(self._highlights) self._highlights[new_index] = self._currentHighlight item = QtGui.QListWidgetItem() if self._currentHighlight.background: item.setBackgroundColor(QtGui.QColor(self._currentHighlight.background)) item.setTextColor(QtGui.QColor(self._currentHighlight.foreground)) item.setText(self._currentHighlight.pattern) self.highlightListWidget.addItem(item) self.highlightListWidget.setCurrentRow(new_index) else: self._highlights[self._currentRow] = self._currentHighlight self.setEditMode(False) def onDiscardButtonClicked(self): self.setEditMode(False) def setEditMode(self, enable): for button in self.buttonBox.buttons(): button.setEnabled(not enable) self.upButton.setVisible(not enable) self.downButton.setVisible(not enable) self.addButton.setVisible(not enable) self.editButton.setVisible(not enable) self.deleteButton.setVisible(not enable) self.saveButton.setVisible(enable) self.discardButton.setVisible(enable) self.highlightListWidget.setEnabled(not enable) self.regexEdit.setEnabled(enable) self.fgColourButton.setEnabled(enable) self.backgroundCheckBox.setEnabled(enable) if enable and self.backgroundCheckBox.isChecked(): self.bgColourButton.setEnabled(True) else: self.bgColourButton.setEnabled(False) if not enable: self.regexEdit.clear() self.fgColourButton.setStyleSheet('') self.bgColourButton.setStyleSheet('')