From b17576fe8f805d674e8ce66b22f19fe0cda1a182 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Thu, 1 Feb 2018 12:50:07 +0100 Subject: Tests: add new manual tests for TableView This patch will add three new manual tests for testing TableView. The first uses a standard ListModel; the second uses a custom QAbstractTableModel. The third is a port of the storageview example in widgets. Change-Id: Ic8ac1aaf9951d0e2982f512b570caa059a212a17 Reviewed-by: Shawn Rutledge --- .../abstracttablemodel/abstracttablemodel.pro | 10 + tests/manual/tableview/abstracttablemodel/main.cpp | 100 +++++++++ tests/manual/tableview/abstracttablemodel/main.qml | 91 +++++++++ tests/manual/tableview/listmodel/listmodel.pro | 10 + tests/manual/tableview/listmodel/main.cpp | 52 +++++ tests/manual/tableview/listmodel/main.qml | 86 ++++++++ tests/manual/tableview/storagemodel/main.cpp | 56 +++++ tests/manual/tableview/storagemodel/main.qml | 75 +++++++ .../manual/tableview/storagemodel/storagemodel.cpp | 226 +++++++++++++++++++++ tests/manual/tableview/storagemodel/storagemodel.h | 93 +++++++++ .../manual/tableview/storagemodel/storagemodel.pro | 11 + tests/manual/tableview/tableview.pro | 4 + 12 files changed, 814 insertions(+) create mode 100644 tests/manual/tableview/abstracttablemodel/abstracttablemodel.pro create mode 100644 tests/manual/tableview/abstracttablemodel/main.cpp create mode 100644 tests/manual/tableview/abstracttablemodel/main.qml create mode 100644 tests/manual/tableview/listmodel/listmodel.pro create mode 100644 tests/manual/tableview/listmodel/main.cpp create mode 100644 tests/manual/tableview/listmodel/main.qml create mode 100644 tests/manual/tableview/storagemodel/main.cpp create mode 100644 tests/manual/tableview/storagemodel/main.qml create mode 100644 tests/manual/tableview/storagemodel/storagemodel.cpp create mode 100644 tests/manual/tableview/storagemodel/storagemodel.h create mode 100644 tests/manual/tableview/storagemodel/storagemodel.pro create mode 100644 tests/manual/tableview/tableview.pro (limited to 'tests/manual') diff --git a/tests/manual/tableview/abstracttablemodel/abstracttablemodel.pro b/tests/manual/tableview/abstracttablemodel/abstracttablemodel.pro new file mode 100644 index 0000000000..ade49c33a2 --- /dev/null +++ b/tests/manual/tableview/abstracttablemodel/abstracttablemodel.pro @@ -0,0 +1,10 @@ +TEMPLATE = app +TARGET = tableview_abstracttablemodel +QT += qml quick +SOURCES += main.cpp +RESOURCES += main.qml + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target diff --git a/tests/manual/tableview/abstracttablemodel/main.cpp b/tests/manual/tableview/abstracttablemodel/main.cpp new file mode 100644 index 0000000000..22dda5ca4a --- /dev/null +++ b/tests/manual/tableview/abstracttablemodel/main.cpp @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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.LGPL3 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-3.0.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 (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +class TestTableModel : public QAbstractTableModel +{ + Q_OBJECT + Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount NOTIFY rowCountChanged) + Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount NOTIFY columnCountChanged) + +public: + TestTableModel(QObject *parent = nullptr) : QAbstractTableModel(parent) { } + + int rowCount(const QModelIndex & = QModelIndex()) const override { return m_rows; } + void setRowCount(int count) { beginResetModel(); m_rows = count; emit rowCountChanged(); endResetModel(); } + + int columnCount(const QModelIndex & = QModelIndex()) const override { return m_cols; } + void setColumnCount(int count) { beginResetModel(); m_cols = count; emit columnCountChanged(); endResetModel(); } + + QVariant headerData(int section, Qt::Orientation orientation, int role) const + { + Q_UNUSED(orientation); + Q_UNUSED(role); + return QStringLiteral("Column header"); + } + + QVariant data(const QModelIndex &index, int role) const override + { + if (!index.isValid() || role != Qt::DisplayRole) + return QVariant(); + return QString("[%1-%2]").arg(index.column()).arg(index.row()); + } + + QHash roleNames() const override + { + return { {Qt::DisplayRole, "display"} }; + } + +signals: + void rowCountChanged(); + void columnCountChanged(); + +private: + int m_rows = 0; + int m_cols = 0; +}; + +int main(int argc, char *argv[]) +{ + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QGuiApplication app(argc, argv); + + qmlRegisterType("TestTableModel", 0, 1, "TestTableModel"); + + QQmlApplicationEngine engine; + engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); + + return app.exec(); +} + +#include "main.moc" diff --git a/tests/manual/tableview/abstracttablemodel/main.qml b/tests/manual/tableview/abstracttablemodel/main.qml new file mode 100644 index 0000000000..bff851a9f2 --- /dev/null +++ b/tests/manual/tableview/abstracttablemodel/main.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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.LGPL3 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-3.0.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 (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.3 +import QtQml.Models 2.2 +import Qt.labs.tableview 1.0 +import TestTableModel 0.1 + +Window { + id: window + width: 640 + height: 480 + visible: true + + TestTableModel { + id: tableModel + rowCount: 200 + columnCount: 200 + } + + Rectangle { + anchors.fill: parent + anchors.margins: 10 + color: "darkgray" + + TableView { + id: tableView + anchors.fill: parent + anchors.margins: 1 + clip: true + + model: tableModel + delegate: tableViewDelegate + cacheBuffer: 500 + columnSpacing: 1 + rowSpacing: 1 + } + + Component { + id: tableViewDelegate + Rectangle { + width: TableView.column % 3 ? 80 : 50 + height: TableView.row % 3 ? 80 : 50 + + Text { + anchors.centerIn: parent + text: modelData + } + } + } + + } + +} diff --git a/tests/manual/tableview/listmodel/listmodel.pro b/tests/manual/tableview/listmodel/listmodel.pro new file mode 100644 index 0000000000..dbae0db2b1 --- /dev/null +++ b/tests/manual/tableview/listmodel/listmodel.pro @@ -0,0 +1,10 @@ +TEMPLATE = app +TARGET = tableview_listmodel +QT += qml quick +SOURCES += main.cpp +RESOURCES += main.qml + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target diff --git a/tests/manual/tableview/listmodel/main.cpp b/tests/manual/tableview/listmodel/main.cpp new file mode 100644 index 0000000000..2a3b90d392 --- /dev/null +++ b/tests/manual/tableview/listmodel/main.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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.LGPL3 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-3.0.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 (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +int main(int argc, char *argv[]) +{ + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QGuiApplication app(argc, argv); + + QQmlApplicationEngine engine; + engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); + + return app.exec(); +} diff --git a/tests/manual/tableview/listmodel/main.qml b/tests/manual/tableview/listmodel/main.qml new file mode 100644 index 0000000000..f4def85455 --- /dev/null +++ b/tests/manual/tableview/listmodel/main.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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.LGPL3 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-3.0.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 (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.3 +import Qt.labs.tableview 1.0 +import QtQml.Models 2.2 + +Window { + id: window + width: 640 + height: 480 + visible: true + + ListModel { + id: listModel + Component.onCompleted: { + for (var i = 0; i < 30; ++i) + listModel.append({"name" : i}) + } + } + + Rectangle { + anchors.fill: parent + anchors.margins: 10 + color: "darkgray" + + TableView { + id: tableView + anchors.fill: parent + anchors.margins: 1 + clip: true + columnSpacing: 1 + rowSpacing: 1 + model: listModel + delegate: Component { + Rectangle { + id: tableDelegate + width: 100 + height: 50 + + Text { + anchors.centerIn: parent + text: name + "\n[" + tableDelegate.TableView.column + ", " + tableDelegate.TableView.row + "]" + } + } + } + } + } +} diff --git a/tests/manual/tableview/storagemodel/main.cpp b/tests/manual/tableview/storagemodel/main.cpp new file mode 100644 index 0000000000..97ae619ce4 --- /dev/null +++ b/tests/manual/tableview/storagemodel/main.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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.LGPL3 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-3.0.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 (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "storagemodel.h" + +int main(int argc, char *argv[]) +{ + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QGuiApplication app(argc, argv); + + qmlRegisterType("StorageModel", 0, 1, "StorageModel"); + + QQmlApplicationEngine engine; + engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); + + return app.exec(); +} + diff --git a/tests/manual/tableview/storagemodel/main.qml b/tests/manual/tableview/storagemodel/main.qml new file mode 100644 index 0000000000..fbeb5f6115 --- /dev/null +++ b/tests/manual/tableview/storagemodel/main.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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.LGPL3 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-3.0.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 (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.12 +import QtQuick.Window 2.3 +import Qt.labs.tableview 1.0 +import StorageModel 0.1 + +Window { + id: window + width: 640 + height: 480 + visible: true + color: "darkgray" + title: "Storage Volumes" + + TableView { + id: table + anchors.fill: parent + anchors.margins: 10 + clip: true + model: StorageModel { } + columnSpacing: 1 + rowSpacing: 1 + delegate: Rectangle { + id: tableDelegate + width: displayText.implicitWidth + 8 + height: displayText.implicitHeight + 14 + + Text { + id: displayText + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.leftMargin: 4 + text: display + } + } + } +} diff --git a/tests/manual/tableview/storagemodel/storagemodel.cpp b/tests/manual/tableview/storagemodel/storagemodel.cpp new file mode 100644 index 0000000000..345d1cc63f --- /dev/null +++ b/tests/manual/tableview/storagemodel/storagemodel.cpp @@ -0,0 +1,226 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2016 Ivan Komissarov +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, 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 The Qt Company Ltd 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$ +** +****************************************************************************/ + +#include "storagemodel.h" + +#include +#include +#include +#include +#include + +StorageModel::StorageModel(QObject *parent) : + QAbstractTableModel(parent) +{ + refresh(); +} + +void StorageModel::refresh() +{ + beginResetModel(); + m_volumes = QStorageInfo::mountedVolumes(); + std::sort(m_volumes.begin(), m_volumes.end(), + [](const QStorageInfo &st1, const QStorageInfo &st2) { + static const QString rootSortString = QStringLiteral(" "); + return (st1.isRoot() ? rootSortString : st1.rootPath()) + < (st2.isRoot() ? rootSortString : st2.rootPath()); + }); + endResetModel(); +} + +int StorageModel::columnCount(const QModelIndex &/*parent*/) const +{ + return ColumnCount; +} + +int StorageModel::rowCount(const QModelIndex &parent) const +{ + if (parent.isValid()) + return 0; + return m_volumes.count(); +} + +Qt::ItemFlags StorageModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags result = QAbstractTableModel::flags(index); + switch (index.column()) { + case ColumnAvailable: + case ColumnIsReady: + case ColumnIsReadOnly: + case ColumnIsValid: + result |= Qt::ItemIsUserCheckable; + break; + default: + break; + } + return result; +} + +QVariant StorageModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role == Qt::DisplayRole) { + const QStorageInfo &volume = m_volumes.at(index.row()); + switch (index.column()) { + case ColumnRootPath: + return QDir::toNativeSeparators(volume.rootPath()); + case ColumnName: + return volume.name(); + case ColumnDevice: + return volume.device(); + case ColumnFileSystemName: + return volume.fileSystemType(); + case ColumnTotal: + return QLocale().formattedDataSize(volume.bytesTotal()); + case ColumnFree: + return QLocale().formattedDataSize(volume.bytesFree()); + case ColumnAvailable: + return QLocale().formattedDataSize(volume.bytesAvailable()); + case ColumnIsReady: + return volume.isReady(); + case ColumnIsReadOnly: + return volume.isReadOnly(); + case ColumnIsValid: + return volume.isValid(); + default: + break; + } + } else if (role == Qt::CheckStateRole) { + const QStorageInfo &volume = m_volumes.at(index.row()); + switch (index.column()) { + case ColumnIsReady: + return volume.isReady(); + case ColumnIsReadOnly: + return volume.isReadOnly(); + case ColumnIsValid: + return volume.isValid(); + default: + break; + } + } else if (role == Qt::TextAlignmentRole) { + switch (index.column()) { + case ColumnTotal: + case ColumnFree: + case ColumnAvailable: + return Qt::AlignTrailing; + default: + break; + } + return Qt::AlignLeading; + } else if (role == Qt::ToolTipRole) { + QLocale locale; + const QStorageInfo &volume = m_volumes.at(index.row()); + return tr("Root path : %1\n" + "Name: %2\n" + "Display Name: %3\n" + "Device: %4\n" + "FileSystem: %5\n" + "Total size: %6\n" + "Free size: %7\n" + "Available size: %8\n" + "Is Ready: %9\n" + "Is Read-only: %10\n" + "Is Valid: %11\n" + "Is Root: %12" + ). + arg(QDir::toNativeSeparators(volume.rootPath())). + arg(volume.name()). + arg(volume.displayName()). + arg(QString::fromUtf8(volume.device())). + arg(QString::fromUtf8(volume.fileSystemType())). + arg(locale.formattedDataSize(volume.bytesTotal())). + arg(locale.formattedDataSize(volume.bytesFree())). + arg(locale.formattedDataSize(volume.bytesAvailable())). + arg(volume.isReady() ? tr("true") : tr("false")). + arg(volume.isReadOnly() ? tr("true") : tr("false")). + arg(volume.isValid() ? tr("true") : tr("false")). + arg(volume.isRoot() ? tr("true") : tr("false")); + } + return QVariant(); +} + +QVariant StorageModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (orientation != Qt::Horizontal) + return QVariant(); + + if (role != Qt::DisplayRole) + return QVariant(); + + switch (section) { + case ColumnRootPath: + return tr("Root Path"); + case ColumnName: + return tr("Volume Name"); + case ColumnDevice: + return tr("Device"); + case ColumnFileSystemName: + return tr("File System"); + case ColumnTotal: + return tr("Total"); + case ColumnFree: + return tr("Free"); + case ColumnAvailable: + return tr("Available"); + case ColumnIsReady: + return tr("Ready"); + case ColumnIsReadOnly: + return tr("Read-only"); + case ColumnIsValid: + return tr("Valid"); + default: + break; + } + + return QVariant(); +} diff --git a/tests/manual/tableview/storagemodel/storagemodel.h b/tests/manual/tableview/storagemodel/storagemodel.h new file mode 100644 index 0000000000..787b2f04de --- /dev/null +++ b/tests/manual/tableview/storagemodel/storagemodel.h @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2016 Ivan Komissarov +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, 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 The Qt Company Ltd 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$ +** +****************************************************************************/ + +#ifndef STORAGEMODEL_H +#define STORAGEMODEL_H + +#include +#include + +class StorageModel : public QAbstractTableModel +{ + Q_OBJECT + Q_DISABLE_COPY(StorageModel) +public: + enum Column { + ColumnRootPath = 0, + ColumnName, + ColumnDevice, + ColumnFileSystemName, + ColumnTotal, + ColumnFree, + ColumnAvailable, + ColumnIsReady, + ColumnIsReadOnly, + ColumnIsValid, + ColumnCount + }; + + explicit StorageModel(QObject *parent = nullptr); + + int columnCount(const QModelIndex &parent) const override; + int rowCount(const QModelIndex &parent) const override; + + QVariant data(const QModelIndex &index, int role) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role) const override; + +public slots: + void refresh(); + +private: + QList m_volumes; +}; + +#endif // STORAGEMODEL_H diff --git a/tests/manual/tableview/storagemodel/storagemodel.pro b/tests/manual/tableview/storagemodel/storagemodel.pro new file mode 100644 index 0000000000..c6a018239e --- /dev/null +++ b/tests/manual/tableview/storagemodel/storagemodel.pro @@ -0,0 +1,11 @@ +TEMPLATE = app +TARGET = tableview_storage +QT += qml quick +SOURCES += main.cpp storagemodel.cpp +HEADERS += storagemodel.h +RESOURCES += main.qml + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target diff --git a/tests/manual/tableview/tableview.pro b/tests/manual/tableview/tableview.pro new file mode 100644 index 0000000000..5040f0e747 --- /dev/null +++ b/tests/manual/tableview/tableview.pro @@ -0,0 +1,4 @@ +TEMPLATE = subdirs +SUBDIRS += abstracttablemodel \ + listmodel \ + storagemodel -- cgit v1.2.3