344 lines
18 KiB
Python
344 lines
18 KiB
Python
# -*- 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('')
|