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