diff options
author | Radovan Zivkovic <pivonroll@gmail.com> | 2013-09-22 17:22:22 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2014-03-11 19:54:57 +0100 |
commit | 67e04d3803840726aa32fc80108f47bf67595b80 (patch) | |
tree | acaf1c9891466cf42b48d44742863209a09cca27 | |
parent | 1f5909153816892917d004433221c2d02794a801 (diff) | |
download | qt-creator-67e04d3803840726aa32fc80108f47bf67595b80.tar.gz |
Configuration class now implements IConfiguration interface.
Change-Id: Ife83dc8a501b58447249a151f752e7e98670a65a
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
64 files changed, 1599 insertions, 630 deletions
diff --git a/src/plugins/vcprojectmanager/interfaces/iattributecontainer.h b/src/plugins/vcprojectmanager/interfaces/iattributecontainer.h new file mode 100644 index 0000000000..9be5b49f67 --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/iattributecontainer.h @@ -0,0 +1,55 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_INTERNAL_IATTRIBUTEHANDLER_H +#define VCPROJECTMANAGER_INTERNAL_IATTRIBUTEHANDLER_H + +#include <QString> +#include <QDomElement> + +namespace VcProjectManager { +namespace Internal { + +class IAttributeContainer +{ +public: + virtual ~IAttributeContainer() {} + virtual QString attributeValue(const QString &attributeName) const = 0; + virtual QString getAttributeName(int index) const = 0; + virtual void clearAttribute(const QString &attributeName) = 0; + virtual void removeAttribute(const QString &attributeName) = 0; + virtual void setAttribute(const QString &attributeName, const QString &attributeValue) = 0; + virtual int getAttributeCount() const = 0; + virtual void appendToXMLNode(QDomElement &elementNode) const = 0; +}; + +} // namespace Internal +} // namespace VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_IATTRIBUTEHANDLER_H diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/iattributedescriptiondataitem.h b/src/plugins/vcprojectmanager/interfaces/iattributedescriptiondataitem.h index c3593653d2..c3593653d2 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/iattributedescriptiondataitem.h +++ b/src/plugins/vcprojectmanager/interfaces/iattributedescriptiondataitem.h diff --git a/src/plugins/vcprojectmanager/interfaces/iconfiguration.h b/src/plugins/vcprojectmanager/interfaces/iconfiguration.h new file mode 100644 index 0000000000..0e76f19968 --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/iconfiguration.h @@ -0,0 +1,75 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_INTERNAL_ICONFIGURATION_H +#define VCPROJECTMANAGER_INTERNAL_ICONFIGURATION_H + +#include <QString> +#include <QObject> +#include "../vcprojectmodel/ivcprojectnodemodel.h" + +namespace VcProjectManager { +namespace Internal { + +class ITools; +class IAttributeContainer; + +class IConfiguration : public QObject, public IVcProjectXMLNode +{ + Q_OBJECT + +public: + IConfiguration(QObject *parent = 0) + : QObject(parent) {} + + virtual ~IConfiguration() {} + + virtual IAttributeContainer* attributeContainer() const = 0; + virtual QString fullName() const = 0; + virtual QString name() const = 0; + virtual QString platform() const = 0; + virtual void setFullName(const QString &fullName) = 0; + virtual void setName(const QString &name) = 0; + virtual void setPlatform(const QString &platform) = 0; + virtual ITools* tools() const = 0; + + /*! + * Implement in order to support creating a clone of a IConfiguration instance. + * \return A pointer to newly created IConfiguration instance. + */ + virtual IConfiguration* clone() const = 0; + +signals: + void nameChanged(); +}; + +} // namespace Internal +} // namespace VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_ICONFIGURATION_H diff --git a/src/plugins/vcprojectmanager/interfaces/iconfigurations.h b/src/plugins/vcprojectmanager/interfaces/iconfigurations.h new file mode 100644 index 0000000000..b6eae3b4c8 --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/iconfigurations.h @@ -0,0 +1,55 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_INTERNAL_ICONFIGURATIONHANDLER_H +#define VCPROJECTMANAGER_INTERNAL_ICONFIGURATIONHANDLER_H + +#include <QString> + +namespace VcProjectManager { +namespace Internal { + +class IConfiguration; + +class IConfigurations +{ +public: + virtual ~IConfigurations() {} + + virtual void addConfiguration(IConfiguration *config) = 0; + virtual IConfiguration* configuration(const QString &name) const = 0; + virtual IConfiguration* configuration(int index) const = 0; + virtual int configurationCount() const = 0; + virtual void removeConfiguration(const QString &fullName) = 0; +}; + +} // namespace Internal +} // namespace VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_ICONFIGURATIONHANDLER_H diff --git a/src/plugins/vcprojectmanager/interfaces/interfaces.pri b/src/plugins/vcprojectmanager/interfaces/interfaces.pri new file mode 100644 index 0000000000..af1b64e0eb --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/interfaces.pri @@ -0,0 +1,12 @@ +HEADERS += \ + interfaces/itools.h \ + interfaces/itool.h \ + interfaces/iconfiguration.h \ + interfaces/iattributecontainer.h \ + interfaces/isectioncontainer.h \ + interfaces/itoolsection.h \ + interfaces/itooldescription.h \ + interfaces/itoolsectiondescription.h \ + interfaces/itoolattribute.h \ + interfaces/iattributedescriptiondataitem.h \ + interfaces/iconfigurations.h diff --git a/src/plugins/vcprojectmanager/interfaces/isectioncontainer.h b/src/plugins/vcprojectmanager/interfaces/isectioncontainer.h new file mode 100644 index 0000000000..1cc294b53b --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/isectioncontainer.h @@ -0,0 +1,57 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_INTERNAL_ISECTIONCONTAINER_H +#define VCPROJECTMANAGER_INTERNAL_ISECTIONCONTAINER_H + +#include <QString> +#include <QDomElement> + +namespace VcProjectManager { +namespace Internal { + +class IToolSection; + +class ISectionContainer +{ +public: + virtual ~ISectionContainer() {} + virtual ISectionContainer& operator=(ISectionContainer &toolSec) = 0; + virtual IToolSection* section(int index) const = 0; + virtual IToolSection* section(const QString §ionName) const = 0; + virtual int sectionCount() const = 0; + virtual void appendSection(IToolSection *section) = 0; + virtual void removeSection(const QString §ionName) = 0; + virtual void appendToXMLNode(QDomElement &elementNode) = 0; +}; + +} // Internal +} // VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_ISECTIONCONTAINER_H diff --git a/src/plugins/vcprojectmanager/interfaces/itool.h b/src/plugins/vcprojectmanager/interfaces/itool.h new file mode 100644 index 0000000000..347f547f50 --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/itool.h @@ -0,0 +1,55 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_INTERNAL_ITOOL_H +#define VCPROJECTMANAGER_INTERNAL_ITOOL_H + +#include <QString> +#include "../vcprojectmodel/ivcprojectnodemodel.h" + +namespace VcProjectManager { +namespace Internal { + +class ISectionContainer; +class IToolDescription; + +class ITool : public IVcProjectXMLNode +{ +public: + virtual ~ITool() {} + + virtual ISectionContainer* sectionContainer() const = 0; + virtual const IToolDescription* toolDescription() const = 0; + virtual ITool* clone() const = 0; +}; + +} // namespace Internal +} // namespace VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_ITOOL_H diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/itoolattribute.h b/src/plugins/vcprojectmanager/interfaces/itoolattribute.h index 30c8f02424..30c8f02424 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/itoolattribute.h +++ b/src/plugins/vcprojectmanager/interfaces/itoolattribute.h diff --git a/src/plugins/vcprojectmanager/interfaces/itooldescription.h b/src/plugins/vcprojectmanager/interfaces/itooldescription.h new file mode 100644 index 0000000000..803101ffef --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/itooldescription.h @@ -0,0 +1,62 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_ITOOLDESCRIPTION_H +#define VCPROJECTMANAGER_ITOOLDESCRIPTION_H + +#include <QString> + +namespace VcProjectManager { +namespace Internal { + +class ITool; +class IToolSectionDescription; + +class IToolDescription +{ +public: + virtual ~IToolDescription() {} + virtual int sectionDescriptionCount() const = 0; + virtual IToolSectionDescription *sectionDescription(int index) const = 0; + virtual void addSectionDescription(IToolSectionDescription *sectionDescription) = 0; + virtual void removeSectionDescription(IToolSectionDescription *sectionDescription) = 0; + + virtual QString toolKey() const = 0; + virtual void setToolKey(const QString &toolKey) = 0; + + virtual QString toolDisplayName() const = 0; + virtual void setToolDisplayName(const QString &toolDisplayName) = 0; + + virtual ITool* createTool() const = 0; +}; + +} // Internal +} // VcProjectManager + +#endif // VCPROJECTMANAGER_ITOOLDESCRIPTION_H diff --git a/src/plugins/vcprojectmanager/interfaces/itools.h b/src/plugins/vcprojectmanager/interfaces/itools.h new file mode 100644 index 0000000000..25a7663938 --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/itools.h @@ -0,0 +1,57 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_INTERNAL_ITOOLHANDLER_H +#define VCPROJECTMANAGER_INTERNAL_ITOOLHANDLER_H + +#include <QString> +#include <QDomElement> + +namespace VcProjectManager { +namespace Internal { + +class ITool; + +class ITools +{ +public: + virtual ~ITools() {} + virtual ITools& operator= (const ITools &tools) = 0; + virtual void addTool(ITool *tool) = 0; + virtual void removeTool(ITool *tool) = 0; + virtual ITool* tool(const QString &toolKey) const = 0; + virtual ITool* tool(int index) const = 0; + virtual int toolCount() const = 0; + virtual void appendToXMLNode(QDomElement &domElement, QDomDocument &domDocument) const = 0; +}; + +} // namespace Internal +} // namespace VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_ITOOLHANDLER_H diff --git a/src/plugins/vcprojectmanager/interfaces/itoolsection.h b/src/plugins/vcprojectmanager/interfaces/itoolsection.h new file mode 100644 index 0000000000..6752456b0f --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/itoolsection.h @@ -0,0 +1,57 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_ITOOLSECTION_H +#define VCPROJECTMANAGER_ITOOLSECTION_H + +namespace VcProjectManager { +namespace Internal { + +class IToolAttribute; +class IToolSectionDescription; +class VcNodeWidget; + +class IToolSection +{ +public: + virtual ~IToolSection() {} + virtual IToolAttribute* toolAttribute(int index) const = 0; + virtual IToolAttribute* toolAttribute(const QString &attributeKey) const = 0; + virtual int toolAttributeCount() const = 0; + virtual void addToolAttribute(IToolAttribute* toolAttribute) = 0; + virtual void removeToolAttribute(IToolAttribute* toolAttribute) = 0; + virtual const IToolSectionDescription *sectionDescription() const = 0; + virtual VcNodeWidget* createSettingsWidget() = 0; + virtual IToolSection* clone() const = 0; +}; + +} // Internal +} // VcProjectManager + +#endif // VCPROJECTMANAGER_ITOOLSECTION_H diff --git a/src/plugins/vcprojectmanager/interfaces/itoolsectiondescription.h b/src/plugins/vcprojectmanager/interfaces/itoolsectiondescription.h new file mode 100644 index 0000000000..b25b2a8f64 --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/itoolsectiondescription.h @@ -0,0 +1,61 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_INTERNAL_ITOOLSECTIONDESCRIPTION_H +#define VCPROJECTMANAGER_INTERNAL_ITOOLSECTIONDESCRIPTION_H + +#include <QString> + +namespace VcProjectManager { +namespace Internal { + +class IToolSection; +class IAttributeDescriptionDataItem; + +class IToolSectionDescription +{ +public: + virtual ~IToolSectionDescription() {} + virtual IToolSection* createToolSection() const = 0; + + virtual QString name() const = 0; + virtual void setName(const QString &name) = 0; + + virtual IAttributeDescriptionDataItem* attributeDescription(const QString &attributeKey) const = 0; + virtual IAttributeDescriptionDataItem* attributeDescription(int index) const = 0; + virtual int attributeDescriptionCount() const = 0; + virtual void addAttributeDescription(IAttributeDescriptionDataItem* attributeDesc) = 0; + virtual void removeAttributeDescription(IAttributeDescriptionDataItem* attributeDesc) = 0; + virtual void removeAttributeDescription(const QString &attributeKey) = 0; +}; + +} // Internal +} // VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_ITOOLSECTIONDESCRIPTION_H diff --git a/src/plugins/vcprojectmanager/vcproject.cpp b/src/plugins/vcprojectmanager/vcproject.cpp index de6c3e7ead..3b6fffc339 100644 --- a/src/plugins/vcprojectmanager/vcproject.cpp +++ b/src/plugins/vcprojectmanager/vcproject.cpp @@ -43,7 +43,9 @@ #include "vcprojectmodel/tools/configurationtool.h" #include "vcprojectmodel/tools/toolsection.h" #include "vcprojectmodel/tools/toolattributes/stringlisttoolattribute.h" -#include "vcprojectmodel/tools/toolattributes/iattributedescriptiondataitem.h" +#include "interfaces/iattributedescriptiondataitem.h" +#include "interfaces/isectioncontainer.h" +#include "interfaces/itools.h" #include <coreplugin/icontext.h> #include <coreplugin/icore.h> @@ -216,7 +218,7 @@ void VcProject::onSettingsDialogAccepted() foreach (ProjectExplorer::BuildConfiguration *bc, buildConfigurationList) { VcProjectBuildConfiguration *vcBc = qobject_cast<VcProjectBuildConfiguration *>(bc); if (vcBc) { - Configuration::Ptr lookFor = configs->configuration(vcBc->displayName()); + IConfiguration *lookFor = configs->configuration(vcBc->displayName()); if (!lookFor) target->removeBuildConfiguration(vcBc); } @@ -227,11 +229,11 @@ void VcProject::onSettingsDialogAccepted() // add all new build configurations foreach (ProjectExplorer::Target *target, targetList) { if (target) { - QList<Configuration::Ptr > configListModel = configs->configurations(); - foreach (Configuration::Ptr configPtr, configListModel) { - if (configPtr && !findBuildConfiguration(target, configPtr->name())) - addBuildConfiguration(target, configPtr); + for (int i = 0; i < configs->configurationCount(); ++i) { + IConfiguration *config = configs->configuration(i); + if (config && !findBuildConfiguration(target, config->fullName())) + addBuildConfiguration(target, config); } } } @@ -254,10 +256,12 @@ bool VcProject::fromMap(const QVariantMap &map) bool VcProject::setupTarget(ProjectExplorer::Target *t) { - QList<Configuration::Ptr > configsModel = m_projectFile->documentModel()->vcProjectDocument()->configurations()->configurations(); + for (int i = 0; i < m_projectFile->documentModel()->vcProjectDocument()->configurations()->configurationCount(); ++i){ + IConfiguration *config = m_projectFile->documentModel()->vcProjectDocument()->configurations()->configuration(i); + if (config) + addBuildConfiguration(t, config); + } - foreach (const Configuration::Ptr &configModel, configsModel) - addBuildConfiguration(t, configModel); return true; } @@ -303,13 +307,13 @@ void VcProject::updateCodeModels() QTC_ASSERT(vbc, return); QString configName = vbc->displayName(); - Configuration::Ptr configModel = m_projectFile->documentModel()->vcProjectDocument()->configurations()->configuration(configName); + IConfiguration *configModel = m_projectFile->documentModel()->vcProjectDocument()->configurations()->configuration(configName); if (configModel) { - ConfigurationTool *configTool = configModel->configurationTool(QLatin1String(ToolConstants::strVCCLCompilerTool)); + ITool *configTool = configModel->tools()->tool(QLatin1String(ToolConstants::strVCCLCompilerTool)); if (configTool) { - for (int i = 0; i < configTool->sectionCount(); ++i) { - ToolSection *toolSection = configTool->section(i); + for (int i = 0; i < configTool->sectionContainer()->sectionCount(); ++i) { + IToolSection *toolSection = configTool->sectionContainer()->section(i); if (toolSection) { IToolAttribute *toolAttr = toolSection->toolAttribute(QLatin1String("PreprocessorDefinitions")); @@ -368,19 +372,19 @@ void VcProject::importBuildConfigurations() addTarget(createTarget(kit)); } -void VcProject::addBuildConfiguration(Target *target, QSharedPointer<Configuration> config) +void VcProject::addBuildConfiguration(Target *target, IConfiguration *config) { if (target && config) { VcProjectBuildConfigurationFactory *factory = ExtensionSystem::PluginManager::instance()->getObject<VcProjectBuildConfigurationFactory>(); - VcProjectBuildConfiguration *bc = factory->create(target, Constants::VC_PROJECT_BC_ID, config->name()); + VcProjectBuildConfiguration *bc = factory->create(target, Constants::VC_PROJECT_BC_ID, config->fullName()); if (!bc) return; bc->setConfiguration(config); ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); VcMakeStep *makeStep = new VcMakeStep(buildSteps); - QString argument(QLatin1String("/p:configuration=\"") + config->name() + QLatin1String("\"")); + QString argument(QLatin1String("/p:configuration=\"") + config->fullName() + QLatin1String("\"")); makeStep->addBuildArgument(m_projectFile->filePath()); makeStep->addBuildArgument(argument); buildSteps->insertStep(0, makeStep); @@ -388,7 +392,7 @@ void VcProject::addBuildConfiguration(Target *target, QSharedPointer<Configurati //clean step ProjectExplorer::BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN); makeStep = new VcMakeStep(cleanSteps); - argument = QLatin1String("/p:configuration=\"") + config->name() + QLatin1String("\" /t:Clean"); + argument = QLatin1String("/p:configuration=\"") + config->fullName() + QLatin1String("\" /t:Clean"); makeStep->addBuildArgument(m_projectFile->filePath()); makeStep->addBuildArgument(argument); cleanSteps->insertStep(0, makeStep); diff --git a/src/plugins/vcprojectmanager/vcproject.h b/src/plugins/vcprojectmanager/vcproject.h index 657f67c0eb..ff7bd52956 100644 --- a/src/plugins/vcprojectmanager/vcproject.h +++ b/src/plugins/vcprojectmanager/vcproject.h @@ -53,6 +53,7 @@ class VcManager; class VcFolderNode; class Configuration; class VcProjectBuildConfiguration; +class IConfiguration; class VcProject : public ProjectExplorer::Project { @@ -90,7 +91,7 @@ private: void addCxxModelFiles(const ProjectExplorer::FolderNode *node, QStringList &sourceFiles); void updateCodeModels(); void importBuildConfigurations(); - void addBuildConfiguration(ProjectExplorer::Target *target, QSharedPointer<Configuration> config); + void addBuildConfiguration(ProjectExplorer::Target *target, IConfiguration *config); VcProjectBuildConfiguration* findBuildConfiguration(ProjectExplorer::Target *target, const QString &buildConfigurationName) const; VcManager *m_projectManager; diff --git a/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp index 73f7737417..ff32703a0e 100644 --- a/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp +++ b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp @@ -82,15 +82,15 @@ ProjectExplorer::BuildConfiguration::BuildType VcProjectBuildConfiguration::buil return Debug; } -void VcProjectBuildConfiguration::setConfiguration(Configuration::Ptr config) +void VcProjectBuildConfiguration::setConfiguration(IConfiguration *config) { m_configuration = config; - connect(m_configuration.data(), SIGNAL(nameChanged()), this, SLOT(reloadConfigurationName())); + connect(m_configuration, SIGNAL(nameChanged()), this, SLOT(reloadConfigurationName())); } QString VcProjectBuildConfiguration::configurationNameOnly() const { - QStringList splits = m_configuration->name().split(QLatin1Char('|')); + QStringList splits = m_configuration->fullName().split(QLatin1Char('|')); if (splits.isEmpty()) return QString(); @@ -100,7 +100,7 @@ QString VcProjectBuildConfiguration::configurationNameOnly() const QString VcProjectBuildConfiguration::platformNameOnly() const { - QStringList splits = m_configuration->name().split(QLatin1Char('|')); + QStringList splits = m_configuration->fullName().split(QLatin1Char('|')); if (splits.isEmpty() || splits.size() <= 1 || splits.size() > 2) return QString(); @@ -115,8 +115,8 @@ QVariantMap VcProjectBuildConfiguration::toMap() const void VcProjectBuildConfiguration::reloadConfigurationName() { - setDisplayName(m_configuration->name()); - setDefaultDisplayName(m_configuration->name()); + setDisplayName(m_configuration->fullName()); + setDefaultDisplayName(m_configuration->fullName()); } VcProjectBuildConfiguration::VcProjectBuildConfiguration(ProjectExplorer::Target *parent, VcProjectBuildConfiguration *source) diff --git a/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h index f33647e908..011862dfbf 100644 --- a/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h +++ b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h @@ -51,7 +51,7 @@ public: ProjectExplorer::IOutputParser *createOutputParser() const; BuildType buildType() const; - void setConfiguration(Configuration::Ptr config); + void setConfiguration(IConfiguration *config); QString configurationNameOnly() const; QString platformNameOnly() const; @@ -66,7 +66,7 @@ protected: private: QString m_buildDirectory; - Configuration::Ptr m_configuration; + IConfiguration *m_configuration; }; class VcProjectBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory diff --git a/src/plugins/vcprojectmanager/vcprojectmanager.pro b/src/plugins/vcprojectmanager/vcprojectmanager.pro index 67dd8ff4ae..7a3f63c242 100644 --- a/src/plugins/vcprojectmanager/vcprojectmanager.pro +++ b/src/plugins/vcprojectmanager/vcprojectmanager.pro @@ -1,5 +1,3 @@ -include(../../qtcreatorplugin.pri) - QT += xml xmlpatterns HEADERS = vcprojectmanagerplugin.h \ @@ -33,8 +31,10 @@ SOURCES = vcprojectmanagerplugin.cpp \ OTHER_FILES += \ VcProject.mimetypes.xml -include($$PWD/vcprojectmodel/vcprojectmodel.pri) -include($$PWD/widgets/widgets.pri) - RESOURCES += \ vcproject.qrc + +include($$PWD/vcprojectmodel/vcprojectmodel.pri) +include($$PWD/widgets/widgets.pri) +include(../../qtcreatorplugin.pri) +include(interfaces/interfaces.pri) diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.cpp index f633101dbf..d03af533a0 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.cpp @@ -37,7 +37,7 @@ namespace Internal { ActiveXReference::~ActiveXReference() { - m_referenceConfigurations.clear(); + qDeleteAll(m_referenceConfigurations); } void ActiveXReference::processNode(const QDomNode &node) @@ -91,54 +91,50 @@ QDomNode ActiveXReference::toXMLDomNode(QDomDocument &domXMLDocument) const activeXNode.setAttribute(QLatin1String("ControlVersion"), m_controlVersion); activeXNode.setAttribute(QLatin1String("WrapperTool"), m_wrapperTool); - foreach (const Configuration::Ptr &refConfig, m_referenceConfigurations) + foreach (const IConfiguration *refConfig, m_referenceConfigurations) activeXNode.appendChild(refConfig->toXMLDomNode(domXMLDocument)); return activeXNode; } -void ActiveXReference::addReferenceConfiguration(Configuration::Ptr refConfig) +void ActiveXReference::addReferenceConfiguration(IConfiguration *refConfig) { if (m_referenceConfigurations.contains(refConfig)) return; // Don't add configuration with the same name - foreach (const Configuration::Ptr &refConf, m_referenceConfigurations) { - if (refConfig->name() == refConf->name()) + foreach (const IConfiguration *refConf, m_referenceConfigurations) { + if (refConfig->fullName() == refConf->fullName()) return; } m_referenceConfigurations.append(refConfig); } -void ActiveXReference::removeReferenceConfiguration(Configuration::Ptr refConfig) +void ActiveXReference::removeReferenceConfiguration(IConfiguration *refConfig) { m_referenceConfigurations.removeAll(refConfig); } void ActiveXReference::removeReferenceConfiguration(const QString &refConfigName) { - foreach (const Configuration::Ptr &refConfig, m_referenceConfigurations) { - if (refConfig->name() == refConfigName) { - removeReferenceConfiguration(refConfig); + foreach (IConfiguration *refConfig, m_referenceConfigurations) { + if (refConfig->fullName() == refConfigName) { + m_referenceConfigurations.removeOne(refConfig); + delete refConfig; return; } } } -QList<Configuration::Ptr> ActiveXReference::referenceConfigurations() const +IConfiguration* ActiveXReference::referenceConfiguration(const QString &refConfigName) const { - return m_referenceConfigurations; -} - -Configuration::Ptr ActiveXReference::referenceConfiguration(const QString &refConfigName) const -{ - foreach (const Configuration::Ptr &refConfig, m_referenceConfigurations) { - if (refConfig->name() == refConfigName) + foreach (IConfiguration *refConfig, m_referenceConfigurations) { + if (refConfig->fullName() == refConfigName) return refConfig; } - return Configuration::Ptr(); + return 0; } QString ActiveXReference::controlGUID() const @@ -181,7 +177,7 @@ ActiveXReference::ActiveXReference(const ActiveXReference &ref) m_controlVersion = ref.m_controlVersion; m_wrapperTool = ref.m_wrapperTool; - foreach (const Configuration::Ptr &refConf, ref.m_referenceConfigurations) + foreach (const IConfiguration *refConf, ref.m_referenceConfigurations) m_referenceConfigurations.append(refConf->clone()); } @@ -194,7 +190,7 @@ ActiveXReference &ActiveXReference::operator =(const ActiveXReference &ref) m_referenceConfigurations.clear(); - foreach (const Configuration::Ptr &refConf, ref.m_referenceConfigurations) + foreach (const IConfiguration *refConf, ref.m_referenceConfigurations) m_referenceConfigurations.append(refConf->clone()); } @@ -203,7 +199,7 @@ ActiveXReference &ActiveXReference::operator =(const ActiveXReference &ref) void ActiveXReference::processReferenceConfig(const QDomNode &referenceConfig) { - Configuration::Ptr referenceConfiguration = createReferenceConfiguration(); + IConfiguration *referenceConfiguration = createReferenceConfiguration(); referenceConfiguration->processNode(referenceConfig); m_referenceConfigurations.append(referenceConfiguration); @@ -237,9 +233,9 @@ ActiveXReference2003::ActiveXReference2003() { } -Configuration::Ptr ActiveXReference2003::createReferenceConfiguration() const +IConfiguration* ActiveXReference2003::createReferenceConfiguration() const { - return ConfigurationsFactory::createConfiguration(VcDocConstants::DV_MSVC_2003, QLatin1String("ReferenceConfiguration")); + return new Configuration2003(QLatin1String("ReferenceConfiguration")); } @@ -336,9 +332,9 @@ ActiveXReference2005::ActiveXReference2005() { } -Configuration::Ptr ActiveXReference2005::createReferenceConfiguration() const +IConfiguration* ActiveXReference2005::createReferenceConfiguration() const { - return ConfigurationsFactory::createConfiguration(VcDocConstants::DV_MSVC_2005, QLatin1String("ReferenceConfiguration")); + return new Configuration2005(QLatin1String("ReferenceConfiguration")); } @@ -443,9 +439,9 @@ ActiveXReference2008::ActiveXReference2008() { } -Configuration::Ptr ActiveXReference2008::createReferenceConfiguration() const +IConfiguration* ActiveXReference2008::createReferenceConfiguration() const { - return ConfigurationsFactory::createConfiguration(VcDocConstants::DV_MSVC_2008, QLatin1String("ReferenceConfiguration")); + return new Configuration2008(QLatin1String("ReferenceConfiguration")); } diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.h b/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.h index 22d53a1357..e079b58ccf 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.h @@ -55,11 +55,10 @@ public: */ virtual ActiveXReference::Ptr clone() const = 0; - void addReferenceConfiguration(Configuration::Ptr refConfig); - void removeReferenceConfiguration(Configuration::Ptr refConfig); + void addReferenceConfiguration(IConfiguration *refConfig); + void removeReferenceConfiguration(IConfiguration *refConfig); void removeReferenceConfiguration(const QString &refConfigName); - QList<Configuration::Ptr> referenceConfigurations() const; - Configuration::Ptr referenceConfiguration(const QString &refConfigName) const; + IConfiguration *referenceConfiguration(const QString &refConfigName) const; QString controlGUID() const; void setControlGUID(const QString &ctrlGUID); @@ -79,12 +78,12 @@ protected: * Reimplement this to create a new reference configuration. * \return A shared pointer to a newly created reference configuration. */ - virtual Configuration::Ptr createReferenceConfiguration() const = 0; + virtual IConfiguration* createReferenceConfiguration() const = 0; QString m_controlGUID; // required QString m_controlVersion; // required QString m_wrapperTool; // required - QList<Configuration::Ptr> m_referenceConfigurations; + QList<IConfiguration *> m_referenceConfigurations; }; class ActiveXReference2003 : public ActiveXReference @@ -101,7 +100,7 @@ public: protected: ActiveXReference2003(); void init(); - Configuration::Ptr createReferenceConfiguration() const; + IConfiguration *createReferenceConfiguration() const; }; class ActiveXReference2005 : public ActiveXReference2003 @@ -125,7 +124,7 @@ public: protected: ActiveXReference2005(); - Configuration::Ptr createReferenceConfiguration() const; + IConfiguration *createReferenceConfiguration() const; void processNodeAttributes(const QDomElement &element); QString m_localeID; // opt @@ -154,7 +153,7 @@ public: protected: ActiveXReference2008(); - Configuration::Ptr createReferenceConfiguration() const; + IConfiguration* createReferenceConfiguration() const; void processNodeAttributes(const QDomElement &element); bool m_copyLocalDependencies; //optional default: true diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.cpp index 83e95aa62e..2a7bf34ef8 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.cpp @@ -38,6 +38,7 @@ namespace Internal { AssemblyReference::~AssemblyReference() { + qDeleteAll(m_referenceConfigurations); } void AssemblyReference::processNode(const QDomNode &node) @@ -82,7 +83,7 @@ QDomNode AssemblyReference::toXMLDomNode(QDomDocument &domXMLDocument) const assemblyRefNode.setAttribute(QLatin1String("RelativePath"), m_relativePath); - foreach (const Configuration::Ptr &refConfig, m_referenceConfigurations) + foreach (const IConfiguration *refConfig, m_referenceConfigurations) assemblyRefNode.appendChild(refConfig->toXMLDomNode(domXMLDocument)); return assemblyRefNode; @@ -98,46 +99,42 @@ void AssemblyReference::setRelativePath(const QString &relativePath) m_relativePath = relativePath; } -void AssemblyReference::addReferenceConfiguration(Configuration::Ptr refConfig) +void AssemblyReference::addReferenceConfiguration(IConfiguration *refConfig) { if (m_referenceConfigurations.contains(refConfig)) return; - foreach (const Configuration::Ptr &refConf, m_referenceConfigurations) { - if (refConfig->name() == refConf->name()) + foreach (const IConfiguration *refConf, m_referenceConfigurations) { + if (refConfig->fullName() == refConf->fullName()) return; } m_referenceConfigurations.append(refConfig); } -void AssemblyReference::removeReferenceConfiguration(Configuration::Ptr refConfig) +void AssemblyReference::removeReferenceConfiguration(IConfiguration *refConfig) { m_referenceConfigurations.removeAll(refConfig); } void AssemblyReference::removeReferenceConfiguration(const QString &refConfName) { - foreach (const Configuration::Ptr &refConfig, m_referenceConfigurations) { - if (refConfig->name() == refConfName) { - removeReferenceConfiguration(refConfig); + foreach (IConfiguration *refConfig, m_referenceConfigurations) { + if (refConfig->fullName() == refConfName) { + m_referenceConfigurations.removeOne(refConfig); + delete refConfig; return; } } } -QList<Configuration::Ptr> AssemblyReference::referenceConfigurations() const +IConfiguration* AssemblyReference::referenceConfiguration(const QString &refConfigName) const { - return m_referenceConfigurations; -} - -Configuration::Ptr AssemblyReference::referenceConfiguration(const QString &refConfigName) const -{ - foreach (const Configuration::Ptr &refConfig, m_referenceConfigurations) { - if (refConfig->name() == refConfigName) + foreach (IConfiguration *refConfig, m_referenceConfigurations) { + if (refConfig->fullName() == refConfigName) return refConfig; } - return Configuration::Ptr(); + return 0; } AssemblyReference::AssemblyReference() @@ -148,7 +145,7 @@ AssemblyReference::AssemblyReference(const AssemblyReference &asmRef) { m_relativePath = asmRef.m_relativePath; - foreach (const Configuration::Ptr &refConfig, asmRef.m_referenceConfigurations) + foreach (const IConfiguration *refConfig, asmRef.m_referenceConfigurations) m_referenceConfigurations.append(refConfig->clone()); } @@ -157,7 +154,7 @@ AssemblyReference &AssemblyReference::operator =(const AssemblyReference &asmRef if (this != &asmRef) { m_relativePath = asmRef.m_relativePath; - foreach (const Configuration::Ptr &refConfig, asmRef.m_referenceConfigurations) + foreach (const IConfiguration *refConfig, asmRef.m_referenceConfigurations) m_referenceConfigurations.append(refConfig->clone()); } @@ -166,7 +163,7 @@ AssemblyReference &AssemblyReference::operator =(const AssemblyReference &asmRef void AssemblyReference::processReferenceConfig(const QDomNode &referenceConfig) { - Configuration::Ptr referenceConfiguration = createReferenceConfiguration(); + IConfiguration *referenceConfiguration = createReferenceConfiguration(); referenceConfiguration->processNode(referenceConfig); m_referenceConfigurations.append(referenceConfiguration); @@ -201,9 +198,9 @@ AssemblyReference2003::AssemblyReference2003() { } -Configuration::Ptr AssemblyReference2003::createReferenceConfiguration() const +IConfiguration* AssemblyReference2003::createReferenceConfiguration() const { - return ConfigurationsFactory::createConfiguration(VcDocConstants::DV_MSVC_2003, QLatin1String("ReferenceConfiguration")); + return new Configuration2003(QLatin1String("ReferenceConfiguration")); } @@ -281,9 +278,9 @@ AssemblyReference2005::AssemblyReference2005() { } -Configuration::Ptr AssemblyReference2005::createReferenceConfiguration() const +IConfiguration* AssemblyReference2005::createReferenceConfiguration() const { - return ConfigurationsFactory::createConfiguration(VcDocConstants::DV_MSVC_2005, QLatin1String("ReferenceConfiguration")); + return new Configuration2005(QLatin1String("ReferenceConfiguration")); } void AssemblyReference2005::processNodeAttributes(const QDomElement &element) @@ -421,9 +418,9 @@ AssemblyReference2008::AssemblyReference2008() { } -Configuration::Ptr AssemblyReference2008::createReferenceConfiguration() const +IConfiguration* AssemblyReference2008::createReferenceConfiguration() const { - return ConfigurationsFactory::createConfiguration(VcDocConstants::DV_MSVC_2008, QLatin1String("ReferenceConfiguration")); + return new Configuration2008(QLatin1String("ReferenceConfiguration")); } void AssemblyReference2008::processNodeAttributes(const QDomElement &element) diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.h b/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.h index e17308053b..234bce67e6 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.h @@ -58,11 +58,10 @@ public: QString relativePath() const; void setRelativePath(const QString &relativePath); - void addReferenceConfiguration(Configuration::Ptr refConfig); - void removeReferenceConfiguration(Configuration::Ptr refConfig); + void addReferenceConfiguration(IConfiguration *refConfig); + void removeReferenceConfiguration(IConfiguration *refConfig); void removeReferenceConfiguration(const QString &refConfName); - QList<Configuration::Ptr> referenceConfigurations() const; - Configuration::Ptr referenceConfiguration(const QString &refConfigName) const; + IConfiguration *referenceConfiguration(const QString &refConfigName) const; protected: AssemblyReference(); @@ -75,9 +74,9 @@ protected: * Reimplement this to create a new reference configuration. * \return A shared pointer to a newly created reference configuration. */ - virtual Configuration::Ptr createReferenceConfiguration() const = 0; + virtual IConfiguration* createReferenceConfiguration() const = 0; - QList<Configuration::Ptr> m_referenceConfigurations; + QList<IConfiguration*> m_referenceConfigurations; QString m_relativePath; // required }; @@ -94,7 +93,7 @@ public: protected: AssemblyReference2003(); - Configuration::Ptr createReferenceConfiguration() const; + IConfiguration *createReferenceConfiguration() const; }; class AssemblyReference2005 : public AssemblyReference2003 @@ -118,7 +117,7 @@ public: protected: AssemblyReference2005(); - Configuration::Ptr createReferenceConfiguration() const; + IConfiguration *createReferenceConfiguration() const; void processNodeAttributes(const QDomElement &element); QString m_assemblyName; // optional @@ -151,7 +150,7 @@ public: protected: AssemblyReference2008(); - Configuration::Ptr createReferenceConfiguration() const; + IConfiguration *createReferenceConfiguration() const; void processNodeAttributes(const QDomElement &element); bool m_copyLocalDependencies; //optional default: true diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configuration.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/configuration.cpp index 006fae9c0d..56a5131c57 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/configuration.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/configuration.cpp @@ -36,42 +36,47 @@ #include "tools/toolattributes/tooldescriptiondatamanager.h" #include "tools/toolattributes/tooldescription.h" #include "tools/configurationtool.h" +#include "generalattributecontainer.h" +#include "configurationtools.h" namespace VcProjectManager { namespace Internal { using namespace ToolConstants; +Configuration::Configuration(const QString &nodeName) + : m_nodeName(nodeName) +{ + m_attributeContainer = new GeneralAttributeContainer; + m_tools = new ConfigurationTools; +} + Configuration::Configuration(const Configuration &config) { - m_name = config.m_name; - m_anyAttribute = config.m_anyAttribute; + m_fullName = config.m_fullName; m_nodeName = config.m_nodeName; - qDeleteAll(m_configurationTools); - m_configurationTools.clear(); + m_attributeContainer = new GeneralAttributeContainer; + *m_attributeContainer = *config.m_attributeContainer; - foreach (const ConfigurationTool *confTool, config.m_configurationTools) - m_configurationTools.append(new ConfigurationTool(*confTool)); + m_tools = new ConfigurationTools; + *m_tools = *config.m_tools; } Configuration &Configuration::operator =(const Configuration &config) { if (this != &config) { - m_name = config.m_name; - m_anyAttribute = config.m_anyAttribute; + m_fullName = config.m_fullName; m_nodeName = config.m_nodeName; - qDeleteAll(m_configurationTools); - m_configurationTools.clear(); - - foreach (const ConfigurationTool *confTool, m_configurationTools) - m_configurationTools.append(new ConfigurationTool(*confTool)); + *m_attributeContainer = *config.m_attributeContainer; + *m_tools = *config.m_tools; } return *this; } Configuration::~Configuration() { - qDeleteAll(m_configurationTools); + delete m_attributeContainer; + delete m_tools; } void Configuration::processNode(const QDomNode &node) @@ -100,130 +105,68 @@ void Configuration::processNodeAttributes(const QDomElement &element) QDomAttr domElement = domNode.toAttr(); if (domElement.name() == QLatin1String("Name")) { - m_name = domElement.value(); + m_fullName = domElement.value(); } else - m_anyAttribute.insert(domElement.name(), domElement.value()); + m_attributeContainer->setAttribute(domElement.name(), domElement.value()); } } } -QString Configuration::nodeWidgetName() const -{ - return m_name; -} - QDomNode Configuration::toXMLDomNode(QDomDocument &domXMLDocument) const { QDomElement configurationNode = domXMLDocument.createElement(m_nodeName); - - configurationNode.setAttribute(QLatin1String("Name"), m_name); - - QHashIterator<QString, QString> it(m_anyAttribute); - - while (it.hasNext()) { - it.next(); - configurationNode.setAttribute(it.key(), it.value()); - } - - foreach (const ConfigurationTool *confTool, m_configurationTools) - configurationNode.appendChild(confTool->toXMLDomNode(domXMLDocument)); - + configurationNode.setAttribute(QLatin1String("Name"), m_fullName); + m_attributeContainer->appendToXMLNode(configurationNode); + m_tools->appendToXMLNode(configurationNode, domXMLDocument); return configurationNode; } -QString Configuration::name() const -{ - return m_name; -} - -void Configuration::setName(const QString &name) -{ - m_name = name; - emit nameChanged(); -} - -QString Configuration::attributeValue(const QString &attributeName) const -{ - return m_anyAttribute.value(attributeName); -} - -void Configuration::setAttribute(const QString &attributeName, const QString &attributeValue) +IAttributeContainer *Configuration::attributeContainer() const { - m_anyAttribute.insert(attributeName, attributeValue); + return m_attributeContainer; } -void Configuration::clearAttribute(const QString &attributeName) +QString Configuration::fullName() const { - if (m_anyAttribute.contains(attributeName)) - m_anyAttribute.insert(attributeName, QString()); + return m_fullName; } -void Configuration::removeAttribute(const QString &attributeName) +QString Configuration::name() const { - if (m_anyAttribute.contains(attributeName)) - m_anyAttribute.remove(attributeName); + return m_configurationName; } -void Configuration::addConfigurationTool(ConfigurationTool *tool) +QString Configuration::platform() const { - if (!tool || m_configurationTools.contains(tool)) - return; - - foreach (ConfigurationTool *confTool, m_configurationTools) { - if (confTool->toolDescription()->toolKey() == tool->toolDescription()->toolKey()) - return; - } - - m_configurationTools.append(tool); -} - -void Configuration::removeConfigurationTool(const QString &toolKey) -{ - QList<ConfigurationTool *>::iterator it = m_configurationTools.begin(); - - while (it != m_configurationTools.end()) { - ConfigurationTool *confTool = *it; - if (confTool && confTool->toolDescription()->toolKey() == toolKey) { - m_configurationTools.erase(it); - delete confTool; - return; - } - ++it; - } + return m_platformName; } -int Configuration::configurationToolCount() const +void Configuration::setFullName(const QString &fullName) { - return m_configurationTools.size(); + m_fullName = fullName; + emit nameChanged(); } -ConfigurationTool *Configuration::configurationTool(int index) const +void Configuration::setName(const QString &name) { - if (0 <= index && index < m_configurationTools.size()) - return m_configurationTools[index]; - return 0; + m_configurationName = name; } -ConfigurationTool *Configuration::configurationTool(const QString &toolKey) const +void Configuration::setPlatform(const QString &platform) { - foreach (ConfigurationTool *confTool, m_configurationTools) { - if (confTool && confTool->toolDescription() && confTool->toolDescription()->toolKey() == toolKey) - return confTool; - } - - return 0; + m_platformName = platform; } -Configuration::Configuration(const QString &nodeName) - : m_nodeName(nodeName) +ITools *Configuration::tools() const { + return m_tools; } void Configuration::processToolNode(const QDomNode &toolNode) { - ConfigurationTool *toolConf = 0; + ITool *toolConf = 0; QDomNamedNodeMap namedNodeMap = toolNode.toElement().attributes(); for (int i = 0; i < namedNodeMap.size(); ++i) { @@ -242,7 +185,7 @@ void Configuration::processToolNode(const QDomNode &toolNode) if (toolConf) { toolConf->processNode(toolNode); - m_configurationTools.append(toolConf); + m_tools->addTool(toolConf); // process next sibling QDomNode nextSibling = toolNode.nextSibling(); @@ -252,6 +195,11 @@ void Configuration::processToolNode(const QDomNode &toolNode) } +Configuration2003::Configuration2003(const QString &nodeName) + : Configuration(nodeName) +{ +} + Configuration2003::Configuration2003(const Configuration2003 &config) : Configuration(config) { @@ -266,17 +214,17 @@ VcNodeWidget *Configuration2003::createSettingsWidget() return new Configuration2003Widget(this); } -Configuration::Ptr Configuration2003::clone() const +IConfiguration *Configuration2003::clone() const { - return Configuration::Ptr(new Configuration2003(*this)); + return new Configuration2003(*this); } -Configuration2003::Configuration2003(const QString &nodeName) - : Configuration(nodeName) + +Configuration2005::Configuration2005(const QString &nodeName) + : Configuration2003(nodeName) { } - Configuration2005::~Configuration2005() { m_deploymentTools.clear(); @@ -305,7 +253,7 @@ Configuration2005 &Configuration2005::operator=(const Configuration2005 &config) void Configuration2005::processToolNode(const QDomNode &toolNode) { if (toolNode.nodeName() == QLatin1String("Tool")) { - ConfigurationTool *toolConf = 0; + ITool *toolConf = 0; QDomNamedNodeMap namedNodeMap = toolNode.toElement().attributes(); for (int i = 0; i < namedNodeMap.size(); ++i) { @@ -327,7 +275,7 @@ void Configuration2005::processToolNode(const QDomNode &toolNode) if (toolConf) { toolConf->processNode(toolNode); - m_configurationTools.append(toolConf); + m_tools->addTool(toolConf); } } else { DeploymentTool::Ptr deplTool(new DeploymentTool); @@ -344,16 +292,10 @@ void Configuration2005::processToolNode(const QDomNode &toolNode) QDomNode Configuration2005::toXMLDomNode(QDomDocument &domXMLDocument) const { QDomElement configurationNode = domXMLDocument.createElement(m_nodeName); - configurationNode.setAttribute(QLatin1String("Name"), m_name); - QHashIterator<QString, QString> it(m_anyAttribute); + configurationNode.setAttribute(QLatin1String("Name"), m_fullName); - while (it.hasNext()) { - it.next(); - configurationNode.setAttribute(it.key(), it.value()); - } - - foreach (const ConfigurationTool *tool, m_configurationTools) - configurationNode.appendChild(tool->toXMLDomNode(domXMLDocument)); + m_attributeContainer->appendToXMLNode(configurationNode); + m_tools->appendToXMLNode(configurationNode, domXMLDocument); foreach (const DeploymentTool::Ptr &tool, m_deploymentTools) configurationNode.appendChild(tool->toXMLDomNode(domXMLDocument)); @@ -367,9 +309,9 @@ VcNodeWidget *Configuration2005::createSettingsWidget() return new Configuration2005Widget(this); } -Configuration::Ptr Configuration2005::clone() const +IConfiguration *Configuration2005::clone() const { - return Configuration::Ptr(new Configuration2005(*this)); + return new Configuration2005(*this); } void Configuration2005::addDeploymentTool(DeploymentTool::Ptr tool) @@ -400,12 +342,12 @@ QList<DeploymentTool::Ptr> Configuration2005::deploymentTools(const QString &att return deploymentTools; } -Configuration2005::Configuration2005(const QString &nodeName) - : Configuration2003(nodeName) + +Configuration2008::Configuration2008(const QString &nodeName) + : Configuration2005(nodeName) { } - Configuration2008::Configuration2008(const Configuration2008 &config) : Configuration2005(config) { @@ -432,7 +374,7 @@ Configuration2008::~Configuration2008() void Configuration2008::processToolNode(const QDomNode &toolNode) { if (toolNode.nodeName() == QLatin1String("Tool")) { - ConfigurationTool *toolConf = 0; + ITool *toolConf = 0; QDomNamedNodeMap namedNodeMap = toolNode.toElement().attributes(); for (int i = 0; i < namedNodeMap.size(); ++i) { @@ -457,7 +399,7 @@ void Configuration2008::processToolNode(const QDomNode &toolNode) if (toolConf) { toolConf->processNode(toolNode); - m_configurationTools.append(toolConf); + m_tools->addTool(toolConf); } } @@ -483,17 +425,11 @@ QDomNode Configuration2008::toXMLDomNode(QDomDocument &domXMLDocument) const { QDomElement configurationNode = domXMLDocument.createElement(m_nodeName); - configurationNode.setAttribute(QLatin1String("Name"), m_name); + configurationNode.setAttribute(QLatin1String("Name"), m_fullName); - QHashIterator<QString, QString> it(m_anyAttribute); + m_attributeContainer->appendToXMLNode(configurationNode); - while (it.hasNext()) { - it.next(); - configurationNode.setAttribute(it.key(), it.value()); - } - - foreach (const ConfigurationTool *tool, m_configurationTools) - configurationNode.appendChild(tool->toXMLDomNode(domXMLDocument)); + m_tools->appendToXMLNode(configurationNode, domXMLDocument); foreach (const DeploymentTool::Ptr &tool, m_deploymentTools) configurationNode.appendChild(tool->toXMLDomNode(domXMLDocument)); @@ -509,9 +445,9 @@ VcNodeWidget *Configuration2008::createSettingsWidget() return new Configuration2008Widget(this); } -Configuration::Ptr Configuration2008::clone() const +IConfiguration *Configuration2008::clone() const { - return Configuration::Ptr(new Configuration2008(*this)); + return new Configuration2008(*this); } void Configuration2008::addDebuggerTool(DebuggerTool::Ptr tool) @@ -542,10 +478,5 @@ QList<DebuggerTool::Ptr> Configuration2008::debuggerTools(const QString &attribu return debuggerTools; } -Configuration2008::Configuration2008(const QString &nodeName) - : Configuration2005(nodeName) -{ -} - } // namespace Internal } // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configuration.h b/src/plugins/vcprojectmanager/vcprojectmodel/configuration.h index 11f3d4acd2..ed67ac277b 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/configuration.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/configuration.h @@ -34,82 +34,63 @@ #include "deploymenttool.h" #include "debuggertool.h" +#include "../interfaces/iconfiguration.h" namespace VcProjectManager { namespace Internal { class ConfigurationTool; +class GeneralAttributeContainer; -class Configuration : public QObject, public IVcProjectXMLNode +class Configuration : public IConfiguration { - Q_OBJECT - - friend class ConfigurationsFactory; - public: typedef QSharedPointer<Configuration> Ptr; + Configuration(const QString &nodeName); Configuration(const Configuration &config); Configuration& operator=(const Configuration &config); ~Configuration(); void processNode(const QDomNode &node); - virtual QString nodeWidgetName() const; QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const; - /*! - * Implement in order to support creating a clone of a Configuration instance. - * \return A shared pointer to newly created Configuration instance. - */ - virtual Configuration::Ptr clone() const = 0; - + // IConfiguration interface + IAttributeContainer *attributeContainer() const; + QString fullName() const; QString name() const; + QString platform() const; + void setFullName(const QString &fullName); void setName(const QString &name); - - QString attributeValue(const QString &attributeName) const; - void setAttribute(const QString &attributeName, const QString &attributeValue); - void clearAttribute(const QString &attributeName); - void removeAttribute(const QString &attributeName); - - void addConfigurationTool(ConfigurationTool *tool); - void removeConfigurationTool(const QString &toolKey); - int configurationToolCount() const; - ConfigurationTool* configurationTool(int index) const; - ConfigurationTool* configurationTool(const QString &toolKey) const; - -signals: - void nameChanged(); + void setPlatform(const QString &platform); + ITools *tools() const; protected: - Configuration(const QString &nodeName); virtual void processToolNode(const QDomNode &toolNode); void processNodeAttributes(const QDomElement &element); - QString m_name; + QString m_fullName; + QString m_platformName; + QString m_configurationName; QString m_nodeName; - QHash<QString, QString> m_anyAttribute; - QList<ConfigurationTool *> m_configurationTools; + GeneralAttributeContainer *m_attributeContainer; + ITools *m_tools; }; class Configuration2003 : public Configuration { - friend class ConfigurationsFactory; - public: + Configuration2003(const QString &nodeName); Configuration2003(const Configuration2003 &config); ~Configuration2003(); VcNodeWidget *createSettingsWidget(); - Configuration::Ptr clone() const; - -protected: - Configuration2003(const QString &nodeName); + IConfiguration *clone() const; }; class Configuration2005 : public Configuration2003 { - friend class ConfigurationsFactory; - public: + Configuration2005(const QString &nodeName); Configuration2005(const Configuration2005 &config); Configuration2005& operator=(const Configuration2005 &config); ~Configuration2005(); @@ -117,24 +98,20 @@ public: QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const; VcNodeWidget* createSettingsWidget(); - Configuration::Ptr clone() const; + IConfiguration* clone() const; void addDeploymentTool(DeploymentTool::Ptr tool); void removeDeploymentTool(DeploymentTool::Ptr tool); QList<DeploymentTool::Ptr> deploymentTools() const; QList<DeploymentTool::Ptr> deploymentTools(const QString &attributeName, const QString &attributeValue) const; -protected: - Configuration2005(const QString &nodeName); - QList<DeploymentTool::Ptr> m_deploymentTools; }; class Configuration2008 : public Configuration2005 { - friend class ConfigurationsFactory; - public: + Configuration2008(const QString &nodeName); Configuration2008(const Configuration2008 &config); Configuration2008& operator=(const Configuration2008 &config); ~Configuration2008(); @@ -142,16 +119,13 @@ public: void processToolNode(const QDomNode &toolNode); QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const; VcNodeWidget* createSettingsWidget(); - Configuration::Ptr clone() const; + IConfiguration* clone() const; void addDebuggerTool(DebuggerTool::Ptr tool); void removeDebuggerTool(DebuggerTool::Ptr tool); QList<DebuggerTool::Ptr> debuggerTools() const; QList<DebuggerTool::Ptr> debuggerTools(const QString &attributeName, const QString &attributeValue) const; -private: - Configuration2008(const QString &nodeName); - QList<DebuggerTool::Ptr> m_debuggerTools; }; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configurations.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/configurations.cpp index 40c9672fa5..1d2a3c30f8 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/configurations.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/configurations.cpp @@ -32,6 +32,7 @@ #include "configurationsfactory.h" #include "vcprojectdocument.h" #include "../widgets/configurationswidgets.h" +#include "../interfaces/iconfiguration.h" namespace VcProjectManager { namespace Internal { @@ -47,18 +48,18 @@ Configurations::Configurations(const Configurations &configs) { m_vcProjDoc = configs.m_vcProjDoc; - foreach (const Configuration::Ptr &config, configs.m_configurations) - m_configurations.append(config->clone()); + foreach (const IConfiguration *config, configs.m_configs) + m_configs.append(config->clone()); } Configurations &Configurations::operator =(const Configurations &configs) { if (this != &configs) { m_vcProjDoc = configs.m_vcProjDoc; - m_configurations.clear(); + m_configs.clear(); - foreach (const Configuration::Ptr &config, configs.m_configurations) - m_configurations.append(config->clone()); + foreach (const IConfiguration *config, configs.m_configs) + m_configs.append(config->clone()); } return *this; @@ -66,6 +67,7 @@ Configurations &Configurations::operator =(const Configurations &configs) Configurations::~Configurations() { + qDeleteAll(m_configs); } void Configurations::processNode(const QDomNode &node) @@ -90,78 +92,78 @@ QDomNode Configurations::toXMLDomNode(QDomDocument &domXMLDocument) const { QDomElement configsNode = domXMLDocument.createElement(QLatin1String("Configurations")); - foreach (const Configuration::Ptr &config, m_configurations) + foreach (const IConfiguration *config, m_configs) configsNode.appendChild(config->toXMLDomNode(domXMLDocument)); return configsNode; } -bool Configurations::isEmpty() const +void Configurations::addConfiguration(IConfiguration *config) { - return m_configurations.isEmpty(); -} - -bool Configurations::appendConfiguration(Configuration::Ptr config) -{ - if (m_configurations.contains(config)) - return false; + if (m_configs.contains(config)) + return; // if there is already a configuration with the same name - foreach (const Configuration::Ptr &conf, m_configurations) { - if (config->name() == conf->name()) - return false; + foreach (const IConfiguration *conf, m_configs) { + if (config->fullName() == conf->fullName()) + return; } - m_configurations.append(config); - return true; + m_configs.append(config); } -void Configurations::removeConfiguration(Configuration::Ptr config) +IConfiguration *Configurations::configuration(const QString &fullName) const { - m_configurations.removeAll(config); -} - -Configuration::Ptr Configurations::configuration(const QString &configName) -{ - foreach (const Configuration::Ptr &config, m_configurations) { - if (config->name() == configName) + foreach (IConfiguration *config, m_configs) { + if (config->fullName() == fullName) return config; } - return Configuration::Ptr(); + return 0; } -Configuration::Ptr Configurations::cloneConfiguration(const QString &newConfigName, const QString &configToClone) +IConfiguration *Configurations::configuration(int index) const { - // don't add new configuration if some Configuration already has a name equal to newConfigName - if (configuration(newConfigName)) - return Configuration::Ptr(); - - foreach (const Configuration::Ptr &config, m_configurations) { - if (config->name() == configToClone) { - Configuration::Ptr clonedConfig = config->clone(); - clonedConfig->setName(newConfigName); - m_configurations.append(clonedConfig); - return clonedConfig; - } - } + if (0 <= index && index < m_configs.size()) + return m_configs[index]; + return 0; +} - return Configuration::Ptr(); +int Configurations::configurationCount() const +{ + return m_configs.size(); } -Configuration::Ptr Configurations::cloneConfiguration(const QString &newConfigName, Configuration::Ptr config) +void Configurations::removeConfiguration(const QString &fullName) { - return cloneConfiguration(newConfigName, config->name()); + // if there is already a configuration with the same name + foreach (IConfiguration *conf, m_configs) { + if (conf->fullName() == fullName) { + m_configs.removeOne(conf); + delete conf; + return; + } + } } -QList<Configuration::Ptr> Configurations::configurations() const +bool Configurations::isEmpty() const { - return m_configurations; + return m_configs.isEmpty(); } void Configurations::processConfiguration(const QDomNode &configurationNode) { - Configuration::Ptr configuration = ConfigurationsFactory::createConfiguration(m_vcProjDoc->documentVersion(), QLatin1String("Configuration")); - configuration->processNode(configurationNode); - m_configurations.append(configuration); + IConfiguration *config = 0; + + if (m_vcProjDoc->documentVersion() == VcDocConstants::DV_MSVC_2003) + config = new Configuration2003(QLatin1String("Configuration")); + else if (m_vcProjDoc->documentVersion() == VcDocConstants::DV_MSVC_2005) + config = new Configuration2005(QLatin1String("Configuration")); + else if (m_vcProjDoc->documentVersion() == VcDocConstants::DV_MSVC_2008) + config = new Configuration2008(QLatin1String("Configuration")); + + if (config) { + config->processNode(configurationNode); + m_configs.append(config); + } // process next sibling QDomNode nextSibling = configurationNode.nextSibling(); diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configurations.h b/src/plugins/vcprojectmanager/vcprojectmodel/configurations.h index 06f83f4788..6fb1fb5bd7 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/configurations.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/configurations.h @@ -34,13 +34,14 @@ #include "configuration.h" #include "vcprojectdocument_constants.h" +#include "../interfaces/iconfigurations.h" namespace VcProjectManager { namespace Internal { class VcProjectDocument; -class Configurations : public IVcProjectXMLNode +class Configurations : public IVcProjectXMLNode, public IConfigurations { public: typedef QSharedPointer<Configurations> Ptr; @@ -54,20 +55,20 @@ public: VcNodeWidget* createSettingsWidget(); QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const; - bool isEmpty() const; + // IConfigurations interface + void addConfiguration(IConfiguration *config); + IConfiguration *configuration(const QString &fullName) const; + IConfiguration *configuration(int index) const; + int configurationCount() const; + void removeConfiguration(const QString &fullName); - bool appendConfiguration(Configuration::Ptr config); - void removeConfiguration(Configuration::Ptr config); - Configuration::Ptr configuration(const QString &configName); - Configuration::Ptr cloneConfiguration(const QString &newConfigName, const QString &configToClone); - Configuration::Ptr cloneConfiguration(const QString &newConfigName, Configuration::Ptr config); - QList<Configuration::Ptr> configurations() const; + bool isEmpty() const; private: void processConfiguration(const QDomNode &configurationNode); - QList<Configuration::Ptr> m_configurations; VcProjectDocument *m_vcProjDoc; + QList<IConfiguration *> m_configs; }; } // namespace Internal diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configurationtools.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/configurationtools.cpp new file mode 100644 index 0000000000..c98a6c91ec --- /dev/null +++ b/src/plugins/vcprojectmanager/vcprojectmodel/configurationtools.cpp @@ -0,0 +1,113 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 "configurationtools.h" +#include "../interfaces/itool.h" +#include "../interfaces/itooldescription.h" + +namespace VcProjectManager { +namespace Internal { + +ConfigurationTools::ConfigurationTools() +{ +} + +ITools &ConfigurationTools::operator =(const ITools &tools) +{ + if (this != &tools) { + qDeleteAll(m_tools); + m_tools.clear(); + + for (int i = 0; i < tools.toolCount(); ++i) { + ITool *tool = tools.tool(i); + + if (tool) + m_tools.append(tool->clone()); + } + } + + return *this; +} + +void ConfigurationTools::addTool(ITool *tool) +{ + if (!tool || m_tools.contains(tool)) + return; + + foreach (ITool *toolPtr, m_tools) { + if (toolPtr->toolDescription()->toolKey() == tool->toolDescription()->toolKey()) + return; + } + + m_tools.append(tool); +} + +void ConfigurationTools::removeTool(ITool *tool) +{ + foreach (ITool *toolPtr, m_tools) { + if (toolPtr->toolDescription()->toolKey() == tool->toolDescription()->toolKey()) { + m_tools.removeOne(toolPtr); + delete toolPtr; + return; + } + } +} + +ITool *ConfigurationTools::tool(const QString &toolKey) const +{ + foreach (ITool *toolPtr, m_tools) { + if (toolPtr->toolDescription()->toolKey() == toolKey) { + return toolPtr; + } + } + + return 0; +} + +ITool *ConfigurationTools::tool(int index) const +{ + if (0 <= index && index < m_tools.size()) + return m_tools[index]; + + return 0; +} + +int ConfigurationTools::toolCount() const +{ + return m_tools.size(); +} + +void ConfigurationTools::appendToXMLNode(QDomElement &domElement, QDomDocument &domDocument) const +{ + foreach (const ITool *confTool, m_tools) + domElement.appendChild(confTool->toXMLDomNode(domDocument)); +} + +} // namespace Internal +} // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configurationtools.h b/src/plugins/vcprojectmanager/vcprojectmodel/configurationtools.h new file mode 100644 index 0000000000..59ccb4ee96 --- /dev/null +++ b/src/plugins/vcprojectmanager/vcprojectmodel/configurationtools.h @@ -0,0 +1,61 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_INTERNAL_CONFIGURATIONTOOLS_H +#define VCPROJECTMANAGER_INTERNAL_CONFIGURATIONTOOLS_H + +#include "../interfaces/itools.h" + +#include <QList> + +namespace VcProjectManager { +namespace Internal { + +class ConfigurationTools : public ITools +{ +public: + ConfigurationTools(); + + // ITools interface + ITools &operator =(const ITools &tools); + void addTool(ITool *tool); + void removeTool(ITool *tool); + ITool *tool(const QString &toolKey) const; + ITool *tool(int index) const; + int toolCount() const; + void appendToXMLNode(QDomElement &domElement, QDomDocument &domDocument) const; + +private: + QList<ITool *> m_tools; +}; + +} // namespace Internal +} // namespace VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_CONFIGURATIONTOOLS_H diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp index 89ab7364fa..97f7f80552 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp @@ -52,7 +52,7 @@ File::File(const File &file) foreach (const File::Ptr &f, file.m_files) m_files.append(File::Ptr(new File(*f))); - foreach (const Configuration::Ptr &fileConfig, m_fileConfigurations) + foreach (const IConfiguration *fileConfig, m_fileConfigurations) m_fileConfigurations.append(fileConfig->clone()); } @@ -68,7 +68,7 @@ File &File::operator =(const File &file) foreach (const File::Ptr &f, file.m_files) m_files.append(File::Ptr(new File(*f))); - foreach (const Configuration::Ptr &fileConfig, m_fileConfigurations) + foreach (const IConfiguration *fileConfig, m_fileConfigurations) m_fileConfigurations.append(fileConfig->clone()); } return *this; @@ -77,7 +77,7 @@ File &File::operator =(const File &file) File::~File() { m_files.clear(); - m_fileConfigurations.clear(); + qDeleteAll(m_fileConfigurations); } void File::processNode(const QDomNode &node) @@ -120,7 +120,7 @@ QDomNode File::toXMLDomNode(QDomDocument &domXMLDocument) const foreach (const File::Ptr &file, m_files) fileNode.appendChild(file->toXMLDomNode(domXMLDocument)); - foreach (const Configuration::Ptr &fileConfig, m_fileConfigurations) + foreach (const IConfiguration *fileConfig, m_fileConfigurations) fileNode.appendChild(fileConfig->toXMLDomNode(domXMLDocument)); return fileNode; @@ -139,30 +139,40 @@ void File::removeFile(File::Ptr file) m_files.removeAll(file); } -void File::addFileConfiguration(Configuration::Ptr fileConfig) +void File::addFileConfiguration(IConfiguration *fileConfig) { - if (m_fileConfigurations.contains(fileConfig)) + if (!fileConfig) return; + + foreach (const IConfiguration *configPtr, m_fileConfigurations) { + if (configPtr->fullName() == fileConfig->fullName()) + return; + } m_fileConfigurations.append(fileConfig); } -void File::removeFileConfiguration(Configuration::Ptr fileConfig) +void File::removeFileConfiguration(IConfiguration *fileConfig) { - if (m_fileConfigurations.contains(fileConfig)) - m_fileConfigurations.removeAll(fileConfig); + foreach (IConfiguration *configPtr, m_fileConfigurations) { + if (configPtr->fullName() == fileConfig->fullName()) { + m_fileConfigurations.removeOne(configPtr); + delete configPtr; + return; + } + } } -Configuration::Ptr File::fileConfiguration(const QString &name) const +IConfiguration* File::fileConfiguration(const QString &name) const { - foreach (const Configuration::Ptr configPtr, m_fileConfigurations) { - if (configPtr->name() == name) + foreach (IConfiguration *configPtr, m_fileConfigurations) { + if (configPtr->fullName() == name) return configPtr; } - return Configuration::Ptr(); + return 0; } -QList<Configuration::Ptr> File::fileConfigurations() const +QList<IConfiguration *> File::fileConfigurations() const { return m_fileConfigurations; } @@ -233,9 +243,18 @@ QString File::canonicalPath() const void File::processFileConfiguration(const QDomNode &fileConfigNode) { - Configuration::Ptr fileConfig = ConfigurationsFactory::createConfiguration(m_parentProjectDoc->documentVersion(), QLatin1String("FileConfiguration")); - fileConfig->processNode(fileConfigNode); - m_fileConfigurations.append(fileConfig); + IConfiguration *fileConfig = 0; + if (m_parentProjectDoc->documentVersion() == VcDocConstants::DV_MSVC_2003) + fileConfig = new Configuration2003(QLatin1String("FileConfiguration")); + else if (m_parentProjectDoc->documentVersion() == VcDocConstants::DV_MSVC_2005) + fileConfig = new Configuration2005(QLatin1String("FileConfiguration")); + else if (m_parentProjectDoc->documentVersion() == VcDocConstants::DV_MSVC_2008) + fileConfig = new Configuration2008(QLatin1String("FileConfiguration")); + + if (fileConfig) { + fileConfig->processNode(fileConfigNode); + m_fileConfigurations.append(fileConfig); + } // process next sibling QDomNode nextSibling = fileConfigNode.nextSibling(); diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/file.h b/src/plugins/vcprojectmanager/vcprojectmodel/file.h index a812d29327..8c6ddea35d 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/file.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/file.h @@ -57,10 +57,10 @@ public: void addFile(File::Ptr file); void removeFile(File::Ptr file); - void addFileConfiguration(Configuration::Ptr fileConfig); - void removeFileConfiguration(Configuration::Ptr fileConfig); - Configuration::Ptr fileConfiguration(const QString &name) const; - QList<Configuration::Ptr> fileConfigurations() const; + void addFileConfiguration(IConfiguration *fileConfig); + void removeFileConfiguration(IConfiguration *fileConfig); + IConfiguration *fileConfiguration(const QString &name) const; + QList<IConfiguration*> fileConfigurations() const; QString attributeValue(const QString &attributeName) const; void setAttribute(const QString &attributeName, const QString &attributeValue); @@ -79,7 +79,7 @@ private: QString m_relativePath; // required QList<QSharedPointer<File> > m_files; - QList<Configuration::Ptr> m_fileConfigurations; + QList<IConfiguration*> m_fileConfigurations; QHash<QString, QString> m_anyAttribute; VcProjectDocument *m_parentProjectDoc; }; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/generalattributecontainer.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/generalattributecontainer.cpp new file mode 100644 index 0000000000..c0ccc50342 --- /dev/null +++ b/src/plugins/vcprojectmanager/vcprojectmodel/generalattributecontainer.cpp @@ -0,0 +1,111 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 "generalattributecontainer.h" + +namespace VcProjectManager { +namespace Internal { + +GeneralAttributeContainer::GeneralAttributeContainer() +{ +} + +GeneralAttributeContainer::GeneralAttributeContainer(const GeneralAttributeContainer &attrCont) +{ + m_anyAttribute = attrCont.m_anyAttribute; +} + +GeneralAttributeContainer &GeneralAttributeContainer::operator=(const GeneralAttributeContainer &attrCont) +{ + if (this != &attrCont) { + m_anyAttribute.clear(); + for (int i = 0; i < attrCont.getAttributeCount(); ++i) { + QString attrName = attrCont.getAttributeName(i); + m_anyAttribute.insert(attrName, attrCont.attributeValue(attrName)); + } + } + + return *this; +} + +QString GeneralAttributeContainer::attributeValue(const QString &attributeName) const +{ + return m_anyAttribute.value(attributeName); +} + +void GeneralAttributeContainer::clearAttribute(const QString &attributeName) +{ + if (m_anyAttribute.contains(attributeName)) + m_anyAttribute.insert(attributeName, QString()); +} + +void GeneralAttributeContainer::removeAttribute(const QString &attributeName) +{ + m_anyAttribute.remove(attributeName); +} + +void GeneralAttributeContainer::setAttribute(const QString &attributeName, const QString &attributeValue) +{ + m_anyAttribute.insert(attributeName, attributeValue); +} + +QString GeneralAttributeContainer::getAttributeName(int index) const +{ + QHashIterator<QString, QString> it(m_anyAttribute); + + index++; + + while (it.hasNext() && index) { + it.next(); + --index; + } + + if (!index) + return it.key(); + + return QString(); +} + +int GeneralAttributeContainer::getAttributeCount() const +{ + return m_anyAttribute.size(); +} + +void GeneralAttributeContainer::appendToXMLNode(QDomElement &elementNode) const +{ + QHashIterator<QString, QString> it(m_anyAttribute); + + while (it.hasNext()) { + it.next(); + elementNode.setAttribute(it.key(), it.value()); + } +} + +} // namespace Internal +} // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/generalattributecontainer.h b/src/plugins/vcprojectmanager/vcprojectmodel/generalattributecontainer.h new file mode 100644 index 0000000000..b718a3f0d4 --- /dev/null +++ b/src/plugins/vcprojectmanager/vcprojectmodel/generalattributecontainer.h @@ -0,0 +1,61 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_INTERNAL_GENERALATTRIBUTEHANDLER_H +#define VCPROJECTMANAGER_INTERNAL_GENERALATTRIBUTEHANDLER_H + +#include "../interfaces/iattributecontainer.h" + +#include <QHash> + +namespace VcProjectManager { +namespace Internal { + +class GeneralAttributeContainer : public IAttributeContainer +{ +public: + GeneralAttributeContainer(); + GeneralAttributeContainer(const GeneralAttributeContainer &attrCont); + GeneralAttributeContainer& operator=(const GeneralAttributeContainer &attrCont); + QString attributeValue(const QString &attributeName) const; + void clearAttribute(const QString &attributeName); + void removeAttribute(const QString &attributeName); + void setAttribute(const QString &attributeName, const QString &attributeValue); + QString getAttributeName(int index) const; + int getAttributeCount() const; + void appendToXMLNode(QDomElement &elementNode) const; + +private: + QHash<QString, QString> m_anyAttribute; +}; + +} // namespace Internal +} // namespace VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_GENERALATTRIBUTEHANDLER_H diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/ivcprojectnodemodel.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/ivcprojectnodemodel.cpp index 6875bfb2c2..523354ce13 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/ivcprojectnodemodel.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/ivcprojectnodemodel.cpp @@ -32,10 +32,6 @@ namespace VcProjectManager { namespace Internal { -IVcProjectXMLNode::IVcProjectXMLNode() -{ -} - IVcProjectXMLNode::~IVcProjectXMLNode() { } diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/ivcprojectnodemodel.h b/src/plugins/vcprojectmanager/vcprojectmodel/ivcprojectnodemodel.h index 52a3a37a24..91ccca37d4 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/ivcprojectnodemodel.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/ivcprojectnodemodel.h @@ -40,7 +40,6 @@ class VcNodeWidget; class IVcProjectXMLNode { public: - IVcProjectXMLNode(); virtual ~IVcProjectXMLNode(); /*! diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.cpp index ee228f6672..b25f0c5aaa 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.cpp @@ -72,12 +72,12 @@ void ProjectReference::setReferencedProjectIdentifier(const QString &referencedP m_private->setReferencedProjectIdentifier(referencedProjectIdentifier); } -void ProjectReference::addReferenceConfiguration(Configuration::Ptr refConfig) +void ProjectReference::addReferenceConfiguration(IConfiguration *refConfig) { m_private->addReferenceConfiguration(refConfig); } -void ProjectReference::removeReferenceConfiguration(Configuration::Ptr refConfig) +void ProjectReference::removeReferenceConfiguration(IConfiguration *refConfig) { m_private->removeReferenceConfiguration(refConfig); } @@ -87,12 +87,12 @@ void ProjectReference::removeReferenceConfiguration(const QString &refConfigName m_private->removeReferenceConfiguration(refConfigName); } -QList<Configuration::Ptr> ProjectReference::referenceConfigurations() const +QList<IConfiguration*> ProjectReference::referenceConfigurations() const { return m_private->referenceConfigurations(); } -Configuration::Ptr ProjectReference::referenceConfiguration(const QString &refConfigName) const +IConfiguration* ProjectReference::referenceConfiguration(const QString &refConfigName) const { return m_private->referenceConfiguration(refConfigName); } diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.h b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.h index 08ada5a5b1..433ff777fa 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.h @@ -60,11 +60,11 @@ public: void setName(const QString &name); QString referencedProjectIdentifier() const; void setReferencedProjectIdentifier(const QString &referencedProjectIdentifier); - void addReferenceConfiguration(Configuration::Ptr refConfig); - void removeReferenceConfiguration(Configuration::Ptr refConfig); + void addReferenceConfiguration(IConfiguration *refConfig); + void removeReferenceConfiguration(IConfiguration *refConfig); void removeReferenceConfiguration(const QString &refConfigName); - QList<Configuration::Ptr> referenceConfigurations() const; - Configuration::Ptr referenceConfiguration(const QString &refConfigName) const; + QList<IConfiguration *> referenceConfigurations() const; + IConfiguration *referenceConfiguration(const QString &refConfigName) const; protected: ProjectReference(); diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference_private.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference_private.cpp index d2be4d259d..1b365da45d 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference_private.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference_private.cpp @@ -38,7 +38,7 @@ namespace Internal { ProjectReference_Private::~ProjectReference_Private() { - m_referenceConfigurations.clear(); + qDeleteAll(m_referenceConfigurations); } void ProjectReference_Private::processNode(const QDomNode &node) @@ -63,7 +63,7 @@ QDomNode ProjectReference_Private::toXMLDomNode(QDomDocument &domXMLDocument) co projRefNode.setAttribute(QLatin1String("Name"), m_name); projRefNode.setAttribute(QLatin1String("ReferencedProjectIdentifier"), m_referencedProjectIdentifier); - foreach (const Configuration::Ptr &refConfig, m_referenceConfigurations) + foreach (const IConfiguration *refConfig, m_referenceConfigurations) projRefNode.appendChild(refConfig->toXMLDomNode(domXMLDocument)); return projRefNode; @@ -89,46 +89,47 @@ void ProjectReference_Private::setReferencedProjectIdentifier(const QString &ref m_referencedProjectIdentifier = referencedProjectIdentifier; } -void ProjectReference_Private::addReferenceConfiguration(Configuration::Ptr refConfig) +void ProjectReference_Private::addReferenceConfiguration(IConfiguration *refConfig) { if (m_referenceConfigurations.contains(refConfig)) return; // Don't add configuration with the same name - foreach (const Configuration::Ptr &refConf, m_referenceConfigurations) { - if (refConfig->name() == refConf->name()) + foreach (const IConfiguration *refConf, m_referenceConfigurations) { + if (refConfig->fullName() == refConf->fullName()) return; } m_referenceConfigurations.append(refConfig); } -void ProjectReference_Private::removeReferenceConfiguration(Configuration::Ptr refConfig) +void ProjectReference_Private::removeReferenceConfiguration(IConfiguration *refConfig) { m_referenceConfigurations.removeAll(refConfig); } void ProjectReference_Private::removeReferenceConfiguration(const QString &refConfigName) { - foreach (const Configuration::Ptr &refConfig, m_referenceConfigurations) { - if (refConfig->name() == refConfigName) { - removeReferenceConfiguration(refConfig); + foreach (IConfiguration *refConfig, m_referenceConfigurations) { + if (refConfig->fullName() == refConfigName) { + m_referenceConfigurations.removeOne(refConfig); + delete refConfig; return; } } } -QList<Configuration::Ptr> ProjectReference_Private::referenceConfigurations() const +QList<IConfiguration*> ProjectReference_Private::referenceConfigurations() const { return m_referenceConfigurations; } -Configuration::Ptr ProjectReference_Private::referenceConfiguration(const QString &refConfigName) const +IConfiguration* ProjectReference_Private::referenceConfiguration(const QString &refConfigName) const { - foreach (const Configuration::Ptr &refConfig, m_referenceConfigurations) { - if (refConfig->name() == refConfigName) + foreach (IConfiguration *refConfig, m_referenceConfigurations) { + if (refConfig->fullName() == refConfigName) return refConfig; } - return Configuration::Ptr(); + return 0; } ProjectReference_Private::ProjectReference_Private() @@ -140,7 +141,7 @@ ProjectReference_Private::ProjectReference_Private(const ProjectReference_Privat m_referencedProjectIdentifier = projRef_p.m_referencedProjectIdentifier; m_name = projRef_p.m_name; - foreach (const Configuration::Ptr &refConfig, projRef_p.m_referenceConfigurations) + foreach (const IConfiguration *refConfig, projRef_p.m_referenceConfigurations) m_referenceConfigurations.append(refConfig->clone()); } @@ -151,7 +152,7 @@ ProjectReference_Private &ProjectReference_Private::operator =(const ProjectRefe m_name = projRef_p.m_name; m_referenceConfigurations.clear(); - foreach (const Configuration::Ptr &refConfig, projRef_p.m_referenceConfigurations) + foreach (const IConfiguration *refConfig, projRef_p.m_referenceConfigurations) m_referenceConfigurations.append(refConfig->clone()); } return *this; @@ -159,7 +160,7 @@ ProjectReference_Private &ProjectReference_Private::operator =(const ProjectRefe void ProjectReference_Private::processReferenceConfig(const QDomNode &referenceConfig) { - Configuration::Ptr referenceConfiguration = createReferenceConfiguration(); + IConfiguration *referenceConfiguration = createReferenceConfiguration(); referenceConfiguration->processNode(referenceConfig); m_referenceConfigurations.append(referenceConfiguration); @@ -213,9 +214,9 @@ ProjectReference2003_Private &ProjectReference2003_Private::operator =(const Pro return *this; } -Configuration::Ptr ProjectReference2003_Private::createReferenceConfiguration() const +IConfiguration *ProjectReference2003_Private::createReferenceConfiguration() const { - return ConfigurationsFactory::createConfiguration(VcDocConstants::DV_MSVC_2003, QLatin1String("ReferenceConfiguration")); + return new Configuration2003(QLatin1String("ReferenceConfiguration")); } @@ -312,9 +313,9 @@ void ProjectReference2005_Private::processNodeAttributes(const QDomElement &elem } } -Configuration::Ptr ProjectReference2005_Private::createReferenceConfiguration() const +IConfiguration *ProjectReference2005_Private::createReferenceConfiguration() const { - return ConfigurationsFactory::createConfiguration(VcDocConstants::DV_MSVC_2005, QLatin1String("ReferenceConfiguration")); + return new Configuration2005(QLatin1String("ReferenceConfiguration")); } @@ -433,9 +434,9 @@ void ProjectReference2008_Private::processNodeAttributes(const QDomElement &elem } } -Configuration::Ptr ProjectReference2008_Private::createReferenceConfiguration() const +IConfiguration *ProjectReference2008_Private::createReferenceConfiguration() const { - return ConfigurationsFactory::createConfiguration(VcDocConstants::DV_MSVC_2008, QLatin1String("ReferenceConfiguration")); + return new Configuration2008(QLatin1String("ReferenceConfiguration")); } } // namespace Internal diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference_private.h b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference_private.h index 925f067d44..44056de2a0 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference_private.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference_private.h @@ -57,11 +57,11 @@ public: void setName(const QString &name); QString referencedProjectIdentifier() const; void setReferencedProjectIdentifier(const QString &referencedProjectIdentifier); - void addReferenceConfiguration(Configuration::Ptr refConfig); - void removeReferenceConfiguration(Configuration::Ptr refConfig); + void addReferenceConfiguration(IConfiguration *refConfig); + void removeReferenceConfiguration(IConfiguration *refConfig); void removeReferenceConfiguration(const QString &refConfigName); - QList<Configuration::Ptr> referenceConfigurations() const; - Configuration::Ptr referenceConfiguration(const QString &refConfigName) const; + QList<IConfiguration *> referenceConfigurations() const; + IConfiguration *referenceConfiguration(const QString &refConfigName) const; protected: ProjectReference_Private(); @@ -72,11 +72,11 @@ protected: /*! * Reimplement this to create a new reference configuration. - * \return A shared pointer to a newly created reference configuration. + * \return A pointer to a newly created reference configuration. */ - virtual Configuration::Ptr createReferenceConfiguration() const = 0; + virtual IConfiguration* createReferenceConfiguration() const = 0; - QList<Configuration::Ptr> m_referenceConfigurations; + QList<IConfiguration *> m_referenceConfigurations; QString m_referencedProjectIdentifier; // required QString m_name; // optional }; @@ -93,7 +93,7 @@ protected: ProjectReference2003_Private(); ProjectReference2003_Private(const ProjectReference2003_Private &projRef_p); ProjectReference2003_Private& operator=(const ProjectReference2003_Private &projRef_p); - Configuration::Ptr createReferenceConfiguration() const; + IConfiguration* createReferenceConfiguration() const; }; class ProjectReference2005_Private : public ProjectReference2003_Private @@ -118,7 +118,7 @@ protected: ProjectReference2005_Private(const ProjectReference2005_Private &projRef_p); ProjectReference2005_Private& operator=(const ProjectReference2005_Private &projRef_p); void processNodeAttributes(const QDomElement &element); - Configuration::Ptr createReferenceConfiguration() const; + IConfiguration* createReferenceConfiguration() const; QString m_copyLocal; // optional bool m_useInBuild; // optional @@ -149,7 +149,7 @@ protected: ProjectReference2008_Private(const ProjectReference2008_Private &projRef_p); ProjectReference2008_Private& operator=(const ProjectReference2008_Private &projRef_p); void processNodeAttributes(const QDomElement &element); - Configuration::Ptr createReferenceConfiguration() const; + IConfiguration* createReferenceConfiguration() const; QString m_relativePathToProject; // optional bool m_useDependenciesInBuild; //optional default: true diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/configurationtool.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/tools/configurationtool.cpp index 878a5ce12c..bb29466ceb 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/configurationtool.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/configurationtool.cpp @@ -28,38 +28,37 @@ ** ****************************************************************************/ #include "configurationtool.h" -#include "toolattributes/itoolattribute.h" -#include "toolattributes/iattributedescriptiondataitem.h" +#include "../../interfaces/itoolattribute.h" +#include "../../interfaces/iattributedescriptiondataitem.h" #include "toolattributes/tooldescriptiondatamanager.h" #include "toolattributes/tooldescription.h" #include "toolsectiondescription.h" #include "toolsection.h" +#include "toolattributes/toolsectioncontainer.h" namespace VcProjectManager { namespace Internal { -ConfigurationTool::ConfigurationTool(ToolDescription *toolDesc) +ConfigurationTool::ConfigurationTool(const IToolDescription *toolDesc) : m_toolDesc(toolDesc) { + m_sectionContainer = new ToolSectionContainer; for (int i = 0; i < toolDesc->sectionDescriptionCount(); ++i) { if (toolDesc->sectionDescription(i)) - m_toolSections.append(toolDesc->sectionDescription(i)->createToolSection()); + m_sectionContainer->appendSection(toolDesc->sectionDescription(i)->createToolSection()); } } ConfigurationTool::ConfigurationTool(const ConfigurationTool &tool) { - qDeleteAll(m_toolSections); - m_toolSections.clear(); - m_toolDesc = tool.m_toolDesc; - foreach (ToolSection *toolSec, tool.m_toolSections) - m_toolSections.append(new ToolSection(*toolSec)); + m_sectionContainer = new ToolSectionContainer; + *m_sectionContainer = *(tool.m_sectionContainer); } ConfigurationTool::~ConfigurationTool() { - qDeleteAll(m_toolSections); + delete m_sectionContainer; } void ConfigurationTool::processNode(const QDomNode &node) @@ -75,71 +74,26 @@ QDomNode ConfigurationTool::toXMLDomNode(QDomDocument &domXMLDocument) const { QDomElement toolNode = domXMLDocument.createElement(QLatin1String("Tool")); toolNode.setAttribute(QLatin1String("Name"), m_toolDesc->toolKey()); - - foreach (ToolSection *toolSection, m_toolSections) { - if (toolSection) { - for (int i = 0; i < toolSection->toolAttributeCount(); ++i) { - IToolAttribute *toolAttr = toolSection->toolAttribute(i); - - if (toolAttr && toolAttr->isUsed()) - toolNode.setAttribute(toolAttr->descriptionDataItem()->key(), toolAttr->value()); - } - } - } - + m_sectionContainer->appendToXMLNode(toolNode); return toolNode; } -ToolDescription *ConfigurationTool::toolDescription() const +const IToolDescription *ConfigurationTool::toolDescription() const { return m_toolDesc; } -ToolSection *ConfigurationTool::section(int index) const -{ - if (0 <= index && index < m_toolSections.size()) - return m_toolSections[index]; - return 0; -} - -int ConfigurationTool::sectionCount() const -{ - return m_toolSections.size(); -} - -void ConfigurationTool::appendSection(ToolSection *section) -{ - if (!section) - return; - - foreach (ToolSection *sec, m_toolSections) { - if (sec && sec->sectionDescription()->name() == section->sectionDescription()->name()) - return; - } - m_toolSections.append(section); -} - -void ConfigurationTool::removeSection(const QString §ionName) +VcNodeWidget *ConfigurationTool::createSettingsWidget() { - QList<ToolSection *>::iterator it = m_toolSections.begin(); - - while (it != m_toolSections.end()) { - ToolSection *sec = *it; - if (sec && sec->sectionDescription()->name() == sectionName) { - m_toolSections.erase(it); - delete sec; - return; - } - ++it; - } + return new ToolSettingsWidget(this); } -VcNodeWidget *ConfigurationTool::createSettingsWidget() +ISectionContainer *ConfigurationTool::sectionContainer() const { - return new ToolSettingsWidget(this); + return m_sectionContainer; } -ConfigurationTool *ConfigurationTool::clone() +ITool *ConfigurationTool::clone() const { return new ConfigurationTool(*this); } @@ -155,11 +109,14 @@ void ConfigurationTool::processNodeAttributes(const QDomElement &domElement) QDomAttr domElement = domNode.toAttr(); if (domElement.name() != QLatin1String("Name")) { - foreach (ToolSection *toolSection, m_toolSections) { - IToolAttribute *toolAttr = toolSection->toolAttribute(domElement.name()); - - if (toolAttr) - toolAttr->setValue(domElement.value()); + for (int i = 0; i < m_sectionContainer->sectionCount(); ++i) { + IToolSection *toolSection = m_sectionContainer->section(i); + if (toolSection) { + IToolAttribute *toolAttr = toolSection->toolAttribute(domElement.name()); + + if (toolAttr) + toolAttr->setValue(domElement.value()); + } } } } diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/configurationtool.h b/src/plugins/vcprojectmanager/vcprojectmodel/tools/configurationtool.h index 2a30d98b53..c9411a7139 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/configurationtool.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/configurationtool.h @@ -32,6 +32,7 @@ #include "../ivcprojectnodemodel.h" #include "../../widgets/toolwidgets/toolsettingswidget.h" +#include "../../interfaces/itool.h" #include <QList> #include <QString> @@ -43,10 +44,10 @@ class IToolAttribute; class ToolDescription; class ToolSection; -class ConfigurationTool : public IVcProjectXMLNode +class ConfigurationTool : public ITool { public: - ConfigurationTool(ToolDescription* toolDesc); + ConfigurationTool(const IToolDescription* toolDesc); ConfigurationTool(const ConfigurationTool &tool); virtual ~ConfigurationTool(); @@ -54,22 +55,17 @@ public: void processNode(const QDomNode &node); QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const; - ToolDescription* toolDescription() const; - - ToolSection* section(int index) const; - int sectionCount() const; - void appendSection(ToolSection *section); - void removeSection(const QString §ionName); - + const IToolDescription *toolDescription() const; VcNodeWidget* createSettingsWidget(); - ConfigurationTool *clone(); + ISectionContainer *sectionContainer() const; + ITool *clone() const; private: void processNodeAttributes(const QDomElement &domElement); - QList<ToolSection *> m_toolSections; - ToolDescription *m_toolDesc; + const IToolDescription *m_toolDesc; + ISectionContainer *m_sectionContainer; }; } // namespace Internal diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/attributedescriptiondataitem.h b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/attributedescriptiondataitem.h index cbbd11b245..f6a40b25a8 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/attributedescriptiondataitem.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/attributedescriptiondataitem.h @@ -32,7 +32,7 @@ #include <QHash> -#include "iattributedescriptiondataitem.h" +#include "../../../interfaces/iattributedescriptiondataitem.h" namespace VcProjectManager { namespace Internal { diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/booltoolattribute.h b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/booltoolattribute.h index e906b30ee9..d2c340bfd4 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/booltoolattribute.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/booltoolattribute.h @@ -30,7 +30,7 @@ #ifndef VCPROJECTMANAGER_INTERNAL_BOOLTOOLATTRIBUTE_H #define VCPROJECTMANAGER_INTERNAL_BOOLTOOLATTRIBUTE_H -#include "itoolattribute.h" +#include "../../../interfaces/itoolattribute.h" namespace VcProjectManager { namespace Internal { diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/integertoolattribute.h b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/integertoolattribute.h index a6689c8c81..58d693eccf 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/integertoolattribute.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/integertoolattribute.h @@ -30,7 +30,7 @@ #ifndef VCPROJECTMANAGER_INTERNAL_INTEGERTOOLATTRIBUTE_H #define VCPROJECTMANAGER_INTERNAL_INTEGERTOOLATTRIBUTE_H -#include "itoolattribute.h" +#include "../../../interfaces/itoolattribute.h" namespace VcProjectManager { namespace Internal { diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/stringlisttoolattribute.h b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/stringlisttoolattribute.h index 9333fec010..db597f384b 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/stringlisttoolattribute.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/stringlisttoolattribute.h @@ -30,7 +30,7 @@ #ifndef VCPROJECTMANAGER_INTERNAL_STRINGLISTTOOLATTRIBUTE_H #define VCPROJECTMANAGER_INTERNAL_STRINGLISTTOOLATTRIBUTE_H -#include "itoolattribute.h" +#include "../../../interfaces/itoolattribute.h" namespace VcProjectManager { namespace Internal { diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/stringtoolattribute.h b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/stringtoolattribute.h index c072a7acfe..376b893810 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/stringtoolattribute.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/stringtoolattribute.h @@ -30,7 +30,7 @@ #ifndef VCPROJECTMANAGER_INTERNAL_STRINGTOOLATTRIBUTE_H #define VCPROJECTMANAGER_INTERNAL_STRINGTOOLATTRIBUTE_H -#include "itoolattribute.h" +#include "../../../interfaces/itoolattribute.h" namespace VcProjectManager { namespace Internal { diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/tooldescription.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/tooldescription.cpp index 721efad564..bc8a2a3880 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/tooldescription.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/tooldescription.cpp @@ -28,8 +28,8 @@ ** ****************************************************************************/ #include "tooldescription.h" -#include "itoolattribute.h" -#include "iattributedescriptiondataitem.h" +#include "../../../interfaces/itoolattribute.h" +#include "../../../interfaces/iattributedescriptiondataitem.h" #include "../configurationtool.h" #include "../toolsectiondescription.h" @@ -44,7 +44,7 @@ ToolDescription::~ToolDescription() { } -ToolSectionDescription *ToolDescription::sectionDescription(int index) const +IToolSectionDescription *ToolDescription::sectionDescription(int index) const { if (0 <= index && index < m_sectionDescriptions.size()) return m_sectionDescriptions[index]; @@ -57,7 +57,7 @@ int ToolDescription::sectionDescriptionCount() const return m_sectionDescriptions.size(); } -void ToolDescription::removeSectionDescription(ToolSectionDescription *sectionDescription) +void ToolDescription::removeSectionDescription(IToolSectionDescription *sectionDescription) { if (!sectionDescription) return; @@ -68,7 +68,7 @@ void ToolDescription::removeSectionDescription(ToolSectionDescription *sectionDe return; } - foreach (ToolSectionDescription* toolSectionDesc, m_sectionDescriptions) { + foreach (IToolSectionDescription* toolSectionDesc, m_sectionDescriptions) { if (toolSectionDesc->name() == sectionDescription->name()) { m_sectionDescriptions.removeOne(sectionDescription); delete sectionDescription; @@ -77,9 +77,9 @@ void ToolDescription::removeSectionDescription(ToolSectionDescription *sectionDe } } -void ToolDescription::addSectionDescription(ToolSectionDescription *sectionDescription) +void ToolDescription::addSectionDescription(IToolSectionDescription *sectionDescription) { - foreach (ToolSectionDescription* toolSectionDesc, m_sectionDescriptions) { + foreach (IToolSectionDescription* toolSectionDesc, m_sectionDescriptions) { if (toolSectionDesc->name() == sectionDescription->name()) return; } @@ -107,7 +107,7 @@ void ToolDescription::setToolDisplayName(const QString &toolName) m_displayName = toolName; } -ConfigurationTool *ToolDescription::createTool() +ITool *ToolDescription::createTool() const { return new ConfigurationTool(this); } diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/tooldescription.h b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/tooldescription.h index 1613a0baa0..557cc8a8f5 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/tooldescription.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/tooldescription.h @@ -31,6 +31,7 @@ #define VCPROJECTMANAGER_INTERNAL_TOOLDESCRIPTION_H #include <QString> +#include "../../../interfaces/itooldescription.h" namespace VcProjectManager { namespace Internal { @@ -39,16 +40,16 @@ class IAttributeDescriptionDataItem; class ConfigurationTool; class ToolSectionDescription; -class ToolDescription +class ToolDescription : public IToolDescription { public: ToolDescription(); ~ToolDescription(); int sectionDescriptionCount() const; - ToolSectionDescription *sectionDescription(int index) const; - void addSectionDescription(ToolSectionDescription *sectionDescription); - void removeSectionDescription(ToolSectionDescription *sectionDescription); + IToolSectionDescription *sectionDescription(int index) const; + void addSectionDescription(IToolSectionDescription *sectionDescription); + void removeSectionDescription(IToolSectionDescription *sectionDescription); QString toolKey() const; void setToolKey(const QString &toolKey); @@ -56,13 +57,13 @@ public: QString toolDisplayName() const; void setToolDisplayName(const QString &toolDisplayName); - ConfigurationTool* createTool(); + ITool* createTool() const; private: QString m_displayName; QString m_toolKey; QList<IAttributeDescriptionDataItem *> m_attributes; - QList<ToolSectionDescription *> m_sectionDescriptions; + QList<IToolSectionDescription *> m_sectionDescriptions; }; } // namespace Internal diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/toolsectioncontainer.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/toolsectioncontainer.cpp new file mode 100644 index 0000000000..bb83932644 --- /dev/null +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/toolsectioncontainer.cpp @@ -0,0 +1,135 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 "toolsectioncontainer.h" +#include "../../../interfaces/itoolsection.h" +#include "../../../interfaces/itoolsectiondescription.h" +#include "../../../interfaces/itoolattribute.h" +#include "../../../interfaces/iattributedescriptiondataitem.h" + +namespace VcProjectManager { +namespace Internal { + +ToolSectionContainer::ToolSectionContainer() +{ +} + +ToolSectionContainer::ToolSectionContainer(const ToolSectionContainer &toolSec) +{ + qDeleteAll(m_toolSections); + m_toolSections.clear(); + + foreach (IToolSection *sec, toolSec.m_toolSections) { + if (sec) + m_toolSections.append(sec->clone()); + } +} + +ISectionContainer &ToolSectionContainer::operator =(ISectionContainer &toolSec) +{ + if (this != &toolSec) { + qDeleteAll(m_toolSections); + m_toolSections.clear(); + + for (int i = 0; i < toolSec.sectionCount(); ++i) { + IToolSection *sec = toolSec.section(i); + if (sec) + m_toolSections.append(sec->clone()); + } + } + + return *this; +} + +ToolSectionContainer::~ToolSectionContainer() +{ + qDeleteAll(m_toolSections); +} + +IToolSection *ToolSectionContainer::section(int index) const +{ + if (0 <= index && index < m_toolSections.size()) + return m_toolSections[index]; + return 0; +} + +IToolSection *ToolSectionContainer::section(const QString §ionName) const +{ + foreach (IToolSection *sec, m_toolSections) { + if (sec && sec->sectionDescription()->name() == sectionName) { + return sec; + } + } + return 0; +} + +int ToolSectionContainer::sectionCount() const +{ + return m_toolSections.size(); +} + +void ToolSectionContainer::appendSection(IToolSection *section) +{ + if (!section) + return; + + foreach (IToolSection *sec, m_toolSections) { + if (sec && sec->sectionDescription()->name() == section->sectionDescription()->name()) + return; + } + m_toolSections.append(section); +} + +void ToolSectionContainer::removeSection(const QString §ionName) +{ + foreach (IToolSection *sec, m_toolSections) { + if (sec && sec->sectionDescription()->name() == sectionName) { + m_toolSections.removeOne(sec); + delete sec; + return; + } + } +} + +void ToolSectionContainer::appendToXMLNode(QDomElement &elementNode) +{ + foreach (IToolSection *toolSection, m_toolSections) { + if (toolSection) { + for (int i = 0; i < toolSection->toolAttributeCount(); ++i) { + IToolAttribute *toolAttr = toolSection->toolAttribute(i); + + if (toolAttr && toolAttr->isUsed()) + elementNode.setAttribute(toolAttr->descriptionDataItem()->key(), toolAttr->value()); + } + } + } +} + +} // namespace Internal +} // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/toolsectioncontainer.h b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/toolsectioncontainer.h new file mode 100644 index 0000000000..854a4e9e6a --- /dev/null +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolattributes/toolsectioncontainer.h @@ -0,0 +1,61 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** 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 VCPROJECTMANAGER_INTERNAL_TOOLSECTIONCONTAINER_H +#define VCPROJECTMANAGER_INTERNAL_TOOLSECTIONCONTAINER_H + +#include "../../../interfaces/isectioncontainer.h" +#include <QList> + +namespace VcProjectManager { +namespace Internal { + +class ToolSectionContainer : public ISectionContainer +{ +public: + ToolSectionContainer(); + ToolSectionContainer(const ToolSectionContainer &toolSec); + ISectionContainer &operator =(ISectionContainer &toolSec); + ~ToolSectionContainer(); + + IToolSection *section(int index) const; + IToolSection *section(const QString §ionName) const; + int sectionCount() const; + void appendSection(IToolSection *section); + void removeSection(const QString §ionName); + void appendToXMLNode(QDomElement &elementNode); + +private: + QList<IToolSection *> m_toolSections; +}; + +} // namespace Internal +} // namespace VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_TOOLSECTIONCONTAINER_H diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsection.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsection.cpp index 15a4e8d3bb..717cb78c94 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsection.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsection.cpp @@ -28,15 +28,15 @@ ** ****************************************************************************/ #include "toolsection.h" -#include "toolattributes/itoolattribute.h" -#include "toolattributes/iattributedescriptiondataitem.h" +#include "../../interfaces/itoolattribute.h" +#include "../../interfaces/iattributedescriptiondataitem.h" #include "../../widgets/toolwidgets/toolsectionsettingswidget.h" #include "toolsectiondescription.h" namespace VcProjectManager { namespace Internal { -ToolSection::ToolSection(ToolSectionDescription *toolSectionDesc) +ToolSection::ToolSection(const ToolSectionDescription *toolSectionDesc) : m_toolDesc(toolSectionDesc) { for (int i = 0; i < toolSectionDesc->attributeDescriptionCount(); ++i) { @@ -110,15 +110,20 @@ void ToolSection::removeToolAttribute(IToolAttribute *toolAttribute) } } -ToolSectionDescription *ToolSection::sectionDescription() const +const IToolSectionDescription *ToolSection::sectionDescription() const { return m_toolDesc; } -ToolSectionSettingsWidget *ToolSection::createSettingsWidget() +VcNodeWidget *ToolSection::createSettingsWidget() { return new ToolSectionSettingsWidget(this); } +IToolSection *ToolSection::clone() const +{ + return new ToolSection(*this); +} + } // namespace Internal } // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsection.h b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsection.h index 9f1d8ee3ac..750697f110 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsection.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsection.h @@ -31,6 +31,7 @@ #define VCPROJECTMANAGER_INTERNAL_TOOLSECTION_H #include <QList> +#include "../../interfaces/itoolsection.h" class QWidget; @@ -41,10 +42,10 @@ class ToolSectionDescription; class IToolAttribute; class ToolSectionSettingsWidget; -class ToolSection +class ToolSection : public IToolSection { public: - ToolSection(ToolSectionDescription *toolSectionDesc); + ToolSection(const ToolSectionDescription *toolSectionDesc); ToolSection(const ToolSection &toolSec); ~ToolSection(); @@ -54,12 +55,14 @@ public: void addToolAttribute(IToolAttribute* toolAttribute); void removeToolAttribute(IToolAttribute* toolAttribute); - ToolSectionDescription *sectionDescription() const; + const IToolSectionDescription *sectionDescription() const; - ToolSectionSettingsWidget* createSettingsWidget(); + VcNodeWidget* createSettingsWidget(); + + IToolSection* clone() const; private: - ToolSectionDescription * m_toolDesc; + const ToolSectionDescription * m_toolDesc; QList<IToolAttribute *> m_toolAttributes; }; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsectiondescription.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsectiondescription.cpp index fe93efed64..4e5bd8fee8 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsectiondescription.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsectiondescription.cpp @@ -28,7 +28,7 @@ ** ****************************************************************************/ #include "toolsectiondescription.h" -#include "toolattributes/iattributedescriptiondataitem.h" +#include "../../interfaces/iattributedescriptiondataitem.h" #include "toolsection.h" namespace VcProjectManager { @@ -38,7 +38,7 @@ ToolSectionDescription::ToolSectionDescription() { } -ToolSection *ToolSectionDescription::createToolSection() +IToolSection *ToolSectionDescription::createToolSection() const { return new ToolSection(this); } diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsectiondescription.h b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsectiondescription.h index 843c269413..f2e4e3cea5 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsectiondescription.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/tools/toolsectiondescription.h @@ -33,18 +33,20 @@ #include <QString> #include <QList> +#include "../../interfaces/itoolsectiondescription.h" + namespace VcProjectManager { namespace Internal { class IAttributeDescriptionDataItem; class ToolSection; -class ToolSectionDescription +class ToolSectionDescription : public IToolSectionDescription { public: ToolSectionDescription(); - ToolSection* createToolSection(); + IToolSection* createToolSection() const; QString name() const; void setName(const QString &name); diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectmodel.pri b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectmodel.pri index c85a55bbef..5f2766ed1c 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectmodel.pri +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectmodel.pri @@ -29,7 +29,6 @@ HEADERS += \ vcprojectmodel/vcdocumentmodel.h \ vcprojectmodel/ivcprojectnodemodel.h \ vcprojectmodel/vcdocprojectnodes.h \ - vcprojectmodel/tools/toolattributes/itoolattribute.h \ vcprojectmodel/tools/toolattributes/booltoolattribute.h \ vcprojectmodel/tools/toolattributes/stringtoolattribute.h \ vcprojectmodel/tools/toolattributes/stringlisttoolattribute.h \ @@ -41,7 +40,10 @@ HEADERS += \ vcprojectmodel/tools/toolsectiondescription.h \ vcprojectmodel/tools/toolsection.h \ vcprojectmodel/tools/toolattributes/toolattributeoption.h \ - vcprojectmodel/tools/toolattributes/attributedescriptiondataitem.h + vcprojectmodel/tools/toolattributes/attributedescriptiondataitem.h \ + vcprojectmodel/generalattributecontainer.h \ + vcprojectmodel/configurationtools.h \ + vcprojectmodel/tools/toolattributes/toolsectioncontainer.h SOURCES += \ vcprojectmodel/vcprojectdocument.cpp \ @@ -81,7 +83,10 @@ SOURCES += \ vcprojectmodel/tools/toolsectiondescription.cpp \ vcprojectmodel/tools/toolsection.cpp \ vcprojectmodel/tools/toolattributes/toolattributeoption.cpp \ - vcprojectmodel/tools/toolattributes/attributedescriptiondataitem.cpp + vcprojectmodel/tools/toolattributes/attributedescriptiondataitem.cpp \ + vcprojectmodel/tools/toolattributes/toolsectioncontainer.cpp \ + vcprojectmodel/generalattributecontainer.cpp \ + vcprojectmodel/configurationtools.cpp OTHER_FILES += \ vcprojectmodel/tools/xml_definitions/VCXMLDataGeneratorTool.xml \ diff --git a/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp b/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp index ec19339b2c..10bf8cf840 100644 --- a/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp +++ b/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp @@ -41,6 +41,8 @@ #include "configurationwidgets.h" #include "../vcprojectmodel/files.h" #include "../vcprojectmodel/file.h" +#include "../interfaces/iattributecontainer.h" +#include "../interfaces/itools.h" namespace VcProjectManager { namespace Internal { @@ -52,10 +54,11 @@ ConfigurationsBaseWidget::ConfigurationsBaseWidget(Configurations *configs, VcPr m_configsWidget = new ConfigurationsWidget; if (m_configs) { - QList<Configuration::Ptr> configs = m_configs->configurations(); - - foreach (const Configuration::Ptr &config, configs) - addConfiguration(config.data()); + for (int i = 0; i < m_configs->configurationCount(); ++i) { + IConfiguration *config = m_configs->configuration(i); + if (config) + addConfiguration(config); + } } QVBoxLayout *layout = new QVBoxLayout; @@ -76,25 +79,25 @@ void ConfigurationsBaseWidget::saveData() { // remove deleted configurations foreach (const QString &removeConfigName, m_removedConfigurations) { - Configuration::Ptr foundConfig = m_configs->configuration(removeConfigName); + IConfiguration *foundConfig = m_configs->configuration(removeConfigName); if (foundConfig) - m_configs->removeConfiguration(foundConfig); + m_configs->removeConfiguration(foundConfig->fullName()); } // rename configurations that were renamed - QMapIterator<Configuration::Ptr, QString> it(m_renamedConfigurations); + QMapIterator<IConfiguration*, QString> it(m_renamedConfigurations); while (it.hasNext()) { it.next(); - Configuration::Ptr config = it.key(); - config->setName(it.value()); + IConfiguration *config = it.key(); + config->setFullName(it.value()); } // add new configurations - foreach (const Configuration::Ptr &newConfig, m_newConfigurations) - m_configs->appendConfiguration(newConfig); + foreach (IConfiguration *newConfig, m_newConfigurations) + m_configs->addConfiguration(newConfig); - QHashIterator<QSharedPointer<File>, Configuration::Ptr> fileConfigIt(m_newFilesConfigurations); + QHashIterator<QSharedPointer<File>, IConfiguration*> fileConfigIt(m_newFilesConfigurations); while (fileConfigIt.hasNext()) { fileConfigIt.next(); @@ -109,21 +112,6 @@ void ConfigurationsBaseWidget::saveData() } } -QList<Configuration::Ptr> ConfigurationsBaseWidget::newConfigurations() const -{ - return m_newConfigurations; -} - -QList<QString> ConfigurationsBaseWidget::removedConfigurations() const -{ - return m_removedConfigurations; -} - -QMap<Configuration::Ptr, QString> ConfigurationsBaseWidget::renamedConfigurations() const -{ - return m_renamedConfigurations; -} - void ConfigurationsBaseWidget::onAddNewConfig(QString newConfigName, QString copyFrom) { Platforms::Ptr platforms = m_vcProjDoc->platforms(); @@ -132,29 +120,29 @@ void ConfigurationsBaseWidget::onAddNewConfig(QString newConfigName, QString cop if (copyFrom.isEmpty()) { QList<Platform::Ptr> platformList = platforms->platforms(); foreach (const Platform::Ptr &platform, platformList) { - Configuration::Ptr newConfig = createConfiguration(newConfigName + QLatin1Char('|') + platform->name()); + IConfiguration *newConfig = createConfiguration(newConfigName + QLatin1Char('|') + platform->name()); if (newConfig) { - newConfig->setAttribute(QLatin1String("OutputDirectory"), QLatin1String("$(SolutionDir)$(ConfigurationName)")); - newConfig->setAttribute(QLatin1String("IntermediateDirectory"), QLatin1String("$(ConfigurationName)")); - newConfig->setAttribute(QLatin1String("ConfigurationType"), QLatin1String("1")); + newConfig->attributeContainer()->setAttribute(QLatin1String("OutputDirectory"), QLatin1String("$(SolutionDir)$(ConfigurationName)")); + newConfig->attributeContainer()->setAttribute(QLatin1String("IntermediateDirectory"), QLatin1String("$(ConfigurationName)")); + newConfig->attributeContainer()->setAttribute(QLatin1String("ConfigurationType"), QLatin1String("1")); m_newConfigurations.append(newConfig); - addConfiguration(newConfig.data()); + addConfiguration(newConfig); } } } else { - Configuration::Ptr config = m_configs->configuration(copyFrom); + IConfiguration *config = m_configs->configuration(copyFrom); if (config) { QList<Platform::Ptr> platformList = platforms->platforms(); foreach (const Platform::Ptr &platform, platformList) { - Configuration::Ptr newConfig = config->clone(); + IConfiguration* newConfig = config->clone(); if (newConfig) { - newConfig->setName(newConfigName + QLatin1Char('|') + platform->name()); + newConfig->setFullName(newConfigName + QLatin1Char('|') + platform->name()); m_newConfigurations.append(newConfig); - addConfiguration(newConfig.data()); + addConfiguration(newConfig); } addConfigurationToFiles(copyFrom, newConfigName + QLatin1Char('|') + platform->name()); @@ -180,21 +168,21 @@ void ConfigurationsBaseWidget::onRenameConfig(QString newConfigName, QString old foreach (const Platform::Ptr &platform, platformList) { QString targetConfigName = splits[0] + QLatin1Char('|') + platform->name(); QString newName = newConfigName + QLatin1Char('|') + platform->name(); - Configuration::Ptr configInNew = configInNewConfigurations(targetConfigName); + IConfiguration *configInNew = configInNewConfigurations(targetConfigName); // if we are renaming newly added config if (configInNew) { - configInNew->setName(newName); + configInNew->setFullName(newName); } else { // we are renaming a config that is already in the model bool targetAlreadyExists = false; - QMapIterator<Configuration::Ptr, QString> it(m_renamedConfigurations); + QMapIterator<IConfiguration*, QString> it(m_renamedConfigurations); while (it.hasNext()) { it.next(); if (it.value() == targetConfigName) { - Configuration::Ptr key = m_renamedConfigurations.key(targetConfigName); + IConfiguration* key = m_renamedConfigurations.key(targetConfigName); if (key) { m_renamedConfigurations.insert(key, newName); @@ -205,7 +193,7 @@ void ConfigurationsBaseWidget::onRenameConfig(QString newConfigName, QString old } if (!targetAlreadyExists) { - Configuration::Ptr config = m_configs->configuration(targetConfigName); + IConfiguration *config = m_configs->configuration(targetConfigName); if (config) m_renamedConfigurations.insert(config, newName); } @@ -230,17 +218,17 @@ void ConfigurationsBaseWidget::onRemoveConfig(QString configNameWithPlatform) QList<Platform::Ptr> platformList = platforms->platforms(); foreach (const Platform::Ptr &platform, platformList) { QString targetConfigName = splits[0] + QLatin1Char('|') + platform->name(); - Configuration::Ptr config = m_configs->configuration(targetConfigName); + IConfiguration *config = m_configs->configuration(targetConfigName); // if config exists in the document model, add it to remove list if (config) { - removeConfiguration(config.data()); - m_removedConfigurations.append(config->name()); + removeConfiguration(config); + m_removedConfigurations.append(config->fullName()); } else { // else remove it from the list of newly added configurations - foreach (const Configuration::Ptr &configPtr, m_newConfigurations) { - if (configPtr && configPtr->name() == targetConfigName) { - removeConfiguration(configPtr.data()); + foreach (IConfiguration *configPtr, m_newConfigurations) { + if (configPtr && configPtr->fullName() == targetConfigName) { + removeConfiguration(configPtr); m_newConfigurations.removeAll(configPtr); break; } @@ -249,34 +237,44 @@ void ConfigurationsBaseWidget::onRemoveConfig(QString configNameWithPlatform) } } -void ConfigurationsBaseWidget::addConfiguration(Configuration *config) +void ConfigurationsBaseWidget::addConfiguration(IConfiguration *config) { if (config) - m_configsWidget->addConfiguration(config->nodeWidgetName(), config->createSettingsWidget()); + m_configsWidget->addConfiguration(config->fullName(), config->createSettingsWidget()); } -void ConfigurationsBaseWidget::removeConfiguration(Configuration *config) +void ConfigurationsBaseWidget::removeConfiguration(IConfiguration *config) { if (config) - m_configsWidget->removeConfiguration(config->name()); + m_configsWidget->removeConfiguration(config->fullName()); } -Configuration::Ptr ConfigurationsBaseWidget::createConfiguration(const QString &configNameWithPlatform) const +IConfiguration *ConfigurationsBaseWidget::createConfiguration(const QString &configNameWithPlatform) const { - Configuration::Ptr config = ConfigurationsFactory::createConfiguration(m_vcProjDoc->documentVersion(), QLatin1String("Configuration")); - config->setName(configNameWithPlatform); + IConfiguration *config = 0; - ToolDescriptionDataManager *tDDM = ToolDescriptionDataManager::instance(); + if (m_vcProjDoc->documentVersion() == VcDocConstants::DV_MSVC_2003) + config = new Configuration2003(QLatin1String("Configuration")); + else if (m_vcProjDoc->documentVersion() == VcDocConstants::DV_MSVC_2005) + config = new Configuration2005(QLatin1String("Configuration")); + else if (m_vcProjDoc->documentVersion() == VcDocConstants::DV_MSVC_2008) + config = new Configuration2008(QLatin1String("Configuration")); - if (tDDM) { - for (int i = 0; i < tDDM->toolDescriptionCount(); ++i) { - ToolDescription *toolDesc = tDDM->toolDescription(i); + if (config) { + config->setFullName(configNameWithPlatform); - if (toolDesc) { - ConfigurationTool *configTool = toolDesc->createTool(); + ToolDescriptionDataManager *tDDM = ToolDescriptionDataManager::instance(); - if (configTool) - config->addConfigurationTool(configTool); + if (tDDM) { + for (int i = 0; i < tDDM->toolDescriptionCount(); ++i) { + ToolDescription *toolDesc = tDDM->toolDescription(i); + + if (toolDesc) { + ITool *configTool = toolDesc->createTool(); + + if (configTool) + config->tools()->addTool(configTool); + } } } } @@ -284,14 +282,14 @@ Configuration::Ptr ConfigurationsBaseWidget::createConfiguration(const QString & return config; } -Configuration::Ptr ConfigurationsBaseWidget::configInNewConfigurations(const QString &configNameWithPlatform) const +IConfiguration *ConfigurationsBaseWidget::configInNewConfigurations(const QString &configNameWithPlatform) const { - foreach (const Configuration::Ptr &config, m_newConfigurations) { - if (config && config->name() == configNameWithPlatform) + foreach (IConfiguration *config, m_newConfigurations) { + if (config && config->fullName() == configNameWithPlatform) return config; } - return Configuration::Ptr(); + return 0; } void ConfigurationsBaseWidget::addConfigurationToFiles(const QString ©FromConfig, const QString &targetConfigName) @@ -352,11 +350,11 @@ void ConfigurationsBaseWidget::addConfigurationToFilesInFolder(QSharedPointer<Fo void ConfigurationsBaseWidget::addConfigurationToFile(QSharedPointer<File> filePtr, const QString ©FromConfig, const QString &targetConfigName) { - Configuration::Ptr configPtr = filePtr->fileConfiguration(copyFromConfig); + IConfiguration *configPtr = filePtr->fileConfiguration(copyFromConfig); if (configPtr) { - Configuration::Ptr newConfig = configPtr->clone(); - newConfig->setName(targetConfigName); + IConfiguration *newConfig = configPtr->clone(); + newConfig->setFullName(targetConfigName); m_newFilesConfigurations[filePtr] = newConfig; } } diff --git a/src/plugins/vcprojectmanager/widgets/configurationswidgets.h b/src/plugins/vcprojectmanager/widgets/configurationswidgets.h index e259f7c6bf..c842bd6af6 100644 --- a/src/plugins/vcprojectmanager/widgets/configurationswidgets.h +++ b/src/plugins/vcprojectmanager/widgets/configurationswidgets.h @@ -56,20 +56,16 @@ public: ~ConfigurationsBaseWidget(); void saveData(); - QList<Configuration::Ptr> newConfigurations() const; - QList<QString> removedConfigurations() const; - QMap<Configuration::Ptr, QString> renamedConfigurations() const; - private slots: void onAddNewConfig(QString newConfigName, QString copyFrom); void onRenameConfig(QString newConfigName, QString oldConfigNameWithPlatform); void onRemoveConfig(QString configNameWithPlatform); protected: - void addConfiguration(Configuration *config); - void removeConfiguration(Configuration *config); - Configuration::Ptr createConfiguration(const QString &configNameWithPlatform) const; - Configuration::Ptr configInNewConfigurations(const QString &configNameWithPlatform) const; + void addConfiguration(IConfiguration *config); + void removeConfiguration(IConfiguration *config); + IConfiguration* createConfiguration(const QString &configNameWithPlatform) const; + IConfiguration* configInNewConfigurations(const QString &configNameWithPlatform) const; void addConfigurationToFiles(const QString ©FromConfig, const QString &targetConfigName); void addConfigurationToFilesInFilter(QSharedPointer<Filter> filterPtr, const QString ©FromConfig, const QString &targetConfigName); void addConfigurationToFilesInFolder(QSharedPointer<Folder> folderPtr, const QString ©FromConfig, const QString &targetConfigName); @@ -79,11 +75,11 @@ protected: VcProjectDocument *m_vcProjDoc; ConfigurationsWidget *m_configsWidget; - QList<QSharedPointer<Configuration> > m_newConfigurations; + QList<IConfiguration *> m_newConfigurations; QList<QString> m_removedConfigurations; - QMap<Configuration::Ptr, QString> m_renamedConfigurations; // <oldName, newName> + QMap<IConfiguration*, QString> m_renamedConfigurations; // <oldName, newName> - QHash<QSharedPointer<File>, Configuration::Ptr> m_newFilesConfigurations; + QHash<QSharedPointer<File>, IConfiguration*> m_newFilesConfigurations; }; class Configurations2003Widget : public ConfigurationsBaseWidget diff --git a/src/plugins/vcprojectmanager/widgets/configurationwidgets.cpp b/src/plugins/vcprojectmanager/widgets/configurationwidgets.cpp index 85992afd02..724c503f20 100644 --- a/src/plugins/vcprojectmanager/widgets/configurationwidgets.cpp +++ b/src/plugins/vcprojectmanager/widgets/configurationwidgets.cpp @@ -37,6 +37,7 @@ #include "../vcprojectmodel/tools/tool_constants.h" #include "../vcprojectmodel/tools/configurationtool.h" #include "../vcprojectmodel/tools/toolattributes/tooldescription.h" +#include "../interfaces/itools.h" namespace VcProjectManager { namespace Internal { @@ -65,8 +66,8 @@ ConfigurationBaseWidget::ConfigurationBaseWidget(Configuration *config) mainWidgetSplitter->setStretchFactor(1, 5); // add tool items - for (int i = 0; i < m_config->configurationToolCount(); ++i) { - ConfigurationTool *configTool = m_config->configurationTool(i); + for (int i = 0; i < m_config->tools()->toolCount(); ++i) { + ITool *configTool = m_config->tools()->tool(i); if (configTool) { VcNodeWidget *toolWidget = configTool->createSettingsWidget(); diff --git a/src/plugins/vcprojectmanager/widgets/toolwidgets/booltoolattributesettingsitem.cpp b/src/plugins/vcprojectmanager/widgets/toolwidgets/booltoolattributesettingsitem.cpp index 6bad0ad4a7..6ba901f628 100644 --- a/src/plugins/vcprojectmanager/widgets/toolwidgets/booltoolattributesettingsitem.cpp +++ b/src/plugins/vcprojectmanager/widgets/toolwidgets/booltoolattributesettingsitem.cpp @@ -33,8 +33,8 @@ #include <QVBoxLayout> #include "../../vcprojectmodel/tools/toolattributes/booltoolattribute.h" -#include "../../vcprojectmodel/tools/toolattributes/iattributedescriptiondataitem.h" #include "../../vcprojectmodel/tools/toolattributes/toolattributeoption.h" +#include "interfaces/iattributedescriptiondataitem.h" namespace VcProjectManager { namespace Internal { diff --git a/src/plugins/vcprojectmanager/widgets/toolwidgets/integertoolattributesettingsitem.cpp b/src/plugins/vcprojectmanager/widgets/toolwidgets/integertoolattributesettingsitem.cpp index 4829687367..5811cdc504 100644 --- a/src/plugins/vcprojectmanager/widgets/toolwidgets/integertoolattributesettingsitem.cpp +++ b/src/plugins/vcprojectmanager/widgets/toolwidgets/integertoolattributesettingsitem.cpp @@ -30,7 +30,7 @@ #include "integertoolattributesettingsitem.h" #include "../../vcprojectmodel/tools/toolattributes/integertoolattribute.h" #include "../../vcprojectmodel/tools/toolattributes/toolattributeoption.h" -#include "../../vcprojectmodel/tools/toolattributes/iattributedescriptiondataitem.h" +#include "interfaces/iattributedescriptiondataitem.h" #include <QComboBox> #include <QVBoxLayout> diff --git a/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsectionsettingswidget.cpp b/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsectionsettingswidget.cpp index 723f9d7afc..99240f1609 100644 --- a/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsectionsettingswidget.cpp +++ b/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsectionsettingswidget.cpp @@ -30,8 +30,8 @@ #include "toolsectionsettingswidget.h" #include "itoolattributesettingswidget.h" #include "../../vcprojectmodel/tools/toolsection.h" -#include "../../vcprojectmodel/tools/toolattributes/itoolattribute.h" -#include "../../vcprojectmodel/tools/toolattributes/iattributedescriptiondataitem.h" +#include "../../interfaces/itoolattribute.h" +#include "../../interfaces/iattributedescriptiondataitem.h" #include "../basicconfigurationwidget.h" #include <QVBoxLayout> @@ -40,7 +40,7 @@ namespace VcProjectManager { namespace Internal { ToolSectionSettingsWidget::ToolSectionSettingsWidget(ToolSection *toolSection, QWidget *parent) - : QWidget(parent) + : VcNodeWidget(parent) { BasicConfigurationWidget *basicWidget = new BasicConfigurationWidget(this); diff --git a/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsectionsettingswidget.h b/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsectionsettingswidget.h index aa525436f4..34bd5e3ff2 100644 --- a/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsectionsettingswidget.h +++ b/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsectionsettingswidget.h @@ -33,6 +33,8 @@ #include <QList> #include <QWidget> +#include "../vcnodewidget.h" + namespace VcProjectManager { namespace Internal { @@ -41,7 +43,7 @@ class BasicConfigurationWidget; class IToolAttribute; class IToolAttributeSettingsWidget; -class ToolSectionSettingsWidget : public QWidget +class ToolSectionSettingsWidget : public VcNodeWidget { public: ToolSectionSettingsWidget(ToolSection *toolSection, QWidget *parent = 0); diff --git a/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsettingswidget.cpp b/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsettingswidget.cpp index 8e9b2c57e7..0843d78f9e 100644 --- a/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsettingswidget.cpp +++ b/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsettingswidget.cpp @@ -30,8 +30,9 @@ #include "toolsettingswidget.h" #include "../../vcprojectmodel/tools/configurationtool.h" -#include "../../vcprojectmodel/tools/toolsection.h" #include "../../vcprojectmodel/tools/toolsectiondescription.h" +#include "../../interfaces/itoolsection.h" +#include "../../interfaces/isectioncontainer.h" #include "toolsectionsettingswidget.h" #include <QTableWidget> @@ -51,12 +52,12 @@ ToolSettingsWidget::ToolSettingsWidget(ConfigurationTool *tool, QWidget *parent) setLayout(layout); if (m_tool) { - for (int i = 0; i < m_tool->sectionCount(); ++i) { - ToolSection *toolSection = m_tool->section(i); + for (int i = 0; i < m_tool->sectionContainer()->sectionCount(); ++i) { + IToolSection *toolSection = m_tool->sectionContainer()->section(i); if (toolSection) { - ToolSectionSettingsWidget *toolSectionWidget = toolSection->createSettingsWidget(); - mainTabWidget->addTab(toolSection->createSettingsWidget(), toolSection->sectionDescription()->name()); + VcNodeWidget *toolSectionWidget = toolSection->createSettingsWidget(); + mainTabWidget->addTab(toolSectionWidget, toolSection->sectionDescription()->name()); m_sections.append(toolSectionWidget); } } @@ -65,7 +66,7 @@ ToolSettingsWidget::ToolSettingsWidget(ConfigurationTool *tool, QWidget *parent) void ToolSettingsWidget::saveData() { - foreach (ToolSectionSettingsWidget *toolSectionWidget, m_sections) + foreach (VcNodeWidget *toolSectionWidget, m_sections) toolSectionWidget->saveData(); } diff --git a/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsettingswidget.h b/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsettingswidget.h index 5010fa1815..12c1243284 100644 --- a/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsettingswidget.h +++ b/src/plugins/vcprojectmanager/widgets/toolwidgets/toolsettingswidget.h @@ -47,7 +47,7 @@ public: private: ConfigurationTool *m_tool; - QList<ToolSectionSettingsWidget *> m_sections; + QList<VcNodeWidget *> m_sections; }; } // namespace Internal diff --git a/src/plugins/vcprojectmanager/widgets/vcnodewidget.cpp b/src/plugins/vcprojectmanager/widgets/vcnodewidget.cpp index 8b21520c9e..9129ffd2d6 100644 --- a/src/plugins/vcprojectmanager/widgets/vcnodewidget.cpp +++ b/src/plugins/vcprojectmanager/widgets/vcnodewidget.cpp @@ -37,9 +37,5 @@ VcNodeWidget::VcNodeWidget(QWidget *parent) : { } -VcNodeWidget::~VcNodeWidget() -{ -} - } // namespace Internal } // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/widgets/vcnodewidget.h b/src/plugins/vcprojectmanager/widgets/vcnodewidget.h index ebb0722782..75b84c3612 100644 --- a/src/plugins/vcprojectmanager/widgets/vcnodewidget.h +++ b/src/plugins/vcprojectmanager/widgets/vcnodewidget.h @@ -40,7 +40,6 @@ class VcNodeWidget : public QWidget Q_OBJECT public: explicit VcNodeWidget(QWidget *parent = 0); - ~VcNodeWidget(); virtual void saveData() = 0; }; |