123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- /****************************************************************************
- **
- ** Copyright (C) 2021 The Qt Company Ltd.
- ** Contact: http://www.qt.io/licensing/
- **
- ** This file is part of the Qt Quick Dialogs module of the Qt Toolkit.
- **
- ** $QT_BEGIN_LICENSE:LGPL3$
- ** Commercial License Usage
- ** Licensees holding valid commercial Qt licenses may use this file in
- ** accordance with the commercial license agreement provided with the
- ** Software or, alternatively, in accordance with the terms contained in
- ** a written agreement between you and The Qt Company. For licensing terms
- ** and conditions see http://www.qt.io/terms-conditions. For further
- ** information use the contact form at http://www.qt.io/contact-us.
- **
- ** GNU Lesser General Public License Usage
- ** Alternatively, this file may be used under the terms of the GNU Lesser
- ** General Public License version 3 as published by the Free Software
- ** Foundation and appearing in the file LICENSE.LGPLv3 included in the
- ** packaging of this file. Please review the following information to
- ** ensure the GNU Lesser General Public License version 3 requirements
- ** will be met: https://www.gnu.org/licenses/lgpl.html.
- **
- ** GNU General Public License Usage
- ** Alternatively, this file may be used under the terms of the GNU
- ** General Public License version 2.0 or later as published by the Free
- ** Software Foundation and appearing in the file LICENSE.GPL included in
- ** the packaging of this file. Please review the following information to
- ** ensure the GNU General Public License version 2.0 requirements will be
- ** met: http://www.gnu.org/licenses/gpl-2.0.html.
- **
- ** $QT_END_LICENSE$
- **
- ****************************************************************************/
- import Qt.labs.folderlistmodel
- import QtQuick
- import QtQuick.Templates as T
- import QtQuick.Controls.Imagine
- import QtQuick.Controls.Imagine.impl
- import QtQuick.Dialogs.quickimpl
- import QtQuick.Layouts
- import "." as DialogsImpl
- FileDialogImpl {
- id: control
- // Can't set implicitWidth of the NinePatchImage background, so we do it here.
- implicitWidth: Math.max(600,
- implicitBackgroundWidth + leftInset + rightInset,
- contentWidth + leftPadding + rightPadding,
- implicitHeaderWidth,
- implicitFooterWidth)
- implicitHeight: Math.max(400,
- implicitBackgroundHeight + topInset + bottomInset,
- contentHeight + topPadding + bottomPadding
- + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
- + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
- topPadding: background ? background.topPadding : 0
- leftPadding: background ? background.leftPadding : 0
- rightPadding: background ? background.rightPadding : 0
- bottomPadding: background ? background.bottomPadding : 0
- topInset: background ? -background.topInset || 0 : 0
- leftInset: background ? -background.leftInset || 0 : 0
- rightInset: background ? -background.rightInset || 0 : 0
- bottomInset: background ? -background.bottomInset || 0 : 0
- standardButtons: T.Dialog.Open | T.Dialog.Cancel
- FileDialogImpl.buttonBox: buttonBox
- FileDialogImpl.nameFiltersComboBox: nameFiltersComboBox
- FileDialogImpl.fileDialogListView: fileDialogListView
- FileDialogImpl.breadcrumbBar: breadcrumbBar
- background: NinePatchImage {
- source: Imagine.url + "dialog-background"
- NinePatchImageSelector on source {
- states: [
- {"modal": control.modal},
- {"dim": control.dim}
- ]
- }
- }
- header: ColumnLayout {
- spacing: 12
- Label {
- text: control.title
- elide: Label.ElideRight
- font.bold: true
- Layout.leftMargin: 16
- Layout.rightMargin: 16
- Layout.topMargin: 12
- Layout.fillWidth: true
- Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 0
- background: NinePatchImage {
- width: parent.width
- height: parent.height
- source: Imagine.url + "dialog-title"
- NinePatchImageSelector on source {
- states: [
- {"modal": control.modal},
- {"dim": control.dim}
- ]
- }
- }
- }
- DialogsImpl.FolderBreadcrumbBar {
- id: breadcrumbBar
- fileDialog: control
- Layout.leftMargin: 16
- Layout.rightMargin: 16
- Layout.fillWidth: true
- Layout.maximumWidth: parent.width - 28
- }
- }
- contentItem: ListView {
- id: fileDialogListView
- objectName: "fileDialogListView"
- clip: true
- boundsBehavior: Flickable.StopAtBounds
- ScrollBar.vertical: ScrollBar {}
- model: FolderListModel {
- folder: control.currentFolder
- nameFilters: control.selectedNameFilter.globs
- showDirsFirst: true
- sortCaseSensitive: false
- }
- delegate: DialogsImpl.FileDialogDelegate {
- objectName: "fileDialogDelegate" + index
- width: ListView.view.width
- highlighted: ListView.isCurrentItem
- fileDialog: control
- fileDetailRowWidth: nameFiltersComboBox.width
- }
- }
- footer: RowLayout {
- id: rowLayout
- spacing: 20
- ComboBox {
- id: nameFiltersComboBox
- model: control.nameFilters
- Layout.leftMargin: 16
- Layout.bottomMargin: 16
- Layout.fillWidth: true
- }
- DialogButtonBox {
- id: buttonBox
- standardButtons: control.standardButtons
- spacing: 12
- Layout.bottomMargin: 16
- Layout.rightMargin: 16
- }
- }
- T.Overlay.modal: NinePatchImage {
- source: Imagine.url + "dialog-overlay"
- NinePatchImageSelector on source {
- states: [
- {"modal": true}
- ]
- }
- }
- T.Overlay.modeless: NinePatchImage {
- source: Imagine.url + "dialog-overlay"
- NinePatchImageSelector on source {
- states: [
- {"modal": false}
- ]
- }
- }
- }
|