diff --git a/makefile b/makefile index 88916f3..fe58ea2 100644 --- a/makefile +++ b/makefile @@ -19,6 +19,9 @@ profile: compile: cd src && python3 setup.py build_ext --inplace + +callgraph: + pycallgraph graphviz -- src/main.py translation: pylupdate5 -noobsolete i18n/manuskript.pro diff --git a/src/settings.py b/src/settings.py index fae424f..9023741 100644 --- a/src/settings.py +++ b/src/settings.py @@ -3,6 +3,7 @@ import pickle import pprint from enums import * +from qt import * viewSettings = { "Tree": { @@ -47,11 +48,22 @@ corkBackground = { defaultTextType = "t2t" fullScreenTheme = "spacedreams" +textEditor = { + "fontColor": "#000", + "font": qApp.font().toString(), + "misspelled": "#F00", + "lineSpacing": 100, + "tabWidth": 20, + "indent": True, + "spacingAbove": 5, + "spacingBelow": 5, + } + def save(filename=None): global spellcheck, dict, corkSliderFactor, viewSettings, corkSizeFactor, folderView, lastTab, lastIndex, \ autoSave, autoSaveDelay, saveOnQuit, autoSaveNoChanges, autoSaveNoChangesDelay, outlineViewColumns, \ - corkBackground, fullScreenTheme, defaultTextType + corkBackground, fullScreenTheme, defaultTextType, textEditor allSettings = { "viewSettings": viewSettings, @@ -70,6 +82,7 @@ def save(filename=None): "corkBackground":corkBackground, "fullScreenTheme":fullScreenTheme, "defaultTextType":defaultTextType, + "textEditor":textEditor, } #pp=pprint.PrettyPrinter(indent=4, compact=False) @@ -164,4 +177,8 @@ def load(string, fromString=False): if "defaultTextType" in allSettings: global defaultTextType - defaultTextType = allSettings["defaultTextType"] \ No newline at end of file + defaultTextType = allSettings["defaultTextType"] + + if "textEditor" in allSettings: + global textEditor + textEditor = allSettings["textEditor"] \ No newline at end of file diff --git a/src/settingsWindow.py b/src/settingsWindow.py index c936ade..5d134b0 100644 --- a/src/settingsWindow.py +++ b/src/settingsWindow.py @@ -7,6 +7,7 @@ from ui.settings import * from enums import * from functions import * from ui.editors.themes import * +from ui.views.textEditView import * import settings import os @@ -95,6 +96,37 @@ class settingsWindow(QWidget, Ui_Settings): self.cmbCorkImage.currentIndexChanged.connect(self.setCorkBackground) self.btnCorkColor.clicked.connect(self.setCorkColor) + # Text editor + opt = settings.textEditor + self.setButtonColor(self.btnEditorFontColor, opt["fontColor"]) + self.btnEditorFontColor.clicked.connect(self.choseEditorFontColor) + self.setButtonColor(self.btnEditorMisspelledColor, opt["misspelled"]) + self.btnEditorMisspelledColor.clicked.connect(self.choseEditorMisspelledColor) + f = QFont() + f.fromString(opt["font"]) + self.cmbEditorFontFamily.setCurrentFont(f) + self.cmbEditorFontFamily.currentFontChanged.connect(self.updateEditorSettings) + self.spnEditorFontSize.setValue(f.pointSize()) + self.spnEditorFontSize.valueChanged.connect(self.updateEditorSettings) + self.cmbEditorLineSpacing.setCurrentIndex( + 0 if opt["lineSpacing"] == 100 else + 1 if opt["lineSpacing"] == 150 else + 2 if opt["lineSpacing"] == 200 else + 3) + self.cmbEditorLineSpacing.currentIndexChanged.connect(self.updateEditorSettings) + self.spnEditorLineSpacing.setValue(opt["lineSpacing"]) + self.spnEditorLineSpacing.valueChanged.connect(self.updateEditorSettings) + self.spnEditorLineSpacing.setEnabled(opt["lineSpacing"] not in [100, 150, 200]) + self.spnEditorLineSpacing.valueChanged.connect(self.updateEditorSettings) + self.spnEditorTabWidth.setValue(opt["tabWidth"]) + self.spnEditorTabWidth.valueChanged.connect(self.updateEditorSettings) + self.chkEditorIndent.setChecked(opt["indent"]) + self.chkEditorIndent.stateChanged.connect(self.updateEditorSettings) + self.spnEditorParaAbove.setValue(opt["spacingAbove"]) + self.spnEditorParaAbove.valueChanged.connect(self.updateEditorSettings) + self.spnEditorParaBelow.setValue(opt["spacingBelow"]) + self.spnEditorParaAbove.valueChanged.connect(self.updateEditorSettings) + # Labels self.lstLabels.setModel(self.mw.mdlLabels) self.lstLabels.setRowHidden(0, True) @@ -280,6 +312,47 @@ class settingsWindow(QWidget, Ui_Settings): if i != -1: self.cmbCorkImage.setCurrentIndex(i) +#################################################################################################### +# VIEWS / EDITOR +#################################################################################################### + + def updateEditorSettings(self): + # Store settings + f = self.cmbEditorFontFamily.currentFont() + f.setPointSize(self.spnEditorFontSize.value()) + settings.textEditor["font"] = f.toString() + settings.textEditor["lineSpacing"] = \ + 100 if self.cmbEditorLineSpacing.currentIndex() == 0 else\ + 150 if self.cmbEditorLineSpacing.currentIndex() == 1 else\ + 200 if self.cmbEditorLineSpacing.currentIndex() == 2 else\ + self.spnEditorLineSpacing.value() + self.spnEditorLineSpacing.setEnabled(self.cmbEditorLineSpacing.currentIndex() == 3) + settings.textEditor["tabWidth"] = self.spnEditorTabWidth.value() + settings.textEditor["indent"] = True if self.chkEditorIndent.checkState() else False + settings.textEditor["spacingAbove"] = self.spnEditorParaAbove.value() + settings.textEditor["spacingBelow"] = self.spnEditorParaBelow.value() + + # Update font and defaultBlockFormat to all textEditView. Drastically. + for w in mainWindow().findChildren(textEditView, QRegExp(".*")): + print(w.objectName(), w.parent().objectName()) + w.loadFontSettings() + + def choseEditorFontColor(self): + color = settings.textEditor["fontColor"] + self.colorDialog = QColorDialog(QColor(color), self) + color = self.colorDialog.getColor(QColor(color)) + if color.isValid(): + settings.textEditor["fontColor"] = color.name() + self.setButtonColor(self.btnEditorFontColor, color.name()) + + def choseEditorMisspelledColor(self): + color = settings.textEditor["misspelled"] + self.colorDialog = QColorDialog(QColor(color), self) + color = self.colorDialog.getColor(QColor(color)) + if color.isValid(): + settings.textEditor["misspelled"] = color.name() + self.setButtonColor(self.btnEditorMisspelledColor, color.name()) + #################################################################################################### # STATUS # #################################################################################################### diff --git a/src/ui/editors/basicHighlighter.py b/src/ui/editors/basicHighlighter.py index a712bdc..5dc24af 100644 --- a/src/ui/editors/basicHighlighter.py +++ b/src/ui/editors/basicHighlighter.py @@ -32,7 +32,8 @@ class basicHighlighter(QSyntaxHighlighter): bf = QTextBlockFormat(self._defaultBlockFormat) bf.setAlignment(QTextCursor(self.currentBlock()).blockFormat().alignment()) QTextCursor(self.currentBlock()).setBlockFormat(bf) - #self.setFormat(0, len(text), self._defaultCharFormat) + + self.setFormat(0, len(text), self._defaultCharFormat) # Spell checking # Based on http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/ diff --git a/src/ui/editors/t2tHighlighter.py b/src/ui/editors/t2tHighlighter.py index 51ce4e3..21be544 100644 --- a/src/ui/editors/t2tHighlighter.py +++ b/src/ui/editors/t2tHighlighter.py @@ -102,7 +102,7 @@ class t2tHighlighter (QSyntaxHighlighter): op = self.style.format(State.MARKUP) #self.setFormat(0, len(text), self.style.format(State.DEFAULT)) - #self.setFormat(0, len(text), self._defaultCharFormat) + self.setFormat(0, len(text), self._defaultCharFormat) # InDocRules: is it a settings which might have a specific rule, # a comment which contains color infos, or a include conf? diff --git a/src/ui/editors/themes.py b/src/ui/editors/themes.py index f8a58bb..72f7217 100644 --- a/src/ui/editors/themes.py +++ b/src/ui/editors/themes.py @@ -222,6 +222,7 @@ def setThemeEditorDatas(editor, themeDatas, pixmap, screenRect): #f = QFont() #f.fromString(themeDatas["Text/Font"]) editor.setFont(f) + editor._fromTheme = True diff --git a/src/ui/settings.py b/src/ui/settings.py index 89f4231..7a9cc22 100644 --- a/src/ui/settings.py +++ b/src/ui/settings.py @@ -11,7 +11,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Settings(object): def setupUi(self, Settings): Settings.setObjectName("Settings") - Settings.resize(658, 486) + Settings.resize(658, 491) self.horizontalLayout_8 = QtWidgets.QHBoxLayout(Settings) self.horizontalLayout_8.setObjectName("horizontalLayout_8") self.lstMenu = QtWidgets.QListWidget(Settings) @@ -706,6 +706,211 @@ class Ui_Settings(object): self.verticalLayout_8.addItem(spacerItem6) self.horizontalLayout_4.addWidget(self.groupBox_7) self.tabViews.addTab(self.tab_3, "") + self.tab_4 = QtWidgets.QWidget() + self.tab_4.setObjectName("tab_4") + self.horizontalLayout_11 = QtWidgets.QHBoxLayout(self.tab_4) + self.horizontalLayout_11.setObjectName("horizontalLayout_11") + self.groupBox_12 = QtWidgets.QGroupBox(self.tab_4) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.groupBox_12.setFont(font) + self.groupBox_12.setObjectName("groupBox_12") + self.formLayout_8 = QtWidgets.QFormLayout(self.groupBox_12) + self.formLayout_8.setObjectName("formLayout_8") + self.label_37 = QtWidgets.QLabel(self.groupBox_12) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.label_37.setFont(font) + self.label_37.setObjectName("label_37") + self.formLayout_8.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_37) + self.btnEditorFontColor = QtWidgets.QPushButton(self.groupBox_12) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.btnEditorFontColor.sizePolicy().hasHeightForWidth()) + self.btnEditorFontColor.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.btnEditorFontColor.setFont(font) + self.btnEditorFontColor.setText("") + self.btnEditorFontColor.setObjectName("btnEditorFontColor") + self.formLayout_8.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.btnEditorFontColor) + self.label_39 = QtWidgets.QLabel(self.groupBox_12) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.label_39.setFont(font) + self.label_39.setObjectName("label_39") + self.formLayout_8.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_39) + self.cmbEditorFontFamily = QtWidgets.QFontComboBox(self.groupBox_12) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.cmbEditorFontFamily.sizePolicy().hasHeightForWidth()) + self.cmbEditorFontFamily.setSizePolicy(sizePolicy) + self.cmbEditorFontFamily.setMaximumSize(QtCore.QSize(150, 16777215)) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.cmbEditorFontFamily.setFont(font) + self.cmbEditorFontFamily.setObjectName("cmbEditorFontFamily") + self.formLayout_8.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.cmbEditorFontFamily) + self.label_38 = QtWidgets.QLabel(self.groupBox_12) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.label_38.setFont(font) + self.label_38.setObjectName("label_38") + self.formLayout_8.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_38) + self.label_36 = QtWidgets.QLabel(self.groupBox_12) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.label_36.setFont(font) + self.label_36.setObjectName("label_36") + self.formLayout_8.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_36) + self.btnEditorMisspelledColor = QtWidgets.QPushButton(self.groupBox_12) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.btnEditorMisspelledColor.sizePolicy().hasHeightForWidth()) + self.btnEditorMisspelledColor.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.btnEditorMisspelledColor.setFont(font) + self.btnEditorMisspelledColor.setText("") + self.btnEditorMisspelledColor.setObjectName("btnEditorMisspelledColor") + self.formLayout_8.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.btnEditorMisspelledColor) + self.spnEditorFontSize = QtWidgets.QSpinBox(self.groupBox_12) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.spnEditorFontSize.setFont(font) + self.spnEditorFontSize.setMinimum(4) + self.spnEditorFontSize.setMaximum(299) + self.spnEditorFontSize.setProperty("value", 10) + self.spnEditorFontSize.setObjectName("spnEditorFontSize") + self.formLayout_8.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.spnEditorFontSize) + self.horizontalLayout_11.addWidget(self.groupBox_12) + self.groupBox_13 = QtWidgets.QGroupBox(self.tab_4) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.groupBox_13.setFont(font) + self.groupBox_13.setObjectName("groupBox_13") + self.formLayout_9 = QtWidgets.QFormLayout(self.groupBox_13) + self.formLayout_9.setObjectName("formLayout_9") + self.label_40 = QtWidgets.QLabel(self.groupBox_13) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.label_40.setFont(font) + self.label_40.setObjectName("label_40") + self.formLayout_9.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_40) + self.cmbEditorLineSpacing = QtWidgets.QComboBox(self.groupBox_13) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.cmbEditorLineSpacing.setFont(font) + self.cmbEditorLineSpacing.setObjectName("cmbEditorLineSpacing") + self.cmbEditorLineSpacing.addItem("") + self.cmbEditorLineSpacing.addItem("") + self.cmbEditorLineSpacing.addItem("") + self.cmbEditorLineSpacing.addItem("") + self.formLayout_9.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbEditorLineSpacing) + self.spnEditorLineSpacing = QtWidgets.QSpinBox(self.groupBox_13) + self.spnEditorLineSpacing.setEnabled(False) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.spnEditorLineSpacing.sizePolicy().hasHeightForWidth()) + self.spnEditorLineSpacing.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.spnEditorLineSpacing.setFont(font) + self.spnEditorLineSpacing.setMinimum(50) + self.spnEditorLineSpacing.setMaximum(999) + self.spnEditorLineSpacing.setProperty("value", 100) + self.spnEditorLineSpacing.setObjectName("spnEditorLineSpacing") + self.formLayout_9.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.spnEditorLineSpacing) + self.label_42 = QtWidgets.QLabel(self.groupBox_13) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.label_42.setFont(font) + self.label_42.setObjectName("label_42") + self.formLayout_9.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_42) + self.spnEditorTabWidth = QtWidgets.QSpinBox(self.groupBox_13) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.spnEditorTabWidth.sizePolicy().hasHeightForWidth()) + self.spnEditorTabWidth.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.spnEditorTabWidth.setFont(font) + self.spnEditorTabWidth.setMinimum(0) + self.spnEditorTabWidth.setMaximum(199) + self.spnEditorTabWidth.setProperty("value", 20) + self.spnEditorTabWidth.setObjectName("spnEditorTabWidth") + self.formLayout_9.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.spnEditorTabWidth) + self.chkEditorIndent = QtWidgets.QCheckBox(self.groupBox_13) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.chkEditorIndent.sizePolicy().hasHeightForWidth()) + self.chkEditorIndent.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.chkEditorIndent.setFont(font) + self.chkEditorIndent.setObjectName("chkEditorIndent") + self.formLayout_9.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.chkEditorIndent) + self.label_41 = QtWidgets.QLabel(self.groupBox_13) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.label_41.setFont(font) + self.label_41.setObjectName("label_41") + self.formLayout_9.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_41) + self.spnEditorParaAbove = QtWidgets.QSpinBox(self.groupBox_13) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.spnEditorParaAbove.sizePolicy().hasHeightForWidth()) + self.spnEditorParaAbove.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.spnEditorParaAbove.setFont(font) + self.spnEditorParaAbove.setMinimum(0) + self.spnEditorParaAbove.setMaximum(199) + self.spnEditorParaAbove.setProperty("value", 5) + self.spnEditorParaAbove.setObjectName("spnEditorParaAbove") + self.formLayout_9.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.spnEditorParaAbove) + self.spnEditorParaBelow = QtWidgets.QSpinBox(self.groupBox_13) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.spnEditorParaBelow.sizePolicy().hasHeightForWidth()) + self.spnEditorParaBelow.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.spnEditorParaBelow.setFont(font) + self.spnEditorParaBelow.setMinimum(0) + self.spnEditorParaBelow.setMaximum(199) + self.spnEditorParaBelow.setProperty("value", 5) + self.spnEditorParaBelow.setObjectName("spnEditorParaBelow") + self.formLayout_9.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.spnEditorParaBelow) + self.horizontalLayout_11.addWidget(self.groupBox_13) + self.tabViews.addTab(self.tab_4, "") self.verticalLayout_9.addWidget(self.tabViews) self.stack.addWidget(self.stackedWidgetPage2) self.stackedWidgetPage3 = QtWidgets.QWidget() @@ -1192,10 +1397,10 @@ class Ui_Settings(object): self.horizontalLayout_8.addWidget(self.stack) self.retranslateUi(Settings) - self.stack.setCurrentIndex(0) - self.tabViews.setCurrentIndex(0) + self.stack.setCurrentIndex(1) + self.tabViews.setCurrentIndex(3) self.themeStack.setCurrentIndex(1) - self.themeEditStack.setCurrentIndex(1) + self.themeEditStack.setCurrentIndex(0) self.lstMenu.currentRowChanged['int'].connect(self.stack.setCurrentIndex) QtCore.QMetaObject.connectSlotsByName(Settings) @@ -1323,6 +1528,25 @@ class Ui_Settings(object): self.btnCorkColor.setShortcut(_translate("Settings", "Ctrl+S")) self.label_16.setText(_translate("Settings", "Image:")) self.tabViews.setTabText(self.tabViews.indexOf(self.tab_3), _translate("Settings", "Index cards")) + self.groupBox_12.setTitle(_translate("Settings", "Font")) + self.label_37.setText(_translate("Settings", "Color:")) + self.label_39.setText(_translate("Settings", "Family:")) + self.label_38.setText(_translate("Settings", "Size:")) + self.label_36.setText(_translate("Settings", "Misspelled:")) + self.groupBox_13.setTitle(_translate("Settings", "Paragraphs")) + self.label_40.setText(_translate("Settings", "Line spacing:")) + self.cmbEditorLineSpacing.setItemText(0, _translate("Settings", "Single")) + self.cmbEditorLineSpacing.setItemText(1, _translate("Settings", "1.5 lines")) + self.cmbEditorLineSpacing.setItemText(2, _translate("Settings", "Double")) + self.cmbEditorLineSpacing.setItemText(3, _translate("Settings", "Proportional")) + self.spnEditorLineSpacing.setSuffix(_translate("Settings", "%")) + self.label_42.setText(_translate("Settings", "Tab width:")) + self.spnEditorTabWidth.setSuffix(_translate("Settings", " px")) + self.chkEditorIndent.setText(_translate("Settings", "Indent 1st line")) + self.label_41.setText(_translate("Settings", "Spacing:")) + self.spnEditorParaAbove.setSuffix(_translate("Settings", " px")) + self.spnEditorParaBelow.setSuffix(_translate("Settings", " px")) + self.tabViews.setTabText(self.tabViews.indexOf(self.tab_4), _translate("Settings", "Text editor")) self.lblTitleLabels.setText(_translate("Settings", "Labels")) self.btnLabelColor.setShortcut(_translate("Settings", "Ctrl+S")) self.lblTitleStatus.setText(_translate("Settings", "Status")) diff --git a/src/ui/settings.ui b/src/ui/settings.ui index 342e99a..b1bff5b 100644 --- a/src/ui/settings.ui +++ b/src/ui/settings.ui @@ -7,7 +7,7 @@ 0 0 658 - 486 + 491 @@ -46,7 +46,7 @@ - 0 + 1 @@ -436,7 +436,7 @@ text-align:center; - 0 + 3 @@ -1485,6 +1485,377 @@ text-align:center; + + + Text editor + + + + + + + 75 + true + + + + Font + + + + + + + 50 + false + + + + Color: + + + + + + + + 0 + 0 + + + + + 50 + false + + + + + + + + + + + + 50 + false + + + + Family: + + + + + + + + 0 + 0 + + + + + 150 + 16777215 + + + + + 50 + false + + + + + + + + + 50 + false + + + + Size: + + + + + + + + 50 + false + + + + Misspelled: + + + + + + + + 0 + 0 + + + + + 50 + false + + + + + + + + + + + + 50 + false + + + + 4 + + + 299 + + + 10 + + + + + + + + + + + 75 + true + + + + Paragraphs + + + + + + + 50 + false + + + + Line spacing: + + + + + + + + 50 + false + + + + + Single + + + + + 1.5 lines + + + + + Double + + + + + Proportional + + + + + + + + false + + + + 0 + 0 + + + + + 50 + false + + + + % + + + 50 + + + 999 + + + 100 + + + + + + + + 50 + false + + + + Tab width: + + + + + + + + 0 + 0 + + + + + 50 + false + + + + px + + + 0 + + + 199 + + + 20 + + + + + + + + 0 + 0 + + + + + 50 + false + + + + Indent 1st line + + + + + + + + 50 + false + + + + Spacing: + + + + + + + + 0 + 0 + + + + + 50 + false + + + + px + + + 0 + + + 199 + + + 5 + + + + + + + + 0 + 0 + + + + + 50 + false + + + + px + + + 0 + + + 199 + + + 5 + + + + + + + + @@ -1897,7 +2268,7 @@ text-align:center; - 1 + 0 diff --git a/src/ui/views/textEditView.py b/src/ui/views/textEditView.py index 9ef4745..c893848 100644 --- a/src/ui/views/textEditView.py +++ b/src/ui/views/textEditView.py @@ -9,6 +9,7 @@ from ui.editors.basicHighlighter import * from ui.editors.textFormat import * from models.outlineModel import * from functions import * +import settings import re try: @@ -30,12 +31,15 @@ class textEditView(QTextEdit): self._highlighting = highlighting self._textFormat = "text" self.setAcceptRichText(False) + # When setting up a theme, this becomes true. + self._fromTheme = False self.spellcheck = spellcheck self.currentDict = dict self.highlighter = None self._autoResize = autoResize self._defaultBlockFormat = QTextBlockFormat() + self._defaultCharFormat = QTextCharFormat() self.highlightWord = "" self.highligtCS = False self.defaultFontPointSize = qApp.font().pointSize() @@ -106,6 +110,7 @@ class textEditView(QTextEdit): pass self.setupEditorForIndex(self._index) + self.loadFontSettings() #self.document().contentsChanged.connect(self.submit, AUC) self.updateText() @@ -155,6 +160,37 @@ class textEditView(QTextEdit): self.highlighter.setDefaultBlockFormat(self._defaultBlockFormat) + def loadFontSettings(self): + if self._fromTheme or \ + not self._index or \ + type(self._index.model()) != outlineModel or \ + self._column != Outline.text.value: + return + + opt = settings.textEditor + f = QFont() + f.fromString(opt["font"]) + self.setFont(f) + + + cf = QTextCharFormat() + cf.setFont(f) + cf.setForeground(QColor(opt["fontColor"])) + + bf = QTextBlockFormat() + bf.setLineHeight(opt["lineSpacing"], bf.ProportionalHeight) + bf.setTextIndent(opt["tabWidth"] * 1 if opt["indent"] else 0) + bf.setTopMargin(opt["spacingAbove"]) + bf.setBottomMargin(opt["spacingBelow"]) + + self._defaultCharFormat = cf + self._defaultBlockFormat = bf + + if self.highlighter: + self.highlighter.setMisspelledColor(QColor(opt["misspelled"])) + self.highlighter.setDefaultCharFormat(self._defaultCharFormat) + self.highlighter.setDefaultBlockFormat(self._defaultBlockFormat) + def setCurrentModelIndexes(self, indexes): self._index = None self._indexes = [] @@ -420,9 +456,9 @@ class textEditView(QTextEdit): cursor = self.textCursor() if _format == "Clear": - fmt = QTextCharFormat() + fmt = self._defaultCharFormat cursor.setCharFormat(fmt) - bf = QTextBlockFormat() + bf = self._defaultBlockFormat cursor.setBlockFormat(bf) elif _format in ["Bold", "Italic", "Underline"]: @@ -445,7 +481,7 @@ class textEditView(QTextEdit): elif _format == "Underline": fmt.setFontUnderline(not fmt.fontUnderline()) - fmt2 = QTextCharFormat() + fmt2 = self._defaultCharFormat fmt2.setFontWeight(fmt.fontWeight()) fmt2.setFontItalic(fmt.fontItalic()) fmt2.setFontUnderline(fmt.fontUnderline())