mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-15 02:12:29 +12:00
Adds #175: Typewriter scrolling
This commit is contained in:
parent
b97cbdc1c3
commit
2b1465a1f3
|
@ -74,6 +74,7 @@ textEditor = {
|
|||
"marginsLR": 0,
|
||||
"marginsTB": 20,
|
||||
"backgroundTransparent": False,
|
||||
"alwaysCenter": False,
|
||||
}
|
||||
|
||||
revisions = {
|
||||
|
@ -273,6 +274,7 @@ def load(string, fromString=False, protocol=None):
|
|||
"marginsLR": 0,
|
||||
"marginsTB": 20,
|
||||
"backgroundTransparent": False, # Added in 0.6.0
|
||||
"alwaysCenter": False, # Added in 0.7.0
|
||||
}
|
||||
|
||||
for k in added:
|
||||
|
|
|
@ -198,6 +198,8 @@ class settingsWindow(QWidget, Ui_Settings):
|
|||
self.spnEditorCursorWidth.setEnabled(opt["cursorWidth"] != 1)
|
||||
self.chkEditorNoBlinking.setChecked(opt["cursorNotBlinking"])
|
||||
self.chkEditorNoBlinking.stateChanged.connect(self.setApplicationCursorBlinking)
|
||||
self.chkEditorTypeWriterMode.setChecked(opt["alwaysCenter"])
|
||||
self.chkEditorTypeWriterMode.stateChanged.connect(self.updateEditorSettings)
|
||||
# Text areas
|
||||
self.chkEditorMaxWidth.setChecked(opt["maxWidth"] != 0)
|
||||
self.chkEditorMaxWidth.stateChanged.connect(self.updateEditorSettings)
|
||||
|
@ -479,6 +481,7 @@ class settingsWindow(QWidget, Ui_Settings):
|
|||
1 if not self.chkEditorCursorWidth.isChecked() else \
|
||||
self.spnEditorCursorWidth.value()
|
||||
self.spnEditorCursorWidth.setEnabled(self.chkEditorCursorWidth.isChecked())
|
||||
settings.textEditor["alwaysCenter"] = self.chkEditorTypeWriterMode.isChecked()
|
||||
|
||||
# Text area
|
||||
settings.textEditor["maxWidth"] = \
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# Form implementation generated from reading ui file 'manuskript/ui/settings_ui.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.9
|
||||
# Created by: PyQt5 UI code generator 5.5.1
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
|
@ -1291,6 +1291,13 @@ class Ui_Settings(object):
|
|||
self.chkEditorNoBlinking.setFont(font)
|
||||
self.chkEditorNoBlinking.setObjectName("chkEditorNoBlinking")
|
||||
self.formLayout_10.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.chkEditorNoBlinking)
|
||||
self.chkEditorTypeWriterMode = QtWidgets.QCheckBox(self.groupBox_15)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.chkEditorTypeWriterMode.setFont(font)
|
||||
self.chkEditorTypeWriterMode.setObjectName("chkEditorTypeWriterMode")
|
||||
self.formLayout_10.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.chkEditorTypeWriterMode)
|
||||
self.verticalLayout_22.addWidget(self.groupBox_15)
|
||||
self.horizontalLayout_4.addLayout(self.verticalLayout_22)
|
||||
icon = QtGui.QIcon.fromTheme("view-text")
|
||||
|
@ -1480,7 +1487,6 @@ class Ui_Settings(object):
|
|||
self.layoutWidget = QtWidgets.QWidget(self.splitter)
|
||||
self.layoutWidget.setObjectName("layoutWidget")
|
||||
self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.layoutWidget)
|
||||
self.verticalLayout_14.setContentsMargins(0, 0, 0, 0)
|
||||
self.verticalLayout_14.setObjectName("verticalLayout_14")
|
||||
self.cmbThemeEdit = QtWidgets.QComboBox(self.layoutWidget)
|
||||
self.cmbThemeEdit.setObjectName("cmbThemeEdit")
|
||||
|
@ -1495,7 +1501,6 @@ class Ui_Settings(object):
|
|||
self.stackedWidgetPage1_2.setObjectName("stackedWidgetPage1_2")
|
||||
self.formLayout_4 = QtWidgets.QFormLayout(self.stackedWidgetPage1_2)
|
||||
self.formLayout_4.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
|
||||
self.formLayout_4.setContentsMargins(0, 0, 0, 0)
|
||||
self.formLayout_4.setObjectName("formLayout_4")
|
||||
self.label_17 = QtWidgets.QLabel(self.stackedWidgetPage1_2)
|
||||
self.label_17.setObjectName("label_17")
|
||||
|
@ -1527,7 +1532,6 @@ class Ui_Settings(object):
|
|||
self.stackedWidgetPage2_2.setObjectName("stackedWidgetPage2_2")
|
||||
self.formLayout_5 = QtWidgets.QFormLayout(self.stackedWidgetPage2_2)
|
||||
self.formLayout_5.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
|
||||
self.formLayout_5.setContentsMargins(0, 0, 0, 0)
|
||||
self.formLayout_5.setObjectName("formLayout_5")
|
||||
self.label_20 = QtWidgets.QLabel(self.stackedWidgetPage2_2)
|
||||
self.label_20.setObjectName("label_20")
|
||||
|
@ -1625,7 +1629,6 @@ class Ui_Settings(object):
|
|||
self.page_2.setObjectName("page_2")
|
||||
self.formLayout_7 = QtWidgets.QFormLayout(self.page_2)
|
||||
self.formLayout_7.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
|
||||
self.formLayout_7.setContentsMargins(0, 0, 0, 0)
|
||||
self.formLayout_7.setObjectName("formLayout_7")
|
||||
self.label_29 = QtWidgets.QLabel(self.page_2)
|
||||
self.label_29.setObjectName("label_29")
|
||||
|
@ -1675,7 +1678,6 @@ class Ui_Settings(object):
|
|||
self.stackedWidgetPage3_2.setObjectName("stackedWidgetPage3_2")
|
||||
self.formLayout_6 = QtWidgets.QFormLayout(self.stackedWidgetPage3_2)
|
||||
self.formLayout_6.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
|
||||
self.formLayout_6.setContentsMargins(0, 0, 0, 0)
|
||||
self.formLayout_6.setObjectName("formLayout_6")
|
||||
self.label_26 = QtWidgets.QLabel(self.stackedWidgetPage3_2)
|
||||
self.label_26.setObjectName("label_26")
|
||||
|
@ -1778,7 +1780,7 @@ class Ui_Settings(object):
|
|||
self.horizontalLayout_8.addWidget(self.stack)
|
||||
|
||||
self.retranslateUi(Settings)
|
||||
self.stack.setCurrentIndex(5)
|
||||
self.stack.setCurrentIndex(2)
|
||||
self.tabViews.setCurrentIndex(3)
|
||||
self.themeStack.setCurrentIndex(1)
|
||||
self.themeEditStack.setCurrentIndex(3)
|
||||
|
@ -1970,6 +1972,7 @@ class Ui_Settings(object):
|
|||
self.chkEditorCursorWidth.setText(_translate("Settings", "Use block insertion of"))
|
||||
self.spnEditorCursorWidth.setSuffix(_translate("Settings", " px"))
|
||||
self.chkEditorNoBlinking.setText(_translate("Settings", "Disable blinking"))
|
||||
self.chkEditorTypeWriterMode.setText(_translate("Settings", "Typewriter mode"))
|
||||
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"))
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
<item>
|
||||
<widget class="QStackedWidget" name="stack">
|
||||
<property name="currentIndex">
|
||||
<number>5</number>
|
||||
<number>2</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="stackedWidgetPage1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
|
@ -2619,6 +2619,19 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="chkEditorTypeWriterMode">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Typewriter mode</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
@ -9,6 +9,7 @@ from PyQt5.QtGui import QTextCursor
|
|||
|
||||
from manuskript.ui.views.textEditView import textEditView
|
||||
from manuskript.ui.highlighters import MarkdownHighlighter
|
||||
from manuskript import settings
|
||||
# from manuskript.ui.editors.textFormat import textFormat
|
||||
# from manuskript.ui.editors.MDFunctions import MDFormatSelection
|
||||
|
||||
|
@ -28,6 +29,10 @@ class MDEditView(textEditView):
|
|||
# We have to setup things anew, for the highlighter notably
|
||||
self.setCurrentModelIndex(index)
|
||||
|
||||
self.cursorPositionChanged.connect(self.cursorPositionHasChanged)
|
||||
self.verticalScrollBar().rangeChanged.connect(
|
||||
self.scrollBarRangeChanged)
|
||||
|
||||
# def focusInEvent(self, event):
|
||||
# """Finds textFormatter and attach them to that view."""
|
||||
# textEditView.focusInEvent(self, event)
|
||||
|
@ -42,6 +47,33 @@ class MDEditView(textEditView):
|
|||
# tF.updateFromIndex(self._index)
|
||||
# tF.setTextEdit(self)
|
||||
|
||||
###########################################################################
|
||||
# TypeWriterScrolling
|
||||
###########################################################################
|
||||
|
||||
def cursorPositionHasChanged(self):
|
||||
self.centerCursor()
|
||||
|
||||
def centerCursor(self, force=False):
|
||||
cursor = self.cursorRect()
|
||||
viewport = self.viewport().rect()
|
||||
if (force or settings.textEditor["alwaysCenter"]
|
||||
or cursor.bottom() >= viewport.bottom()
|
||||
or cursor.top() <= viewport.top()):
|
||||
offset = viewport.center() - cursor.center()
|
||||
scrollbar = self.verticalScrollBar()
|
||||
scrollbar.setValue(scrollbar.value() - offset.y())
|
||||
|
||||
def scrollBarRangeChanged(self, min, max):
|
||||
"""
|
||||
Adds viewport height to scrollbar max so that we can center cursor
|
||||
on screen.
|
||||
"""
|
||||
if settings.textEditor["alwaysCenter"]:
|
||||
self.verticalScrollBar().blockSignals(True)
|
||||
self.verticalScrollBar().setMaximum(max + self.viewport().height())
|
||||
self.verticalScrollBar().blockSignals(False)
|
||||
|
||||
###########################################################################
|
||||
# FORMATTING (#FIXME)
|
||||
###########################################################################
|
||||
|
|
Loading…
Reference in a new issue