1 /*! 2 @file 3 @author Albert Semenov 4 @date 12/2010 5 */ 6 7 #include "Precompiled.h" 8 #include "PanelTemplateProperties.h" 9 #include "Localise.h" 10 #include "EditorWidgets.h" 11 #include "PropertyFieldManager.h" 12 #include "UndoManager.h" 13 14 namespace tools 15 { 16 PanelTemplateProperties()17 PanelTemplateProperties::PanelTemplateProperties() : 18 BasePanelViewItem("PanelTemplateProperties.layout"), 19 mCurrentWidget(nullptr) 20 { 21 } 22 initialise()23 void PanelTemplateProperties::initialise() 24 { 25 mPanelCell->setCaption(replaceTags("PanelTemplatePropertiesName")); 26 } 27 shutdown()28 void PanelTemplateProperties::shutdown() 29 { 30 destroyPropertyFields(); 31 } 32 AddParametrs(WidgetStyle * widgetType,WidgetContainer * widgetContainer,MyGUI::Widget * _currentWidget)33 void PanelTemplateProperties::AddParametrs(WidgetStyle* widgetType, WidgetContainer* widgetContainer, MyGUI::Widget* _currentWidget) 34 { 35 if (widgetType != nullptr) 36 { 37 for (MyGUI::VectorStringPairs::iterator iter = widgetType->templateData.begin(); iter != widgetType->templateData.end(); ++iter) 38 { 39 std::string value = widgetContainer->getUserData(iter->first); 40 41 IPropertyField* field = PropertyFieldManager::getInstance().createPropertyField(mWidgetClient, iter->second); 42 field->setTarget(_currentWidget); 43 field->setName(iter->first); 44 field->setValue(value); 45 field->eventAction = MyGUI::newDelegate(this, &PanelTemplateProperties::notifyAction); 46 mFields.push_back(field); 47 } 48 } 49 } 50 update(MyGUI::Widget * _currentWidget,WidgetStyle * _widgetType)51 void PanelTemplateProperties::update(MyGUI::Widget* _currentWidget, WidgetStyle* _widgetType) 52 { 53 destroyPropertyFields(); 54 55 mCurrentWidget = _currentWidget; 56 if (mCurrentWidget == nullptr) 57 return; 58 59 WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_currentWidget); 60 61 //mPanelCell->setCaption(replaceTags("PanelTemplatePropertiesName")); 62 63 AddParametrs(_widgetType, widgetContainer, mCurrentWidget); 64 65 bool visible = !mFields.empty(); 66 setVisible(visible); 67 68 updateSize(); 69 } 70 updateSize()71 void PanelTemplateProperties::updateSize() 72 { 73 int height = 0; 74 75 for (VectorPropertyField::iterator item = mFields.begin(); item != mFields.end(); ++ item) 76 { 77 MyGUI::IntSize size = (*item)->getContentSize(); 78 (*item)->setCoord(MyGUI::IntCoord(0, height, mMainWidget->getWidth(), size.height)); 79 height += size.height; 80 } 81 82 mPanelCell->setClientHeight(height); 83 } 84 destroyPropertyFields()85 void PanelTemplateProperties::destroyPropertyFields() 86 { 87 for (VectorPropertyField::iterator item = mFields.begin(); item != mFields.end(); ++ item) 88 delete (*item); 89 mFields.clear(); 90 } 91 notifyAction(const std::string & _name,const std::string & _value,bool _final)92 void PanelTemplateProperties::notifyAction(const std::string& _name, const std::string& _value, bool _final) 93 { 94 if (_final) 95 { 96 WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget); 97 widgetContainer->setUserData(_name, _value); 98 99 UndoManager::getInstance().addValue(PR_PROPERTIES); 100 } 101 } 102 103 } 104