1 /*!
2 	@file
3 	@author		Albert Semenov
4 	@date		07/2012
5 */
6 
7 #include "Precompiled.h"
8 #include "PropertyPanelController.h"
9 #include "DataSelectorManager.h"
10 #include "DataManager.h"
11 #include "ScopeManager.h"
12 #include "DataTypeManager.h"
13 #include "DataUtility.h"
14 
15 namespace tools
16 {
17 
PropertyPanelController()18 	PropertyPanelController::PropertyPanelController() :
19 		mControl(nullptr),
20 		mParentType(nullptr)
21 	{
22 	}
23 
setTarget(Control * _control)24 	void PropertyPanelController::setTarget(Control* _control)
25 	{
26 		mControl = _control->findControl<PropertyPanelControl>();
27 	}
28 
activate()29 	void PropertyPanelController::activate()
30 	{
31 		ScopeManager::getInstance().eventChangeScope.connect(this, &PropertyPanelController::notifyChangeScope);
32 		notifyChangeScope(ScopeManager::getInstance().getCurrentScope());
33 	}
34 
deactivate()35 	void PropertyPanelController::deactivate()
36 	{
37 		ScopeManager::getInstance().eventChangeScope.disconnect(this);
38 	}
39 
notifyChangeScope(const std::string & _scope)40 	void PropertyPanelController::notifyChangeScope(const std::string& _scope)
41 	{
42 		if (mParentType != nullptr)
43 		{
44 			DataSelectorManager::getInstance().getEvent(mParentType->getName())->disconnect(this);
45 			mParentType = nullptr;
46 		}
47 
48 		mParentType = DataTypeManager::getInstance().getParentType(_scope);
49 
50 		if (mParentType != nullptr)
51 		{
52 			DataSelectorManager::getInstance().getEvent(mParentType->getName())->connect(this, &PropertyPanelController::notifyChangeDataSelector);
53 
54 			DataPtr parentData = DataUtility::getSelectedDataByType(mParentType->getName());
55 			notifyChangeDataSelector(parentData, false);
56 		}
57 	}
58 
notifyChangeDataSelector(DataPtr _data,bool _changeOnlySelection)59 	void PropertyPanelController::notifyChangeDataSelector(DataPtr _data, bool _changeOnlySelection)
60 	{
61 		if (mControl != nullptr)
62 		{
63 			DataPtr selected = _data != nullptr ? _data->getChildSelected() : nullptr;
64 
65 			// выделяем только данные с типом скопа
66 			if (selected != nullptr)
67 			{
68 				if (selected->getType()->getName() != ScopeManager::getInstance().getCurrentScope() &&
69 					selected->getType()->getFriend() != ScopeManager::getInstance().getCurrentScope())
70 				selected = nullptr;
71 			}
72 
73 			mControl->setCurrentData(selected);
74 		}
75 	}
76 
77 }
78