summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/dialogs
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2011-04-15 11:27:15 +0200
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>2011-04-15 11:29:07 +0200
commit3543eefc8cdee090761e373a435b8ba1dc9f48f6 (patch)
tree367d850057285caff9d10ac80156058d6f304c19 /src/plugins/coreplugin/dialogs
parentea266e33d66459e2332e2714ee197c5e385f3720 (diff)
downloadqt-creator-3543eefc8cdee090761e373a435b8ba1dc9f48f6.tar.gz
Wizards: Make it possible to check existing files to overwrite.
Present a checkable list of files to be overwritten, enabling re-generating a part of the project or class. Task-number: QTCREATORBUG-4538
Diffstat (limited to 'src/plugins/coreplugin/dialogs')
-rw-r--r--src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp163
-rw-r--r--src/plugins/coreplugin/dialogs/promptoverwritedialog.h78
2 files changed, 241 insertions, 0 deletions
diff --git a/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp b/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp
new file mode 100644
index 0000000000..c5ce87f8b1
--- /dev/null
+++ b/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp
@@ -0,0 +1,163 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (info@qt.nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** 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.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#include "promptoverwritedialog.h"
+
+#include <utils/stringutils.h>
+
+#include <QtGui/QTreeView>
+#include <QtGui/QLabel>
+#include <QtGui/QStandardItemModel>
+#include <QtGui/QStandardItem>
+#include <QtGui/QDialogButtonBox>
+#include <QtGui/QVBoxLayout>
+
+#include <QtCore/QDir>
+
+enum { FileNameRole = Qt::UserRole + 1 };
+
+/*!
+ \class Core::Internal::PromptOverwriteDialog
+ \brief Prompts the user to overwrite a list of files, which he can check.
+
+ Displays the common folder and the files in a checkable list.
+*/
+
+static inline QString fileNameOfItem(const QStandardItem *item)
+{
+ return item->data(FileNameRole).toString();
+}
+
+namespace Core {
+namespace Internal {
+
+PromptOverwriteDialog::PromptOverwriteDialog(QWidget *parent) :
+ QDialog(parent),
+ m_label(new QLabel),
+ m_view(new QTreeView),
+ m_model(new QStandardItemModel(0, 1, this))
+{
+ setWindowTitle(tr("Overwrite Existing Files"));
+ setModal(true);
+ setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ QVBoxLayout *mainLayout = new QVBoxLayout(this);
+ mainLayout->addWidget(m_label);
+ m_view->setRootIsDecorated(false);
+ m_view->setUniformRowHeights(true);
+ m_view->setHeaderHidden(true);
+ m_view->setSelectionMode(QAbstractItemView::NoSelection);
+ m_view->setModel(m_model);
+ mainLayout->addWidget(m_view);
+ QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
+ connect(bb, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(bb, SIGNAL(rejected()), this, SLOT(reject()));
+ mainLayout->addWidget(bb);
+}
+
+void PromptOverwriteDialog::setFiles(const QStringList &l)
+{
+ // Format checkable list excluding common path
+ const QString nativeCommonPath = QDir::toNativeSeparators(Utils::commonPath(l));
+ foreach (const QString &fileName, l) {
+ const QString nativeFileName = QDir::toNativeSeparators(fileName);
+ const int length = nativeFileName.size() - nativeCommonPath.size() - 1;
+ QStandardItem *item = new QStandardItem(nativeFileName.right(length));
+ item->setData(QVariant(fileName), FileNameRole);
+ item->setFlags(Qt::ItemIsEnabled);
+ item->setCheckable(true);
+ item->setCheckState(Qt::Checked);
+ m_model->appendRow(item);
+ }
+ const QString message =
+ tr("The following files already exist in the folder\n%1.\n"
+ "Would you like to overwrite them?").arg(nativeCommonPath);
+ m_label->setText(message);
+}
+
+QStandardItem *PromptOverwriteDialog::itemForFile(const QString &f) const
+{
+ const int rowCount = m_model->rowCount();
+ for (int r = 0; r < rowCount; ++r) {
+ QStandardItem *item = m_model->item(r, 0);
+ if (fileNameOfItem(item) == f)
+ return item;
+ }
+ return 0;
+}
+
+QStringList PromptOverwriteDialog::files(Qt::CheckState cs) const
+{
+ QStringList result;
+ const int rowCount = m_model->rowCount();
+ for (int r = 0; r < rowCount; ++r) {
+ const QStandardItem *item = m_model->item(r, 0);
+ if (item->checkState() == cs)
+ result.push_back(fileNameOfItem(item));
+ }
+ return result;
+}
+
+void PromptOverwriteDialog::setFileEnabled(const QString &f, bool e)
+{
+ if (QStandardItem *item = itemForFile(f)) {
+ Qt::ItemFlags flags = item->flags();
+ if (e) {
+ flags |= Qt::ItemIsEnabled;
+ } else {
+ flags &= ~Qt::ItemIsEnabled;
+ }
+ item->setFlags(flags);
+ }
+}
+
+bool PromptOverwriteDialog::isFileEnabled(const QString &f) const
+{
+ if (const QStandardItem *item = itemForFile(f))
+ return (item->flags() & Qt::ItemIsEnabled);
+ return false;
+}
+
+void PromptOverwriteDialog::setFileChecked(const QString &f, bool e)
+{
+ if (QStandardItem *item = itemForFile(f))
+ item->setCheckState(e ? Qt::Checked : Qt::Unchecked);
+}
+
+bool PromptOverwriteDialog::isFileChecked(const QString &f) const
+{
+ if (const QStandardItem *item = itemForFile(f))
+ return item->checkState() == Qt::Checked;
+ return false;
+}
+
+} // namespace Internal
+} // namespace Core
diff --git a/src/plugins/coreplugin/dialogs/promptoverwritedialog.h b/src/plugins/coreplugin/dialogs/promptoverwritedialog.h
new file mode 100644
index 0000000000..17b3736b0d
--- /dev/null
+++ b/src/plugins/coreplugin/dialogs/promptoverwritedialog.h
@@ -0,0 +1,78 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (info@qt.nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** 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.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#ifndef PROMPTOVERWRITEDIALOG_H
+#define PROMPTOVERWRITEDIALOG_H
+
+#include <QtGui/QDialog>
+
+QT_BEGIN_NAMESPACE
+class QTreeView;
+class QStandardItemModel;
+class QStandardItem;
+class QLabel;
+QT_END_NAMESPACE
+
+namespace Core {
+namespace Internal {
+
+// Documentation inside.
+class PromptOverwriteDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ explicit PromptOverwriteDialog(QWidget *parent = 0);
+
+ void setFiles(const QStringList &);
+
+ void setFileEnabled(const QString &f, bool e);
+ bool isFileEnabled(const QString &f) const;
+
+ void setFileChecked(const QString &f, bool e);
+ bool isFileChecked(const QString &f) const;
+
+ QStringList checkedFiles() const { return files(Qt::Checked); }
+ QStringList uncheckedFiles() const { return files(Qt::Unchecked); }
+
+private:
+ QStandardItem *itemForFile(const QString &f) const;
+ QStringList files(Qt::CheckState cs) const;
+
+ QLabel *m_label;
+ QTreeView *m_view;
+ QStandardItemModel *m_model;
+};
+
+} // namespace Internal
+} // namespace Core
+
+#endif // PROMPTOVERWRITEDIALOG_H