Working on: Request: Justified formatting of text #148

This commit is contained in:
Olivier Keshavjee 2017-10-17 13:05:46 +02:00
parent 447fbb4a2a
commit 4e74da41d1
7 changed files with 195 additions and 26 deletions

View file

@ -66,6 +66,7 @@ textEditor = {
"indent": True,
"spacingAbove": 5,
"spacingBelow": 5,
"textAlignement": 0, # 0: left, 1: center, 2: right, 3: justify
}
revisions = {
@ -233,6 +234,9 @@ def load(string, fromString=False, protocol=None):
if "textEditor" in allSettings:
global textEditor
textEditor = allSettings["textEditor"]
if not "textAlignment" in textEditor: # Added in 0.5.0
textEditor["textAlignment"] = 0
if "revisions" in allSettings:
global revisions

View file

@ -161,6 +161,8 @@ class settingsWindow(QWidget, Ui_Settings):
self.cmbEditorFontFamily.currentFontChanged.connect(self.updateEditorSettings)
self.spnEditorFontSize.setValue(f.pointSize())
self.spnEditorFontSize.valueChanged.connect(self.updateEditorSettings)
self.cmbEditorAlignment.setCurrentIndex(opt["textAlignment"])
self.cmbEditorAlignment.currentIndexChanged.connect(self.updateEditorSettings)
self.cmbEditorLineSpacing.setCurrentIndex(
0 if opt["lineSpacing"] == 100 else
1 if opt["lineSpacing"] == 150 else
@ -403,6 +405,7 @@ class settingsWindow(QWidget, Ui_Settings):
f = self.cmbEditorFontFamily.currentFont()
f.setPointSize(self.spnEditorFontSize.value())
settings.textEditor["font"] = f.toString()
settings.textEditor["textAlignment"] = self.cmbEditorAlignment.currentIndex()
settings.textEditor["lineSpacing"] = \
100 if self.cmbEditorLineSpacing.currentIndex() == 0 else \
150 if self.cmbEditorLineSpacing.currentIndex() == 1 else \
@ -623,6 +626,7 @@ class settingsWindow(QWidget, Ui_Settings):
# Paragraph Options
self.chkThemeIndent.stateChanged.connect(lambda v: self.setSetting("Spacings/IndentFirstLine", v != 0))
self.cmbThemeAlignment.currentIndexChanged.connect(lambda i: self.setSetting("Spacings/Alignment", i))
self.cmbThemeLineSpacing.currentIndexChanged.connect(self.updateLineSpacing)
self.cmbThemeLineSpacing.currentIndexChanged.connect(self.updateLineSpacing)
self.spnThemeLineSpacing.valueChanged.connect(lambda v: self.setSetting("Spacings/LineSpacing", v))
@ -676,6 +680,7 @@ class settingsWindow(QWidget, Ui_Settings):
# Paragraph Options
self.chkThemeIndent.setCheckState(Qt.Checked if self._themeData["Spacings/IndentFirstLine"] else Qt.Unchecked)
self.spnThemeLineSpacing.setEnabled(False)
self.cmbThemeAlignment.setCurrentIndex(self._themeData["Spacings/Alignment"])
if self._themeData["Spacings/LineSpacing"] == 100:
self.cmbThemeLineSpacing.setCurrentIndex(0)
elif self._themeData["Spacings/LineSpacing"] == 150:

View file

@ -46,7 +46,6 @@ class basicHighlighter(QSyntaxHighlighter):
c = QTextCursor(self.currentBlock())
#c.joinPreviousEditBlock()
bf = QTextBlockFormat(self._defaultBlockFormat)
bf.setAlignment(c.blockFormat().alignment())
if bf != c.blockFormat():
c.setBlockFormat(bf)
#c.endEditBlock()

View file

@ -40,6 +40,7 @@ def loadThemeDatas(themeFile):
loadThemeSetting(_themeData, settings, "Text/Misspelled", "#ff0000")
# Paragraph Options
loadThemeSetting(_themeData, settings, "Spacings/Alignment", 0)
loadThemeSetting(_themeData, settings, "Spacings/IndentFirstLine", False)
loadThemeSetting(_themeData, settings, "Spacings/LineSpacing", 100)
loadThemeSetting(_themeData, settings, "Spacings/ParagraphAbove", 0)
@ -178,6 +179,10 @@ def themeEditorGeometry(themeDatas, textRect):
def getThemeBlockFormat(themeDatas):
bf = QTextBlockFormat()
bf.setAlignment(Qt.AlignLeft if themeDatas["Spacings/Alignment"] == 0 else
Qt.AlignCenter if themeDatas["Spacings/Alignment"] == 1 else
Qt.AlignRight if themeDatas["Spacings/Alignment"] == 2 else
Qt.AlignJustify)
bf.setLineHeight(themeDatas["Spacings/LineSpacing"], QTextBlockFormat.ProportionalHeight)
bf.setTextIndent(themeDatas["Spacings/TabWidth"] * 1 if themeDatas["Spacings/IndentFirstLine"] else 0)
bf.setTopMargin(themeDatas["Spacings/ParagraphAbove"])

View file

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'manuskript/ui/settings_ui.ui'
#
# Created: Sun Oct 15 22:18:32 2017
# Created: Tue Oct 17 12:19:44 2017
# by: PyQt5 UI code generator 5.2.1
#
# WARNING! All changes made in this file will be lost!
@ -1049,7 +1049,7 @@ class Ui_Settings(object):
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.formLayout_9.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_40)
self.cmbEditorLineSpacing = QtWidgets.QComboBox(self.groupBox_13)
font = QtGui.QFont()
font.setBold(False)
@ -1060,7 +1060,7 @@ class Ui_Settings(object):
self.cmbEditorLineSpacing.addItem("")
self.cmbEditorLineSpacing.addItem("")
self.cmbEditorLineSpacing.addItem("")
self.formLayout_9.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbEditorLineSpacing)
self.formLayout_9.setWidget(1, 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)
@ -1076,14 +1076,14 @@ class Ui_Settings(object):
self.spnEditorLineSpacing.setMaximum(999)
self.spnEditorLineSpacing.setProperty("value", 100)
self.spnEditorLineSpacing.setObjectName("spnEditorLineSpacing")
self.formLayout_9.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.spnEditorLineSpacing)
self.formLayout_9.setWidget(2, 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.formLayout_9.setWidget(3, 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)
@ -1098,7 +1098,7 @@ class Ui_Settings(object):
self.spnEditorTabWidth.setMaximum(199)
self.spnEditorTabWidth.setProperty("value", 20)
self.spnEditorTabWidth.setObjectName("spnEditorTabWidth")
self.formLayout_9.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.spnEditorTabWidth)
self.formLayout_9.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.spnEditorTabWidth)
self.chkEditorIndent = QtWidgets.QCheckBox(self.groupBox_13)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@ -1110,14 +1110,14 @@ class Ui_Settings(object):
font.setWeight(50)
self.chkEditorIndent.setFont(font)
self.chkEditorIndent.setObjectName("chkEditorIndent")
self.formLayout_9.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.chkEditorIndent)
self.formLayout_9.setWidget(4, 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.formLayout_9.setWidget(5, 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)
@ -1132,7 +1132,7 @@ class Ui_Settings(object):
self.spnEditorParaAbove.setMaximum(199)
self.spnEditorParaAbove.setProperty("value", 5)
self.spnEditorParaAbove.setObjectName("spnEditorParaAbove")
self.formLayout_9.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.spnEditorParaAbove)
self.formLayout_9.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.spnEditorParaAbove)
self.spnEditorParaBelow = QtWidgets.QSpinBox(self.groupBox_13)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@ -1147,7 +1147,29 @@ class Ui_Settings(object):
self.spnEditorParaBelow.setMaximum(199)
self.spnEditorParaBelow.setProperty("value", 5)
self.spnEditorParaBelow.setObjectName("spnEditorParaBelow")
self.formLayout_9.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.spnEditorParaBelow)
self.formLayout_9.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.spnEditorParaBelow)
self.label_35 = QtWidgets.QLabel(self.groupBox_13)
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.label_35.setFont(font)
self.label_35.setObjectName("label_35")
self.formLayout_9.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_35)
self.cmbEditorAlignment = QtWidgets.QComboBox(self.groupBox_13)
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.cmbEditorAlignment.setFont(font)
self.cmbEditorAlignment.setObjectName("cmbEditorAlignment")
icon = QtGui.QIcon.fromTheme("format-justify-left")
self.cmbEditorAlignment.addItem(icon, "")
icon = QtGui.QIcon.fromTheme("format-justify-center")
self.cmbEditorAlignment.addItem(icon, "")
icon = QtGui.QIcon.fromTheme("format-justify-right")
self.cmbEditorAlignment.addItem(icon, "")
icon = QtGui.QIcon.fromTheme("format-justify-fill")
self.cmbEditorAlignment.addItem(icon, "")
self.formLayout_9.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbEditorAlignment)
self.horizontalLayout_11.addWidget(self.groupBox_13)
icon = QtGui.QIcon.fromTheme("view-text")
self.tabViews.addTab(self.tab_4, icon, "")
@ -1619,6 +1641,20 @@ class Ui_Settings(object):
self.chkThemeIndent.setSizePolicy(sizePolicy)
self.chkThemeIndent.setObjectName("chkThemeIndent")
self.formLayout_6.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.chkThemeIndent)
self.cmbThemeAlignment = QtWidgets.QComboBox(self.stackedWidgetPage3_2)
self.cmbThemeAlignment.setObjectName("cmbThemeAlignment")
icon = QtGui.QIcon.fromTheme("format-justify-left")
self.cmbThemeAlignment.addItem(icon, "")
icon = QtGui.QIcon.fromTheme("format-justify-center")
self.cmbThemeAlignment.addItem(icon, "")
icon = QtGui.QIcon.fromTheme("format-justify-right")
self.cmbThemeAlignment.addItem(icon, "")
icon = QtGui.QIcon.fromTheme("format-justify-fill")
self.cmbThemeAlignment.addItem(icon, "")
self.formLayout_6.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbThemeAlignment)
self.label_53 = QtWidgets.QLabel(self.stackedWidgetPage3_2)
self.label_53.setObjectName("label_53")
self.formLayout_6.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_53)
self.themeEditStack.addWidget(self.stackedWidgetPage3_2)
self.verticalLayout_14.addWidget(self.themeEditStack)
self.lblPreview = QtWidgets.QLabel(self.splitter)
@ -1640,7 +1676,7 @@ class Ui_Settings(object):
self.stack.setCurrentIndex(2)
self.tabViews.setCurrentIndex(3)
self.themeStack.setCurrentIndex(1)
self.themeEditStack.setCurrentIndex(0)
self.themeEditStack.setCurrentIndex(3)
self.lstMenu.currentRowChanged['int'].connect(self.stack.setCurrentIndex)
self.chkRevisionsKeep.toggled['bool'].connect(self.chkRevisionRemove.setEnabled)
QtCore.QMetaObject.connectSlotsByName(Settings)
@ -1808,6 +1844,11 @@ class Ui_Settings(object):
self.label_41.setText(_translate("Settings", "Spacing:"))
self.spnEditorParaAbove.setSuffix(_translate("Settings", " px"))
self.spnEditorParaBelow.setSuffix(_translate("Settings", " px"))
self.label_35.setText(_translate("Settings", "Alignment:"))
self.cmbEditorAlignment.setItemText(0, _translate("Settings", "Left"))
self.cmbEditorAlignment.setItemText(1, _translate("Settings", "Center"))
self.cmbEditorAlignment.setItemText(2, _translate("Settings", "Right"))
self.cmbEditorAlignment.setItemText(3, _translate("Settings", "Justify"))
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"))
@ -1864,4 +1905,9 @@ class Ui_Settings(object):
self.spnThemeParaAbove.setSuffix(_translate("Settings", " px"))
self.spnThemeParaBelow.setSuffix(_translate("Settings", " px"))
self.chkThemeIndent.setText(_translate("Settings", "Indent 1st line"))
self.cmbThemeAlignment.setItemText(0, _translate("Settings", "Left"))
self.cmbThemeAlignment.setItemText(1, _translate("Settings", "Center"))
self.cmbThemeAlignment.setItemText(2, _translate("Settings", "Right"))
self.cmbThemeAlignment.setItemText(3, _translate("Settings", "Justify"))
self.label_53.setText(_translate("Settings", "Alignment"))

