diff options
Diffstat (limited to 'examples/tools/settingseditor')
-rw-r--r-- | examples/tools/settingseditor/inifiles/licensepage.ini | 46 | ||||
-rw-r--r-- | examples/tools/settingseditor/inifiles/qsa.ini | 26 | ||||
-rw-r--r-- | examples/tools/settingseditor/locationdialog.cpp | 217 | ||||
-rw-r--r-- | examples/tools/settingseditor/locationdialog.h | 85 | ||||
-rw-r--r-- | examples/tools/settingseditor/main.cpp | 52 | ||||
-rw-r--r-- | examples/tools/settingseditor/mainwindow.cpp | 223 | ||||
-rw-r--r-- | examples/tools/settingseditor/mainwindow.h | 92 | ||||
-rw-r--r-- | examples/tools/settingseditor/settingseditor.pro | 15 | ||||
-rw-r--r-- | examples/tools/settingseditor/settingstree.cpp | 263 | ||||
-rw-r--r-- | examples/tools/settingseditor/settingstree.h | 91 | ||||
-rw-r--r-- | examples/tools/settingseditor/variantdelegate.cpp | 317 | ||||
-rw-r--r-- | examples/tools/settingseditor/variantdelegate.h | 82 |
12 files changed, 1509 insertions, 0 deletions
diff --git a/examples/tools/settingseditor/inifiles/licensepage.ini b/examples/tools/settingseditor/inifiles/licensepage.ini new file mode 100644 index 0000000..608d1b7 --- /dev/null +++ b/examples/tools/settingseditor/inifiles/licensepage.ini @@ -0,0 +1,46 @@ +[Field%201] +Bottom=89 +Flags=MULTILINE|VSCROLL|READONLY +Left=4 +Right=296 +State=No license agreement file found. Please contact support. +Top=14 +Type=Text + +[Field%202] +Bottom=8 +Left=4 +Right=294 +Text=Press Page Down to see the rest of the agreement. +Top=0 +Type=Label + +[Field%203] +Bottom=111 +Left=4 +Right=297 +Text=If you accept the terms of the agreement, select the first option below. You must accept the agreement to install this software. Click Next to continue. +Top=92 +Type=Label + +[Field%204] +Bottom=129 +Flags=GROUP|NOTIFY +Left=4 +Right=299 +Text=I &accept the terms in the License Agreement +Top=120 +Type=RadioButton + +[Field%205] +Bottom=140 +Flags=NOTIFY +Left=4 +Right=300 +State=1 +Text=I &do not accept the terms in the License Agreement +Top=129 +Type=RadioButton + +[Settings] +NumFields=5 diff --git a/examples/tools/settingseditor/inifiles/qsa.ini b/examples/tools/settingseditor/inifiles/qsa.ini new file mode 100644 index 0000000..56a2964 --- /dev/null +++ b/examples/tools/settingseditor/inifiles/qsa.ini @@ -0,0 +1,26 @@ +[Field%201] +Bottom=65 +Left=0 +Right=299 +Text=QSA Build Options +Top=9 +Type=Groupbox + +[Field%202] +Bottom=37 +Left=20 +Right=284 +Text=Don't compile QSA Workbench into QSA. +Top=27 +Type=Checkbox + +[Field%203] +Bottom=56 +Left=20 +Right=247 +Text=Don't compile QSA Workbench nor QSA Editor into QSA. +Top=45 +Type=Checkbox + +[Settings] +NumFields=3 diff --git a/examples/tools/settingseditor/locationdialog.cpp b/examples/tools/settingseditor/locationdialog.cpp new file mode 100644 index 0000000..600038b --- /dev/null +++ b/examples/tools/settingseditor/locationdialog.cpp @@ -0,0 +1,217 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "locationdialog.h" + +LocationDialog::LocationDialog(QWidget *parent) + : QDialog(parent) +{ + formatComboBox = new QComboBox; + formatComboBox->addItem(tr("Native")); + formatComboBox->addItem(tr("INI")); + + scopeComboBox = new QComboBox; + scopeComboBox->addItem(tr("User")); + scopeComboBox->addItem(tr("System")); + + organizationComboBox = new QComboBox; + organizationComboBox->addItem(tr("Trolltech")); + organizationComboBox->setEditable(true); + + applicationComboBox = new QComboBox; + applicationComboBox->addItem(tr("Any")); + applicationComboBox->addItem(tr("Application Example")); + applicationComboBox->addItem(tr("Assistant")); + applicationComboBox->addItem(tr("Designer")); + applicationComboBox->addItem(tr("Linguist")); + applicationComboBox->setEditable(true); + applicationComboBox->setCurrentIndex(3); + + formatLabel = new QLabel(tr("&Format:")); + formatLabel->setBuddy(formatComboBox); + + scopeLabel = new QLabel(tr("&Scope:")); + scopeLabel->setBuddy(scopeComboBox); + + organizationLabel = new QLabel(tr("&Organization:")); + organizationLabel->setBuddy(organizationComboBox); + + applicationLabel = new QLabel(tr("&Application:")); + applicationLabel->setBuddy(applicationComboBox); + + locationsGroupBox = new QGroupBox(tr("Setting Locations")); + + QStringList labels; + labels << tr("Location") << tr("Access"); + + locationsTable = new QTableWidget; + locationsTable->setSelectionMode(QAbstractItemView::SingleSelection); + locationsTable->setSelectionBehavior(QAbstractItemView::SelectRows); + locationsTable->setEditTriggers(QAbstractItemView::NoEditTriggers); + locationsTable->setColumnCount(2); + locationsTable->setHorizontalHeaderLabels(labels); + locationsTable->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch); + locationsTable->horizontalHeader()->resizeSection(1, 180); + + buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok + | QDialogButtonBox::Cancel); + + connect(formatComboBox, SIGNAL(activated(int)), + this, SLOT(updateLocationsTable())); + connect(scopeComboBox, SIGNAL(activated(int)), + this, SLOT(updateLocationsTable())); + connect(organizationComboBox->lineEdit(), + SIGNAL(editingFinished()), + this, SLOT(updateLocationsTable())); + connect(applicationComboBox->lineEdit(), + SIGNAL(editingFinished()), + this, SLOT(updateLocationsTable())); + connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + + QVBoxLayout *locationsLayout = new QVBoxLayout; + locationsLayout->addWidget(locationsTable); + locationsGroupBox->setLayout(locationsLayout); + + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(formatLabel, 0, 0); + mainLayout->addWidget(formatComboBox, 0, 1); + mainLayout->addWidget(scopeLabel, 1, 0); + mainLayout->addWidget(scopeComboBox, 1, 1); + mainLayout->addWidget(organizationLabel, 2, 0); + mainLayout->addWidget(organizationComboBox, 2, 1); + mainLayout->addWidget(applicationLabel, 3, 0); + mainLayout->addWidget(applicationComboBox, 3, 1); + mainLayout->addWidget(locationsGroupBox, 4, 0, 1, 2); + mainLayout->addWidget(buttonBox, 5, 0, 1, 2); + setLayout(mainLayout); + + updateLocationsTable(); + + setWindowTitle(tr("Open Application Settings")); + resize(650, 400); +} + +QSettings::Format LocationDialog::format() const +{ + if (formatComboBox->currentIndex() == 0) + return QSettings::NativeFormat; + else + return QSettings::IniFormat; +} + +QSettings::Scope LocationDialog::scope() const +{ + if (scopeComboBox->currentIndex() == 0) + return QSettings::UserScope; + else + return QSettings::SystemScope; +} + +QString LocationDialog::organization() const +{ + return organizationComboBox->currentText(); +} + +QString LocationDialog::application() const +{ + if (applicationComboBox->currentText() == tr("Any")) + return ""; + else + return applicationComboBox->currentText(); +} + +void LocationDialog::updateLocationsTable() +{ + locationsTable->setUpdatesEnabled(false); + locationsTable->setRowCount(0); + + for (int i = 0; i < 2; ++i) { + if (i == 0 && scope() == QSettings::SystemScope) + continue; + + QSettings::Scope actualScope = (i == 0) ? QSettings::UserScope + : QSettings::SystemScope; + for (int j = 0; j < 2; ++j) { + if (j == 0 && application().isEmpty()) + continue; + + QString actualApplication; + if (j == 0) + actualApplication = application(); + QSettings settings(format(), actualScope, organization(), + actualApplication); + + int row = locationsTable->rowCount(); + locationsTable->setRowCount(row + 1); + + QTableWidgetItem *item0 = new QTableWidgetItem; + item0->setText(settings.fileName()); + + QTableWidgetItem *item1 = new QTableWidgetItem; + bool disable = (settings.childKeys().isEmpty() + && settings.childGroups().isEmpty()); + + if (row == 0) { + if (settings.isWritable()) { + item1->setText(tr("Read-write")); + disable = false; + } else { + item1->setText(tr("Read-only")); + } + buttonBox->button(QDialogButtonBox::Ok)->setDisabled(disable); + } else { + item1->setText(tr("Read-only fallback")); + } + + if (disable) { + item0->setFlags(item0->flags() & ~Qt::ItemIsEnabled); + item1->setFlags(item1->flags() & ~Qt::ItemIsEnabled); + } + + locationsTable->setItem(row, 0, item0); + locationsTable->setItem(row, 1, item1); + } + } + locationsTable->setUpdatesEnabled(true); +} diff --git a/examples/tools/settingseditor/locationdialog.h b/examples/tools/settingseditor/locationdialog.h new file mode 100644 index 0000000..3ea8359 --- /dev/null +++ b/examples/tools/settingseditor/locationdialog.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef LOCATIONDIALOG_H +#define LOCATIONDIALOG_H + +#include <QDialog> +#include <QSettings> + +QT_BEGIN_NAMESPACE +class QComboBox; +class QDialogButtonBox; +class QGroupBox; +class QLabel; +class QTableWidget; +QT_END_NAMESPACE + +class LocationDialog : public QDialog +{ + Q_OBJECT + +public: + LocationDialog(QWidget *parent = 0); + + QSettings::Format format() const; + QSettings::Scope scope() const; + QString organization() const; + QString application() const; + +private slots: + void updateLocationsTable(); + +private: + QLabel *formatLabel; + QLabel *scopeLabel; + QLabel *organizationLabel; + QLabel *applicationLabel; + QComboBox *formatComboBox; + QComboBox *scopeComboBox; + QComboBox *organizationComboBox; + QComboBox *applicationComboBox; + QGroupBox *locationsGroupBox; + QTableWidget *locationsTable; + QDialogButtonBox *buttonBox; +}; + +#endif diff --git a/examples/tools/settingseditor/main.cpp b/examples/tools/settingseditor/main.cpp new file mode 100644 index 0000000..4856752 --- /dev/null +++ b/examples/tools/settingseditor/main.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QApplication> + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow mainWin; + mainWin.show(); + return app.exec(); +} diff --git a/examples/tools/settingseditor/mainwindow.cpp b/examples/tools/settingseditor/mainwindow.cpp new file mode 100644 index 0000000..0f48a5c --- /dev/null +++ b/examples/tools/settingseditor/mainwindow.cpp @@ -0,0 +1,223 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "locationdialog.h" +#include "mainwindow.h" +#include "settingstree.h" + +MainWindow::MainWindow() +{ + settingsTree = new SettingsTree; + setCentralWidget(settingsTree); + + locationDialog = 0; + + createActions(); + createMenus(); + + autoRefreshAct->setChecked(true); + fallbacksAct->setChecked(true); + + setWindowTitle(tr("Settings Editor")); + resize(500, 600); +} + +void MainWindow::openSettings() +{ + if (!locationDialog) + locationDialog = new LocationDialog(this); + + if (locationDialog->exec()) { + QSettings *settings = new QSettings(locationDialog->format(), + locationDialog->scope(), + locationDialog->organization(), + locationDialog->application()); + setSettingsObject(settings); + fallbacksAct->setEnabled(true); + } +} + +void MainWindow::openIniFile() +{ + QString fileName = QFileDialog::getOpenFileName(this, tr("Open INI File"), + "", tr("INI Files (*.ini *.conf)")); + if (!fileName.isEmpty()) { + QSettings *settings = new QSettings(fileName, QSettings::IniFormat); + setSettingsObject(settings); + fallbacksAct->setEnabled(false); + } +} + +void MainWindow::openPropertyList() +{ + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open Property List"), + "", tr("Property List Files (*.plist)")); + if (!fileName.isEmpty()) { + QSettings *settings = new QSettings(fileName, QSettings::NativeFormat); + setSettingsObject(settings); + fallbacksAct->setEnabled(false); + } +} + +void MainWindow::openRegistryPath() +{ + QString path = QInputDialog::getText(this, tr("Open Registry Path"), + tr("Enter the path in the Windows registry:"), + QLineEdit::Normal, "HKEY_CURRENT_USER\\"); + if (!path.isEmpty()) { + QSettings *settings = new QSettings(path, QSettings::NativeFormat); + setSettingsObject(settings); + fallbacksAct->setEnabled(false); + } +} + +void MainWindow::about() +{ + QMessageBox::about(this, tr("About Settings Editor"), + tr("The <b>Settings Editor</b> example shows how to access " + "application settings using Qt.")); +} + +void MainWindow::createActions() +{ + openSettingsAct = new QAction(tr("&Open Application Settings..."), this); + openSettingsAct->setShortcut(tr("Ctrl+O")); + connect(openSettingsAct, SIGNAL(triggered()), this, SLOT(openSettings())); + + openIniFileAct = new QAction(tr("Open I&NI File..."), this); + openIniFileAct->setShortcut(tr("Ctrl+N")); + connect(openIniFileAct, SIGNAL(triggered()), this, SLOT(openIniFile())); + + openPropertyListAct = new QAction(tr("Open Mac &Property List..."), this); + openPropertyListAct->setShortcut(tr("Ctrl+P")); + connect(openPropertyListAct, SIGNAL(triggered()), + this, SLOT(openPropertyList())); + + openRegistryPathAct = new QAction(tr("Open Windows &Registry Path..."), + this); + openRegistryPathAct->setShortcut(tr("Ctrl+G")); + connect(openRegistryPathAct, SIGNAL(triggered()), + this, SLOT(openRegistryPath())); + + refreshAct = new QAction(tr("&Refresh"), this); + refreshAct->setShortcut(tr("Ctrl+R")); + refreshAct->setEnabled(false); + connect(refreshAct, SIGNAL(triggered()), settingsTree, SLOT(refresh())); + + exitAct = new QAction(tr("E&xit"), this); + exitAct->setShortcut(tr("Ctrl+Q")); + connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); + + autoRefreshAct = new QAction(tr("&Auto-Refresh"), this); + autoRefreshAct->setShortcut(tr("Ctrl+A")); + autoRefreshAct->setCheckable(true); + autoRefreshAct->setEnabled(false); + connect(autoRefreshAct, SIGNAL(triggered(bool)), + settingsTree, SLOT(setAutoRefresh(bool))); + connect(autoRefreshAct, SIGNAL(triggered(bool)), + refreshAct, SLOT(setDisabled(bool))); + + fallbacksAct = new QAction(tr("&Fallbacks"), this); + fallbacksAct->setShortcut(tr("Ctrl+F")); + fallbacksAct->setCheckable(true); + fallbacksAct->setEnabled(false); + connect(fallbacksAct, SIGNAL(triggered(bool)), + settingsTree, SLOT(setFallbacksEnabled(bool))); + + aboutAct = new QAction(tr("&About"), this); + connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); + + aboutQtAct = new QAction(tr("About &Qt"), this); + connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); + +#ifndef Q_WS_MAC + openPropertyListAct->setEnabled(false); +#endif +#ifndef Q_WS_WIN + openRegistryPathAct->setEnabled(false); +#endif +} + +void MainWindow::createMenus() +{ + fileMenu = menuBar()->addMenu(tr("&File")); + fileMenu->addAction(openSettingsAct); + fileMenu->addAction(openIniFileAct); + fileMenu->addAction(openPropertyListAct); + fileMenu->addAction(openRegistryPathAct); + fileMenu->addSeparator(); + fileMenu->addAction(refreshAct); + fileMenu->addSeparator(); + fileMenu->addAction(exitAct); + + optionsMenu = menuBar()->addMenu(tr("&Options")); + optionsMenu->addAction(autoRefreshAct); + optionsMenu->addAction(fallbacksAct); + + menuBar()->addSeparator(); + + helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu->addAction(aboutAct); + helpMenu->addAction(aboutQtAct); +} + +void MainWindow::setSettingsObject(QSettings *settings) +{ + settings->setFallbacksEnabled(fallbacksAct->isChecked()); + settingsTree->setSettingsObject(settings); + + refreshAct->setEnabled(true); + autoRefreshAct->setEnabled(true); + + QString niceName = settings->fileName(); + niceName.replace("\\", "/"); + int pos = niceName.lastIndexOf("/"); + if (pos != -1) + niceName.remove(0, pos + 1); + + if (!settings->isWritable()) + niceName = tr("%1 (read only)").arg(niceName); + + setWindowTitle(tr("%1 - %2").arg(niceName).arg(tr("Settings Editor"))); +} diff --git a/examples/tools/settingseditor/mainwindow.h b/examples/tools/settingseditor/mainwindow.h new file mode 100644 index 0000000..749602d --- /dev/null +++ b/examples/tools/settingseditor/mainwindow.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QMainWindow> + +QT_BEGIN_NAMESPACE +class QAction; +class QMenu; +class QSettings; +QT_END_NAMESPACE +class LocationDialog; +class SettingsTree; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +private slots: + void openSettings(); + void openIniFile(); + void openPropertyList(); + void openRegistryPath(); + void about(); + +private: + void createActions(); + void createMenus(); + void setSettingsObject(QSettings *settings); + + SettingsTree *settingsTree; + LocationDialog *locationDialog; + + QMenu *fileMenu; + QMenu *optionsMenu; + QMenu *helpMenu; + QAction *openSettingsAct; + QAction *openIniFileAct; + QAction *openPropertyListAct; + QAction *openRegistryPathAct; + QAction *refreshAct; + QAction *exitAct; + QAction *autoRefreshAct; + QAction *fallbacksAct; + QAction *aboutAct; + QAction *aboutQtAct; +}; + +#endif diff --git a/examples/tools/settingseditor/settingseditor.pro b/examples/tools/settingseditor/settingseditor.pro new file mode 100644 index 0000000..321c2bb --- /dev/null +++ b/examples/tools/settingseditor/settingseditor.pro @@ -0,0 +1,15 @@ +HEADERS = locationdialog.h \ + mainwindow.h \ + settingstree.h \ + variantdelegate.h +SOURCES = locationdialog.cpp \ + main.cpp \ + mainwindow.cpp \ + settingstree.cpp \ + variantdelegate.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tools/settingseditor +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS settingseditor.pro inifiles +sources.path = $$[QT_INSTALL_EXAMPLES]/tools/settingseditor +INSTALLS += target sources diff --git a/examples/tools/settingseditor/settingstree.cpp b/examples/tools/settingseditor/settingstree.cpp new file mode 100644 index 0000000..82d32fd --- /dev/null +++ b/examples/tools/settingseditor/settingstree.cpp @@ -0,0 +1,263 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "settingstree.h" +#include "variantdelegate.h" + +SettingsTree::SettingsTree(QWidget *parent) + : QTreeWidget(parent) +{ + setItemDelegate(new VariantDelegate(this)); + + QStringList labels; + labels << tr("Setting") << tr("Type") << tr("Value"); + setHeaderLabels(labels); + header()->setResizeMode(0, QHeaderView::Stretch); + header()->setResizeMode(2, QHeaderView::Stretch); + + settings = 0; + refreshTimer.setInterval(2000); + autoRefresh = false; + + groupIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirClosedIcon), + QIcon::Normal, QIcon::Off); + groupIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirOpenIcon), + QIcon::Normal, QIcon::On); + keyIcon.addPixmap(style()->standardPixmap(QStyle::SP_FileIcon)); + + connect(&refreshTimer, SIGNAL(timeout()), this, SLOT(maybeRefresh())); +} + +void SettingsTree::setSettingsObject(QSettings *settings) +{ + delete this->settings; + this->settings = settings; + clear(); + + if (settings) { + settings->setParent(this); + refresh(); + if (autoRefresh) + refreshTimer.start(); + } else { + refreshTimer.stop(); + } +} + +QSize SettingsTree::sizeHint() const +{ + return QSize(800, 600); +} + +void SettingsTree::setAutoRefresh(bool autoRefresh) +{ + this->autoRefresh = autoRefresh; + if (settings) { + if (autoRefresh) { + maybeRefresh(); + refreshTimer.start(); + } else { + refreshTimer.stop(); + } + } +} + +void SettingsTree::setFallbacksEnabled(bool enabled) +{ + if (settings) { + settings->setFallbacksEnabled(enabled); + refresh(); + } +} + +void SettingsTree::maybeRefresh() +{ + if (state() != EditingState) + refresh(); +} + +void SettingsTree::refresh() +{ + if (!settings) + return; + + disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), + this, SLOT(updateSetting(QTreeWidgetItem *))); + + settings->sync(); + updateChildItems(0); + + connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), + this, SLOT(updateSetting(QTreeWidgetItem *))); +} + +bool SettingsTree::event(QEvent *event) +{ + if (event->type() == QEvent::WindowActivate) { + if (isActiveWindow() && autoRefresh) + maybeRefresh(); + } + return QTreeWidget::event(event); +} + +void SettingsTree::updateSetting(QTreeWidgetItem *item) +{ + QString key = item->text(0); + QTreeWidgetItem *ancestor = item->parent(); + while (ancestor) { + key.prepend(ancestor->text(0) + "/"); + ancestor = ancestor->parent(); + } + + settings->setValue(key, item->data(2, Qt::UserRole)); + if (autoRefresh) + refresh(); +} + +void SettingsTree::updateChildItems(QTreeWidgetItem *parent) +{ + int dividerIndex = 0; + + foreach (QString group, settings->childGroups()) { + QTreeWidgetItem *child; + int childIndex = findChild(parent, group, dividerIndex); + if (childIndex != -1) { + child = childAt(parent, childIndex); + child->setText(1, ""); + child->setText(2, ""); + child->setData(2, Qt::UserRole, QVariant()); + moveItemForward(parent, childIndex, dividerIndex); + } else { + child = createItem(group, parent, dividerIndex); + } + child->setIcon(0, groupIcon); + ++dividerIndex; + + settings->beginGroup(group); + updateChildItems(child); + settings->endGroup(); + } + + foreach (QString key, settings->childKeys()) { + QTreeWidgetItem *child; + int childIndex = findChild(parent, key, 0); + + if (childIndex == -1 || childIndex >= dividerIndex) { + if (childIndex != -1) { + child = childAt(parent, childIndex); + for (int i = 0; i < child->childCount(); ++i) + delete childAt(child, i); + moveItemForward(parent, childIndex, dividerIndex); + } else { + child = createItem(key, parent, dividerIndex); + } + child->setIcon(0, keyIcon); + ++dividerIndex; + } else { + child = childAt(parent, childIndex); + } + + QVariant value = settings->value(key); + if (value.type() == QVariant::Invalid) { + child->setText(1, "Invalid"); + } else { + child->setText(1, value.typeName()); + } + child->setText(2, VariantDelegate::displayText(value)); + child->setData(2, Qt::UserRole, value); + } + + while (dividerIndex < childCount(parent)) + delete childAt(parent, dividerIndex); +} + +QTreeWidgetItem *SettingsTree::createItem(const QString &text, + QTreeWidgetItem *parent, int index) +{ + QTreeWidgetItem *after = 0; + if (index != 0) + after = childAt(parent, index - 1); + + QTreeWidgetItem *item; + if (parent) + item = new QTreeWidgetItem(parent, after); + else + item = new QTreeWidgetItem(this, after); + + item->setText(0, text); + item->setFlags(item->flags() | Qt::ItemIsEditable); + return item; +} + +QTreeWidgetItem *SettingsTree::childAt(QTreeWidgetItem *parent, int index) +{ + if (parent) + return parent->child(index); + else + return topLevelItem(index); +} + +int SettingsTree::childCount(QTreeWidgetItem *parent) +{ + if (parent) + return parent->childCount(); + else + return topLevelItemCount(); +} + +int SettingsTree::findChild(QTreeWidgetItem *parent, const QString &text, + int startIndex) +{ + for (int i = startIndex; i < childCount(parent); ++i) { + if (childAt(parent, i)->text(0) == text) + return i; + } + return -1; +} + +void SettingsTree::moveItemForward(QTreeWidgetItem *parent, int oldIndex, + int newIndex) +{ + for (int i = 0; i < oldIndex - newIndex; ++i) + delete childAt(parent, newIndex); +} diff --git a/examples/tools/settingseditor/settingstree.h b/examples/tools/settingseditor/settingstree.h new file mode 100644 index 0000000..f82034b --- /dev/null +++ b/examples/tools/settingseditor/settingstree.h @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SETTINGSTREE_H +#define SETTINGSTREE_H + +#include <QIcon> +#include <QTimer> +#include <QTreeWidget> + +QT_BEGIN_NAMESPACE +class QSettings; +QT_END_NAMESPACE + +class SettingsTree : public QTreeWidget +{ + Q_OBJECT + +public: + SettingsTree(QWidget *parent = 0); + + void setSettingsObject(QSettings *settings); + QSize sizeHint() const; + +public slots: + void setAutoRefresh(bool autoRefresh); + void setFallbacksEnabled(bool enabled); + void maybeRefresh(); + void refresh(); + +protected: + bool event(QEvent *event); + +private slots: + void updateSetting(QTreeWidgetItem *item); + +private: + void updateChildItems(QTreeWidgetItem *parent); + QTreeWidgetItem *createItem(const QString &text, QTreeWidgetItem *parent, + int index); + QTreeWidgetItem *childAt(QTreeWidgetItem *parent, int index); + int childCount(QTreeWidgetItem *parent); + int findChild(QTreeWidgetItem *parent, const QString &text, int startIndex); + void moveItemForward(QTreeWidgetItem *parent, int oldIndex, int newIndex); + + QSettings *settings; + QTimer refreshTimer; + bool autoRefresh; + QIcon groupIcon; + QIcon keyIcon; +}; + +#endif diff --git a/examples/tools/settingseditor/variantdelegate.cpp b/examples/tools/settingseditor/variantdelegate.cpp new file mode 100644 index 0000000..937a0e1 --- /dev/null +++ b/examples/tools/settingseditor/variantdelegate.cpp @@ -0,0 +1,317 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "variantdelegate.h" + +VariantDelegate::VariantDelegate(QObject *parent) + : QItemDelegate(parent) +{ + boolExp.setPattern("true|false"); + boolExp.setCaseSensitivity(Qt::CaseInsensitive); + + byteArrayExp.setPattern("[\\x00-\\xff]*"); + charExp.setPattern("."); + colorExp.setPattern("\\(([0-9]*),([0-9]*),([0-9]*),([0-9]*)\\)"); + doubleExp.setPattern(""); + pointExp.setPattern("\\((-?[0-9]*),(-?[0-9]*)\\)"); + rectExp.setPattern("\\((-?[0-9]*),(-?[0-9]*),(-?[0-9]*),(-?[0-9]*)\\)"); + signedIntegerExp.setPattern("-?[0-9]*"); + sizeExp = pointExp; + unsignedIntegerExp.setPattern("[0-9]*"); + + dateExp.setPattern("([0-9]{,4})-([0-9]{,2})-([0-9]{,2})"); + timeExp.setPattern("([0-9]{,2}):([0-9]{,2}):([0-9]{,2})"); + dateTimeExp.setPattern(dateExp.pattern() + "T" + timeExp.pattern()); +} + +void VariantDelegate::paint(QPainter *painter, + const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + if (index.column() == 2) { + QVariant value = index.model()->data(index, Qt::UserRole); + if (!isSupportedType(value.type())) { + QStyleOptionViewItem myOption = option; + myOption.state &= ~QStyle::State_Enabled; + QItemDelegate::paint(painter, myOption, index); + return; + } + } + + QItemDelegate::paint(painter, option, index); +} + +QWidget *VariantDelegate::createEditor(QWidget *parent, + const QStyleOptionViewItem & /* option */, + const QModelIndex &index) const +{ + if (index.column() != 2) + return 0; + + QVariant originalValue = index.model()->data(index, Qt::UserRole); + if (!isSupportedType(originalValue.type())) + return 0; + + QLineEdit *lineEdit = new QLineEdit(parent); + lineEdit->setFrame(false); + + QRegExp regExp; + + switch (originalValue.type()) { + case QVariant::Bool: + regExp = boolExp; + break; + case QVariant::ByteArray: + regExp = byteArrayExp; + break; + case QVariant::Char: + regExp = charExp; + break; + case QVariant::Color: + regExp = colorExp; + break; + case QVariant::Date: + regExp = dateExp; + break; + case QVariant::DateTime: + regExp = dateTimeExp; + break; + case QVariant::Double: + regExp = doubleExp; + break; + case QVariant::Int: + case QVariant::LongLong: + regExp = signedIntegerExp; + break; + case QVariant::Point: + regExp = pointExp; + break; + case QVariant::Rect: + regExp = rectExp; + break; + case QVariant::Size: + regExp = sizeExp; + break; + case QVariant::Time: + regExp = timeExp; + break; + case QVariant::UInt: + case QVariant::ULongLong: + regExp = unsignedIntegerExp; + break; + default: + ; + } + + if (!regExp.isEmpty()) { + QValidator *validator = new QRegExpValidator(regExp, lineEdit); + lineEdit->setValidator(validator); + } + + return lineEdit; +} + +void VariantDelegate::setEditorData(QWidget *editor, + const QModelIndex &index) const +{ + QVariant value = index.model()->data(index, Qt::UserRole); + if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(editor)) + lineEdit->setText(displayText(value)); +} + +void VariantDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const +{ + QLineEdit *lineEdit = qobject_cast<QLineEdit *>(editor); + if (!lineEdit->isModified()) + return; + + QString text = lineEdit->text(); + const QValidator *validator = lineEdit->validator(); + if (validator) { + int pos; + if (validator->validate(text, pos) != QValidator::Acceptable) + return; + } + + QVariant originalValue = index.model()->data(index, Qt::UserRole); + QVariant value; + + switch (originalValue.type()) { + case QVariant::Char: + value = text.at(0); + break; + case QVariant::Color: + colorExp.exactMatch(text); + value = QColor(qMin(colorExp.cap(1).toInt(), 255), + qMin(colorExp.cap(2).toInt(), 255), + qMin(colorExp.cap(3).toInt(), 255), + qMin(colorExp.cap(4).toInt(), 255)); + break; + case QVariant::Date: + { + QDate date = QDate::fromString(text, Qt::ISODate); + if (!date.isValid()) + return; + value = date; + } + break; + case QVariant::DateTime: + { + QDateTime dateTime = QDateTime::fromString(text, Qt::ISODate); + if (!dateTime.isValid()) + return; + value = dateTime; + } + break; + case QVariant::Point: + pointExp.exactMatch(text); + value = QPoint(pointExp.cap(1).toInt(), pointExp.cap(2).toInt()); + break; + case QVariant::Rect: + rectExp.exactMatch(text); + value = QRect(rectExp.cap(1).toInt(), rectExp.cap(2).toInt(), + rectExp.cap(3).toInt(), rectExp.cap(4).toInt()); + break; + case QVariant::Size: + sizeExp.exactMatch(text); + value = QSize(sizeExp.cap(1).toInt(), sizeExp.cap(2).toInt()); + break; + case QVariant::StringList: + value = text.split(","); + break; + case QVariant::Time: + { + QTime time = QTime::fromString(text, Qt::ISODate); + if (!time.isValid()) + return; + value = time; + } + break; + default: + value = text; + value.convert(originalValue.type()); + } + + model->setData(index, displayText(value), Qt::DisplayRole); + model->setData(index, value, Qt::UserRole); +} + +bool VariantDelegate::isSupportedType(QVariant::Type type) +{ + switch (type) { + case QVariant::Bool: + case QVariant::ByteArray: + case QVariant::Char: + case QVariant::Color: + case QVariant::Date: + case QVariant::DateTime: + case QVariant::Double: + case QVariant::Int: + case QVariant::LongLong: + case QVariant::Point: + case QVariant::Rect: + case QVariant::Size: + case QVariant::String: + case QVariant::StringList: + case QVariant::Time: + case QVariant::UInt: + case QVariant::ULongLong: + return true; + default: + return false; + } +} + +QString VariantDelegate::displayText(const QVariant &value) +{ + switch (value.type()) { + case QVariant::Bool: + case QVariant::ByteArray: + case QVariant::Char: + case QVariant::Double: + case QVariant::Int: + case QVariant::LongLong: + case QVariant::String: + case QVariant::UInt: + case QVariant::ULongLong: + return value.toString(); + case QVariant::Color: + { + QColor color = qvariant_cast<QColor>(value); + return QString("(%1,%2,%3,%4)") + .arg(color.red()).arg(color.green()) + .arg(color.blue()).arg(color.alpha()); + } + case QVariant::Date: + return value.toDate().toString(Qt::ISODate); + case QVariant::DateTime: + return value.toDateTime().toString(Qt::ISODate); + case QVariant::Invalid: + return "<Invalid>"; + case QVariant::Point: + { + QPoint point = value.toPoint(); + return QString("(%1,%2)").arg(point.x()).arg(point.y()); + } + case QVariant::Rect: + { + QRect rect = value.toRect(); + return QString("(%1,%2,%3,%4)") + .arg(rect.x()).arg(rect.y()) + .arg(rect.width()).arg(rect.height()); + } + case QVariant::Size: + { + QSize size = value.toSize(); + return QString("(%1,%2)").arg(size.width()).arg(size.height()); + } + case QVariant::StringList: + return value.toStringList().join(","); + case QVariant::Time: + return value.toTime().toString(Qt::ISODate); + default: + break; + } + return QString("<%1>").arg(value.typeName()); +} diff --git a/examples/tools/settingseditor/variantdelegate.h b/examples/tools/settingseditor/variantdelegate.h new file mode 100644 index 0000000..60997f7 --- /dev/null +++ b/examples/tools/settingseditor/variantdelegate.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef VARIANTDELEGATE_H +#define VARIANTDELEGATE_H + +#include <QItemDelegate> +#include <QRegExp> + +class VariantDelegate : public QItemDelegate +{ + Q_OBJECT + +public: + VariantDelegate(QObject *parent = 0); + + void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + void setEditorData(QWidget *editor, const QModelIndex &index) const; + void setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const; + + static bool isSupportedType(QVariant::Type type); + static QString displayText(const QVariant &value); + +private: + mutable QRegExp boolExp; + mutable QRegExp byteArrayExp; + mutable QRegExp charExp; + mutable QRegExp colorExp; + mutable QRegExp dateExp; + mutable QRegExp dateTimeExp; + mutable QRegExp doubleExp; + mutable QRegExp pointExp; + mutable QRegExp rectExp; + mutable QRegExp signedIntegerExp; + mutable QRegExp sizeExp; + mutable QRegExp timeExp; + mutable QRegExp unsignedIntegerExp; +}; + +#endif |