From f4605583e857c11247f557d665e267a1711d561b Mon Sep 17 00:00:00 2001 From: Shawn Rutledge <shawn.rutledge@digia.com> Date: Fri, 22 Aug 2014 16:21:41 +0200 Subject: [PATCH] FileDialog: add sidebarVisible property and button The sidebar takes up too much space on some devices, so now it is possible for the application author to hide it by default. The user can also toggle it with a button similar to that used for the Qt Creator sidebar, and this state is stored as a setting; however if the application sets sidebarVisible: false, that overrides the setting. [ChangeLog][QtQuick.Dialogs] FileDialog: added sidebarVisible property and button Task-number: QTBUG-39231 Change-Id: Ie8b379da02f4b12764732b2c01b79039722778ab Reviewed-by: J-P Nurmi <jpnurmi@digia.com> --- .../dialogs/systemdialogs/FileDialogs.qml | 7 +++ src/dialogs/DefaultFileDialog.qml | 17 ++++- src/dialogs/dialogs.pro | 2 + src/dialogs/qml/IconButtonStyle.qml | 58 ++++++++++++++++++ src/dialogs/qml/icons.ttf | Bin 0 -> 17372 bytes src/dialogs/qml/qmldir | 1 + src/dialogs/qquickabstractfiledialog.cpp | 8 +++ src/dialogs/qquickabstractfiledialog_p.h | 5 ++ src/dialogs/qquickplatformfiledialog.cpp | 11 ++++ 9 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 src/dialogs/qml/IconButtonStyle.qml create mode 100644 src/dialogs/qml/icons.ttf diff --git a/examples/quick/dialogs/systemdialogs/FileDialogs.qml b/examples/quick/dialogs/systemdialogs/FileDialogs.qml index 6bdaf7bc6..79a58b982 100644 --- a/examples/quick/dialogs/systemdialogs/FileDialogs.qml +++ b/examples/quick/dialogs/systemdialogs/FileDialogs.qml @@ -61,6 +61,7 @@ Item { selectFolder: fileDialogSelectFolder.checked nameFilters: [ "Image files (*.png *.jpg)", "All files (*)" ] selectedNameFilter: "All files (*)" + sidebarVisible: fileDialogSidebarVisible.checked onAccepted: { console.log("Accepted: " + fileUrls) if (fileDialogOpenFiles.checked) @@ -106,6 +107,12 @@ Item { id: fileDialogOpenFiles text: "Open Files After Accepting" } + CheckBox { + id: fileDialogSidebarVisible + text: "Show Sidebar" + checked: fileDialog.sidebarVisible + Binding on checked { value: fileDialog.sidebarVisible } + } CheckBox { id: fileDialogVisible text: "Visible" diff --git a/src/dialogs/DefaultFileDialog.qml b/src/dialogs/DefaultFileDialog.qml index 278ee9dbe..7a91353f7 100644 --- a/src/dialogs/DefaultFileDialog.qml +++ b/src/dialogs/DefaultFileDialog.qml @@ -47,6 +47,7 @@ import QtQuick.Layouts 1.1 import QtQuick.Window 2.1 import Qt.labs.folderlistmodel 2.1 import Qt.labs.settings 1.0 +import "qml" AbstractFileDialog { id: root @@ -75,6 +76,7 @@ AbstractFileDialog { property alias height: root.height property alias sidebarWidth: sidebar.width property alias sidebarSplit: shortcuts.height + property alias sidebarVisible: root.sidebarVisible property variant favoriteFolders: [] } @@ -166,6 +168,7 @@ AbstractFileDialog { Component.onCompleted: if (width < 1) width = sidebarSplitter.maxShortcutWidth height: parent.height width: 0 // initial width only; settings and onCompleted will override it + visible: root.sidebarVisible SplitView { id: sidebarSplitter orientation: Qt.Vertical @@ -414,11 +417,23 @@ AbstractFileDialog { anchors.rightMargin: spacing anchors.verticalCenter: parent.verticalCenter spacing: 4 + Button { + id: toggleSidebarButton + checkable: true + style: IconButtonStyle { } + text: "\u25E7" + height: cancelButton.height + width: height + checked: root.sidebarVisible + onClicked: { + root.sidebarVisible = !root.sidebarVisible + } + } ComboBox { id: filterField model: root.nameFilters visible: !selectFolder - width: bottomBar.width - cancelButton.width - okButton.width - parent.spacing * 5 + width: bottomBar.width - toggleSidebarButton.width - cancelButton.width - okButton.width - parent.spacing * 6 anchors.verticalCenter: parent.verticalCenter onCurrentTextChanged: { root.selectNameFilter(currentText) diff --git a/src/dialogs/dialogs.pro b/src/dialogs/dialogs.pro index 4ad7888f5..c33fa7f78 100644 --- a/src/dialogs/dialogs.pro +++ b/src/dialogs/dialogs.pro @@ -51,7 +51,9 @@ DIALOGS_QML_FILES += \ DefaultDialogWrapper.qml \ qml/ColorSlider.qml \ qml/DefaultWindowDecoration.qml \ + qml/IconButtonStyle.qml \ qml/qmldir \ + qml/icons.ttf \ images/critical.png \ images/information.png \ images/question.png \ diff --git a/src/dialogs/qml/IconButtonStyle.qml b/src/dialogs/qml/IconButtonStyle.qml new file mode 100644 index 000000000..3af5b6cdf --- /dev/null +++ b/src/dialogs/qml/IconButtonStyle.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Quick Controls module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Private 1.0 +import QtQuick.Controls.Styles 1.1 + +ButtonStyle { + FontLoader { id: iconFont; source: "icons.ttf" } + + label: Text { + id: text + font.family: iconFont.name + font.pointSize: TextSingleton.font.pointSize * 1.5 + renderType: Text.NativeRendering + text: control.text + color: SystemPaletteSingleton.buttonText(control.enabled) + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + } +} diff --git a/src/dialogs/qml/icons.ttf b/src/dialogs/qml/icons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e94078eb5e466582118b8068c3d8a2e25b03f752 GIT binary patch literal 17372 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 literal 0 HcmV?d00001 diff --git a/src/dialogs/qml/qmldir b/src/dialogs/qml/qmldir index c2bf3e58e..184e80cec 100644 --- a/src/dialogs/qml/qmldir +++ b/src/dialogs/qml/qmldir @@ -1 +1,2 @@ ColorSlider 1.0 ColorSlider.qml +IconButtonStyle 1.0 IconButtonStyle.qml diff --git a/src/dialogs/qquickabstractfiledialog.cpp b/src/dialogs/qquickabstractfiledialog.cpp index 671f33f89..e7df94325 100644 --- a/src/dialogs/qquickabstractfiledialog.cpp +++ b/src/dialogs/qquickabstractfiledialog.cpp @@ -48,6 +48,7 @@ QQuickAbstractFileDialog::QQuickAbstractFileDialog(QObject *parent) , m_selectExisting(true) , m_selectMultiple(false) , m_selectFolder(false) + , m_sidebarVisible(true) { updateModes(); connect(this, SIGNAL(accepted()), this, SIGNAL(selectionAccepted())); @@ -155,6 +156,13 @@ void QQuickAbstractFileDialog::setSelectedNameFilterIndex(int idx) selectNameFilter(nameFilters().at(idx)); } +void QQuickAbstractFileDialog::setSidebarVisible(bool s) +{ + if (s == m_sidebarVisible) return; + m_sidebarVisible = s; + emit sidebarVisibleChanged(); +} + QStringList QQuickAbstractFileDialog::selectedNameFilterExtensions() const { QString filterRaw = selectedNameFilter(); diff --git a/src/dialogs/qquickabstractfiledialog_p.h b/src/dialogs/qquickabstractfiledialog_p.h index 499b645d5..aa740b120 100644 --- a/src/dialogs/qquickabstractfiledialog_p.h +++ b/src/dialogs/qquickabstractfiledialog_p.h @@ -65,6 +65,7 @@ class QQuickAbstractFileDialog : public QQuickAbstractDialog Q_PROPERTY(int selectedNameFilterIndex READ selectedNameFilterIndex WRITE setSelectedNameFilterIndex NOTIFY filterSelected) Q_PROPERTY(QUrl fileUrl READ fileUrl NOTIFY selectionAccepted) Q_PROPERTY(QList<QUrl> fileUrls READ fileUrls NOTIFY selectionAccepted) + Q_PROPERTY(bool sidebarVisible READ sidebarVisible WRITE setSidebarVisible NOTIFY sidebarVisibleChanged) public: QQuickAbstractFileDialog(QObject *parent = 0); @@ -81,6 +82,7 @@ public: int selectedNameFilterIndex() const; QUrl fileUrl() const; virtual QList<QUrl> fileUrls() const; + bool sidebarVisible() const { return m_sidebarVisible; } public Q_SLOTS: void setVisible(bool v); @@ -92,6 +94,7 @@ public Q_SLOTS: void setNameFilters(const QStringList &f); void selectNameFilter(const QString &f); void setSelectedNameFilterIndex(int idx); + void setSidebarVisible(bool s); Q_SIGNALS: void folderChanged(); @@ -99,6 +102,7 @@ Q_SIGNALS: void filterSelected(); void fileModeChanged(); void selectionAccepted(); + void sidebarVisibleChanged(); protected: void updateModes(); @@ -109,6 +113,7 @@ protected: bool m_selectExisting; bool m_selectMultiple; bool m_selectFolder; + bool m_sidebarVisible; Q_DISABLE_COPY(QQuickAbstractFileDialog) }; diff --git a/src/dialogs/qquickplatformfiledialog.cpp b/src/dialogs/qquickplatformfiledialog.cpp index 4a52c485c..7ed4e3fbc 100644 --- a/src/dialogs/qquickplatformfiledialog.cpp +++ b/src/dialogs/qquickplatformfiledialog.cpp @@ -329,4 +329,15 @@ QPlatformFileDialogHelper *QQuickPlatformFileDialog::helper() The list of file paths which were selected by the user. */ +/*! + \qmlproperty bool FileDialog::sidebarVisible + + This property holds whether the sidebar in the dialog containing shortcuts + and bookmarks is visible. By default it depends on the setting stored in + the \c QQControlsFileDialog section of the application's + \l {Qt.labs.settings::Settings} {Settings}. + + \since 5.4 +*/ + QT_END_NAMESPACE -- GitLab