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 onDocumentChanged: print('Document changed!') } 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: lineModel.document = 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 } }