1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
/*!
@file
@author Albert Semenov
@date 07/2012
*/
#include "Precompiled.h"
#include "DataSelectorManager.h"
#include "DataTypeManager.h"
namespace tools
{
DataSelectorManager* DataSelectorManager::mInstance = nullptr;
DataSelectorManager::DataSelectorManager()
{
mInstance = this;
}
DataSelectorManager::~DataSelectorManager()
{
mInstance = nullptr;
}
DataSelectorManager& DataSelectorManager::getInstance()
{
return *mInstance;
}
DataSelectorManager* DataSelectorManager::getInstancePtr()
{
return mInstance;
}
void DataSelectorManager::initialise()
{
}
void DataSelectorManager::shutdown()
{
clear();
}
void DataSelectorManager::clear()
{
for (MapEvent::iterator event = mEvents.begin(); event != mEvents.end(); event ++)
delete (*event).second;
mEvents.clear();
}
DataSelectorManager::EventType* DataSelectorManager::getEvent(const std::string& _dataType)
{
MapEvent::iterator event = mEvents.find(_dataType);
if (event != mEvents.end())
return (*event).second;
EventType* type = new EventType();
mEvents[_dataType] = type;
return type;
}
void DataSelectorManager::changeParent(DataPtr _parent)
{
onChangeData(_parent, _parent->getType(), false);
}
void DataSelectorManager::changeParentSelection(DataPtr _parent, DataPtr _selectedChild)
{
_parent->setChildSelected(_selectedChild);
onChangeData(_parent, _parent->getType(), true);
}
void DataSelectorManager::onChangeData(DataPtr _parent, DataTypePtr _type, bool _changeOnlySelection)
{
EventType* event = getEvent(_type->getName());
if (event != nullptr)
{
event->operator()(_parent, _changeOnlySelection);
}
DataPtr childSelected = nullptr;
if (_parent != nullptr)
childSelected = _parent->getChildSelected();
const DataType::VectorString& childs = _type->getChilds();
for (DataType::VectorString::const_iterator childName = childs.begin(); childName != childs.end(); childName ++)
{
DataTypePtr childType = DataTypeManager::getInstance().getType(*childName);
if (childType != nullptr)
{
DataPtr child = childSelected;
if (child != nullptr && child->getType() != childType)
child = nullptr;
if (child != nullptr)
{
DataPtr subChildSelected = child->getChildSelected();
if (subChildSelected == nullptr)
{
if (child->getChilds().size() != 0)
{
DataPtr childData = child->getChildByIndex(0);
child->setChildSelected(childData);
}
}
}
onChangeData(child, childType, false);
}
}
}
}
|