summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadovan Zivkovic <pivonroll@gmail.com>2013-10-10 21:05:20 +0200
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-03-11 19:54:59 +0100
commitb776d61752633d6423d9797ad92a18b65eeaad53 (patch)
treebf9a733ba453f9f1cc277f88851055ebb81c1664
parent77722fe95569aa3a2089d86ab9cedf18e1cf340e (diff)
downloadqt-creator-b776d61752633d6423d9797ad92a18b65eeaad53.tar.gz
References implement IReferences interface.
Change-Id: I6aaff1a9d0c6c86b4fdb4335e8a0454bb548a7f4 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
-rw-r--r--src/plugins/vcprojectmanager/interfaces/interfaces.pri3
-rw-r--r--src/plugins/vcprojectmanager/interfaces/ireference.h3
-rw-r--r--src/plugins/vcprojectmanager/interfaces/ireferences.h54
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/activexreference.cpp5
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/activexreference.h5
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.cpp5
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.h3
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/configuration.cpp2
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/projectreference.cpp5
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/projectreference.h1
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/references.cpp114
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/references.h24
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp8
13 files changed, 121 insertions, 111 deletions
diff --git a/src/plugins/vcprojectmanager/interfaces/interfaces.pri b/src/plugins/vcprojectmanager/interfaces/interfaces.pri
index 5f78ab1b87..f9e5d052cb 100644
--- a/src/plugins/vcprojectmanager/interfaces/interfaces.pri
+++ b/src/plugins/vcprojectmanager/interfaces/interfaces.pri
@@ -21,4 +21,5 @@ HEADERS += \
interfaces/idebuggertool.h \
interfaces/idebuggertools.h \
interfaces/iglobal.h \
- interfaces/iglobals.h
+ interfaces/iglobals.h \
+ interfaces/ireferences.h
diff --git a/src/plugins/vcprojectmanager/interfaces/ireference.h b/src/plugins/vcprojectmanager/interfaces/ireference.h
index a06d8014a8..40d61b7d43 100644
--- a/src/plugins/vcprojectmanager/interfaces/ireference.h
+++ b/src/plugins/vcprojectmanager/interfaces/ireference.h
@@ -43,11 +43,12 @@ class ConfigurationContainer;
class IReference : public IVcProjectXMLNode
{
public:
- virtual ~IReference() {}
+ ~IReference() {}
virtual IAttributeContainer* attributeContainer() const = 0;
virtual ConfigurationContainer* configurationContainer() const = 0;
virtual QString type() const = 0;
+ virtual IReference* clone() const = 0;
};
} // namespace Internal
diff --git a/src/plugins/vcprojectmanager/interfaces/ireferences.h b/src/plugins/vcprojectmanager/interfaces/ireferences.h
new file mode 100644
index 0000000000..9ceffb5ba9
--- /dev/null
+++ b/src/plugins/vcprojectmanager/interfaces/ireferences.h
@@ -0,0 +1,54 @@
+/**************************************************************************
+**
+** 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_IREFERENCEHANDLER_H
+#define VCPROJECTMANAGER_INTERNAL_IREFERENCEHANDLER_H
+
+#include "../vcprojectmodel/ivcprojectnodemodel.h"
+
+namespace VcProjectManager {
+namespace Internal {
+
+class IReference;
+
+class IReferences : public IVcProjectXMLNode
+{
+public:
+ virtual ~IReferences() {}
+
+ virtual void addReference(IReference* reference) = 0;
+ virtual void removeReference(IReference* reference) = 0;
+ virtual int referenceCount() const = 0;
+ virtual IReference* reference(int index) const = 0;
+};
+
+} // namespace Internal
+} // namespace VcProjectManager
+
+#endif // VCPROJECTMANAGER_INTERNAL_IREFERENCEHANDLER_H
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.cpp
index 426782f87c..a86aecea11 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.cpp
@@ -133,6 +133,11 @@ QString ActiveXReference::type() const
return QLatin1String(VcDocConstants::ACTIVEX_REFERENCE);
}
+IReference *ActiveXReference::clone() const
+{
+ return new ActiveXReference(*this);
+}
+
void ActiveXReference::processReferenceConfig(const QDomNode &referenceConfig)
{
IConfiguration *referenceConfiguration = createReferenceConfiguration();
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.h b/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.h
index 19ee56dd8d..1fe205779e 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/activexreference.h
@@ -42,11 +42,7 @@ class GeneralAttributeContainer;
class ActiveXReference : public IReference
{
- friend class ActiveXReferenceFactory;
-
public:
- typedef QSharedPointer<ActiveXReference> Ptr;
-
ActiveXReference();
ActiveXReference(const ActiveXReference &ref);
ActiveXReference &operator=(const ActiveXReference &ref);
@@ -60,6 +56,7 @@ public:
IAttributeContainer *attributeContainer() const;
ConfigurationContainer *configurationContainer() const;
QString type() const;
+ IReference* clone() const;
private:
void processNodeAttributes(const QDomElement &element);
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.cpp
index 5fbcfe34df..522f8155ab 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.cpp
@@ -124,6 +124,11 @@ QString AssemblyReference::type() const
return QLatin1String(VcDocConstants::ASSEMBLY_REFERENCE);
}
+IReference *AssemblyReference::clone() const
+{
+ return new AssemblyReference(*this);
+}
+
void AssemblyReference::processNodeAttributes(const QDomElement &element)
{
QDomNamedNodeMap namedNodeMap = element.attributes();
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.h b/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.h
index 0fc4c4fb04..e653f054f7 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/assemblyreference.h
@@ -43,8 +43,6 @@ class GeneralAttributeContainer;
class AssemblyReference : public IReference
{
public:
- typedef QSharedPointer<AssemblyReference> Ptr;
-
AssemblyReference();
AssemblyReference(const AssemblyReference &asmRef);
AssemblyReference& operator=(const AssemblyReference &asmRef);
@@ -57,6 +55,7 @@ public:
IAttributeContainer *attributeContainer() const;
ConfigurationContainer *configurationContainer() const;
QString type() const;
+ IReference* clone() const;
protected:
virtual void processNodeAttributes(const QDomElement &element);
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configuration.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/configuration.cpp
index 99d254ff61..47e3f49037 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/configuration.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/configuration.cpp
@@ -192,7 +192,7 @@ void Configuration::processToolNode(const QDomNode &toolNode)
QDomAttr domAttribute = domNode.toAttr();
if (domAttribute.name() == QLatin1String("Name")) {
ToolDescriptionDataManager *tDDM = ToolDescriptionDataManager::instance();
- ToolDescription *toolDesc = tDDM->toolDescription(domAttribute.value());
+ IToolDescription *toolDesc = tDDM->toolDescription(domAttribute.value());
toolConf = toolDesc->createTool();
break;
}
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.cpp
index 2255f2d5ef..6e42771243 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.cpp
@@ -111,6 +111,11 @@ QString ProjectReference::type() const
return QLatin1String(VcDocConstants::PROJECT_REFERENCE);
}
+IReference *ProjectReference::clone() const
+{
+ return new ProjectReference(*this);
+}
+
void ProjectReference::processReferenceConfig(const QDomNode &referenceConfig)
{
IConfiguration *referenceConfiguration = new Configuration(QLatin1String("ReferenceConfiguration"));
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.h b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.h
index 63b69e4494..8e985007c6 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/projectreference.h
@@ -56,6 +56,7 @@ public:
IAttributeContainer *attributeContainer() const;
ConfigurationContainer *configurationContainer() const;
QString type() const;
+ IReference* clone() const;
protected:
void processReferenceConfig(const QDomNode &referenceConfig);
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/references.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/references.cpp
index 4e8c869776..9e6cabcf1e 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/references.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/references.cpp
@@ -30,50 +30,36 @@
#include "references.h"
#include "generalattributecontainer.h"
+#include <utils/qtcassert.h>
+
namespace VcProjectManager {
namespace Internal {
-References::References(VcDocConstants::DocumentVersion version)
- : m_docVersion(version)
+References::References()
{
}
References::References(const References &references)
{
- m_docVersion = references.m_docVersion;
-
- foreach (const ActiveXReference::Ptr &ref, references.m_activeXReferences)
- m_activeXReferences.append(ActiveXReference::Ptr(new ActiveXReference(*ref)));
-
- foreach (const AssemblyReference::Ptr &ref, references.m_assemblyReferences)
- m_assemblyReferences.append(AssemblyReference::Ptr(new AssemblyReference(*ref)));
-
- foreach (const ProjectReference::Ptr &ref, references.m_projectReferences)
- m_projectReferences.append(ProjectReference::Ptr(new ProjectReference(*ref)));
+ foreach (const IReference *ref, references.m_references)
+ m_references.append(ref->clone());
}
References &References::operator =(const References &references)
{
if (this != &references) {
- m_docVersion = references.m_docVersion;
- m_activeXReferences.clear();
- m_assemblyReferences.clear();
- m_projectReferences.clear();
+ qDeleteAll(m_references);
+ m_references.clear();
- foreach (const ActiveXReference::Ptr &ref, references.m_activeXReferences)
- m_activeXReferences.append(ActiveXReference::Ptr(new ActiveXReference(*ref)));
-
- foreach (const AssemblyReference::Ptr &ref, references.m_assemblyReferences)
- m_assemblyReferences.append(AssemblyReference::Ptr(new AssemblyReference(*ref)));
-
- foreach (const ProjectReference::Ptr &ref, references.m_projectReferences)
- m_projectReferences.append(ProjectReference::Ptr(new ProjectReference(*ref)));
+ foreach (const IReference *ref, references.m_references)
+ m_references.append(ref->clone());
}
return *this;
}
References::~References()
{
+ qDeleteAll(m_references);
}
void References::processNode(const QDomNode &node)
@@ -97,87 +83,51 @@ QDomNode References::toXMLDomNode(QDomDocument &domXMLDocument) const
{
QDomElement fileNode = domXMLDocument.createElement(QLatin1String("References"));
- foreach (const AssemblyReference::Ptr &asmRef, m_assemblyReferences)
+ foreach (const IReference *asmRef, m_references)
fileNode.appendChild(asmRef->toXMLDomNode(domXMLDocument));
- foreach (const ActiveXReference::Ptr &activeXRef, m_activeXReferences)
- fileNode.appendChild(activeXRef->toXMLDomNode(domXMLDocument));
-
- foreach (const ProjectReference::Ptr &projRef, m_projectReferences)
- fileNode.appendChild(projRef->toXMLDomNode(domXMLDocument));
-
return fileNode;
}
-bool References::isEmpty() const
-{
- return m_activeXReferences.isEmpty() && m_assemblyReferences.isEmpty() && m_projectReferences.isEmpty();
-}
-
-void References::addAssemblyReference(AssemblyReference::Ptr asmRef)
-{
- if (m_assemblyReferences.contains(asmRef))
- return;
- m_assemblyReferences.append(asmRef);
-}
-
-void References::removeAssemblyReference(AssemblyReference::Ptr asmRef)
-{
- m_assemblyReferences.removeAll(asmRef);
-}
-
-void References::addActiveXReference(ActiveXReference::Ptr actXRef)
+void References::addReference(IReference *reference)
{
- if (m_activeXReferences.contains(actXRef))
+ if (!reference || m_references.contains(reference))
return;
- m_activeXReferences.append(actXRef);
-}
-
-void References::removeActiveXReference(ActiveXReference::Ptr actXRef)
-{
- m_activeXReferences.removeAll(actXRef);
+ m_references.append(reference);
}
-void References::addProjectReference(ProjectReference::Ptr projRefer)
+void References::removeReference(IReference *reference)
{
- if (m_projectReferences.contains(projRefer))
- return;
- m_projectReferences.append(projRefer);
+ m_references.removeOne(reference);
+ delete reference;
}
-void References::removeProjectReference(ProjectReference::Ptr projRef)
+int References::referenceCount() const
{
- m_projectReferences.removeAll(projRef);
+ return m_references.size();
}
-void References::removeProjectReference(const QString &projRefName)
+IReference *References::reference(int index) const
{
- foreach (const ProjectReference::Ptr &projRef, m_projectReferences) {
- if (projRef->attributeContainer()->attributeValue(QLatin1String(VcDocConstants::PROJECT_REFERENCE_NAME)) == projRefName) {
- removeProjectReference(projRef);
- return;
- }
- }
+ QTC_ASSERT(0 <= index && index < m_references.size(), return 0);
+ return m_references[index];
}
void References::processReference(const QDomNode &referenceNode)
{
- if (referenceNode.nodeName() == QLatin1String("AssemblyReference")) {
- AssemblyReference::Ptr reference(new AssemblyReference);
- m_assemblyReferences.append(reference);
- reference->processNode(referenceNode);
- }
+ IReference *reference = 0;
+ if (referenceNode.nodeName() == QLatin1String("AssemblyReference"))
+ reference = new AssemblyReference;
- else if (referenceNode.nodeName() == QLatin1String("ActiveXReference")) {
- ActiveXReference::Ptr reference(new ActiveXReference);
- m_activeXReferences.append(reference);
- reference->processNode(referenceNode);
- }
+ else if (referenceNode.nodeName() == QLatin1String("ActiveXReference"))
+ reference = new ActiveXReference;
+
+ else if (referenceNode.nodeName() == QLatin1String("ProjectReference"))
+ reference = new ProjectReference;
- else if (referenceNode.nodeName() == QLatin1String("ProjectReference")) {
- ProjectReference::Ptr reference(new ProjectReference);
- m_projectReferences.append(reference);
+ if (reference) {
reference->processNode(referenceNode);
+ m_references.append(reference);
}
// process next sibling
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/references.h b/src/plugins/vcprojectmanager/vcprojectmodel/references.h
index bdd508fead..dd2ab96295 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/references.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/references.h
@@ -30,7 +30,7 @@
#ifndef VCPROJECTMANAGER_INTERNAL_REFERENCES_H
#define VCPROJECTMANAGER_INTERNAL_REFERENCES_H
-#include "ivcprojectnodemodel.h"
+#include "../interfaces/ireferences.h"
#include "activexreference.h"
#include "assemblyreference.h"
@@ -39,12 +39,12 @@
namespace VcProjectManager {
namespace Internal {
-class References : public IVcProjectXMLNode
+class References : public IReferences
{
public:
typedef QSharedPointer<References> Ptr;
- References(VcDocConstants::DocumentVersion version);
+ References();
References(const References &references);
References& operator=(const References &references);
~References();
@@ -53,23 +53,15 @@ public:
VcNodeWidget* createSettingsWidget();
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
- bool isEmpty() const;
-
- void addAssemblyReference(AssemblyReference::Ptr asmRef);
- void removeAssemblyReference(AssemblyReference::Ptr asmRef);
- void addActiveXReference(ActiveXReference::Ptr actXRef);
- void removeActiveXReference(ActiveXReference::Ptr actXRef);
- void addProjectReference(ProjectReference::Ptr projRefer);
- void removeProjectReference(ProjectReference::Ptr projRef);
- void removeProjectReference(const QString &projRefName);
+ void addReference(IReference *reference);
+ void removeReference(IReference *reference);
+ int referenceCount() const;
+ IReference *reference(int index) const;
private:
void processReference(const QDomNode &referenceNode);
- QList<AssemblyReference::Ptr> m_assemblyReferences;
- QList<ActiveXReference::Ptr> m_activeXReferences;
- QList<ProjectReference::Ptr> m_projectReferences;
- VcDocConstants::DocumentVersion m_docVersion;
+ QList<IReference *> m_references;
};
} // namespace Internal
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp
index 0bb838d9d2..a42dc86d68 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp
@@ -331,7 +331,7 @@ QDomElement VcProjectDocument::toVcDocumentElement(QDomDocument &domXMLDocument)
if (m_files->fileCount() || m_files->fileContainerCount())
vcDocNode.appendChild(m_files->toXMLDomNode(domXMLDocument));
- if (!m_references->isEmpty())
+ if (m_references->referenceCount())
vcDocNode.appendChild(m_references->toXMLDomNode(domXMLDocument));
if (m_globals->globalCount())
@@ -381,7 +381,7 @@ void VcProjectDocument2003::init()
m_documentVersion = VcDocConstants::DV_MSVC_2003;
m_files = Files::Ptr(new Files(this));
m_configurations = Configurations::Ptr(new Configurations(this));
- m_references = References::Ptr(new References(m_documentVersion));
+ m_references = References::Ptr(new References);
}
@@ -487,7 +487,7 @@ void VcProjectDocument2005::init()
m_documentVersion = VcDocConstants::DV_MSVC_2005;
m_files = Files::Ptr(new Files(this));
m_configurations = Configurations::Ptr(new Configurations(this));
- m_references = References::Ptr(new References(m_documentVersion));
+ m_references = References::Ptr(new References);
}
void VcProjectDocument2005::processNode(const QDomNode &node)
@@ -614,7 +614,7 @@ void VcProjectDocument2008::init()
m_documentVersion = VcDocConstants::DV_MSVC_2008;
m_files = Files::Ptr(new Files(this));
m_configurations = Configurations::Ptr(new Configurations(this));
- m_references = References::Ptr(new References(m_documentVersion));
+ m_references = References::Ptr(new References);
}
void VcProjectDocument2008::processNode(const QDomNode &node)