[needs-docs] Move Python Console settings for font colors and family

to new "Code Editor" tab in options dialog

These settings apply to more than just the Python console editors -
rather they apply to all code editors across QGIS (including expression
editors)
This commit is contained in:
Nyall Dawson 2020-10-04 11:59:45 +10:00
parent e2ff63da48
commit 47236421af
10 changed files with 907 additions and 697 deletions

View File

@ -19,14 +19,13 @@ email : lrssvtml (at) gmail (dot) com
Some portions of code were taken from https://code.google.com/p/pydee/
"""
from qgis.PyQt.QtCore import QCoreApplication, QSize, QUrl, QObject, Qt, pyqtSignal
from qgis.PyQt.QtCore import QCoreApplication, QUrl, QObject, pyqtSignal
from qgis.PyQt.QtWidgets import QDialog, QFileDialog, QMessageBox, QTableWidgetItem, QHBoxLayout
from qgis.PyQt.QtGui import QIcon, QFont, QColor, QFontDatabase, QDesktopServices
from qgis.PyQt.QtGui import QIcon, QDesktopServices
from qgis.core import QgsSettings, QgsApplication
from qgis.gui import QgsOptionsPageWidget, QgsOptionsWidgetFactory, QgsCodeEditor
from qgis.gui import QgsOptionsPageWidget, QgsOptionsWidgetFactory
from .console_base import QgsPythonConsoleBase
from .console_compile_apis import PrepareAPIDialog
from .ui_console_settings import Ui_SettingsDialogPythonConsole
@ -94,10 +93,6 @@ class optionsDialog(QDialog, Ui_SettingsDialogPythonConsole):
self.removeAPIpath.clicked.connect(self.removeAPI)
self.compileAPIs.clicked.connect(self._prepareAPI)
self.resetFontColor.setIcon(QIcon(":/images/themes/default/mActionUndo.svg"))
self.resetFontColor.setIconSize(QSize(18, 18))
self.resetFontColor.clicked.connect(self._resetFontColor)
self.generateToken.clicked.connect(self.generateGHToken)
def generateGHToken(self):
@ -194,15 +189,9 @@ class optionsDialog(QDialog, Ui_SettingsDialogPythonConsole):
settings.setValue("pythonConsole/accessTokenGithub", self.tokenGhLineEdit.text())
fontFamilyText = self.fontComboBox.currentText()
settings.setValue("pythonConsole/fontfamilytext", fontFamilyText)
fontSize = self.spinBox.value()
for i in range(0, self.tableWidget.rowCount()):
text = self.tableWidget.item(i, 1).text()
self.listPath.append(text)
settings.setValue("pythonConsole/fontsize", fontSize)
settings.setValue("pythonConsole/userAPI", self.listPath)
settings.setValue("pythonConsole/autoCompThreshold", self.autoCompThreshold.value())
@ -222,38 +211,8 @@ class optionsDialog(QDialog, Ui_SettingsDialogPythonConsole):
settings.setValue("pythonConsole/autoCloseBracket", self.autoCloseBracket.isChecked())
settings.setValue("pythonConsole/autoInsertionImport", self.autoInsertionImport.isChecked())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Default, self.defaultFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Class, self.classFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Keyword, self.keywordFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Decoration, self.decorFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Number, self.numberFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Method, self.methodFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Comment, self.commentFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.CommentBlock, self.commentBlockFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Background, self.paperBackgroundColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Cursor, self.cursorColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.CaretLine, self.caretLineColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Error, self.stderrFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.SingleQuote, self.singleQuoteFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.DoubleQuote, self.doubleQuoteFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.TripleSingleQuote, self.tripleSingleQuoteFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.TripleDoubleQuote, self.tripleDoubleQuoteFontColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Edge, self.edgeColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.MarginBackground, self.marginBackgroundColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.MarginForeground, self.marginForegroundColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.Fold, self.foldColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.SelectionBackground, self.selectionBackgroundColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.SelectionForeground, self.selectionForegroundColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.MatchedBraceBackground, self.matchedBraceBackgroundColor.color())
QgsCodeEditor.setColor(QgsCodeEditor.ColorRole.MatchedBraceForeground, self.matchedBraceForegroundColor.color())
def restoreSettings(self):
settings = QgsSettings()
font = QFontDatabase.systemFont(QFontDatabase.FixedFont)
self.spinBox.setValue(settings.value("pythonConsole/fontsize", font.pointSize(), type=int))
self.fontComboBox.setCurrentFont(QFont(settings.value("pythonConsole/fontfamilytext",
font.family())))
self.preloadAPI.setChecked(settings.value("pythonConsole/preloadAPI", True, type=bool))
self.lineEdit.setText(settings.value("pythonConsole/preparedAPIFile", "", type=str))
self.tokenGhLineEdit.setText(settings.value("pythonConsole/accessTokenGithub", "", type=str))
@ -283,58 +242,6 @@ class optionsDialog(QDialog, Ui_SettingsDialogPythonConsole):
elif settings.value("pythonConsole/autoCompleteSource") == 'fromDocAPI':
self.autoCompFromDocAPI.setChecked(True)
# Setting font lexer color
self.defaultFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Default))
self.keywordFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Keyword))
self.classFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Class))
self.methodFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Method))
self.decorFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Decoration))
self.numberFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Number))
self.commentFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Comment))
self.commentBlockFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.CommentBlock))
self.paperBackgroundColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Background))
self.cursorColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Cursor))
self.caretLineColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.CaretLine))
self.singleQuoteFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.SingleQuote))
self.doubleQuoteFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.DoubleQuote))
self.tripleSingleQuoteFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.TripleSingleQuote))
self.tripleDoubleQuoteFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.TripleDoubleQuote))
self.marginBackgroundColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.MarginBackground))
self.marginForegroundColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.MarginForeground))
self.selectionBackgroundColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.SelectionBackground))
self.selectionForegroundColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.SelectionForeground))
self.matchedBraceBackgroundColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.MatchedBraceBackground))
self.matchedBraceForegroundColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.MatchedBraceForeground))
self.stderrFontColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Error))
self.edgeColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Edge))
self.foldColor.setColor(QgsCodeEditor.color(QgsCodeEditor.ColorRole.Fold))
def _resetFontColor(self):
self.defaultFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Default))
self.keywordFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Keyword))
self.classFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Class))
self.methodFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Method))
self.decorFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Decoration))
self.numberFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Number))
self.commentFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Comment))
self.commentBlockFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.CommentBlock))
self.paperBackgroundColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Background))
self.cursorColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Cursor))
self.caretLineColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.CaretLine))
self.singleQuoteFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.SingleQuote))
self.doubleQuoteFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.DoubleQuote))
self.tripleSingleQuoteFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.TripleSingleQuote))
self.tripleDoubleQuoteFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.TripleDoubleQuote))
self.marginBackgroundColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.MarginBackground))
self.marginForegroundColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.MarginForeground))
self.selectionBackgroundColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.SelectionBackground))
self.selectionForegroundColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.SelectionForeground))
self.matchedBraceBackgroundColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.MatchedBraceBackground))
self.matchedBraceForegroundColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.MatchedBraceForeground))
self.stderrFontColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Error))
self.edgeColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Edge))
self.foldColor.setColor(QgsCodeEditor.defaultColor(QgsCodeEditor.ColorRole.Fold))
def reject(self):
self.restoreSettings()
QDialog.reject(self)

View File

@ -60,12 +60,35 @@
<rect>
<x>0</x>
<y>0</y>
<width>1055</width>
<height>1029</height>
<width>1041</width>
<height>736</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
<item row="5" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>GitHub Access Token</string>
</property>
<layout class="QGridLayout" name="gridLayout_6">
<item row="0" column="0">
<widget class="QLineEdit" name="tokenGhLineEdit">
<property name="placeholderText">
<string>&lt;PERSONAL_ACCESS_TOKEN&gt;</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="generateToken">
<property name="text">
<string>Generate</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QgsCollapsibleGroupBox" name="groupBox_4">
<property name="title">
<string>Typing</string>
@ -98,7 +121,130 @@
</layout>
</widget>
</item>
<item row="5" column="0">
<item row="0" column="0">
<widget class="QgsCollapsibleGroupBox" name="groupBoxAutoCompletion">
<property name="title">
<string>Autocompletion</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="collapsed" stdset="0">
<bool>false</bool>
</property>
<property name="saveCheckedState" stdset="0">
<bool>true</bool>
</property>
<property name="saveCollapsedState" stdset="0">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="2">
<widget class="QLabel" name="label_36">
<property name="text">
<string>characters</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="autoCompThreshold">
<property name="maximum">
<number>10</number>
</property>
<property name="value">
<number>2</number>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Autocompletion threshold</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<layout class="QGridLayout" name="layoutRadioButton">
<item row="0" column="2">
<widget class="QRadioButton" name="autoCompFromDocAPI">
<property name="toolTip">
<string>Get autocompletion from current document and installed APIs</string>
</property>
<property name="text">
<string>From doc and APIs</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="autoCompFromAPI">
<property name="toolTip">
<string>Get autocompletion from installed APIs</string>
</property>
<property name="text">
<string>From API files</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QRadioButton" name="autoCompFromDoc">
<property name="toolTip">
<string>Get autocompletion from current document</string>
</property>
<property name="text">
<string>From document</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QgsCollapsibleGroupBox" name="groupBoxRunDebugEditor">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Run and Debug</string>
</property>
<property name="collapsed" stdset="0">
<bool>false</bool>
</property>
<property name="saveCollapsedState" stdset="0">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_21">
<item row="0" column="0">
<widget class="QCheckBox" name="enableObjectInspector">
<property name="text">
<string>Enable Object Inspector (switching between tabs may be slow)</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="autoSaveScript">
<property name="text">
<string>Auto-save script before running</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="0">
<widget class="QgsCollapsibleGroupBox" name="groupBox_2">
<property name="title">
<string>APIs</string>
@ -294,599 +440,6 @@
</layout>
</widget>
</item>
<item row="0" column="0">
<widget class="QgsCollapsibleGroupBox" name="groupBoxFontColor">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Font and Colors</string>
</property>
<property name="collapsed" stdset="0">
<bool>false</bool>
</property>
<property name="saveCollapsedState" stdset="0">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_15">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Font</string>
</property>
</widget>
</item>
<item>
<widget class="QFontComboBox" name="fontComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Size</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox">
<property name="minimumSize">
<size>
<width>51</width>
<height>26</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>51</width>
<height>26</height>
</size>
</property>
<property name="minimum">
<number>6</number>
</property>
<property name="maximum">
<number>99</number>
</property>
<property name="value">
<number>10</number>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QGridLayout" name="gridLayout_8">
<item row="0" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Default</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QgsColorButton" name="defaultFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Keyword</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QgsColorButton" name="keywordFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLabel" name="label_26">
<property name="text">
<string>Class name</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QgsColorButton" name="classFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Function</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QgsColorButton" name="methodFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_18">
<property name="text">
<string>Decorator</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QgsColorButton" name="decorFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QLabel" name="label_55">
<property name="text">
<string>Number</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QgsColorButton" name="numberFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Comment</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QgsColorButton" name="commentFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Comment block</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QgsColorButton" name="commentBlockFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="4">
<widget class="QLabel" name="label_24">
<property name="text">
<string>Cursor</string>
</property>
</widget>
</item>
<item row="4" column="5">
<widget class="QgsColorButton" name="cursorColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Caretline</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QgsColorButton" name="caretLineColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_28">
<property name="text">
<string>Single quote</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QgsColorButton" name="singleQuoteFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLabel" name="label_31">
<property name="text">
<string>Double quote</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QgsColorButton" name="doubleQuoteFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_29">
<property name="text">
<string>Triple single quote</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QgsColorButton" name="tripleSingleQuoteFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QLabel" name="label_30">
<property name="text">
<string>Triple double quote</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QgsColorButton" name="tripleDoubleQuoteFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Background</string>
</property>
</widget>
</item>
<item row="3" column="5">
<widget class="QgsColorButton" name="paperBackgroundColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_42">
<property name="text">
<string>Margin background</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QgsColorButton" name="marginBackgroundColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QLabel" name="label_43">
<property name="text">
<string>Margin foreground</string>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QgsColorButton" name="marginForegroundColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Error</string>
</property>
</widget>
</item>
<item row="5" column="5">
<widget class="QgsColorButton" name="stderrFontColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_48">
<property name="text">
<string>Selection background</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QgsColorButton" name="selectionBackgroundColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QLabel" name="label_49">
<property name="text">
<string>Selection foreground</string>
</property>
</widget>
</item>
<item row="6" column="3">
<widget class="QgsColorButton" name="selectionForegroundColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_50">
<property name="text">
<string>Brace background</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QgsColorButton" name="matchedBraceBackgroundColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="7" column="2">
<widget class="QLabel" name="label_60">
<property name="text">
<string>Brace foreground</string>
</property>
</widget>
</item>
<item row="7" column="3">
<widget class="QgsColorButton" name="matchedBraceForegroundColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="6" column="4">
<widget class="QLabel" name="label_38">
<property name="text">
<string>Edge</string>
</property>
</widget>
</item>
<item row="7" column="4">
<widget class="QLabel" name="label_39">
<property name="text">
<string>Fold guide</string>
</property>
</widget>
</item>
<item row="6" column="5">
<widget class="QgsColorButton" name="edgeColor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="7" column="5">
<widget class="QgsColorButton" name="foldColor">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="1">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QToolButton" name="resetFontColor">
<property name="toolTip">
<string>Reset to default colors</string>
</property>
<property name="text">
<string/>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QgsCollapsibleGroupBox" name="groupBoxAutoCompletion">
<property name="title">
<string>Autocompletion</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="collapsed" stdset="0">
<bool>false</bool>
</property>
<property name="saveCheckedState" stdset="0">
<bool>true</bool>
</property>
<property name="saveCollapsedState" stdset="0">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="2">
<widget class="QLabel" name="label_36">
<property name="text">
<string>characters</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="autoCompThreshold">
<property name="maximum">
<number>10</number>
</property>
<property name="value">
<number>2</number>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Autocompletion threshold</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<layout class="QGridLayout" name="layoutRadioButton">
<item row="0" column="2">
<widget class="QRadioButton" name="autoCompFromDocAPI">
<property name="toolTip">
<string>Get autocompletion from current document and installed APIs</string>
</property>
<property name="text">
<string>From doc and APIs</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="autoCompFromAPI">
<property name="toolTip">
<string>Get autocompletion from installed APIs</string>
</property>
<property name="text">
<string>From API files</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QRadioButton" name="autoCompFromDoc">
<property name="toolTip">
<string>Get autocompletion from current document</string>
</property>
<property name="text">
<string>From document</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="3" column="0">
<widget class="QgsCollapsibleGroupBox" name="groupBoxRunDebugEditor">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Run and Debug</string>
</property>
<property name="collapsed" stdset="0">
<bool>false</bool>
</property>
<property name="saveCollapsedState" stdset="0">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_21">
<item row="0" column="0">
<widget class="QCheckBox" name="enableObjectInspector">
<property name="text">
<string>Enable Object Inspector (switching between tabs may be slow)</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="autoSaveScript">
<property name="text">
<string>Auto-save script before running</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="6" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>GitHub Access Token</string>
</property>
<layout class="QGridLayout" name="gridLayout_6">
<item row="0" column="0">
<widget class="QLineEdit" name="tokenGhLineEdit">
<property name="placeholderText">
<string>&lt;PERSONAL_ACCESS_TOKEN&gt;</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="generateToken">
<property name="text">
<string>Generate</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>

View File

@ -146,6 +146,13 @@ the default color.
.. seealso:: :py:func:`color`
.. versionadded:: 3.16
%End
static QFont getMonospaceFont();
%Docstring
Returns the monospaced font to use for code editors.
.. versionadded:: 3.16
%End
@ -158,8 +165,6 @@ the default color.
virtual void keyPressEvent( QKeyEvent *event );
QFont getMonospaceFont();
};

View File

@ -197,6 +197,7 @@ SET(QGIS_APP_SRCS
locator/qgsinbuiltlocatorfilters.cpp
locator/qgslocatoroptionswidget.cpp
options/qgscodeeditoroptions.cpp
options/qgsoptions.cpp
options/qgsoptionsutils.cpp

View File

@ -0,0 +1,172 @@
/***************************************************************************
qgscodeeditoroptions.cpp
-------------------------
begin : September 2020
copyright : (C) 2020 by Nyall Dawson
email : nyall dot dawson at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgscodeeditoroptions.h"
#include "qgsapplication.h"
#include "qgssettings.h"
#include "qgis.h"
//
// QgsCodeEditorOptionsWidget
//
QgsCodeEditorOptionsWidget::QgsCodeEditorOptionsWidget( QWidget *parent )
: QgsOptionsPageWidget( parent )
{
setupUi( this );
layout()->setContentsMargins( 0, 0, 0, 0 );
mSizeSpin->setClearValue( 10 );
mColorButtonMap =
{
{QgsCodeEditor::ColorRole::Default, mColorDefault },
{QgsCodeEditor::ColorRole::Keyword, mColorKeyword },
{QgsCodeEditor::ColorRole::Class, mColorClass },
{QgsCodeEditor::ColorRole::Method, mColorFunction },
{QgsCodeEditor::ColorRole::Decoration, mColorDecorator },
{QgsCodeEditor::ColorRole::Number, mColorNumber },
{QgsCodeEditor::ColorRole::Comment, mColorComment },
//{QgsCodeEditor::ColorRole::CommentLine, mColorCommentLine },
{QgsCodeEditor::ColorRole::CommentBlock, mColorCommentBlock },
{QgsCodeEditor::ColorRole::Background, mColorBackground },
{QgsCodeEditor::ColorRole::Cursor, mColorCursor },
{QgsCodeEditor::ColorRole::CaretLine, mColorCaretLine },
//{QgsCodeEditor::ColorRole::Operator, mColorOperator },
//{QgsCodeEditor::ColorRole::QuotedOperator, mColorQuotedOperator },
//{QgsCodeEditor::ColorRole::Identifier, mColorIdentifier },
//{QgsCodeEditor::ColorRole::QuotedIdentifier, mColorQuotedIdentified },
//{QgsCodeEditor::ColorRole::Tag, mColorTag },
//{QgsCodeEditor::ColorRole::UnknownTag, mColorUnknownTag },
{QgsCodeEditor::ColorRole::SingleQuote, mColorSingleQuote },
{QgsCodeEditor::ColorRole::DoubleQuote, mColorDoubleQuote },
{QgsCodeEditor::ColorRole::TripleSingleQuote, mColorTripleSingleQuote },
{QgsCodeEditor::ColorRole::TripleDoubleQuote, mColorTripleDoubleQuote },
{QgsCodeEditor::ColorRole::MarginBackground, mColorMarginBackground },
{QgsCodeEditor::ColorRole::MarginForeground, mColorMarginForeground },
{QgsCodeEditor::ColorRole::SelectionBackground, mColorSelectionBackground },
{QgsCodeEditor::ColorRole::SelectionForeground, mColorSelectionForeground },
{QgsCodeEditor::ColorRole::MatchedBraceBackground, mColorBraceBackground },
{QgsCodeEditor::ColorRole::MatchedBraceForeground, mColorBraceForeground },
{QgsCodeEditor::ColorRole::Edge, mColorEdge },
{QgsCodeEditor::ColorRole::Fold, mColorFold },
{QgsCodeEditor::ColorRole::Error, mColorError },
};
for ( auto it = mColorButtonMap.constBegin(); it != mColorButtonMap.constEnd(); ++it )
{
it.value()->setColor( QgsCodeEditor::color( it.key() ) );
}
mColorSchemeComboBox->addItem( tr( "Default" ), QString() );
mColorSchemeComboBox->addItem( tr( "Solarized (Light)" ), QStringLiteral( "solarized" ) );
mColorSchemeComboBox->addItem( tr( "Solarized (Dark)" ), QStringLiteral( "solarized_dark" ) );
mColorSchemeComboBox->addItem( tr( "Custom" ), QStringLiteral( "custom" ) );
QgsSettings settings;
if ( !settings.value( QStringLiteral( "codeEditor/overrideColors" ), false, QgsSettings::Gui ).toBool() )
{
const QString theme = settings.value( QStringLiteral( "codeEditor/colorScheme" ), QString(), QgsSettings::Gui ).toString();
mColorSchemeComboBox->setCurrentIndex( mColorSchemeComboBox->findData( theme ) );
}
else
{
mColorSchemeComboBox->setCurrentIndex( mColorSchemeComboBox->findData( QStringLiteral( "custom" ) ) );
}
connect( mColorSchemeComboBox, qgis::overload<int>::of( &QComboBox::currentIndexChanged ), this, [ = ]
{
const QString theme = mColorSchemeComboBox->currentData().toString();
if ( theme != QStringLiteral( "custom" ) )
{
mBlockCustomColorChange = true;
for ( auto it = mColorButtonMap.constBegin(); it != mColorButtonMap.constEnd(); ++it )
{
it.value()->setColor( QgsCodeEditor::defaultColor( it.key(), theme ) );
}
mBlockCustomColorChange = false;
}
} );
for ( auto it = mColorButtonMap.constBegin(); it != mColorButtonMap.constEnd(); ++it )
{
connect( it.value(), &QgsColorButton::colorChanged, this, [ = ]
{
if ( mBlockCustomColorChange )
return;
mColorSchemeComboBox->setCurrentIndex( mColorSchemeComboBox->findData( QStringLiteral( "custom" ) ) );
} );
}
// font
const QFont font = QgsCodeEditor::getMonospaceFont();
mFontComboBox->setCurrentFont( font );
mSizeSpin->setValue( font.pointSize() );
mOverrideFontGroupBox->setChecked( !settings.value( QStringLiteral( "codeEditor/fontfamily" ), QString(), QgsSettings::Gui ).toString().isEmpty() );
}
QString QgsCodeEditorOptionsWidget::helpKey() const
{
return QStringLiteral( "plugins/python_console.html" );
}
void QgsCodeEditorOptionsWidget::apply()
{
const QString theme = mColorSchemeComboBox->currentData().toString();
QgsSettings settings;
const bool customTheme = theme == QStringLiteral( "custom" );
settings.setValue( QStringLiteral( "codeEditor/overrideColors" ), customTheme, QgsSettings::Gui );
if ( !customTheme )
{
settings.setValue( QStringLiteral( "codeEditor/colorScheme" ), theme, QgsSettings::Gui );
}
for ( auto it = mColorButtonMap.constBegin(); it != mColorButtonMap.constEnd(); ++it )
{
QgsCodeEditor::setColor( it.key(), it.value()->color() );
}
if ( mOverrideFontGroupBox->isChecked() )
{
settings.setValue( QStringLiteral( "codeEditor/fontfamily" ), mFontComboBox->currentFont().family(), QgsSettings::Gui );
settings.setValue( QStringLiteral( "codeEditor/fontsize" ), mSizeSpin->value(), QgsSettings::Gui );
}
else
{
settings.remove( QStringLiteral( "codeEditor/fontfamily" ), QgsSettings::Gui );
settings.remove( QStringLiteral( "codeEditor/fontsize" ), QgsSettings::Gui );
}
}
//
// QgsCodeEditorOptionsFactory
//
QgsCodeEditorOptionsFactory::QgsCodeEditorOptionsFactory()
: QgsOptionsWidgetFactory( tr( "Code Editor" ), QIcon() )
{
}
QIcon QgsCodeEditorOptionsFactory::icon() const
{
return QgsApplication::getThemeIcon( QStringLiteral( "/console/mIconRunConsole.svg" ) );
}
QgsOptionsPageWidget *QgsCodeEditorOptionsFactory::createWidget( QWidget *parent ) const
{
return new QgsCodeEditorOptionsWidget( parent );
}

View File

@ -0,0 +1,66 @@
/***************************************************************************
qgscodeeditoroptions.h
-------------------------
begin : September 2020
copyright : (C) 2020 by Nyall Dawson
email : nyall dot dawson at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSCODEEDITOROPTIONS_H
#define QGSCODEEDITOROPTIONS_H
#include "ui_qgscodeditorsettings.h"
#include "qgsoptionswidgetfactory.h"
#include "qgscodeeditor.h"
/**
* \ingroup app
* \class QgsCodeEditorOptionsWidget
* \brief An options widget showing code editor settings.
*
* \since QGIS 3.16
*/
class QgsCodeEditorOptionsWidget : public QgsOptionsPageWidget, private Ui::QgsCodeEditorSettingsBase
{
Q_OBJECT
public:
/**
* Constructor for QgsCodeEditorOptionsWidget with the specified \a parent widget.
*/
QgsCodeEditorOptionsWidget( QWidget *parent );
QString helpKey() const override;
void apply() override;
private:
QMap< QgsCodeEditor::ColorRole, QgsColorButton * > mColorButtonMap;
bool mBlockCustomColorChange = false;
};
class QgsCodeEditorOptionsFactory : public QgsOptionsWidgetFactory
{
Q_OBJECT
public:
QgsCodeEditorOptionsFactory();
QIcon icon() const override;
QgsOptionsPageWidget *createWidget( QWidget *parent = nullptr ) const override;
};
#endif // QGSCODEEDITOROPTIONS_H

View File

@ -97,6 +97,8 @@
#include "qgsanalysis.h"
#include "qgsgeometrycheckregistry.h"
#include "options/qgscodeeditoroptions.h"
#ifdef HAVE_3D
#include "qgs3d.h"
#include "qgs3danimationsettings.h"
@ -1699,6 +1701,8 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh
{
mCentralContainer->setCurrentIndex( 0 );
} );
mCodeEditorWidgetFactory.reset( qgis::make_unique< QgsCodeEditorOptionsFactory >() );
} // QgisApp ctor
QgisApp::QgisApp()

View File

@ -173,6 +173,7 @@ class QgsNetworkLoggerWidgetFactory;
#include "qgis_app.h"
#include "qgsvectorlayerref.h"
#include "devtools/qgsappdevtoolutils.h"
#include "options/qgsoptionsutils.h"
#include <QGestureEvent>
#include <QTapAndHoldGesture>
@ -2628,6 +2629,8 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
QgsScopedDevToolWidgetFactory mNetworkLoggerWidgetFactory;
QgsScopedDevToolWidgetFactory mStartupProfilerWidgetFactory;
QgsScopedOptionsWidgetFactory mCodeEditorWidgetFactory;
class QgsCanvasRefreshBlocker
{
public:

View File

@ -159,6 +159,13 @@ class GUI_EXPORT QgsCodeEditor : public QsciScintilla
*/
static void setColor( ColorRole role, const QColor &color );
/**
* Returns the monospaced font to use for code editors.
*
* \since QGIS 3.16
*/
static QFont getMonospaceFont();
protected:
bool isFixedPitch( const QFont &font );
@ -166,8 +173,6 @@ class GUI_EXPORT QgsCodeEditor : public QsciScintilla
void focusOutEvent( QFocusEvent *event ) override;
void keyPressEvent( QKeyEvent *event ) override;
QFont getMonospaceFont();
private:
void setSciWidget();

View File

@ -0,0 +1,494 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsCodeEditorSettingsBase</class>
<widget class="QWidget" name="QgsCodeEditorSettingsBase">
<property name="modal" stdset="0">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>588</width>
<height>469</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_16">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QScrollArea" name="scrollArea">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>588</width>
<height>469</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QGroupBox" name="groupBoxFontColor">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Colors</string>
</property>
<property name="collapsed" stdset="0">
<bool>false</bool>
</property>
<property name="saveCollapsedState" stdset="0">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_8">
<item row="4" column="4">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Background</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QgsColorButton" name="mColorComment">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="8" column="2">
<widget class="QLabel" name="label_60">
<property name="text">
<string>Brace foreground</string>
</property>
</widget>
</item>
<item row="8" column="4">
<widget class="QLabel" name="label_39">
<property name="text">
<string>Fold guide</string>
</property>
</widget>
</item>
<item row="8" column="3">
<widget class="QgsColorButton" name="mColorBraceForeground">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Comment block</string>
</property>
</widget>
</item>
<item row="8" column="5">
<widget class="QgsColorButton" name="mColorFold">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QgsColorButton" name="mColorTripleSingleQuote">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_29">
<property name="text">
<string>Triple single quote</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_48">
<property name="text">
<string>Selection background</string>
</property>
</widget>
</item>
<item row="7" column="3">
<widget class="QgsColorButton" name="mColorSelectionForeground">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="6" column="5">
<widget class="QgsColorButton" name="mColorError">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QLabel" name="label_30">
<property name="text">
<string>Triple double quote</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QgsColorButton" name="mColorCommentBlock">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QgsColorButton" name="mColorFunction">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QLabel" name="label_43">
<property name="text">
<string>Margin foreground</string>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QgsColorButton" name="mColorNumber">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="7" column="4">
<widget class="QLabel" name="label_38">
<property name="text">
<string>Edge</string>
</property>
</widget>
</item>
<item row="5" column="5">
<widget class="QgsColorButton" name="mColorCursor">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="7" column="2">
<widget class="QLabel" name="label_49">
<property name="text">
<string>Selection foreground</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QLabel" name="label_26">
<property name="text">
<string>Class name</string>
</property>
</widget>
</item>
<item row="6" column="4">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Error</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Function</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_50">
<property name="text">
<string>Brace background</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QgsColorButton" name="mColorDecorator">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QLabel" name="label_24">
<property name="text">
<string>Cursor</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_42">
<property name="text">
<string>Margin background</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_28">
<property name="text">
<string>Single quote</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QgsColorButton" name="mColorDoubleQuote">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Caretline</string>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QgsColorButton" name="mColorTripleDoubleQuote">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QgsColorButton" name="mColorSingleQuote">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="7" column="5">
<widget class="QgsColorButton" name="mColorEdge">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_18">
<property name="text">
<string>Decorator</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QgsColorButton" name="mColorClass">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QgsColorButton" name="mColorSelectionBackground">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QgsColorButton" name="mColorMarginBackground">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QLabel" name="label_55">
<property name="text">
<string>Number</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Default</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Comment</string>
</property>
</widget>
</item>
<item row="6" column="3">
<widget class="QgsColorButton" name="mColorMarginForeground">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QgsColorButton" name="mColorBraceBackground">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QgsColorButton" name="mColorKeyword">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="5">
<widget class="QgsColorButton" name="mColorBackground">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Keyword</string>
</property>
</widget>
</item>
<item row="3" column="5">
<widget class="QgsColorButton" name="mColorCaretLine">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QLabel" name="label_31">
<property name="text">
<string>Double quote</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QgsColorButton" name="mColorDefault">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Color scheme</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="5">
<widget class="QComboBox" name="mColorSchemeComboBox"/>
</item>
</layout>
</widget>
</item>
<item row="0" column="0">
<widget class="QGroupBox" name="mOverrideFontGroupBox">
<property name="title">
<string>Override Code Editor Font</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,5,0,1">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Font</string>
</property>
</widget>
</item>
<item>
<widget class="QFontComboBox" name="mFontComboBox">
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Size</string>
</property>
</widget>
</item>
<item>
<widget class="QgsSpinBox" name="mSizeSpin">
<property name="minimum">
<number>6</number>
</property>
<property name="maximum">
<number>99</number>
</property>
<property name="value">
<number>10</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QgsColorButton</class>
<extends>QPushButton</extends>
<header>qgscolorbutton.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsSpinBox</class>
<extends>QSpinBox</extends>
<header>qgsspinbox.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>