diff options
author | Matias Linares <matias@deprecated.org> | 2025-03-05 17:48:24 -0300 |
---|---|---|
committer | Matias Linares <matias@deprecated.org> | 2025-03-05 17:48:24 -0300 |
commit | 921f4d2dfaba106da70be1e30d2ccbbfd7892775 (patch) | |
tree | 55b224f6020941f621d6824f75c795fef3ecf4e5 | |
parent | 228cfa7b423d77d42c6db251108c9cb8b7a51eb5 (diff) | |
download | kodereviewer-921f4d2dfaba106da70be1e30d2ccbbfd7892775.tar.gz |
Add new diff view :)main
-rw-r--r-- | kodereviewer/models/diff_file.py | 3 | ||||
-rw-r--r-- | kodereviewer/models/file.py | 2 | ||||
-rw-r--r-- | kodereviewer/qml/FilesChangedPage.qml | 128 |
3 files changed, 93 insertions, 40 deletions
diff --git a/kodereviewer/models/diff_file.py b/kodereviewer/models/diff_file.py index c84eeca..5ea580d 100644 --- a/kodereviewer/models/diff_file.py +++ b/kodereviewer/models/diff_file.py @@ -45,8 +45,7 @@ class DiffFileModel(QAbstractListModel): self.resetModel() diffChanged = Signal() - diff = Property(QObject, fget=get_diff, fset=set_diff, - notify=diffChanged) + diff = Property(QObject, fget=get_diff, fset=set_diff, notify=diffChanged) def data(self, index: QModelIndex | QPersistentModelIndex, diff --git a/kodereviewer/models/file.py b/kodereviewer/models/file.py index ce47bcc..b4a2b1f 100644 --- a/kodereviewer/models/file.py +++ b/kodereviewer/models/file.py @@ -273,9 +273,11 @@ class DiffFileModel(QAbstractItemModel): return self.beginResetModel() + self.root_node = DiffFileItem(text='') self._diff = diff self.parse_file(self._diff) self.endResetModel() + self.diffChanged.emit() diffChanged = Signal() diff = Property(str, fget=get_diff, fset=set_diff, notify=diffChanged) diff --git a/kodereviewer/qml/FilesChangedPage.qml b/kodereviewer/qml/FilesChangedPage.qml index f1ee031..1aa823b 100644 --- a/kodereviewer/qml/FilesChangedPage.qml +++ b/kodereviewer/qml/FilesChangedPage.qml @@ -30,6 +30,11 @@ Kirigami.ScrollablePage { DiffFileModel { id: diffFileModel diff: root.currentText + + onDiffChanged: { + console.log('expanding') + contentTreeView.expandRecursively() + } } onPullRequestChanged: { @@ -84,51 +89,99 @@ Kirigami.ScrollablePage { text: "No file selected" } - ColumnLayout { - anchors.fill: parent + TreeView { + id: contentTreeView + visible: root.currentFile != '' - Editor { - id: editor - Layout.fillWidth: true - Layout.fillHeight: true - file: root.currentFile + '.diff' - text: root.currentText + model: diffFileModel + anchors.fill: parent + clip: true + + delegate: Item { + id: itemDelegate + // Assigned to by TreeView: + required property TreeView treeView + required property bool isTreeNode + required property bool expanded + required property int hasChildren + required property int depth + required property int row + required property int column + required property bool current + required property string text + + property bool isHeading: isTreeNode && hasChildren + implicitHeight: isHeading ? heading.implicitHeight : diffEditor.implicitHeight + implicitWidth: treeView.width + + + onExpandedChanged: indicator.rotation = expanded ? 90 : 0 MouseArea { + enabled: parent.isHeading + + onClicked: parent.treeView.toggleExpanded(itemDelegate.row) anchors.fill: parent - //propagateComposedEvents: true - acceptedButtons: Qt.RightButton - cursorShape: Qt.IBeamCursor + } - onClicked: event => { - if (event.button === Qt.RightButton) { // 'mouse' is a MouseEvent argument passed into the onClicked signal handler - editorMenu.popup() - } + RowLayout { + id: headingLayout + visible: parent.isHeading + property string itemText: parent.text + QQC2.Label { + id: indicator + text: "▶" } + Kirigami.Heading { + id: heading + level: 2 + text: `Context: ${parent.itemText}` + Layout.fillWidth: true + } + } - QQC2.Menu { - id: editorMenu - QQC2.MenuItem { - text: "Add review" - icon.name: "preview-symbolic" - onTriggered: { - console.log("triggered review") - console.log(`start line: ${editor.selectionStartLine()} to ${editor.selectionEndLine()}`) - - const component = Qt.createComponent("ReviewWindow.qml") - print(applicationWindow().project) - const params = { - project: applicationWindow().project, - pullRequestNumber: root.pullRequest.number, - diffText: root.currentText, - path: root.currentFile, - startLine: editor.selectionStartLine(), - endLine: editor.selectionEndLine(), - commitId: root.pullRequest.last_commit - } - component.createObject(applicationWindow(), params) + Editor { + id: diffEditor + visible: !parent.isHeading + file: 'bla.diff' + text: parent.text + + MouseArea { + anchors.fill: parent + //propagateComposedEvents: true + acceptedButtons: Qt.RightButton + cursorShape: Qt.IBeamCursor + + onClicked: event => { + if (event.button === Qt.RightButton) { // 'mouse' is a MouseEvent argument passed into the onClicked signal handler + editorMenu.popup() + } + } - //popup.open() + QQC2.Menu { + id: editorMenu + QQC2.MenuItem { + text: "Add review" + icon.name: "preview-symbolic" + onTriggered: { + console.log("triggered review") + console.log(`start line: ${diffEditor.selectionStartLine()} to ${diffEditor.selectionEndLine()}`) + + const component = Qt.createComponent("ReviewWindow.qml") + print(applicationWindow().project) + const params = { + project: applicationWindow().project, + pullRequestNumber: root.pullRequest.number, + diffText: root.currentText, + path: root.currentFile, + startLine: diffEditor.selectionStartLine(), + endLine: diffEditor.selectionEndLine(), + commitId: root.pullRequest.last_commit + } + component.createObject(applicationWindow(), params) + + //popup.open() + } } } } @@ -139,7 +192,6 @@ Kirigami.ScrollablePage { Connections { target: contextDrawer function onFileSelected(filename, text) { - console.log("file changed!") root.currentFile = filename root.currentText = text } |