7
#include "Precompiled.h"
8
#include "StateTextureController.h"
9
#include "FactoryManager.h"
10
#include "DataSelectorManager.h"
11
#include "DataManager.h"
12
#include "PropertyUtility.h"
13
#include "ScopeManager.h"
14
#include "DataUtility.h"
19
FACTORY_ITEM_ATTRIBUTE(StateTextureController)
21
StateTextureController::StateTextureController() :
28
StateTextureController::~StateTextureController()
32
void StateTextureController::setTarget(Control* _control)
34
mControl = _control->findControl<ScopeTextureControl>();
37
void StateTextureController::activate()
39
mParentTypeName = "Skin";
43
ScopeManager::getInstance().eventChangeScope.connect(this, &StateTextureController::notifyChangeScope);
44
notifyChangeScope(ScopeManager::getInstance().getCurrentScope());
47
void StateTextureController::deactivate()
49
ScopeManager::getInstance().eventChangeScope.disconnect(this);
52
void StateTextureController::notifyChangeDataSelector(DataPtr _data, bool _changeOnlySelection)
55
if (mParentData != nullptr && mParentData->getType()->getName() != mParentTypeName)
56
mParentData = nullptr;
59
PropertyPtr property = PropertyUtility::getPropertyByName("Skin", "Texture");
60
if (property != nullptr)
62
texture = property->getValue();
64
if (!property->eventChangeProperty.exist(this, &StateTextureController::notifyChangeProperty))
65
property->eventChangeProperty.connect(this, &StateTextureController::notifyChangeProperty);
69
property = PropertyUtility::getPropertyByName("Skin", "Size");
70
if (property != nullptr)
72
coord = property->getValue();
74
if (!property->eventChangeProperty.exist(this, &StateTextureController::notifyChangeProperty))
75
property->eventChangeProperty.connect(this, &StateTextureController::notifyChangeProperty);
78
if (mParentData != nullptr)
80
for (Data::VectorData::const_iterator child = mParentData->getChilds().begin(); child != mParentData->getChilds().end(); child ++)
82
if ((*child)->getType()->getName() != mThisType)
85
property = (*child)->getProperty("Point");
86
if (!property->eventChangeProperty.exist(this, &StateTextureController::notifyChangeProperty))
87
property->eventChangeProperty.connect(this, &StateTextureController::notifyChangeProperty);
89
property = (*child)->getProperty("Visible");
90
if (!property->eventChangeProperty.exist(this, &StateTextureController::notifyChangeProperty))
91
property->eventChangeProperty.connect(this, &StateTextureController::notifyChangeProperty);
95
updateTexture(texture);
99
void StateTextureController::notifyChangeProperty(PropertyPtr _sender)
104
if (_sender->getOwner()->getType()->getName() == "Skin")
106
if (_sender->getType()->getName() == "Texture")
107
updateTexture(_sender->getValue());
108
else if (_sender->getType()->getName() == "Size")
109
updateCoords(_sender->getValue());
111
else if (_sender->getOwner()->getType()->getName() == "State")
113
if (_sender->getType()->getName() == "Point")
115
else if (_sender->getType()->getName() == "Visible")
120
void StateTextureController::notifyChangeValue(const std::string& _value)
122
if (mParentData != nullptr)
124
DataPtr selected = mParentData->getChildSelected();
125
if (selected != nullptr && selected->getType()->getName() == "State")
127
MyGUI::IntCoord coord = MyGUI::IntCoord::parse(_value);
128
PropertyPtr property = selected->getProperty("Point");
129
PropertyUtility::executeAction(property, coord.point().print(), true);
134
void StateTextureController::notifyChangeScope(const std::string& _scope)
136
if (mControl == nullptr)
139
if (_scope == mScopeName)
143
mControl->eventChangeValue.connect(this, &StateTextureController::notifyChangeValue);
144
mControl->clearAll();
146
DataSelectorManager::getInstance().getEvent(mParentTypeName)->connect(this, &StateTextureController::notifyChangeDataSelector);
147
mParentData = DataUtility::getSelectedDataByType(mParentTypeName);
148
notifyChangeDataSelector(mParentData, false);
150
mControl->getRoot()->setUserString("CurrentScopeController", mScopeName);
159
mControl->eventChangeValue.disconnect(this);
161
DataSelectorManager::getInstance().getEvent(mParentTypeName)->disconnect(this);
162
mParentData = nullptr;
164
// �� ��� ��������� �������� ���������� ���
165
std::string value = mControl->getRoot()->getUserString("CurrentScopeController");
166
if (value == mScopeName)
168
mControl->getRoot()->setUserString("CurrentScopeController", "");
169
notifyChangeDataSelector(mParentData, false);
171
mControl->clearAll();
179
void StateTextureController::updateCoords(const std::string& _value)
181
MyGUI::IntCoord coord;
182
if (MyGUI::utility::parseComplex(_value, coord.left, coord.top, coord.width, coord.height))
183
mSize = coord.size();
190
void StateTextureController::updateFrames()
194
if (mParentData != nullptr)
196
DataPtr selected = mParentData->getChildSelected();
197
for (Data::VectorData::const_iterator child = mParentData->getChilds().begin(); child != mParentData->getChilds().end(); child ++)
199
if ((*child)->getType()->getName() != mThisType)
202
bool visible = (*child)->getPropertyValue<bool>("Visible");
203
MyGUI::IntPoint value = (*child)->getPropertyValue<MyGUI::IntPoint>("Point");
205
if (selected == *child)
208
mControl->setCoordValue(MyGUI::IntCoord(value, mSize), ScopeTextureControl::SelectorPosition);
210
mControl->clearCoordValue();
215
mFrames.push_back(std::make_pair(MyGUI::IntCoord(value, mSize), ScopeTextureControl::SelectorPosition));
219
if (selected == nullptr)
221
mControl->clearCoordValue();
225
if (mControl != nullptr)
226
mControl->setViewSelectors(mFrames);
229
void StateTextureController::updateTexture(const std::string& _value)
231
mControl->setTextureValue(_value);
232
mControl->resetTextureRegion();