colourterm/colourterm/settingsdialog.py

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('')