Warning, /maui/pix/src/widgets/views/Folders/FoldersView.qml is written in an unsupported language. File is not indexed.
0001 import QtQuick 2.15
0002 import QtQuick.Controls 2.15
0003 import QtQuick.Layouts 1.3
0004
0005 import org.mauikit.controls 1.3 as Maui
0006
0007 import org.mauikit.filebrowsing 1.3 as FB
0008
0009 import org.maui.pix 1.0
0010
0011 import "../../../view_models"
0012 import "../.."
0013 import"../Gallery"
0014
0015 StackView
0016 {
0017 id: control
0018
0019 readonly property string currentFolder : currentItem.currentFolder
0020 readonly property alias picsView : control.currentItem
0021 readonly property Flickable flickable : picsView.flickable
0022
0023 Component.onCompleted:
0024 {
0025 if(_collectionViewComponent.pendingFolder.length > 0)
0026 {
0027 openFolder(_collectionViewComponent.pendingFolder)
0028 }
0029 }
0030
0031 initialItem: Maui.Page
0032 {
0033 id: _foldersPage
0034 readonly property string currentFolder : "folders:///"
0035
0036 Maui.Theme.inherit: false
0037 Maui.Theme.colorGroup: Maui.Theme.View
0038
0039 flickable: _foldersGrid.flickable
0040 headBar.visible: false
0041
0042 property Component searchFieldComponent : Maui.SearchField
0043 {
0044 placeholderText: i18np("Filter %1 folder", "Filter %1 folders", foldersList.count)
0045 onAccepted:
0046 {
0047 folderModel.filters = text.split(",")
0048 }
0049
0050 onCleared: folderModel.clearFilters()
0051 }
0052
0053 StackView.onDeactivated:
0054 {
0055 folderModel.clearFilters()
0056 }
0057
0058 Maui.GridBrowser
0059 {
0060 id: _foldersGrid
0061 anchors.fill: parent
0062 itemSize: Math.min(260, Math.max(140, Math.floor(availableWidth* 0.3)))
0063 itemHeight: itemSize + Maui.Style.rowHeight
0064 currentIndex: -1
0065
0066 holder.emoji: "qrc:/assets/view-preview.svg"
0067 holder.title : foldersList.count === 0 ?
0068 i18n("No Folders!") : i18n("Nothing Here!")
0069 holder.body: foldersList.count === 0 ? i18n("Add new image sources.") : i18n("Try something different.")
0070 holder.visible: _foldersGrid.count === 0
0071
0072 onKeyPress: (event) =>
0073 {
0074 if(event.key === Qt.Key_Return || event.key === Qt.Key_Enter)
0075 {
0076 openFolder(_foldersGrid.currentItem.path)
0077 }
0078 }
0079
0080 model: Maui.BaseModel
0081 {
0082 id: folderModel
0083 list: FoldersList
0084 {
0085 id: foldersList
0086 folders: Collection.allImagesModel.folders
0087 }
0088
0089 sortOrder: Qt.DescendingOrder
0090 sort: "modified"
0091 recursiveFilteringEnabled: false
0092 sortCaseSensitivity: Qt.CaseInsensitive
0093 filterCaseSensitivity: Qt.CaseInsensitive
0094 }
0095
0096 delegate: Item
0097 {
0098 readonly property string path : model.path
0099 height: GridView.view.cellHeight
0100 width: GridView.view.cellWidth
0101
0102 Maui.CollageItem
0103 {
0104 imageWidth: 120
0105 imageHeight: 120
0106
0107 anchors.fill: parent
0108 anchors.margins: !root.isWide ? Maui.Style.space.tiny : Maui.Style.space.big
0109
0110 isCurrentItem: parent.GridView.isCurrentItem
0111 images: model.preview.split(",")
0112
0113 tooltipText: model.path
0114 label1.text: model.label
0115 label2.text: Qt.formatDateTime(new Date(model.modified), "d MMM yyyy")
0116
0117 draggable: true
0118
0119 Drag.keys: ["text/uri-list"]
0120 Drag.mimeData: Drag.active ? { "text/uri-list": model.path } : {}
0121
0122 onClicked:
0123 {
0124 _foldersGrid.currentIndex = index
0125
0126 if(Maui.Handy.singleClick)
0127 {
0128 openFolder(model.path)
0129 }
0130 }
0131
0132 onDoubleClicked:
0133 {
0134 _foldersGrid.currentIndex = index
0135
0136 if(!Maui.Handy.singleClick)
0137 {
0138 openFolder(model.path)
0139 }
0140 }
0141 }
0142 }
0143 }
0144 }
0145
0146 Component
0147 {
0148 id: picsViewComponent
0149
0150 PixGrid
0151 {
0152 id: _picsView
0153 property string currentFolder
0154 readonly property var folderInfo : FB.FM.getFileInfo(currentFolder)
0155
0156 headBar.visible: false
0157 title: control.folderInfo.label
0158
0159 list.recursive: false
0160 list.urls: [currentFolder]
0161 list.activeGeolocationTags: browserSettings.gpsTags
0162
0163 holder.emoji: "qrc:/assets/add-image.svg"
0164 holder.title : i18n("Folder is empty!")
0165 holder.body: i18n("There're no images in this folder")
0166
0167 Keys.enabled: true
0168 Keys.onEscapePressed: control.pop()
0169
0170 gridView.header: Column
0171 {
0172 width: parent.width
0173 spacing: Maui.Style.space.medium
0174
0175 Maui.SectionHeader
0176 {
0177 width: parent.width
0178 label1.text: folderInfo.label
0179 label2.text: folderInfo.url ? (folderInfo.url).replace(FB.FM.homePath(), "") : ""
0180 template.label3.text: i18np("No images.", "%1 images", _picsView.gridView.count)
0181 template.label4.text: Qt.formatDateTime(new Date(folderInfo.modified), "d MMM yyyy")
0182 template.iconSource: folderInfo.icon
0183
0184 template.content: ToolButton
0185 {
0186 icon.name: "folder-open"
0187 onClicked: Qt.openUrlExternally(currentFolder)
0188 }
0189 }
0190
0191 Flow
0192 {
0193 spacing: Maui.Style.space.medium
0194 width: parent.width
0195 Repeater
0196 {
0197 model: Maui.BaseModel
0198 {
0199 list: CitiesList
0200 {
0201 cities: _picsView.list.cities
0202 }
0203 }
0204
0205 delegate: Maui.Chip
0206 {
0207 text: model.name
0208 iconSource: "gps"
0209 checked: _picsView.model.filters.indexOf(model.id) === 0
0210 checkable: true
0211 onClicked:
0212 {
0213 if( _picsView.model.filters.indexOf(model.id) === 0)
0214 {
0215 _picsView.model.clearFilters()
0216 }else
0217 {
0218 _picsView.model.filters = [model.id]
0219 }
0220 }
0221
0222 }
0223 }
0224 }
0225 }
0226 }
0227 }
0228
0229 Component
0230 {
0231 id: _allPicsComponent
0232
0233 GalleryView
0234 {
0235 property string currentFolder : "collection:///"
0236 headBar.visible: false
0237
0238 list: Collection.allImagesModel
0239 }
0240 }
0241
0242 function refresh()
0243 {
0244 foldersList.refresh()
0245 }
0246
0247 function openFolder(url, filters)
0248 {
0249 if(currentFolder === url)
0250 return;
0251
0252 if(control.depth === 1)
0253 {
0254 if(url.startsWith("collection:///"))
0255 {
0256 control.push(_allPicsComponent, ({'currentFolder': url}))
0257 }else
0258 {
0259 control.push(picsViewComponent, ({'currentFolder': url}))
0260 }
0261 }else
0262 {
0263 if(currentFolder.startsWith("collection:///"))
0264 {
0265 if(url.startsWith("collection:///"))
0266 {
0267 control.currentItem.currentFolder = url
0268 }else
0269 {
0270 control.pop()
0271 control.push(picsViewComponent, ({'currentFolder': url}))
0272 }
0273 }else
0274 {
0275 if(url.startsWith("collection:///"))
0276 {
0277 control.pop()
0278 control.push(_allPicsComponent, ({'currentFolder': url}))
0279 }else
0280 {
0281 control.currentItem.currentFolder = url
0282 }
0283 }
0284 }
0285
0286 control.currentItem.model.clearFilters()
0287 control.currentItem.model.filters = filters
0288 }
0289 }