Warning, /network/smb4k/plasmoid/package/contents/ui/ProfilesPage.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 import org.kde.smb4k.smb4kqmlplugin 2.0
0015
0016 PlasmaComponents.Page {
0017 id: profilesPage
0018
0019 //
0020 // Tool bar
0021 //
0022 // FIXME: Include tool bar
0023
0024 //
0025 // Delegate Model (used for sorting)
0026 //
0027 DelegateModel {
0028 id: profileItemDelegateModel
0029
0030 function lessThan(left, right) {
0031 return (left.profileName < right.profileName)
0032 }
0033
0034 function insertPosition(item) {
0035 var lower = 0
0036 var upper = items.count
0037
0038 while (lower < upper) {
0039 var middle = Math.floor(lower + (upper - lower) / 2)
0040 var result = lessThan(item.model.object, items.get(middle).model.object)
0041 if (result) {
0042 upper = middle
0043 }
0044 else {
0045 lower = middle + 1
0046 }
0047 }
0048 return lower
0049 }
0050
0051 function sort() {
0052 while (unsortedItems.count > 0) {
0053 var item = unsortedItems.get(0)
0054 var index = insertPosition(item)
0055
0056 item.groups = "items"
0057 items.move(item.itemsIndex, index)
0058 }
0059 }
0060
0061 items.includeByDefault: false
0062
0063 groups: [
0064 DelegateModelGroup {
0065 id: unsortedItems
0066 name: "unsorted"
0067
0068 includeByDefault: true
0069
0070 onChanged: {
0071 profileItemDelegateModel.sort()
0072 }
0073 }
0074 ]
0075
0076 filterOnGroup: "items"
0077
0078 model: ListModel {}
0079
0080 delegate: ProfileItemDelegate {
0081 id: profileItemDelegate
0082
0083 onItemClicked: {
0084 profilesListView.currentIndex = DelegateModel.itemsIndex
0085 iface.activeProfile = object.profileName
0086 }
0087 }
0088 }
0089
0090 //
0091 // List view
0092 //
0093 PlasmaExtras.ScrollArea {
0094 id: profilesScrollArea
0095
0096 anchors {
0097 top: parent.top
0098 left: parent.left
0099 right: parent.right
0100 bottom: parent.bottom
0101 }
0102
0103 ListView {
0104 id: profilesListView
0105 model: profileItemDelegateModel
0106 clip: true
0107 focus: true
0108 highlightRangeMode: ListView.StrictlyEnforceRange
0109 }
0110 }
0111
0112 //
0113 // Connections
0114 //
0115 Connections {
0116 target: iface
0117 function onProfilesListChanged() { fillView() }
0118 function onActiveProfileChanged() { fillView() }
0119 }
0120
0121 //
0122 // Initialization
0123 //
0124 Component.onCompleted: {
0125 fillView()
0126 }
0127
0128 //
0129 // Functions
0130 //
0131 function fillView() {
0132 while (profileItemDelegateModel.model.count != 0) {
0133 profileItemDelegateModel.model.remove(0)
0134 }
0135
0136 if (iface.profileUsage && iface.profiles.length != 0) {
0137 for (var i = 0; i < iface.profiles.length; i++) {
0138 profileItemDelegateModel.model.append({"object": iface.profiles[i]})
0139 }
0140 }
0141 }
0142 }