diff options
Diffstat (limited to 'src/plugins/qt4projectmanager/wizards/librarywizard.cpp')
-rw-r--r-- | src/plugins/qt4projectmanager/wizards/librarywizard.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp new file mode 100644 index 0000000000..953ef3908c --- /dev/null +++ b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp @@ -0,0 +1,128 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 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 GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception version +** 1.2, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ +#include "librarywizard.h" +#include "librarywizarddialog.h" +#include "qt4projectmanager.h" +#include "qt4projectmanagerconstants.h" + +#include <utils/codegeneration.h> +#include <utils/pathchooser.h> + +#include <QtCore/QDir> +#include <QtCore/QFileInfo> +#include <QtCore/QTextStream> +#include <QtGui/QIcon> + +static const char *sharedHeaderPostfixC = "_global"; + +namespace Qt4ProjectManager { + +namespace Internal { + +LibraryWizard::LibraryWizard(Core::ICore *core) : + QtWizard(core, tr("C++ Library"), + tr("Creates a C++ Library."), + QIcon(":/wizards/images/lib.png")) +{ +} + +QWizard *LibraryWizard::createWizardDialog(QWidget *parent, + const QString &defaultPath, + const WizardPageList &extensionPages) const +{ + LibraryWizardDialog *dialog = new LibraryWizardDialog(name(), icon(), extensionPages, parent); + dialog->setPath(defaultPath.isEmpty() ? Core::Utils::PathChooser::homePath() : defaultPath); + dialog->setSuffixes(headerSuffix(), sourceSuffix(), formSuffix()); + return dialog; +} + + +Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w, + QString * /*errorMessage*/) const +{ + const LibraryWizardDialog *dialog = qobject_cast<const LibraryWizardDialog *>(w); + const QtProjectParameters projectParams = dialog->parameters(); + const QString projectPath = projectParams.projectPath(); + const LibraryParameters params = dialog->libraryParameters(); + + const QString sharedLibExportMacro = QtProjectParameters::exportMacro(projectParams.name); + + Core::GeneratedFiles rc; + // Class header + source + const QString sourceFileName = buildFileName(projectPath, params.sourceFileName, sourceSuffix()); + Core::GeneratedFile source(sourceFileName); + + const QString headerFileFullName = buildFileName(projectPath, params.headerFileName, headerSuffix()); + const QString headerFileName = QFileInfo(headerFileFullName).fileName(); + Core::GeneratedFile header(headerFileFullName); + + // Create files: global header for shared libs + QString globalHeaderFileName; + if (projectParams.type == QtProjectParameters::SharedLibrary) { + const QString globalHeaderName = buildFileName(projectPath, projectParams.name + QLatin1String(sharedHeaderPostfixC), headerSuffix()); + Core::GeneratedFile globalHeader(globalHeaderName); + globalHeaderFileName = QFileInfo(globalHeader.path()).fileName(); + globalHeader.setContents(LibraryParameters::generateSharedHeader(globalHeaderFileName, projectParams.name, sharedLibExportMacro)); + rc.push_back(globalHeader); + } + + // Generate code + QString headerContents, sourceContents; + params.generateCode(projectParams.type, projectParams.name, headerFileName, + globalHeaderFileName, sharedLibExportMacro, + /* indentation*/ 4, &headerContents, &sourceContents); + + source.setContents(sourceContents); + header.setContents(headerContents); + rc.push_back(source); + rc.push_back(header); + // Create files: profile + const QString profileName = buildFileName(projectPath, projectParams.name, profileSuffix()); + Core::GeneratedFile profile(profileName); + QString profileContents; + { + QTextStream proStr(&profileContents); + QtProjectParameters::writeProFileHeader(proStr); + projectParams.writeProFile(proStr); + proStr << "\nSOURCES += " << QFileInfo(source.path()).fileName() + << "\n\nHEADERS += " << headerFileName; + if (!globalHeaderFileName.isEmpty()) + proStr << "\\\n " << globalHeaderFileName << '\n'; + } + profile.setContents(profileContents); + rc.push_back(profile); + return rc; +} + +} +} |