1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
"""Model used for line numbers in Editor.qml"""
from enum import auto, IntEnum
from typing import Optional
from PySide6.QtCore import QAbstractListModel, QByteArray, QModelIndex, QObject, QPersistentModelIndex, QStandardPaths, QUrl, Qt, Signal, Slot, Property
from PySide6.QtQuick import QQuickTextDocument
from PySide6.QtQml import QmlElement
QML_IMPORT_NAME = "org.deprecated.kodereviewer"
QML_IMPORT_MAJOR_VERSION = 1
@QmlElement
class LineModel(QAbstractListModel):
_document: QQuickTextDocument | None
class Roles(IntEnum):
LineHeight = Qt.ItemDataRole.UserRole + 1
def __init__(self, *args, **kwargs):
self._document = None
super().__init__(*args, **kwargs)
def get_document(self):
return self._document
def set_document(self, document):
print('setting document')
if document == self._document:
return
self._document = document
self.documentChanged.emit()
self.resetModel()
documentChanged = Signal()
document = Property(QQuickTextDocument, fget=get_document, fset=set_document,
notify=documentChanged)
def data(self,
index: QModelIndex | QPersistentModelIndex,
role: int = Qt.ItemDataRole.DisplayRole) -> object:
if not index.isValid():
print('index not valid')
return
if self._document is None:
print('document none')
return
row = index.row()
if row < 0 or row > self.rowCount():
print(f'row: {row}')
return
if role == self.Roles.LineHeight:
text_doc = self._document.textDocument()
return int(text_doc.documentLayout().blockBoundingRect(text_doc.findBlockByNumber(row)).height())
print('found role ?')
def rowCount(self, parent: QModelIndex | QPersistentModelIndex = QModelIndex()) -> int:
if self._document is None:
print('document is none: row count 0')
return 0
print(f'returning {self._document.textDocument().blockCount()}')
return self._document.textDocument().blockCount();
def roleNames(self) -> dict[int, QByteArray]:
return {
self.Roles.LineHeight: QByteArray(b'lineHeight'),
}
@Slot()
def resetModel(self) -> None:
print('reseting model?')
self.beginResetModel()
self.endResetModel()
|