aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatias Linares <matias@deprecated.org>2025-03-05 17:48:24 -0300
committerMatias Linares <matias@deprecated.org>2025-03-05 17:48:24 -0300
commit921f4d2dfaba106da70be1e30d2ccbbfd7892775 (patch)
tree55b224f6020941f621d6824f75c795fef3ecf4e5
parent228cfa7b423d77d42c6db251108c9cb8b7a51eb5 (diff)
downloadkodereviewer-921f4d2dfaba106da70be1e30d2ccbbfd7892775.tar.gz
Add new diff view :)main
-rw-r--r--kodereviewer/models/diff_file.py3
-rw-r--r--kodereviewer/models/file.py2
-rw-r--r--kodereviewer/qml/FilesChangedPage.qml128
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
}