diff options
| author | Sergey Shambir <sergey.shambir.auto@gmail.com> | 2013-03-19 00:41:44 +0400 |
|---|---|---|
| committer | Sergey Shambir <sergey.shambir.auto@gmail.com> | 2013-04-26 13:30:48 +0200 |
| commit | 516116c5a53a83b2ca70da518e9fcea5c783305e (patch) | |
| tree | ae67305b94a2f04488269b55b73388f1123a45a9 /src/plugins/pythoneditor/wizard/pythonclasswizard.cpp | |
| parent | ecacaab7a486191e928e1ce52da974c4b2de8efd (diff) | |
| download | qt-creator-516116c5a53a83b2ca70da518e9fcea5c783305e.tar.gz | |
PythonEditor: added class wizard
Contains SourceGenerator class which was also used to generate app
template in PythonProjectManager; it saved for future use.
Change-Id: I3d44e6d33a3beabc73030acdd6740edf1745e485
Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'src/plugins/pythoneditor/wizard/pythonclasswizard.cpp')
| -rw-r--r-- | src/plugins/pythoneditor/wizard/pythonclasswizard.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/plugins/pythoneditor/wizard/pythonclasswizard.cpp b/src/plugins/pythoneditor/wizard/pythonclasswizard.cpp new file mode 100644 index 0000000000..f172d1ce1d --- /dev/null +++ b/src/plugins/pythoneditor/wizard/pythonclasswizard.cpp @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** 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. +** +****************************************************************************/ + +#include "pythonclasswizard.h" +#include "pythonclasswizarddialog.h" +#include "pythonclassnamepage.h" +#include "pythonsourcegenerator.h" +#include "../pythoneditorconstants.h" +#include <projectexplorer/projectexplorerconstants.h> +#include <projectexplorer/session.h> +#include <projectexplorer/projectexplorer.h> +#include <projectexplorer/project.h> +#include <projectexplorer/target.h> +#include <qtsupport/qtkitinformation.h> +#include <qtsupport/baseqtversion.h> + +using namespace ProjectExplorer; + +namespace PythonEditor { + +static Core::BaseFileWizardParameters getDefaultParams() +{ + Core::BaseFileWizardParameters p(Core::IWizard::FileWizard); + + p.setId(QLatin1String(Constants::C_PY_CLASS_WIZARD_ID)); + p.setCategory(QLatin1String(Constants::C_PY_WIZARD_CATEGORY)); + p.setDisplayCategory(QLatin1String(Constants::C_PY_DISPLAY_CATEGORY)); + p.setDisplayName(ClassWizard::tr(Constants::EN_PY_CLASS_DISPLAY_NAME)); + p.setDescription(ClassWizard::tr(Constants::EN_PY_CLASS_DESCRIPTION)); + + return p; +} + +ClassWizard::ClassWizard(QObject *parent) : + Core::BaseFileWizard(getDefaultParams(), parent) +{ +} + +QWizard *ClassWizard::createWizardDialog( + QWidget *parent, + const Core::WizardDialogParameters ¶ms) const +{ + ClassWizardDialog *wizard = new ClassWizardDialog(parent); + foreach (QWizardPage *p, params.extensionPages()) + BaseFileWizard::applyExtensionPageShortTitle(wizard, wizard->addPage(p)); + wizard->setPath(params.defaultPath()); + wizard->setExtraValues(params.extraValues()); + return wizard; +} + +Core::GeneratedFiles ClassWizard::generateFiles(const QWizard *w, + QString *errorMessage) const +{ + Q_UNUSED(errorMessage); + + const ClassWizardDialog *wizard = qobject_cast<const ClassWizardDialog *>(w); + const ClassWizardParameters params = wizard->parameters(); + + const QString fileName = Core::BaseFileWizard::buildFileName( + params.path, params.fileName, QLatin1String(Constants::C_PY_EXTENSION)); + Core::GeneratedFile sourceFile(fileName); + + SourceGenerator generator; + generator.setPythonQtBinding(SourceGenerator::PySide); + Kit *kit = kitForWizard(wizard); + if (kit) { + QtSupport::BaseQtVersion *baseVersion = QtSupport::QtKitInformation::qtVersion(kit); + if (baseVersion && baseVersion->qtVersion().majorVersion == 5) + generator.setPythonQtVersion(SourceGenerator::Qt5); + else + generator.setPythonQtVersion(SourceGenerator::Qt4); + } + + QString sourceContent = generator.generateClass( + params.className, params.baseClass, params.classType + ); + + sourceFile.setContents(sourceContent); + sourceFile.setAttributes(Core::GeneratedFile::OpenEditorAttribute); + return Core::GeneratedFiles() << sourceFile; +} + +Kit *ClassWizard::kitForWizard(const ClassWizardDialog *wizard) const +{ + const QString key = QLatin1String(ProjectExplorer::Constants::PREFERED_PROJECT_NODE); + const QString nodePath = wizard->extraValues().value(key).toString(); + + // projectForFile doesn't find project if project file path passed + Node *node = ProjectExplorerPlugin::instance()->session()->nodeForFile(nodePath); + Project *proj = ProjectExplorerPlugin::instance()->session()->projectForNode(node); + if (proj && proj->activeTarget()) + return proj->activeTarget()->kit(); + + return KitManager::instance()->defaultKit(); +} + +} // namespace PythonEditor |
