diff options
author | Radovan Zivkovic <pivonroll@gmail.com> | 2013-10-11 11:10:26 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2014-03-11 19:55:00 +0100 |
commit | 1acbf031019b8cc29b3966e7c905b7d633a4177f (patch) | |
tree | ae4d8aae62f687808ea9991d5ded24e105f1c70e | |
parent | 790012e70190a4973ed81fced928793500836a69 (diff) | |
download | qt-creator-1acbf031019b8cc29b3966e7c905b7d633a4177f.tar.gz |
PublishingData implements IPublishingData interface.
Change-Id: Ic2438a94cc5ef4a59b2234729255ee6d18a02916
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
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; |