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