Warning, /maui/shelf/src/views/library/LibraryView.qml is written in an unsupported language. File is not indexed.
0001 import QtQuick 2.14
0002 import QtQuick.Controls 2.14
0003 import QtQuick.Layouts 1.3
0004
0005 import org.mauikit.controls 1.3 as Maui
0006 import org.mauikit.filebrowsing 1.3 as FB
0007
0008 import org.maui.shelf 1.0 as Shelf
0009
0010 Maui.SideBarView
0011 {
0012 id: control
0013 property alias list : _libraryList
0014 property alias showCSDControls : _browser.showCSDControls
0015 property alias flickable : _browser.flickable
0016 property alias sources : _libraryList.sources
0017
0018 sideBar.preferredWidth: 200
0019 sideBar.minimumWidth: 200
0020 sideBar.resizeable: false
0021 sideBar.content: Sidebar
0022 {
0023 anchors.fill: parent
0024 }
0025
0026 LibraryMenu
0027 {
0028 id: _menu
0029 index: _browser.currentIndex
0030 model: _libraryModel
0031 }
0032
0033 Maui.AltBrowser
0034 {
0035 id: _browser
0036 anchors.fill: parent
0037 enableLassoSelection: true
0038 gridView.itemSize: Math.min(180, Math.floor(gridView.availableWidth/3))
0039 gridView.itemHeight: 220
0040 viewType: viewerSettings.viewType
0041
0042 Connections
0043 {
0044 target: _browser.currentView
0045 function onItemsSelected(indexes)
0046 {
0047 for(var i in indexes)
0048 {
0049 const item = _browser.model.get(indexes[i])
0050 _selectionbar.append(item.path, item)
0051 }
0052 }
0053 }
0054
0055 holder.visible: _browser.count === 0
0056 holder.title: i18n("Nothing here!")
0057 holder.body: i18n("Add new sources to manage your documents.")
0058 holder.emoji: "qrc:/assets/document-new.svg"
0059 holder.actions:[
0060
0061 Action
0062 {
0063 text: i18n("Open file")
0064 onTriggered: openFileDialog()
0065 },
0066
0067 Action
0068 {
0069 text: i18n("Add sources")
0070 onTriggered: openSettingsDialog()
0071 }
0072 ]
0073
0074 model: Maui.BaseModel
0075 {
0076 id: _libraryModel
0077 sort: "modified"
0078 sortOrder: Qt.DescendingOrder
0079 recursiveFilteringEnabled: true
0080 sortCaseSensitivity: Qt.CaseInsensitive
0081 filterCaseSensitivity: Qt.CaseInsensitive
0082 list: Shelf.LibraryList
0083 {
0084 id: _libraryList
0085 }
0086 }
0087
0088 altHeader: Maui.Handy.isMobile
0089 headBar.forceCenterMiddleContent: root.isWide
0090 headBar.leftContent: [ToolButton
0091 {
0092 visible: control.sideBar.collapsed
0093 icon.name: control.sideBar.visible ? "sidebar-collapse" : "sidebar-expand"
0094 onClicked: control.sideBar.toggle()
0095 checked: control.sideBar.visible
0096 ToolTip.delay: 1000
0097 ToolTip.timeout: 5000
0098 ToolTip.visible: hovered
0099 ToolTip.text: i18n("Toggle sidebar")
0100 },
0101
0102 ToolButton
0103 {
0104 visible: viewerView.tabView.count
0105 icon.name: "view-readermode-active"
0106 text: viewerView.tabView.count
0107 onClicked: toggleViewer()
0108 }
0109
0110 ]
0111
0112 headBar.rightContent:[
0113 Maui.ToolButtonMenu
0114 {
0115 icon.name: _browser.viewType === Maui.AltBrowser.ViewType.List ? "view-list-details" : "view-list-icons"
0116
0117 MenuItem
0118 {
0119 text: i18n("Open")
0120 icon.name: "document-open"
0121 onTriggered: openFileDialog()
0122 }
0123
0124 MenuSeparator {}
0125
0126 MenuItem
0127 {
0128 text: i18n("List")
0129 checkable: true
0130 icon.name: "view-list-details"
0131 checked: _browser.viewType === Maui.AltBrowser.ViewType.List
0132 onTriggered: viewerSettings.viewType = Maui.AltBrowser.ViewType.List
0133 }
0134
0135 MenuItem
0136 {
0137 text: i18n("Grid")
0138 checkable: true
0139 icon.name: "view-list-icons"
0140 checked: _browser.viewType === Maui.AltBrowser.ViewType.Grid
0141 onTriggered: viewerSettings.viewType = Maui.AltBrowser.ViewType.Grid
0142 }
0143
0144 MenuSeparator {}
0145
0146 MenuItem
0147 {
0148 text: i18n("Title")
0149 checkable: true
0150 checked: _libraryModel.sort === "label"
0151 onTriggered: _libraryModel.sort = "label"
0152 }
0153
0154 MenuItem
0155 {
0156 text: i18n("Date")
0157 checkable: true
0158 checked: _libraryModel.sort === "modified"
0159 onTriggered: _libraryModel.sort = "modified"
0160 }
0161
0162 MenuItem
0163 {
0164 text: i18n("Size")
0165 checkable: true
0166 checked: _libraryModel.sort === "size"
0167 onTriggered: _libraryModel.sort = "size"
0168 }
0169
0170 MenuSeparator {}
0171
0172 MenuItem
0173 {
0174 text: i18n("Ascending")
0175 checked: _libraryModel.sortOrder === Qt.AscendingOrder
0176 onTriggered: _libraryModel.sortOrder = Qt.AscendingOrder
0177 }
0178
0179 MenuItem
0180 {
0181 text: i18n("Descending")
0182 checked: _libraryModel.sortOrder === Qt.DescendingOrder
0183 onTriggered: _libraryModel.sortOrder = Qt.DescendingOrder
0184 }
0185
0186 MenuSeparator {}
0187
0188 MenuItem
0189 {
0190 text: i18n("Settings")
0191 icon.name: "settings-configure"
0192 onTriggered: openSettingsDialog()
0193 }
0194
0195 MenuItem
0196 {
0197 text: i18n("About")
0198 icon.name: "documentinfo"
0199 onTriggered: root.about()
0200 }
0201 }
0202 ]
0203
0204 headBar.middleContent: Maui.SearchField
0205 {
0206 Layout.fillWidth: true
0207 Layout.maximumWidth: 500
0208 Layout.alignment: Qt.AlignCenter
0209 placeholderText: i18n("Filter...")
0210 onAccepted: _browser.model.filter = text
0211 onCleared: _libraryModel.clearFilters()
0212 }
0213
0214
0215 gridDelegate: Item
0216 {
0217 height: GridView.view.cellHeight
0218 width: GridView.view.cellWidth
0219
0220 Maui.GridBrowserDelegate
0221 {
0222 id: _gridTemplate
0223 anchors.fill: parent
0224 anchors.margins: !root.isWide ? Maui.Style.space.tiny : Maui.Style.space.big
0225
0226 imageHeight: _browser.gridView.itemSize
0227 imageWidth: _browser.gridView.itemSize
0228
0229 isCurrentItem: parent.GridView.isCurrentItem || checked
0230
0231 draggable: true
0232 Drag.keys: ["text/uri-list"]
0233
0234 Drag.mimeData: Drag.active ?
0235 {
0236 "text/uri-list": _browser.filterSelectedItems(model.path)
0237 } : {}
0238
0239
0240 label1.text: model.label
0241 imageSource: viewerSettings.showThumbnails ? model.preview : ""
0242 iconSource: model.icon
0243 iconSizeHint: Maui.Style.iconSizes.huge
0244 template.labelSizeHint: 32
0245 template.fillMode: Image.PreserveAspectFit
0246
0247 checkable: root.selectionMode
0248 checked: _selectionbar.contains(model.path)
0249 onToggled: _selectionbar.append(model.path, _browser.model.get(index))
0250
0251 Connections
0252 {
0253 target: _selectionbar
0254 function onUriRemoved(uri)
0255 {
0256 if(uri === model.path)
0257 _gridTemplate.checked = false
0258 }
0259
0260 function onUriAdded(uri)
0261 {
0262 if(uri === model.path)
0263 _gridTemplate.checked = true
0264 }
0265
0266 function onCleared()
0267 {
0268 _gridTemplate.checked = false
0269 }
0270 }
0271
0272 onClicked:
0273 {
0274 _browser.currentIndex = index
0275 const item = _browser.model.get(_browser.currentIndex)
0276
0277 if(selectionMode || (mouse.button == Qt.LeftButton && (mouse.modifiers & Qt.ControlModifier)))
0278 {
0279 const item = _browser.model.get(_browser.currentIndex)
0280 _selectionbar.append(item.path, item)
0281
0282 }else if(Maui.Handy.singleClick)
0283 {
0284 Shelf.Library.openFiles([item.url])
0285 }
0286 }
0287
0288 onDoubleClicked:
0289 {
0290 _browser.currentIndex = index
0291 if(!Maui.Handy.singleClick && !selectionMode)
0292 {
0293 const item = _browser.model.get(_browser.currentIndex)
0294 Shelf.Library.openFiles([item.url])
0295 }
0296 }
0297
0298 onPressAndHold:
0299 {
0300 _browser.currentIndex = index
0301 _menu.show()
0302 }
0303
0304 onRightClicked:
0305 {
0306 _browser.currentIndex = index
0307 _menu.show()
0308 }
0309 }
0310 }
0311
0312 listDelegate: Maui.ListBrowserDelegate
0313 {
0314 id: _listDelegate
0315
0316 isCurrentItem: ListView.isCurrentItem || checked
0317
0318 height: Math.floor(Maui.Style.rowHeight * 1.6)
0319 width: ListView.view.width
0320
0321 draggable: true
0322 Drag.keys: ["text/uri-list"]
0323 Drag.mimeData: Drag.active ?
0324 {
0325 "text/uri-list": _browser.filterSelectedItems(model.path)
0326 } : {}
0327
0328 label1.text: model.label
0329 label2.text: String(FB.FM.fileDir(model.path)).replace(FB.FM.homePath(), "")
0330
0331 label3.text: Qt.formatDateTime(new Date(model.modified), "d MMM yyyy")
0332 imageSource: viewerSettings.showThumbnails ? model.preview : ""
0333
0334 iconSource: model.icon
0335 iconSizeHint: Maui.Style.iconSizes.medium
0336 checkable: root.selectionMode
0337 checked: _selectionbar.contains(model.path)
0338 onToggled: _selectionbar.append(model.path, _browser.model.get(index))
0339
0340 Connections
0341 {
0342 target: _selectionbar
0343 function onUriRemoved(uri)
0344 {
0345 if(uri === model.path)
0346 _listDelegate.checked = false
0347 }
0348
0349 function onUriAdded(uri)
0350 {
0351 if(uri === model.path)
0352 _listDelegate.checked = true
0353 }
0354
0355 function onCleared()
0356 {
0357 _listDelegate.checked = false
0358 }
0359 }
0360
0361 onClicked:
0362 {
0363 _browser.currentIndex = index
0364 const item = _browser.model.get(_browser.currentIndex)
0365
0366 if(selectionMode || (mouse.button == Qt.LeftButton && (mouse.modifiers & Qt.ControlModifier)))
0367 {
0368 _selectionbar.append(item.path, item)
0369
0370 }else if(Maui.Handy.singleClick)
0371 {
0372 Shelf.Library.openFiles([item.path])
0373 }
0374 }
0375
0376 onDoubleClicked:
0377 {
0378 _browser.currentIndex = index
0379
0380 if(!Maui.Handy.singleClick && !selectionMode)
0381 {
0382 const item = _browser.model.get(_browser.currentIndex)
0383 Shelf.Library.openFiles([item.path])
0384 }
0385 }
0386
0387 onPressAndHold:
0388 {
0389 _browser.currentIndex = index
0390 _menu.show()
0391 }
0392
0393 onRightClicked:
0394 {
0395 _browser.currentIndex = index
0396 _menu.show()
0397 }
0398 }
0399
0400 footer: Maui.SelectionBar
0401 {
0402 id: _selectionbar
0403 // implicitHeight: 80
0404 anchors.horizontalCenter: parent.horizontalCenter
0405 width: Math.min(parent.width-(Maui.Style.space.medium*2), implicitWidth)
0406
0407 maxListHeight: _stackView.height - Maui.Style.space.medium
0408
0409 onItemClicked : console.log(index)
0410
0411 onExitClicked:
0412 {
0413 clear()
0414 root.selectionMode = false
0415 }
0416
0417 Action
0418 {
0419 text: i18n("Open")
0420 icon.name: "folder_open"
0421 onTriggered:
0422 {
0423 Shelf.Library.openFiles(_selectionbar.uris)
0424 }
0425 }
0426
0427 Action
0428 {
0429 text: i18n("Tag")
0430 icon.name: "tag"
0431 onTriggered:
0432 {
0433 _dialogLoader.sourceComponent = tagsDialogComponent
0434 dialog.composerList.urls = _selectionbar.uris
0435 dialog.open()
0436 }
0437 }
0438
0439 Action
0440 {
0441 text: i18n("Share")
0442 icon.name: "document-share"
0443 onTriggered:
0444 {
0445 Maui.Platform.shareFiles(_selectionbar.uris)
0446 }
0447 }
0448
0449 Action
0450 {
0451 text: i18n("Export")
0452 icon.name: "document-export"
0453 }
0454 }
0455
0456 }
0457
0458 function openFolders(paths)
0459 {
0460 control.sources = paths
0461 }
0462
0463 function filterSelection(url)
0464 {
0465 if(_selectionbar.contains(url))
0466 {
0467 return selectionBox.uris
0468 }else
0469 {
0470 return [url]
0471 }
0472 }
0473
0474 function filterSelectedItems(path)
0475 {
0476 if(_selectionbar && _selectionbar.count > 0 && _selectionbar.contains(path))
0477 {
0478 const uris = _selectionbar.uris
0479 return uris.join("\n")
0480 }
0481
0482 return path
0483 }
0484
0485 function openFileDialog()
0486 {
0487 _dialogLoader.sourceComponent = _fileDialog
0488 _dialogLoader.item.open()
0489 }
0490
0491 function openSettingsDialog()
0492 {
0493 _dialogLoader.sourceComponent = _settingsDialogComponent
0494 _dialogLoader.item.open()
0495 }
0496
0497 }