diff options
Diffstat (limited to 'kodereviewer/qml/Editor.qml')
-rw-r--r-- | kodereviewer/qml/Editor.qml | 100 |
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 + } +} |