Implement list support

This commit is contained in:
Kovid Goyal 2019-07-01 15:28:59 +05:30
parent 943f5c00b1
commit ed843864a0
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -12,8 +12,8 @@ from lxml import html
from PyQt5.Qt import ( from PyQt5.Qt import (
QAction, QApplication, QBrush, QByteArray, QCheckBox, QColor, QColorDialog, QAction, QApplication, QBrush, QByteArray, QCheckBox, QColor, QColorDialog,
QDialog, QDialogButtonBox, QFontInfo, QFormLayout, QHBoxLayout, QIcon, QDialog, QDialogButtonBox, QFontInfo, QFormLayout, QHBoxLayout, QIcon,
QKeySequence, QLabel, QLineEdit, QMenu, QPlainTextEdit, QPushButton, QSize, QKeySequence, QLabel, QLineEdit, QTextListFormat, QMenu, QPlainTextEdit, QPushButton,
QSyntaxHighlighter, Qt, QTabWidget, QTextBlockFormat, QTextCharFormat, QSize, QSyntaxHighlighter, Qt, QTabWidget, QTextBlockFormat, QTextCharFormat,
QTextCursor, QTextEdit, QToolBar, QUrl, QVBoxLayout, QWidget, pyqtSignal, QTextCursor, QTextEdit, QToolBar, QUrl, QVBoxLayout, QWidget, pyqtSignal,
pyqtSlot pyqtSlot
) )
@ -130,9 +130,10 @@ class EditorWidget(QTextEdit, LineEditECM): # {{{
connect_lambda(self.undoAvailable, self, lambda self, yes: self.action_undo.setEnabled(yes)) connect_lambda(self.undoAvailable, self, lambda self, yes: self.action_undo.setEnabled(yes))
connect_lambda(self.redoAvailable, self, lambda self, yes: self.action_redo.setEnabled(yes)) connect_lambda(self.redoAvailable, self, lambda self, yes: self.action_redo.setEnabled(yes))
self.action_undo.setEnabled(False), self.action_redo.setEnabled(False) self.action_undo.setEnabled(False), self.action_redo.setEnabled(False)
# self.textChanged.connect(self.update_action_state) self.textChanged.connect(self.update_cursor_position_actions)
# self.cursorPositionChanged.connect(self.update_action_state) self.cursorPositionChanged.connect(self.update_cursor_position_actions)
self.textChanged.connect(self.data_changed) self.textChanged.connect(self.data_changed)
self.update_cursor_position_actions()
def update_clipboard_actions(self, copy_available): def update_clipboard_actions(self, copy_available):
self.action_copy.setEnabled(copy_available) self.action_copy.setEnabled(copy_available)
@ -142,6 +143,12 @@ class EditorWidget(QTextEdit, LineEditECM): # {{{
has_selection = self.textCursor().hasSelection() has_selection = self.textCursor().hasSelection()
self.action_remove_format.setEnabled(has_selection) self.action_remove_format.setEnabled(has_selection)
def update_cursor_position_actions(self):
c = self.textCursor()
ls = c.currentList()
self.action_ordered_list.setChecked(ls is not None and ls.format().style() == QTextListFormat.ListDecimal)
self.action_unordered_list.setChecked(ls is not None and ls.format().style() == QTextListFormat.ListDisc)
def set_readonly(self, what): def set_readonly(self, what):
self.readonly = what self.readonly = what
@ -176,11 +183,22 @@ class EditorWidget(QTextEdit, LineEditECM): # {{{
def do_subscript(self): def do_subscript(self):
raise NotImplementedError('TODO') raise NotImplementedError('TODO')
def do_list(self, fmt):
c = self.textCursor()
ls = c.currentList()
if ls is not None:
lf = ls.format()
lf.setStyle(fmt)
ls.setFormat(lf)
else:
ls = c.createList(fmt)
self.setTextCursor(c)
def do_ordered_list(self): def do_ordered_list(self):
raise NotImplementedError('TODO') self.do_list(QTextListFormat.ListDecimal)
def do_unordered_list(self): def do_unordered_list(self):
raise NotImplementedError('TODO') self.do_list(QTextListFormat.ListDisc)
def do_align_left(self): def do_align_left(self):
raise NotImplementedError('TODO') raise NotImplementedError('TODO')