Warning, /office/klevernotes/src/contents/ui/sideBar/ActionBar.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 // SPDX-FileCopyrightText: 2022 Louis Schul <schul9louis@gmail.com>
0003 
0004 import QtQuick 2.15
0005 import QtQuick.Controls 2.15
0006 import QtQuick.Layouts 1.15
0007 import QtQuick.Dialogs
0008 
0009 import org.kde.kitemmodels 1.0
0010 import org.kde.kirigami 2.19 as Kirigami
0011 
0012 import org.kde.Klever 1.0
0013 
0014 import "qrc:/contents/ui/dialogs"
0015 
0016 ToolBar {
0017     id: mainToolBar
0018 
0019     required property TreeView treeView
0020     readonly property QtObject renameAction: renameAction
0021     readonly property QtObject createNoteAction: createNoteAction
0022     readonly property QtObject createGroupAction: createGroupAction
0023     readonly property QtObject createCategoryAction: createCategoryAction
0024 
0025     property var currentModelIndex
0026     property var currentClickedItem
0027 
0028     NamingDialog {
0029         id: namingDialog
0030 
0031         onRejected: {
0032             useCurrentItem()
0033         }
0034     }
0035 
0036     RowLayout {
0037         id: barLayout
0038 
0039         property bool searching: false
0040 
0041         anchors.fill: parent
0042         spacing: 0
0043 
0044         ToolButton {
0045             action: createCategoryAction
0046             visible: !barLayout.searching
0047             ToolTip.delay: Kirigami.Units.toolTipDelay
0048             ToolTip.visible: hovered
0049             ToolTip.text: i18nc("as in 'A note category'", "Create a new category") + " (" + createCategoryAction.shortcut + ")"
0050         }
0051 
0052         ToolButton {
0053             action: createGroupAction
0054             visible: !barLayout.searching
0055             ToolTip.delay: Kirigami.Units.toolTipDelay
0056             ToolTip.visible: hovered
0057             ToolTip.text: i18nc("as in 'A note group'", "Create a new group") + " (" + createGroupAction.shortcut + ")"
0058         }
0059 
0060         ToolButton {
0061             action: createNoteAction
0062             visible: !barLayout.searching
0063             ToolTip.delay: Kirigami.Units.toolTipDelay
0064             ToolTip.visible: hovered
0065             ToolTip.text: i18nc("as in 'A note'", "Create a new note") + " (" + createNoteAction.shortcut + ")"
0066         }
0067 
0068         ToolButton {
0069             action: renameAction
0070             visible: !barLayout.searching
0071             ToolTip.delay: Kirigami.Units.toolTipDelay
0072             ToolTip.visible: hovered
0073             ToolTip.text: i18n("Rename") + " (" + renameAction.shortcut + ")"
0074         }
0075 
0076         Item {Layout.fillWidth: true; visible: !barLayout.searching}
0077 
0078         ToolButton {
0079             visible: !barLayout.searching
0080             icon.name: "search-symbolic"
0081             onClicked: {
0082                 barLayout.searching = true
0083                 searchBar.contentItem.forceActiveFocus()
0084             }
0085         }
0086 
0087         SearchBar {
0088             id: searchBar
0089 
0090             visible: barLayout.searching
0091             listModel: treeview.model
0092 
0093             Layout.fillWidth: true
0094 
0095             popup.onClosed: {
0096                 barLayout.searching = false
0097                 text = ""
0098             }
0099             onClickedIndexChanged: if (clickedIndex) {
0100                 applicationWindow().globalDrawer.askForFocus(clickedIndex)
0101                 searchBar.popup.close()
0102                 return;
0103             }
0104         }
0105     }
0106 
0107     Kirigami.Action {
0108         id: createCategoryAction
0109 
0110         property string name
0111         property bool isActive : false
0112 
0113         shortcut: "Ctrl+Alt+C"
0114         icon.name: "journal-new"
0115 
0116         onNameChanged: if (isActive) {
0117             treeView.model.addRow(name, Config.storagePath, 1)
0118             isActive = false
0119             name = ""
0120             useCurrentItem()
0121         }
0122         onTriggered: {
0123             isActive = true
0124             const objectName = Config.defaultCategoryName
0125             mainToolBar.getName("Category", objectName, Config.storagePath, createCategoryAction, true)
0126         }
0127     }
0128 
0129     Kirigami.Action {
0130         id: createGroupAction
0131 
0132         property string name
0133         property string categoryPath
0134         property var parentModelIndex
0135         property bool isActive : false
0136 
0137         shortcut: "Ctrl+Alt+G"
0138         icon.name: "folder-new"
0139 
0140         onNameChanged: if (isActive) {
0141             treeView.model.addRow(name, categoryPath, 2, parentModelIndex)
0142             isActive = false
0143             name = ""
0144             useCurrentItem()
0145         }
0146         onTriggered: {
0147             isActive = true
0148 
0149             switch(mainToolBar.currentClickedItem.useCase) {
0150                 case "Category":
0151                     categoryPath = mainToolBar.currentClickedItem.path
0152                     parentModelIndex = currentModelIndex
0153                     break;
0154                 case "Group":
0155                     categoryPath = KleverUtility.getParentPath(mainToolBar.currentClickedItem.path)
0156 
0157                     parentModelIndex = treeView.model.parent(currentModelIndex)
0158                     break;
0159                 case "Note":
0160                     const groupPath = KleverUtility.getParentPath(mainToolBar.currentClickedItem.path)
0161                     categoryPath = KleverUtility.getParentPath(groupPath)
0162 
0163                     if (groupPath.endsWith(".BaseGroup")) {
0164                         parentModelIndex = treeView.model.parent(currentModelIndex)
0165                     } else {
0166                         const groupModelIndex = treeView.model.parent(currentModelIndex)
0167                         parentModelIndex = treeView.model.parent(groupModelIndex)
0168                     }
0169                     break;
0170             }
0171             const objectName = Config.defaultGroupName
0172             mainToolBar.getName("Group", objectName, categoryPath, createGroupAction, true)
0173         }
0174     }
0175 
0176     Kirigami.Action {
0177         id: createNoteAction
0178 
0179         property string name
0180         property string groupPath
0181         property var parentModelIndex
0182         property bool isActive : false
0183 
0184         shortcut: "Ctrl+Alt+N"
0185         icon.name: "document-new"
0186 
0187         onNameChanged: if (isActive) {
0188             treeView.model.addRow(name, groupPath, 3, parentModelIndex)
0189             isActive = false
0190             name = ""
0191             useCurrentItem()
0192         }
0193         onTriggered: {
0194             isActive = true
0195 
0196             switch(mainToolBar.currentClickedItem.useCase) {
0197                 case "Category":
0198                     groupPath = mainToolBar.currentClickedItem.path+"/.BaseGroup"
0199                     parentModelIndex = currentModelIndex
0200                     break;
0201                 case "Group":
0202                     groupPath = mainToolBar.currentClickedItem.path
0203                     parentModelIndex = currentModelIndex
0204                     break;
0205                 case "Note":
0206                     groupPath = KleverUtility.getParentPath(mainToolBar.currentClickedItem.path)
0207                     parentModelIndex = treeView.model.parent(currentModelIndex)
0208                     break;
0209             }
0210             const shownName = Config.defaultNoteName
0211 
0212             mainToolBar.getName("Note", shownName, groupPath, createNoteAction, true)
0213         }
0214     }
0215 
0216     Kirigami.Action{
0217         id: renameAction
0218 
0219         property bool isActive: false
0220         property string name: mainToolBar.currentClickedItem ? mainToolBar.currentClickedItem.text : ""
0221 
0222         shortcut: "Ctrl+R"
0223         icon.name: "edit-rename"
0224 
0225         onNameChanged: if (isActive) {
0226             treeView.model.rename(currentModelIndex, name)
0227             isActive = false
0228             useCurrentItem()
0229         }
0230         onTriggered: {
0231             isActive = true
0232 
0233             const useCase = mainToolBar.currentClickedItem.useCase
0234             const parentPath = KleverUtility.getParentPath(mainToolBar.currentClickedItem.path)
0235             mainToolBar.getName(useCase, name, parentPath, renameAction, false)
0236         }
0237     }
0238 
0239     function getName(useCase, shownName, parentPath, callingAction, newItem){
0240         namingDialog.useCase = useCase
0241         namingDialog.shownName = shownName
0242         namingDialog.textFieldText = shownName
0243         namingDialog.parentPath = parentPath
0244         namingDialog.callingAction = callingAction
0245         namingDialog.newItem = newItem
0246         namingDialog.open()
0247     }
0248 
0249     function setClickedItemInfo(clickedItem, clickedModelIndex) {
0250         currentClickedItem = clickedItem
0251         currentModelIndex = clickedModelIndex
0252     }
0253 
0254     function useCurrentItem() {
0255         const currentModelIndex = treeView.getModelIndex(treeView.currentIndex)
0256         setClickedItemInfo(treeView.currentItem, currentModelIndex)
0257     }
0258 }