#include "ct_abstractgroupmodelt.h" template< class ItemT, class InheritedT > CT_AbstractGroupModelT::CT_AbstractGroupModelT(const QString &displayableName) : InheritedT(displayableName) { } template< class ItemT, class InheritedT > CT_AbstractGroupModelT::~CT_AbstractGroupModelT() { clear(); } template< class ItemT, class InheritedT > typename CT_AbstractGroupModelT::GroupType* CT_AbstractGroupModelT::rootGroup() const { GroupType* parent = const_cast(this); GroupType* p = nullptr; // on remonte tout en haut de l'arbre while((p = parent->parentGroup()) != nullptr) parent = p; return parent; } template< class ItemT, class InheritedT > typename CT_AbstractGroupModelT::GroupType* CT_AbstractGroupModelT::parentGroup() const { return dynamic_cast(this->parentModel()); } template< class ItemT, class InheritedT > void CT_AbstractGroupModelT::addGroup(typename CT_AbstractGroupModelT::GroupType* group) { group->setParentModel(this); _groups.append(group); groupAdded(group); } template< class ItemT, class InheritedT > bool CT_AbstractGroupModelT::removeGroup(typename CT_AbstractGroupModelT::GroupType* group) { if(_groups.removeOne(group)) { groupRemoved(group); delete group; return true; } return false; } template< class ItemT, class InheritedT > void CT_AbstractGroupModelT::addItem(ItemT* item) { item->setParentModel(this); _items.append(item); itemAdded(item); } template< class ItemT, class InheritedT > bool CT_AbstractGroupModelT::removeItem(ItemT* item) { if(_items.removeOne(item)) { itemRemoved(item); delete item; return true; } return false; } template< class ItemT, class InheritedT > const typename CT_AbstractGroupModelT::GroupCollection& CT_AbstractGroupModelT::groups() const { return _groups; } template< class ItemT, class InheritedT > const typename CT_AbstractGroupModelT::ItemCollection& CT_AbstractGroupModelT::items() const { return _items; } template< class ItemT, class InheritedT > bool CT_AbstractGroupModelT::visitGroups(const typename CT_AbstractGroupModelT::GroupsVisitor& visitor) const { for(GroupType* group : _groups) { if(!visitor(group)) return false; } return true; } template< class ItemT, class InheritedT > bool CT_AbstractGroupModelT::visitItems(const typename CT_AbstractGroupModelT::ItemsVisitor& visitor) const { for(ItemT* item : _items) { if(!visitor(item)) return false; } return true; } template< class ItemT, class InheritedT > void CT_AbstractGroupModelT::clearGroups() { for(GroupType* group : _groups) { groupRemoved(group); delete group; } _groups.clear(); } template< class ItemT, class InheritedT > void CT_AbstractGroupModelT::clearItems() { for(ItemT* item : _items) { itemRemoved(item); delete item; } _items.clear(); } template< class ItemT, class InheritedT > void CT_AbstractGroupModelT::clear() { clearGroups(); clearItems(); } template< class ItemT, class InheritedT > bool CT_AbstractGroupModelT::visitChildrens(const typename InheritedT::ChildrenVisitor& visitor) const { for(GroupType* group : _groups) { if(!visitor(group)) return false; } for(ItemT* item : _items) { if(!visitor(item)) return false; } return true; } template< class ItemT, class InheritedT > bool CT_AbstractGroupModelT::isEmpty() const { return (_groups.isEmpty() && _items.isEmpty()); }