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