/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of Qt Creator. ** ** 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 Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/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 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, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #ifndef CUSTOMWIZARDPARAMETERS_H #define CUSTOMWIZARDPARAMETERS_H #include #include #include #include QT_BEGIN_NAMESPACE class QIODevice; class QDebug; class QTemporaryFile; class QScriptEngine; QT_END_NAMESPACE namespace ProjectExplorer { namespace Internal { struct CustomWizardField { // Parameters of the widget control are stored as map typedef QMap ControlAttributeMap; CustomWizardField(); void clear(); // Attribute map keys for combo entries static QString comboEntryValueKey(int i); static QString comboEntryTextKey(int i); QString description; QString name; ControlAttributeMap controlAttributes; bool mandatory; }; struct CustomWizardFile { CustomWizardFile(); QString source; QString target; bool openEditor; bool openProject; bool binary; }; // Documentation inside. struct CustomWizardValidationRule { // Validate a set of rules and return false + message on the first failing one. static bool validateRules(const QList &rules, const QMap &replacementMap, QString *errorMessage); bool validate(QScriptEngine &, const QMap &replacementMap) const; QString condition; QString message; }; // Documentation inside. struct GeneratorScriptArgument { enum Flags { // Omit this arguments if all field placeholders expanded to empty strings. OmitEmpty = 0x1, // Do use the actual field value, but write it to a temporary // text file and inserts its file name (suitable for multiline texts). WriteFile = 0x2 }; explicit GeneratorScriptArgument(const QString &value = QString()); QString value; unsigned flags; }; struct CustomWizardParameters { public: enum ParseResult { ParseOk, ParseDisabled, ParseFailed }; CustomWizardParameters(); void clear(); ParseResult parse(QIODevice &device, const QString &configFileFullPath, Core::IWizard::Data *bp, QString *errorMessage); ParseResult parse(const QString &configFileFullPath, Core::IWizard::Data *bp, QString *errorMessage); QString toString() const; QString directory; QString klass; QList files; QStringList filesGeneratorScript; // Complete binary, such as 'cmd /c myscript.pl'. QString filesGeneratorScriptWorkingDirectory; QList filesGeneratorScriptArguments; QString fieldPageTitle; QList fields; QList rules; int firstPageId; }; // Documentation inside. struct CustomWizardContext { typedef QMap FieldReplacementMap; typedef QSharedPointer TemporaryFilePtr; typedef QList TemporaryFilePtrList; void reset(); static bool replaceFields(const FieldReplacementMap &fm, QString *s); static bool replaceFields(const FieldReplacementMap &fm, QString *s, TemporaryFilePtrList *files); static QString processFile(const FieldReplacementMap &fm, QString in); FieldReplacementMap baseReplacements; FieldReplacementMap replacements; QString path; // Where files should be created, that is, 'path' for simple wizards // or "path + project" for project wizards. QString targetPath; }; extern const char customWizardFileOpenEditorAttributeC[]; extern const char customWizardFileOpenProjectAttributeC[]; } // namespace Internal } // namespace ProjectExplorer #endif // CUSTOMWIZARDPARAMETERS_H