Warning, /utilities/notae/src/ui/main.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2023 Felipe Kinoshita <kinofhek@gmail.com> 0002 // SPDX-License-Identifier: GPL-3.0-or-later 0003 0004 import QtQuick 2.15 0005 import QtQuick.Controls 2.15 as QQC2 0006 import QtQuick.Layouts 1.15 0007 import Qt.labs.platform 1.1 0008 0009 import org.kde.kirigami 2.20 as Kirigami 0010 0011 import org.kde.notae 1.0 0012 0013 QQC2.ApplicationWindow { 0014 id: root 0015 0016 visible: true 0017 title: i18n("Notae") 0018 0019 width: Kirigami.Units.gridUnit * 25 0020 height: Kirigami.Units.gridUnit * 33 0021 minimumWidth: Kirigami.Units.gridUnit * 25 0022 minimumHeight: Kirigami.Units.gridUnit * 15 0023 0024 Timer { 0025 id: saveWindowGeometryTimer 0026 interval: 1000 0027 onTriggered: App.saveWindowGeometry(root) 0028 } 0029 0030 Connections { 0031 id: saveWindowGeometryConnections 0032 enabled: root.visible 0033 target: root 0034 0035 function onClosing() { App.saveWindowGeometry(root) } 0036 function onWidthChanged() { saveWindowGeometryTimer.restart() } 0037 function onHeightChanged() { saveWindowGeometryTimer.restart() } 0038 function onXChanged() { saveWindowGeometryTimer.restart() } 0039 function onYChanged() { saveWindowGeometryTimer.restart() } 0040 } 0041 0042 component ToolBar : Item { 0043 default property alias children: headerLayout.children 0044 0045 width: root.width 0046 height: headerLayout.implicitHeight + (headerLayout.anchors.margins * 2) 0047 0048 Kirigami.AbstractApplicationHeader { 0049 id: headerToolbar 0050 0051 anchors.top: parent.top 0052 anchors.bottom: separator.top 0053 width: parent.width 0054 visible: true 0055 0056 contentItem: RowLayout { 0057 id: headerLayout 0058 0059 anchors.fill: parent 0060 anchors.margins: Kirigami.Units.smallSpacing 0061 0062 spacing: Kirigami.Units.smallSpacing 0063 } 0064 } 0065 Kirigami.Separator { 0066 id: separator 0067 0068 visible: !headerToolbar.visible 0069 anchors.bottom: parent.bottom 0070 width: parent.width 0071 } 0072 } 0073 0074 FileDialog { 0075 id: openDialog 0076 0077 nameFilters: ["Markdown files (*.md)", "Text files (*.txt)"] 0078 0079 onAccepted: textEditor.document.fileUrl = currentFile 0080 } 0081 0082 FileDialog { 0083 id: saveDialog 0084 0085 fileMode: FileDialog.SaveFile 0086 onAccepted: textEditor.document.saveAs(currentFile) 0087 } 0088 0089 header: Loader { 0090 active: true 0091 sourceComponent: ToolBar { 0092 QQC2.ToolButton { 0093 focusPolicy: Qt.NoFocus 0094 display: QQC2.AbstractButton.IconOnly 0095 0096 action: Kirigami.Action { 0097 text: i18n("New") 0098 icon.name: "document-new" 0099 shortcut: StandardKey.New 0100 onTriggered: { 0101 textEditor.document.saveAs(textEditor.document.fileUrl) 0102 textEditor.document.fileUrl = "" 0103 textEditor.body.text = "" 0104 } 0105 } 0106 0107 QQC2.ToolTip.visible: hovered 0108 QQC2.ToolTip.text: i18n("Create new document (Ctrl+N)") 0109 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay 0110 } 0111 0112 QQC2.ToolButton { 0113 focusPolicy: Qt.NoFocus 0114 display: QQC2.AbstractButton.IconOnly 0115 0116 action: Kirigami.Action { 0117 text: i18n("Open…") 0118 icon.name: "document-open" 0119 shortcut: StandardKey.Open 0120 onTriggered: openDialog.open() 0121 } 0122 0123 QQC2.ToolTip.visible: hovered 0124 QQC2.ToolTip.text: i18n("Open an existing note (Ctrl+O)") 0125 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay 0126 } 0127 0128 QQC2.ToolButton { 0129 focusPolicy: Qt.NoFocus 0130 display: QQC2.AbstractButton.IconOnly 0131 0132 action: Kirigami.Action { 0133 text: textEditor.document.fileUrl == "" ? i18n("Save As…") : i18n("Save") 0134 icon.name: textEditor.document.fileUrl == "" ? "document-save-as" : "document-save" 0135 shortcut: StandardKey.Save 0136 onTriggered: { 0137 if (textEditor.document.fileUrl == "") { 0138 saveDialog.open() 0139 return 0140 } 0141 0142 textEditor.document.saveAs(textEditor.document.fileUrl) 0143 } 0144 } 0145 0146 QQC2.ToolTip.visible: hovered 0147 QQC2.ToolTip.text: textEditor.document.fileUrl == "" ? i18n("Save new document (Ctrl+Shift+S)") : i18n("Save document (Ctrl+S)") 0148 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay 0149 } 0150 0151 QQC2.ToolSeparator { 0152 Layout.leftMargin: Kirigami.Units.largeSpacing 0153 Layout.rightMargin: Kirigami.Units.largeSpacing 0154 } 0155 0156 QQC2.ToolButton { 0157 focusPolicy: Qt.NoFocus 0158 0159 display: QQC2.AbstractButton.IconOnly 0160 action: Kirigami.Action { 0161 text: i18n("Cut") 0162 icon.name: "edit-cut" 0163 shortcut: StandardKey.Cut 0164 enabled: !textEditor.body.selectedText.length <= 0 0165 onTriggered: textEditor.body.cut() 0166 } 0167 0168 QQC2.ToolTip.visible: hovered 0169 QQC2.ToolTip.text: i18n("Cut selection to clipboard (Ctrl+X)") 0170 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay 0171 } 0172 0173 QQC2.ToolButton { 0174 focusPolicy: Qt.NoFocus 0175 0176 display: QQC2.AbstractButton.IconOnly 0177 action: Kirigami.Action { 0178 text: i18n("Copy") 0179 icon.name: "edit-copy" 0180 shortcut: StandardKey.Copy 0181 enabled: textEditor.body.selectedText.length > 0 0182 onTriggered: textEditor.body.copy() 0183 } 0184 0185 QQC2.ToolTip.visible: hovered 0186 QQC2.ToolTip.text: i18n("Copy selection to clipboard (Ctrl+C)") 0187 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay 0188 } 0189 0190 QQC2.ToolButton { 0191 focusPolicy: Qt.NoFocus 0192 0193 display: QQC2.AbstractButton.IconOnly 0194 action: Kirigami.Action { 0195 text: i18n("Paste") 0196 icon.name: "edit-paste" 0197 shortcut: StandardKey.Paste 0198 enabled: textEditor.canPaste 0199 onTriggered: textEditor.body.paste() 0200 } 0201 0202 QQC2.ToolTip.visible: hovered 0203 QQC2.ToolTip.text: i18n("Paste clipboard content (Ctrl+V)") 0204 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay 0205 } 0206 0207 QQC2.ToolSeparator { 0208 Layout.leftMargin: Kirigami.Units.largeSpacing 0209 Layout.rightMargin: Kirigami.Units.largeSpacing 0210 } 0211 0212 QQC2.ToolButton { 0213 display: QQC2.AbstractButton.IconOnly 0214 action: Kirigami.Action { 0215 text: i18n("Undo") 0216 icon.name: "edit-undo" 0217 shortcut: StandardKey.Undo 0218 enabled: textEditor.canUndo 0219 onTriggered: textEditor.body.undo() 0220 } 0221 0222 QQC2.ToolTip.visible: hovered 0223 QQC2.ToolTip.text: i18n("Undo last action (Ctrl+Z)") 0224 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay 0225 } 0226 0227 QQC2.ToolButton { 0228 focusPolicy: Qt.NoFocus 0229 0230 display: QQC2.AbstractButton.IconOnly 0231 action: Kirigami.Action { 0232 text: i18n("Redo") 0233 icon.name: "edit-redo" 0234 shortcut: StandardKey.Redo 0235 enabled: textEditor.canRedo 0236 onTriggered: textEditor.body.redo() 0237 } 0238 0239 QQC2.ToolTip.visible: hovered 0240 QQC2.ToolTip.text: i18n("Redo last undone action (Ctrl+Shift+Z)") 0241 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay 0242 } 0243 0244 QQC2.ToolSeparator { 0245 Layout.leftMargin: Kirigami.Units.largeSpacing 0246 Layout.rightMargin: Kirigami.Units.largeSpacing 0247 } 0248 0249 Item { 0250 Layout.fillWidth: true 0251 } 0252 } 0253 } 0254 0255 TextEditor { 0256 id: textEditor 0257 0258 anchors.fill: parent 0259 0260 body.font.family: "Monospace" 0261 document.tabSpace: Kirigami.Units.gridUnit * 2 0262 document.enableSyntaxHighlighting: true 0263 document.autoSave: false//Config.autoSave 0264 } 0265 }