7
#include "Precompiled.h"
8
#include "DataSelectorManager.h"
9
#include "DataTypeManager.h"
14
DataSelectorManager* DataSelectorManager::mInstance = nullptr;
16
DataSelectorManager::DataSelectorManager()
21
DataSelectorManager::~DataSelectorManager()
26
DataSelectorManager& DataSelectorManager::getInstance()
31
DataSelectorManager* DataSelectorManager::getInstancePtr()
36
void DataSelectorManager::initialise()
40
void DataSelectorManager::shutdown()
45
void DataSelectorManager::clear()
47
for (MapEvent::iterator event = mEvents.begin(); event != mEvents.end(); event ++)
48
delete (*event).second;
52
DataSelectorManager::EventType* DataSelectorManager::getEvent(const std::string& _dataType)
54
MapEvent::iterator event = mEvents.find(_dataType);
55
if (event != mEvents.end())
56
return (*event).second;
58
EventType* type = new EventType();
59
mEvents[_dataType] = type;
63
void DataSelectorManager::changeParent(DataPtr _parent)
65
onChangeData(_parent, _parent->getType(), false);
68
void DataSelectorManager::changeParentSelection(DataPtr _parent, DataPtr _selectedChild)
70
_parent->setChildSelected(_selectedChild);
72
onChangeData(_parent, _parent->getType(), true);
75
void DataSelectorManager::onChangeData(DataPtr _parent, DataTypePtr _type, bool _changeOnlySelection)
77
EventType* event = getEvent(_type->getName());
80
event->operator()(_parent, _changeOnlySelection);
83
DataPtr childSelected = nullptr;
84
if (_parent != nullptr)
85
childSelected = _parent->getChildSelected();
87
const DataType::VectorString& childs = _type->getChilds();
88
for (DataType::VectorString::const_iterator childName = childs.begin(); childName != childs.end(); childName ++)
90
DataTypePtr childType = DataTypeManager::getInstance().getType(*childName);
91
if (childType != nullptr)
93
DataPtr child = childSelected;
94
if (child != nullptr && child->getType() != childType)
99
DataPtr subChildSelected = child->getChildSelected();
100
if (subChildSelected == nullptr)
102
if (child->getChilds().size() != 0)
104
DataPtr childData = child->getChildByIndex(0);
105
child->setChildSelected(childData);
110
onChangeData(child, childType, false);