View file

@ -796,7 +796,9 @@ text-align:center;</string>
</property>
<widget class="QWidget" name="tab">
<attribute name="icon">
<iconset theme="view-list-tree"/>
<iconset theme="view-list-tree">
<normaloff/>
</iconset>
</attribute>
<attribute name="title">
<string>Tree</string>
@ -1172,7 +1174,9 @@ text-align:center;</string>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="icon">
<iconset theme="view-outline"/>
<iconset theme="view-outline">
<normaloff/>
</iconset>
</attribute>
<attribute name="title">
<string>Outline</string>
@ -1518,7 +1522,9 @@ text-align:center;</string>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="icon">
<iconset theme="view-cards"/>
<iconset theme="view-cards">
<normaloff/>
</iconset>
</attribute>
<attribute name="title">
<string>Index cards</string>
@ -1919,7 +1925,9 @@ text-align:center;</string>
</widget>
<widget class="QWidget" name="tab_4">
<attribute name="icon">
<iconset theme="view-text"/>
<iconset theme="view-text">
<normaloff/>
</iconset>
</attribute>
<attribute name="title">
<string>Text editor</string>
@ -2115,7 +2123,7 @@ text-align:center;</string>
<string>Paragraphs</string>
</property>
<layout class="QFormLayout" name="formLayout_9">
<item row="0" column="0">
<item row="1" column="0">
<widget class="QLabel" name="label_40">
<property name="font">
<font>
@ -2128,7 +2136,7 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="0" column="1">
<item row="1" column="1">
<widget class="QComboBox" name="cmbEditorLineSpacing">
<property name="font">
<font>
@ -2158,7 +2166,7 @@ text-align:center;</string>
</item>
</widget>
</item>
<item row="1" column="1">
<item row="2" column="1">
<widget class="QSpinBox" name="spnEditorLineSpacing">
<property name="enabled">
<bool>false</bool>
@ -2189,7 +2197,7 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="2" column="0">
<item row="3" column="0">
<widget class="QLabel" name="label_42">
<property name="font">
<font>
@ -2202,7 +2210,7 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="3" column="1">
<widget class="QSpinBox" name="spnEditorTabWidth">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -2230,7 +2238,7 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="3" column="1">
<item row="4" column="1">
<widget class="QCheckBox" name="chkEditorIndent">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -2249,7 +2257,7 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="4" column="0">
<item row="5" column="0">
<widget class="QLabel" name="label_41">
<property name="font">
<font>
@ -2262,7 +2270,7 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="4" column="1">
<item row="5" column="1">
<widget class="QSpinBox" name="spnEditorParaAbove">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -2290,7 +2298,7 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="5" column="1">
<item row="6" column="1">
<widget class="QSpinBox" name="spnEditorParaBelow">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -2318,6 +2326,61 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_35">
<property name="font">
<font>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Alignment:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cmbEditorAlignment">
<property name="font">
<font>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<item>
<property name="text">
<string>Left</string>
</property>
<property name="icon">
<iconset theme="format-justify-left"/>
</property>
</item>
<item>
<property name="text">
<string>Center</string>
</property>
<property name="icon">
<iconset theme="format-justify-center"/>
</property>
</item>
<item>
<property name="text">
<string>Right</string>
</property>
<property name="icon">
<iconset theme="format-justify-right"/>
</property>
</item>
<item>
<property name="text">
<string>Justify</string>
</property>
<property name="icon">
<iconset theme="format-justify-fill"/>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
@ -2780,7 +2843,7 @@ text-align:center;</string>
<item>
<widget class="QStackedWidget" name="themeEditStack">
<property name="currentIndex">
<number>0</number>
<number>3</number>
</property>
<widget class="QWidget" name="stackedWidgetPage1_2">
<layout class="QFormLayout" name="formLayout_4">
@ -3292,6 +3355,49 @@ text-align:center;</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cmbThemeAlignment">
<item>
<property name="text">
<string>Left</string>
</property>
<property name="icon">
<iconset theme="format-justify-left"/>
</property>
</item>
<item>
<property name="text">
<string>Center</string>
</property>
<property name="icon">
<iconset theme="format-justify-center"/>
</property>
</item>
<item>
<property name="text">
<string>Right</string>
</property>
<property name="icon">
<iconset theme="format-justify-right"/>
</property>
</item>
<item>
<property name="text">
<string>Justify</string>
</property>
<property name="icon">
<iconset theme="format-justify-fill"/>
</property>
</item>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_53">
<property name="text">
<string>Alignment</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>

View file

@ -203,6 +203,10 @@ class textEditView(QTextEdit):
bf.setTextIndent(opt["tabWidth"] * 1 if opt["indent"] else 0)
bf.setTopMargin(opt["spacingAbove"])
bf.setBottomMargin(opt["spacingBelow"])
bf.setAlignment(Qt.AlignLeft if opt["textAlignment"] == 0 else
Qt.AlignCenter if opt["textAlignment"] == 1 else
Qt.AlignRight if opt["textAlignment"] == 2 else
Qt.AlignJustify)
self._defaultCharFormat = cf
self._defaultBlockFormat = bf