Warning, /office/marknote/src/contents/ui/EditPage.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 Mathis BrĂ¼chert <mbb@kaidan.im>
0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0003 
0004 import QtQuick 2.15
0005 import org.kde.kirigami 2.19 as Kirigami
0006 import QtQuick.Controls 2.0
0007 import QtQuick.Layouts 1.12
0008 
0009 import org.kde.marknote 1.0
0010 
0011 Kirigami.ScrollablePage {
0012     id: root
0013     property string path
0014     property string name
0015     property bool saved : true
0016     Kirigami.Theme.colorSet: Kirigami.Theme.View
0017     titleDelegate: RowLayout {
0018         visible: name
0019         Layout.fillWidth: true
0020         Item { Layout.fillWidth: true }
0021         Rectangle {
0022             height:5
0023             width: 5
0024             radius: 2.5
0025             color: Kirigami.Theme.textColor
0026             visible: !saved
0027         }
0028         Kirigami.Heading {
0029             text: name
0030             type: saved? Kirigami.Heading.Type.Normal:Kirigami.Heading.Type.Primary
0031 
0032         }
0033         Item { Layout.fillWidth: true }
0034     }
0035 
0036     MouseArea{
0037         anchors.fill: parent
0038         cursorShape: Qt.IBeamCursor
0039         onClicked: {
0040             textArea.cursorPosition = textArea.length
0041             textArea.forceActiveFocus()
0042         }
0043     }
0044 
0045     RowLayout {
0046         visible: name
0047         z: 600000
0048         y: root.height - 100
0049         width: root.width
0050         parent: root.overlay
0051         ToolBar {
0052             id: toolbar
0053 
0054             Layout.margins: 10
0055             Layout.alignment:Qt.AlignHCenter
0056             background: Kirigami.ShadowedRectangle {
0057                 Kirigami.Theme.inherit: false
0058                 Kirigami.Theme.colorSet: Kirigami.Theme.Window
0059                 shadow.size: 15
0060                 shadow.yOffset: 3
0061                 shadow.color: Qt.rgba(0, 0, 0, 0.2)
0062                 color: Kirigami.Theme.backgroundColor
0063                 border.color: Kirigami.ColorUtils.tintWithAlpha(Kirigami.Theme.backgroundColor, Kirigami.Theme.textColor, 0.2)
0064                 border.width: 1
0065                 radius: 5
0066             }
0067             RowLayout {
0068                 ToolButton {
0069                     id: boldButton
0070                     Shortcut {
0071                         sequence: "Ctrl+B"
0072                         onActivated: boldButton.clicked()
0073                     }
0074                     icon.name: "format-text-bold"
0075                     text: i18nc("@action:button", "Bold")
0076                     display: AbstractButton.IconOnly
0077                     checkable: true
0078                     checked: document.bold
0079                     onClicked: {
0080                         document.bold = !document.bold
0081                     }
0082                 }
0083                 ToolButton {
0084                     id: italicButton
0085                     Shortcut {
0086                         sequence: "Ctrl+I"
0087                         onActivated: italicButton.clicked()
0088                     }
0089                     icon.name: "format-text-italic"
0090                     text: i18nc("@action:button", "Italic")
0091                     display: AbstractButton.IconOnly
0092                     checkable: true
0093                     checked: document.italic
0094                     onClicked: {
0095                         document.italic = !document.italic
0096                     }
0097                 }
0098                 ToolButton {
0099                     id: underlineButton
0100                     Shortcut {
0101                         sequence: "Ctrl+U"
0102                         onActivated: underlineButton.clicked()
0103                     }
0104                     icon.name: "format-text-underline"
0105                     text: i18nc("@action:button", "Underline")
0106                     display: AbstractButton.IconOnly
0107                     checkable: true
0108                     checked: document.underline
0109                     onClicked: {
0110                         document.underline = !document.underline
0111                     }
0112                 }
0113                 ToolButton {
0114                     enabled: false
0115                     icon.name: "format-text-strikethrough"
0116                     text: i18nc("@action:button", "Strikethrough")
0117                     display: AbstractButton.IconOnly
0118                     checkable: true
0119                 }
0120                 ToolButton {
0121                     enabled: false
0122                     icon.name: "draw-highlight"
0123                     text: i18nc("@action:button", "highlight")
0124                     display: AbstractButton.IconOnly
0125                     checkable: true
0126                 }
0127                 Kirigami.Separator {
0128                     Layout.fillHeight: true
0129                     Layout.margins: 0
0130                 }
0131                 ToolButton {
0132                     enabled: false
0133                     icon.name: "format-list-unordered"
0134                     text: i18n("Add list")
0135                     display: AbstractButton.IconOnly
0136                     checkable: true
0137 
0138                 }
0139                 ToolButton {
0140                     enabled: false
0141                     icon.name: "format-list-ordered"
0142                     text: i18n("Add numbered list")
0143                     display: AbstractButton.IconOnly
0144                     checkable: true
0145                 }
0146                 Kirigami.Separator {
0147                     Layout.fillHeight: true
0148                     Layout.margins: 0
0149                 }
0150                 ComboBox {
0151                     enabled: false
0152                     displayText: i18n("Heading %1", parseInt(currentText) + 1)
0153                     model: 6
0154                 }
0155             }
0156         }
0157     }
0158     RowLayout{
0159         visible: name
0160         width: root.width
0161         height: flickable.contentHeight
0162         Flickable {
0163 
0164             id: flickable
0165             Layout.alignment: Qt.AlignHCenter
0166             Layout.maximumWidth: Kirigami.Units.gridUnit * 40
0167             Layout.margins: 0
0168             Layout.fillHeight: true
0169             Layout.fillWidth: true
0170             contentWidth: width
0171             TextArea.flickable: TextArea {
0172                 id: textArea
0173                 background: Item {
0174 
0175                 }
0176                 onTextChanged: {
0177                     saved = false
0178                     saveTimer.restart()
0179                 }
0180                 persistentSelection: true
0181                 textMargin: Kirigami.Units.gridUnit
0182                 height: parent.height
0183                 textFormat: TextEdit.MarkdownText
0184                 wrapMode: TextEdit.Wrap
0185 
0186                 DocumentHandler {
0187                     id: document
0188                     document: textArea.textDocument
0189                     cursorPosition: textArea.cursorPosition
0190                     selectionStart: textArea.selectionStart
0191                     selectionEnd: textArea.selectionEnd
0192                     // textColor: TODO
0193                     Component.onCompleted: document.load(path)
0194                     Component.onDestruction: document.saveAs(path)
0195                     onLoaded: {
0196                         textArea.text = text
0197                     }
0198                     onError: (message) => {
0199                         print(message)
0200                     }
0201                 }
0202             }
0203 
0204             Timer{
0205                 id: saveTimer
0206                 repeat: false
0207                 interval: 1000
0208                 onTriggered: {
0209                     if (root.name) {
0210                         document.saveAs(path)
0211                         console.log("timer ")
0212                         saved = true
0213                     }
0214                 }
0215             }
0216         }
0217     }
0218 }