summaryrefslogtreecommitdiff
path: root/kodereviewer/qml/Editor.qml
diff options
context:
space:
mode:
Diffstat (limited to 'kodereviewer/qml/Editor.qml')
-rw-r--r--kodereviewer/qml/Editor.qml100
1 files changed, 100 insertions, 0 deletions
diff --git a/kodereviewer/qml/Editor.qml b/kodereviewer/qml/Editor.qml
new file mode 100644
index 0000000..9cc6cbf
--- /dev/null
+++ b/kodereviewer/qml/Editor.qml
@@ -0,0 +1,100 @@
+pragma ComponentBehavior: Bound
+import QtQuick 6.7
+import QtQuick.Controls 6.7 as QQC2
+import QtQuick.Layouts 6.7
+
+import org.kde.kirigami as Kirigami
+
+import org.kde.syntaxhighlighting
+
+import org.deprecated.kodereviewer
+
+TextEdit {
+
+ id: root
+
+ required property string file
+
+ signal commentClicked(string path, int startLine, int endLine)
+ signal newComment(string path, int startLine, int endLine)
+
+ property string filename: "A.patch"
+
+ property int lineHeight: contentHeight / lineCount
+
+ leftPadding: lineNumberColumn.width + lineNumberColumn.anchors.leftMargin + Kirigami.Units.smallSpacing * 2
+
+ readOnly: true
+ textFormat: TextEdit.PlainText
+ wrapMode: TextEdit.Wrap
+ color: Kirigami.Theme.textColor
+ selectionColor: Kirigami.Theme.highlightColor
+ font.family: "monospace"
+ Kirigami.SpellCheck.enabled: false
+
+ LineModel {
+ id: lineModel
+ document: root.textDocument
+ }
+
+ onWidthChanged: lineModel.resetModel()
+ onHeightChanged: lineModel.resetModel()
+
+ SyntaxHighlighter {
+ id: highlighter
+ textEdit: root
+ definition: Repository.definitionForFileName(root.filename)
+ }
+
+ Kirigami.Separator {
+ anchors {
+ top: root.top
+ bottom: root.bottom
+ left: lineNumberColumn.right
+ leftMargin: Kirigami.Units.smallSpacing
+ }
+ }
+
+ ColumnLayout {
+ id: lineNumberColumn
+ anchors {
+ top: root.top
+ topMargin: root.topPadding
+ left: root.left
+ leftMargin: Kirigami.Units.smallSpacing
+ }
+ spacing: 0
+ Repeater {
+ id: repeater
+ model: lineModel
+ delegate: QQC2.Label {
+ id: label
+ required property int index
+ required property int lineHeight
+ Layout.fillWidth: true
+ Layout.preferredHeight: lineHeight
+ horizontalAlignment: Text.AlignRight
+ text: index + 1
+ color: Kirigami.Theme.disabledTextColor
+
+ font.family: "monospace"
+ }
+ }
+ }
+
+ onTextChanged: print(root.textDocument)
+
+ onFileChanged: {
+ repeater.model.resetModel()
+ }
+
+ function selectionStartLine() {
+ const beforeText = text.toString().substr(0, selectionStart)
+ return beforeText.split("\n").length
+ }
+
+ function selectionEndLine() {
+ const beforeText = text.toString().substr(0, selectionEnd)
+ return beforeText.split("\n").length
+ }
+}