Warning, /network/smb4k/plasmoid/package/contents/ui/BookmarksPage.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2017-2023 Alexander Reinholdt <alexander.reinholdt@kdemail.net> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 2.3 0008 import QtQuick.Layouts 1.3 0009 import QtQml.Models 2.3 0010 import org.kde.plasma.core 2.0 as PlasmaCore 0011 import org.kde.plasma.plasmoid 2.0 0012 import org.kde.plasma.components 2.0 as PlasmaComponents 0013 import org.kde.plasma.extras 2.0 as PlasmaExtras 0014 0015 PlasmaComponents.Page { 0016 id: bookmarksPage 0017 0018 // 0019 // Tool bar 0020 // 0021 PlasmaComponents.ToolBar { 0022 id: bookmarksToolBar 0023 anchors { 0024 top: parent.top 0025 left: parent.left 0026 right: parent.right 0027 } 0028 0029 tools: PlasmaComponents.ToolBarLayout { 0030 PlasmaComponents.ToolButton { 0031 id: backButton 0032 tooltip: i18n("Go back") 0033 iconSource: "go-previous" 0034 width: minimumWidth 0035 onClicked: { 0036 back() 0037 } 0038 } 0039 PlasmaComponents.ToolButton { 0040 id: editButton 0041 tooltip: i18n("Edit bookmarks") 0042 iconSource: "bookmarks-organize" 0043 width: minimumWidth 0044 onClicked: { 0045 iface.editBookmarks() 0046 } 0047 } 0048 } 0049 } 0050 0051 // 0052 // Delegate Model (used for sorting) 0053 // 0054 DelegateModel { 0055 id: bookmarkItemDelegateModel 0056 0057 function lessThan(left, right) { 0058 var less = false 0059 0060 if (left.isCategory && right.isCategory) { 0061 less = (left.categoryName < right.categoryName) 0062 } 0063 else if (!left.isCategory && !right.isCategory) { 0064 if (left.hostName == right.hostName) { 0065 less = (left.shareName < right.shareName) 0066 } 0067 else { 0068 less = (left.shareName < right.shareName && left.hostName < right.hostName) 0069 } 0070 } 0071 0072 return less 0073 } 0074 0075 function insertPosition(item) { 0076 var lower = 0 0077 var upper = items.count 0078 0079 while (lower < upper) { 0080 var middle = Math.floor(lower + (upper - lower) / 2) 0081 var result = lessThan(item.model.object, items.get(middle).model.object) 0082 if (result) { 0083 upper = middle 0084 } 0085 else { 0086 lower = middle + 1 0087 } 0088 } 0089 return lower 0090 } 0091 0092 function sort() { 0093 while (unsortedItems.count > 0) { 0094 var item = unsortedItems.get(0) 0095 var index = insertPosition(item) 0096 0097 item.groups = "items" 0098 items.move(item.itemsIndex, index) 0099 } 0100 } 0101 0102 items.includeByDefault: false 0103 0104 groups: [ 0105 DelegateModelGroup { 0106 id: unsortedItems 0107 name: "unsorted" 0108 0109 includeByDefault: true 0110 0111 onChanged: { 0112 bookmarkItemDelegateModel.sort() 0113 } 0114 } 0115 ] 0116 0117 filterOnGroup: "items" 0118 0119 model: ListModel {} 0120 0121 delegate: BookmarkItemDelegate { 0122 id: bookmarkItemDelegate 0123 0124 onItemClicked: { 0125 bookmarksListView.currentIndex = DelegateModel.itemsIndex 0126 bookmarkOrCategoryClicked(object) 0127 } 0128 } 0129 } 0130 0131 // 0132 // List view 0133 // 0134 PlasmaExtras.ScrollArea { 0135 id: bookmarksScrollArea 0136 0137 anchors { 0138 top: bookmarksToolBar.bottom 0139 left: parent.left 0140 right: parent.right 0141 bottom: parent.bottom 0142 } 0143 0144 ListView { 0145 id: bookmarksListView 0146 model: bookmarkItemDelegateModel 0147 clip: true 0148 focus: true 0149 highlightRangeMode: ListView.StrictlyEnforceRange 0150 } 0151 } 0152 0153 // 0154 // Connections 0155 // 0156 Connections { 0157 target: iface 0158 function onMountedSharesChanged() { shareMountedOrUnmounted() } 0159 function onBookmarksListChanged() { fillView() } 0160 } 0161 0162 // 0163 // Initialization 0164 // 0165 Component.onCompleted: { 0166 fillView() 0167 } 0168 0169 // 0170 // Functions 0171 // 0172 function back() { 0173 // Since the 'Back' button is only useful when you 0174 // are currently in a category subfolder and want to 0175 // go back to the toplevel, just run fillView() here. 0176 fillView() 0177 } 0178 0179 function bookmarkOrCategoryClicked(object) { 0180 if (object.isCategory) { 0181 while (bookmarkItemDelegateModel.model.count != 0) { 0182 bookmarkItemDelegateModel.model.remove(0) 0183 } 0184 0185 getBookmarks(object.categoryName) 0186 0187 // Set the current item to 0 0188 bookmarksListView.currentIndex = 0 0189 } 0190 else { 0191 iface.mountBookmark(object) 0192 } 0193 } 0194 0195 function shareMountedOrUnmounted() { 0196 for (var i = 0; i < bookmarkItemDelegateModel.model.count; i++) { 0197 var object = bookmarkItemDelegateModel.model.get(i).object 0198 0199 if (object !== null) { 0200 if (!object.isCategory) { 0201 object.isMounted = iface.isShareMounted(object.url) 0202 bookmarkItemDelegateModel.model.set(i, {"object": object}) 0203 } 0204 } 0205 } 0206 } 0207 0208 function fillView() { 0209 while (bookmarkItemDelegateModel.model.count != 0) { 0210 bookmarkItemDelegateModel.model.remove(0) 0211 } 0212 0213 // Get categories 0214 if (iface.bookmarkCategories.length != 0) { 0215 for (var i = 0; i < iface.bookmarkCategories.length; i++) { 0216 if (iface.bookmarkCategories[i].categoryName.length != 0) { 0217 bookmarkItemDelegateModel.model.append({"object": iface.bookmarkCategories[i]}) 0218 } 0219 } 0220 } 0221 0222 // Get toplevel bookmarks 0223 getBookmarks("") 0224 0225 // Set the current item to 0 0226 bookmarksListView.currentIndex = 0 0227 } 0228 0229 function getBookmarks(categoryName) { 0230 if (iface.bookmarks.length != 0) { 0231 for (var i = 0; i < iface.bookmarks.length; i++) { 0232 if (iface.bookmarks[i].categoryName == categoryName) { 0233 var bookmark = iface.bookmarks[i] 0234 bookmark.isMounted = iface.isShareMounted(bookmark.url) 0235 bookmarkItemDelegateModel.model.append({"object": bookmark}) 0236 } 0237 } 0238 } 0239 } 0240 }