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
82
83
84
85
86
|
"""Model used for line numbers in Editor.qml"""
import logging
from enum import auto, IntEnum
from typing import Optional
import rich
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
from kodereviewer.diff_parser import Diff, DiffBlock
QML_IMPORT_NAME = "org.deprecated.kodereviewer"
QML_IMPORT_MAJOR_VERSION = 1
logger = logging.getLogger(__name__)
@QmlElement
class DiffFileModel(QAbstractListModel):
_diff_str: str
_diff: Diff
blocks: list[DiffBlock] = []
class Roles(IntEnum):
Content = Qt.ItemDataRole.UserRole + 1
LineCount = auto()
def __init__(self, *args, **kwargs):
self._diff_str = ''
super().__init__(*args, **kwargs)
def get_diff(self):
return self._diff_str
def set_diff(self, diff):
if diff == self._diff_str:
return
self._diff_str = diff
self._diff = Diff(diff)
self.diffChanged.emit()
self.resetModel()
diffChanged = Signal()
diff = Property(QObject, fget=get_diff, fset=set_diff, notify=diffChanged)
def data(self,
index: QModelIndex | QPersistentModelIndex,
role: int = Qt.ItemDataRole.DisplayRole) -> object:
if not index.isValid():
logger.debug('index not valid')
return
if self._diff_str is None:
return
row = index.row()
if row < 0 or row > self.rowCount():
logger.debug(f'row: {row}')
return
block = self.blocks[row]
if role == self.Roles.Content:
return block.content
if role == self.Roles.LineCount:
return len(block.content.split("\n"))
def rowCount(self, parent: QModelIndex | QPersistentModelIndex = QModelIndex()) -> int:
return len(self.blocks)
def roleNames(self) -> dict[int, QByteArray]:
return {
self.Roles.Content: QByteArray(b'content'),
}
@Slot()
def resetModel(self) -> None:
logger.debug('reseting model?')
self.beginResetModel()
self.endResetModel()
|