summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadovan Zivkovic <pivonroll@gmail.com>2013-10-11 11:10:26 +0200
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-03-11 19:55:00 +0100
commit1acbf031019b8cc29b3966e7c905b7d633a4177f (patch)
treeae4d8aae62f687808ea9991d5ded24e105f1c70e
parent790012e70190a4973ed81fced928793500836a69 (diff)
downloadqt-creator-1acbf031019b8cc29b3966e7c905b7d633a4177f.tar.gz
PublishingData implements IPublishingData interface.
Change-Id: Ic2438a94cc5ef4a59b2234729255ee6d18a02916 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
-rw-r--r--src/plugins/vcprojectmanager/interfaces/interfaces.pri3
-rw-r--r--src/plugins/vcprojectmanager/interfaces/ipublishingdata.h55
-rw-r--r--src/plugins/vcprojectmanager/interfaces/ipublishingitem.h1
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/publishingdata.cpp65
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/publishingdata.h20
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/publishingitem.cpp5
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/publishingitem.h3
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp3
8 files changed, 105 insertions, 50 deletions
diff --git a/src/plugins/vcprojectmanager/interfaces/interfaces.pri b/src/plugins/vcprojectmanager/interfaces/interfaces.pri
index add4158f12..0ef761ea46 100644
--- a/src/plugins/vcprojectmanager/interfaces/interfaces.pri
+++ b/src/plugins/vcprojectmanager/interfaces/interfaces.pri
@@ -27,4 +27,5 @@ HEADERS += \
interfaces/itoolfiles.h \
interfaces/iplatform.h \
interfaces/iplatforms.h \
- interfaces/ipublishingitem.h
+ interfaces/ipublishingitem.h \
+ interfaces/ipublishingdata.h
diff --git a/src/plugins/vcprojectmanager/interfaces/ipublishingdata.h b/src/plugins/vcprojectmanager/interfaces/ipublishingdata.h
new file mode 100644
index 0000000000..b29bc53d8a
--- /dev/null
+++ b/src/plugins/vcprojectmanager/interfaces/ipublishingdata.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_IPUBLISHINGDATA_H
+#define VCPROJECTMANAGER_INTERNAL_IPUBLISHINGDATA_H
+
+#include "../vcprojectmodel/ivcprojectnodemodel.h"
+
+namespace VcProjectManager {
+namespace Internal {
+
+class IPublishingItem;
+class IAttributeContainer;
+
+class IPublishingData : public IVcProjectXMLNode
+{
+public :
+ virtual ~IPublishingData() {}
+ virtual void addPublishingItem(IPublishingItem *item) = 0;
+ virtual void removePublishingItem(IPublishingItem *item) = 0;
+ virtual int publishingItemCount() const = 0;
+ virtual IPublishingItem* publishingItem(int index) const = 0;
+ virtual IAttributeContainer* attributeContainer() const = 0;
+};
+
+} // Internal
+} // VcProjectManager
+
+#endif // VCPROJECTMANAGER_INTERNAL_IPUBLISHINGDATA_H
diff --git a/src/plugins/vcprojectmanager/interfaces/ipublishingitem.h b/src/plugins/vcprojectmanager/interfaces/ipublishingitem.h
index 18597fe4ff..df912b3b05 100644
--- a/src/plugins/vcprojectmanager/interfaces/ipublishingitem.h
+++ b/src/plugins/vcprojectmanager/interfaces/ipublishingitem.h
@@ -42,6 +42,7 @@ class IPublishingItem : public IVcProjectXMLNode
public:
virtual ~IPublishingItem() {}
virtual IAttributeContainer* attributeContainer() const = 0;
+ virtual IPublishingItem* clone() const = 0;
};
} // Internal
} // VcProjectManager
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/publishingdata.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/publishingdata.cpp
index 6fe1a09370..e9c01c8de8 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/publishingdata.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/publishingdata.cpp
@@ -30,6 +30,8 @@
#include "publishingdata.h"
#include "generalattributecontainer.h"
+#include <utils/qtcassert.h>
+
namespace VcProjectManager {
namespace Internal {
@@ -43,8 +45,8 @@ PublishingData::PublishingData(const PublishingData &data)
m_attributeContainer = new GeneralAttributeContainer;
*m_attributeContainer = *data.m_attributeContainer;
- foreach (const PublishingItem::Ptr &item, data.m_publishingItems)
- m_publishingItems.append(PublishingItem::Ptr(new PublishingItem(*item)));
+ foreach (const IPublishingItem *item, data.m_publishingItems)
+ m_publishingItems.append(item->clone());
}
PublishingData &PublishingData::operator =(const PublishingData &data)
@@ -52,16 +54,18 @@ PublishingData &PublishingData::operator =(const PublishingData &data)
if (this != &data) {
*m_attributeContainer = *data.m_attributeContainer;
+ qDeleteAll(m_publishingItems);
m_publishingItems.clear();
- foreach (const PublishingItem::Ptr &item, data.m_publishingItems)
- m_publishingItems.append(PublishingItem::Ptr(new PublishingItem(*item)));
+ foreach (const IPublishingItem *item, data.m_publishingItems)
+ m_publishingItems.append(item->clone());
}
return *this;
}
PublishingData::~PublishingData()
{
- m_publishingItems.clear();
+ qDeleteAll(m_publishingItems);
+ delete m_attributeContainer;
}
void PublishingData::processNode(const QDomNode &node)
@@ -90,56 +94,49 @@ QDomNode PublishingData::toXMLDomNode(QDomDocument &domXMLDocument) const
QDomElement publishingDataNode = domXMLDocument.createElement(QLatin1String("PublishingData"));
m_attributeContainer->appendToXMLNode(publishingDataNode);
- foreach (const PublishingItem::Ptr &publish, m_publishingItems)
+ foreach (const IPublishingItem *publish, m_publishingItems)
publishingDataNode.appendChild(publish->toXMLDomNode(domXMLDocument));
return publishingDataNode;
}
-bool PublishingData::isEmpty() const
-{
- return m_publishingItems.isEmpty() && !m_attributeContainer->getAttributeCount();
-}
-
-void PublishingData::processPublishingItem(const QDomNode &publishingItemNode)
+void PublishingData::addPublishingItem(IPublishingItem *item)
{
- PublishingItem::Ptr publishingItem(new PublishingItem);
- m_publishingItems.append(publishingItem);
- publishingItem->processNode(publishingItemNode);
+ if (!item || m_publishingItems.contains(item))
+ return;
- // process next sibling
- QDomNode nextSibling = publishingItemNode.nextSibling();
- if (!nextSibling.isNull())
- processPublishingItem(nextSibling);
+ m_publishingItems.append(item);
}
-void PublishingData::addPublishingItem(PublishingItem::Ptr item)
+void PublishingData::removePublishingItem(IPublishingItem *item)
{
- if (m_publishingItems.contains(item))
+ if (!item || !m_publishingItems.contains(item))
return;
- m_publishingItems.append(item);
+ m_publishingItems.removeOne(item);
+ delete item;
}
-void PublishingData::removePublishingItem(PublishingItem::Ptr item)
+int PublishingData::publishingItemCount() const
{
- m_publishingItems.removeAll(item);
+ return m_publishingItems.size();
}
-QList<PublishingItem::Ptr> PublishingData::publishingItems() const
+IPublishingItem *PublishingData::publishingItem(int index) const
{
- return m_publishingItems;
+ QTC_ASSERT(0 <= index && index < m_publishingItems.size(), return 0);
+ return m_publishingItems[index];
}
-QList<PublishingItem::Ptr> PublishingData::publishingItems(const QString &attributeName, const QString &attributeValue) const
+void PublishingData::processPublishingItem(const QDomNode &publishingItemNode)
{
- QList<PublishingItem::Ptr> items;
-
- foreach (const PublishingItem::Ptr &item, m_publishingItems) {
- if (item->attributeContainer()->attributeValue(attributeName) == attributeValue)
- items.append(item);
- }
+ PublishingItem *publishingItem(new PublishingItem);
+ m_publishingItems.append(publishingItem);
+ publishingItem->processNode(publishingItemNode);
- return items;
+ // process next sibling
+ QDomNode nextSibling = publishingItemNode.nextSibling();
+ if (!nextSibling.isNull())
+ processPublishingItem(nextSibling);
}
IAttributeContainer *PublishingData::attributeContainer() const
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/publishingdata.h b/src/plugins/vcprojectmanager/vcprojectmodel/publishingdata.h
index 18b7a0c055..43bd4fc89b 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/publishingdata.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/publishingdata.h
@@ -30,7 +30,7 @@
#ifndef VCPROJECTMANAGER_INTERNAL_PUBLISHINGDATA_H
#define VCPROJECTMANAGER_INTERNAL_PUBLISHINGDATA_H
-#include "ivcprojectnodemodel.h"
+#include "../interfaces/ipublishingdata.h"
#include "publishingitem.h"
@@ -40,7 +40,7 @@ namespace Internal {
class IAttributeContainer;
class GeneralAttributeContainer;
-class PublishingData : public IVcProjectXMLNode
+class PublishingData : public IPublishingData
{
public:
typedef QSharedPointer<PublishingData> Ptr;
@@ -54,21 +54,17 @@ public:
VcNodeWidget* createSettingsWidget();
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
- bool isEmpty() const;
-
- void processPublishingItem(const QDomNode &publishingItem);
-
- void addPublishingItem(PublishingItem::Ptr item);
- void removePublishingItem(PublishingItem::Ptr item);
- QList<PublishingItem::Ptr> publishingItems() const;
- QList<PublishingItem::Ptr> publishingItems(const QString &attributeName, const QString &attributeValue) const;
-
+ void addPublishingItem(IPublishingItem *item);
+ void removePublishingItem(IPublishingItem *item);
+ int publishingItemCount() const;
+ IPublishingItem *publishingItem(int index) const;
IAttributeContainer* attributeContainer() const;
private:
+ void processPublishingItem(const QDomNode &publishingItem);
void processNodeAttributes(const QDomElement &element);
- QList<PublishingItem::Ptr> m_publishingItems;
+ QList<IPublishingItem *> m_publishingItems;
GeneralAttributeContainer *m_attributeContainer;
};
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/publishingitem.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/publishingitem.cpp
index 5ec8d9f49e..a090756827 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/publishingitem.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/publishingitem.cpp
@@ -81,6 +81,11 @@ IAttributeContainer *PublishingItem::attributeContainer() const
return m_attributeContainer;
}
+IPublishingItem *PublishingItem::clone() const
+{
+ return new PublishingItem(*this);
+}
+
void PublishingItem::processNodeAttributes(const QDomElement &element)
{
QDomNamedNodeMap namedNodeMap = element.attributes();
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/publishingitem.h b/src/plugins/vcprojectmanager/vcprojectmodel/publishingitem.h
index 9521f17199..8cbf5ae7e1 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/publishingitem.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/publishingitem.h
@@ -44,8 +44,6 @@ class GeneralAttributeContainer;
class PublishingItem : public IPublishingItem
{
public:
- typedef QSharedPointer<PublishingItem> Ptr;
-
PublishingItem();
PublishingItem(const PublishingItem &item);
PublishingItem& operator=(const PublishingItem &item);
@@ -56,6 +54,7 @@ public:
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
IAttributeContainer* attributeContainer() const;
+ IPublishingItem* clone() const;
private:
void processNodeAttributes(const QDomElement &element);
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp
index aeb512199d..1133d1dbab 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp
@@ -42,6 +42,7 @@
#include "../widgets/projectsettingswidget.h"
#include "../widgets/configurationswidgets.h"
#include "configurationcontainer.h"
+#include "../interfaces/iattributecontainer.h"
namespace VcProjectManager {
namespace Internal {
@@ -747,7 +748,7 @@ QDomElement VcProjectDocument2008::toVcDocumentElement(QDomDocument &domXMLDocum
if (!m_targetFrameworkVersion.isEmpty())
vcDocNode.setAttribute(QLatin1String("TargetFrameworkVersion"), m_targetFrameworkVersion);
- if (!m_publishingData->isEmpty())
+ if (m_publishingData->publishingItemCount() && m_publishingData->attributeContainer()->getAttributeCount())
vcDocNode.appendChild(m_publishingData->toXMLDomNode(domXMLDocument));
return vcDocNode;