From 72056e357083f327eaaba31998608676c3a2ea98 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 12 Sep 2011 16:52:54 +0200 Subject: [PATCH] Wizards: Refactor GeneratedFile in a extra file Change-Id: I58f7053405c79774154c2f0447944533e6b10152 Reviewed-on: http://codereview.qt-project.org/4685 Reviewed-by: Alessandro Portale Reviewed-by: Eike Ziller --- src/plugins/coreplugin/basefilewizard.cpp | 138 ---------------- src/plugins/coreplugin/basefilewizard.h | 53 +------ src/plugins/coreplugin/coreplugin.pro | 6 +- src/plugins/coreplugin/generatedfile.cpp | 185 ++++++++++++++++++++++ src/plugins/coreplugin/generatedfile.h | 98 ++++++++++++ 5 files changed, 289 insertions(+), 191 deletions(-) create mode 100644 src/plugins/coreplugin/generatedfile.cpp create mode 100644 src/plugins/coreplugin/generatedfile.h diff --git a/src/plugins/coreplugin/basefilewizard.cpp b/src/plugins/coreplugin/basefilewizard.cpp index 0e5338598ad..17165dcbc07 100644 --- a/src/plugins/coreplugin/basefilewizard.cpp +++ b/src/plugins/coreplugin/basefilewizard.cpp @@ -61,146 +61,8 @@ enum { debugWizard = 0 }; -/*! - \class Core::GeneratedFile - \brief Represents a file generated by a wizard. - - The Wizard class will check for each file whether it already exists and will - report any errors that may occur during creation of the files. - - \sa Core::BaseFileWizardParameters, Core::BaseFileWizard, Core::StandardFileWizard - \sa Core::Internal::WizardEventLoop - */ - namespace Core { -class GeneratedFilePrivate : public QSharedData -{ -public: - GeneratedFilePrivate() : binary(false) {} - explicit GeneratedFilePrivate(const QString &p); - QString path; - QByteArray contents; - QString editorId; - bool binary; - GeneratedFile::Attributes attributes; -}; - -GeneratedFilePrivate::GeneratedFilePrivate(const QString &p) : - path(QDir::cleanPath(p)), - binary(false), - attributes(0) -{ -} - -GeneratedFile::GeneratedFile() : - m_d(new GeneratedFilePrivate) -{ -} - -GeneratedFile::GeneratedFile(const QString &p) : - m_d(new GeneratedFilePrivate(p)) -{ -} - -GeneratedFile::GeneratedFile(const GeneratedFile &rhs) : - m_d(rhs.m_d) -{ -} - -GeneratedFile &GeneratedFile::operator=(const GeneratedFile &rhs) -{ - if (this != &rhs) - m_d.operator=(rhs.m_d); - return *this; -} - -GeneratedFile::~GeneratedFile() -{ -} - -QString GeneratedFile::path() const -{ - return m_d->path; -} - -void GeneratedFile::setPath(const QString &p) -{ - m_d->path = QDir::cleanPath(p); -} - -QString GeneratedFile::contents() const -{ - return QString::fromUtf8(m_d->contents); -} - -void GeneratedFile::setContents(const QString &c) -{ - m_d->contents = c.toUtf8(); -} - -QByteArray GeneratedFile::binaryContents() const -{ - return m_d->contents; -} - -void GeneratedFile::setBinaryContents(const QByteArray &c) -{ - m_d->contents = c; -} - -bool GeneratedFile::isBinary() const -{ - return m_d->binary; -} - -void GeneratedFile::setBinary(bool b) -{ - m_d->binary = b; -} - -QString GeneratedFile::editorId() const -{ - return m_d->editorId; -} - -void GeneratedFile::setEditorId(const QString &k) -{ - m_d->editorId = k; -} - -bool GeneratedFile::write(QString *errorMessage) const -{ - // Ensure the directory - const QFileInfo info(m_d->path); - const QDir dir = info.absoluteDir(); - if (!dir.exists()) { - if (!dir.mkpath(dir.absolutePath())) { - *errorMessage = BaseFileWizard::tr("Unable to create the directory %1.").arg(dir.absolutePath()); - return false; - } - } - - // Write out - QIODevice::OpenMode flags = QIODevice::WriteOnly|QIODevice::Truncate; - if (!isBinary()) - flags |= QIODevice::Text; - - Utils::FileSaver saver(m_d->path, flags); - saver.write(m_d->contents); - return saver.finalize(errorMessage); -} - -GeneratedFile::Attributes GeneratedFile::attributes() const -{ - return m_d->attributes; -} - -void GeneratedFile::setAttributes(Attributes a) -{ - m_d->attributes = a; -} - static int indexOfFile(const GeneratedFiles &f, const QString &path) { const int size = f.size(); diff --git a/src/plugins/coreplugin/basefilewizard.h b/src/plugins/coreplugin/basefilewizard.h index d9e574f466d..42768b3baaf 100644 --- a/src/plugins/coreplugin/basefilewizard.h +++ b/src/plugins/coreplugin/basefilewizard.h @@ -34,6 +34,7 @@ #define BASEFILEWIZARD_H #include "core_global.h" +#include "generatedfile.h" #include @@ -58,58 +59,6 @@ class IFileWizardExtension; class BaseFileWizardParameterData; struct BaseFileWizardPrivate; -class GeneratedFilePrivate; - -class CORE_EXPORT GeneratedFile -{ -public: - enum Attribute { // Open this file in editor - OpenEditorAttribute = 0x01, - // Open project - OpenProjectAttribute = 0x02, - /* File is generated by external scripts, do not write out, - * see BaseFileWizard::writeFiles() */ - CustomGeneratorAttribute = 0x4, - /* File exists and the user indicated that he wants to keep it */ - KeepExistingFileAttribute = 0x8 - }; - Q_DECLARE_FLAGS(Attributes, Attribute) - - GeneratedFile(); - explicit GeneratedFile(const QString &path); - GeneratedFile(const GeneratedFile &); - GeneratedFile &operator=(const GeneratedFile &); - ~GeneratedFile(); - - // Full path of the file should be created, or the suggested file name - QString path() const; - void setPath(const QString &p); - - // Contents of the file (UTF8) - QString contents() const; - void setContents(const QString &c); - - QByteArray binaryContents() const; - void setBinaryContents(const QByteArray &c); - - // Defaults to false (Text file). - bool isBinary() const; - void setBinary(bool b); - - // Id of editor to open the file with - QString editorId() const; - void setEditorId(const QString &k); - - bool write(QString *errorMessage) const; - - Attributes attributes() const; - void setAttributes(Attributes a); - -private: - QSharedDataPointer m_d; -}; - -typedef QList GeneratedFiles; class CORE_EXPORT BaseFileWizardParameters { diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro index 1ad6a685d68..dd65b38ceec 100644 --- a/src/plugins/coreplugin/coreplugin.pro +++ b/src/plugins/coreplugin/coreplugin.pro @@ -57,6 +57,7 @@ SOURCES += mainwindow.cpp \ modemanager.cpp \ coreimpl.cpp \ basefilewizard.cpp \ + generatedfile.cpp \ plugindialog.cpp \ inavigationwidgetfactory.cpp \ navigationwidget.cpp \ @@ -158,6 +159,7 @@ HEADERS += mainwindow.h \ modemanager.h \ coreimpl.h \ basefilewizard.h \ + generatedfile.h \ plugindialog.h \ inavigationwidgetfactory.h \ navigationwidget.h \ @@ -187,7 +189,8 @@ HEADERS += mainwindow.h \ dialogs/promptoverwritedialog.h \ fileutils.h \ externaltoolmanager.h \ - textfile.h + textfile.h \ + generatedfile.h FORMS += dialogs/newdialog.ui \ actionmanager/commandmappings.ui \ @@ -223,3 +226,4 @@ else:unix { } } OTHER_FILES += editormanager/BinFiles.mimetypes.xml + diff --git a/src/plugins/coreplugin/generatedfile.cpp b/src/plugins/coreplugin/generatedfile.cpp new file mode 100644 index 00000000000..6ad5473f90d --- /dev/null +++ b/src/plugins/coreplugin/generatedfile.cpp @@ -0,0 +1,185 @@ +/************************************************************************** +** +** 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 info@qt.nokia.com. +** +**************************************************************************/ + + +#include "generatedfile.h" + +#include + +#include +#include +#include + +namespace Core { + +/*! + \class Core::GeneratedFile + \brief Represents a file generated by a wizard. + + The Wizard class will check for each file whether it already exists and will + report any errors that may occur during creation of the files. + + \sa Core::BaseFileWizardParameters, Core::BaseFileWizard, Core::StandardFileWizard + \sa Core::Internal::WizardEventLoop + */ + + + +class GeneratedFilePrivate : public QSharedData +{ +public: + GeneratedFilePrivate() : binary(false) {} + explicit GeneratedFilePrivate(const QString &p); + QString path; + QByteArray contents; + QString editorId; + bool binary; + GeneratedFile::Attributes attributes; +}; + +GeneratedFilePrivate::GeneratedFilePrivate(const QString &p) : + path(QDir::cleanPath(p)), + binary(false), + attributes(0) +{ +} + +GeneratedFile::GeneratedFile() : + m_d(new GeneratedFilePrivate) +{ +} + +GeneratedFile::GeneratedFile(const QString &p) : + m_d(new GeneratedFilePrivate(p)) +{ +} + +GeneratedFile::GeneratedFile(const GeneratedFile &rhs) : + m_d(rhs.m_d) +{ +} + +GeneratedFile &GeneratedFile::operator=(const GeneratedFile &rhs) +{ + if (this != &rhs) + m_d.operator=(rhs.m_d); + return *this; +} + +GeneratedFile::~GeneratedFile() +{ +} + +QString GeneratedFile::path() const +{ + return m_d->path; +} + +void GeneratedFile::setPath(const QString &p) +{ + m_d->path = QDir::cleanPath(p); +} + +QString GeneratedFile::contents() const +{ + return QString::fromUtf8(m_d->contents); +} + +void GeneratedFile::setContents(const QString &c) +{ + m_d->contents = c.toUtf8(); +} + +QByteArray GeneratedFile::binaryContents() const +{ + return m_d->contents; +} + +void GeneratedFile::setBinaryContents(const QByteArray &c) +{ + m_d->contents = c; +} + +bool GeneratedFile::isBinary() const +{ + return m_d->binary; +} + +void GeneratedFile::setBinary(bool b) +{ + m_d->binary = b; +} + +QString GeneratedFile::editorId() const +{ + return m_d->editorId; +} + +void GeneratedFile::setEditorId(const QString &k) +{ + m_d->editorId = k; +} + +bool GeneratedFile::write(QString *errorMessage) const +{ + // Ensure the directory + const QFileInfo info(m_d->path); + const QDir dir = info.absoluteDir(); + if (!dir.exists()) { + if (!dir.mkpath(dir.absolutePath())) { + *errorMessage = QCoreApplication::translate("BaseFileWizard", "Unable to create the directory %1.").arg( + QDir::toNativeSeparators(dir.absolutePath())); + return false; + } + } + + // Write out + QIODevice::OpenMode flags = QIODevice::WriteOnly|QIODevice::Truncate; + if (!isBinary()) + flags |= QIODevice::Text; + + Utils::FileSaver saver(m_d->path, flags); + saver.write(m_d->contents); + return saver.finalize(errorMessage); +} + +GeneratedFile::Attributes GeneratedFile::attributes() const +{ + return m_d->attributes; +} + +void GeneratedFile::setAttributes(Attributes a) +{ + m_d->attributes = a; +} + +} // namespace Core diff --git a/src/plugins/coreplugin/generatedfile.h b/src/plugins/coreplugin/generatedfile.h new file mode 100644 index 00000000000..65e53210e82 --- /dev/null +++ b/src/plugins/coreplugin/generatedfile.h @@ -0,0 +1,98 @@ +/************************************************************************** +** +** 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 info@qt.nokia.com. +** +**************************************************************************/ + + +#ifndef CORE_GENERATEDFILE_H +#define CORE_GENERATEDFILE_H + +#include "core_global.h" + +#include +#include + +namespace Core { +class GeneratedFilePrivate; + +class CORE_EXPORT GeneratedFile +{ +public: + enum Attribute { // Open this file in editor + OpenEditorAttribute = 0x01, + // Open project + OpenProjectAttribute = 0x02, + /* File is generated by external scripts, do not write out, + * see BaseFileWizard::writeFiles() */ + CustomGeneratorAttribute = 0x4, + /* File exists and the user indicated that he wants to keep it */ + KeepExistingFileAttribute = 0x8 + }; + Q_DECLARE_FLAGS(Attributes, Attribute) + + GeneratedFile(); + explicit GeneratedFile(const QString &path); + GeneratedFile(const GeneratedFile &); + GeneratedFile &operator=(const GeneratedFile &); + ~GeneratedFile(); + + // Full path of the file should be created, or the suggested file name + QString path() const; + void setPath(const QString &p); + + // Contents of the file (UTF8) + QString contents() const; + void setContents(const QString &c); + + QByteArray binaryContents() const; + void setBinaryContents(const QByteArray &c); + + // Defaults to false (Text file). + bool isBinary() const; + void setBinary(bool b); + + // Id of editor to open the file with + QString editorId() const; + void setEditorId(const QString &k); + + bool write(QString *errorMessage) const; + + Attributes attributes() const; + void setAttributes(Attributes a); + +private: + QSharedDataPointer m_d; +}; + +typedef QList GeneratedFiles; + +} // namespace Core + +#endif // CORE_GENERATEDFILE_H