3
@author Georgiy Evmenov
7
#include "Precompiled.h"
8
#include "PanelUserData.h"
11
#include "UndoManager.h"
12
#include "WidgetStyle.h"
13
#include "WidgetTypes.h"
17
PanelUserData::PanelUserData() :
18
BasePanelViewItem("PanelUserData.layout"),
22
mButtonDelete(nullptr),
24
mCurrentWidget(nullptr),
34
void PanelUserData::initialise()
36
mPanelCell->setCaption(replaceTags("PanelUserDataName"));
38
assignWidget(mEditKey, "editKey");
39
assignWidget(mEditValue, "editValue");
40
assignWidget(mButtonAdd, "buttonAdd");
41
assignWidget(mButtonDelete, "buttonDelete");
42
assignWidget(mMultilist, "multilist");
44
mButtonAdd->eventMouseButtonClick += MyGUI::newDelegate(this, &PanelUserData::notifyAddUserData);
45
mButtonDelete->eventMouseButtonClick += MyGUI::newDelegate(this, &PanelUserData::notifyDeleteUserData);
46
mEditKey->eventEditSelectAccept += MyGUI::newDelegate(this, &PanelUserData::notifyUpdateUserData);
47
mEditValue->eventEditSelectAccept += MyGUI::newDelegate(this, &PanelUserData::notifyUpdateUserData);
48
mMultilist->eventListChangePosition += MyGUI::newDelegate(this, &PanelUserData::notifySelectUserDataItem);
50
mEditLeft = mEditKey->getLeft();
51
mEditRight = mMainWidget->getWidth() - mEditValue->getRight();
52
mEditSpace = mEditValue->getLeft() - mEditKey->getRight();
54
mButtonLeft = mButtonAdd->getLeft();
55
mButtonRight = mMainWidget->getWidth() - mButtonDelete->getRight();
56
mButtonSpace = mButtonDelete->getLeft() - mButtonAdd->getRight();
59
void PanelUserData::shutdown()
63
void PanelUserData::update(MyGUI::Widget* _currentWidget)
65
mCurrentWidget = _currentWidget;
66
if (mCurrentWidget == nullptr)
69
mMultilist->removeAllItems();
71
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_currentWidget);
72
WidgetContainer::UserDataEnumerator userData = widgetContainer->getUserDataEnumerator();
73
while (userData.next())
75
if (checkUserData(widgetContainer, userData.current().first))
77
mMultilist->addItem(userData.current().first);
78
mMultilist->setSubItemNameAt(1, mMultilist->getItemCount() - 1, MyGUI::TextIterator::toTagsString(userData.current().second));
83
void PanelUserData::notifyChangeWidth(int _width)
85
int width = mMainWidget->getClientCoord().width;
87
int half_width = (width - (mEditLeft + mEditRight + mEditSpace)) / 2;
88
mEditKey->setSize(half_width, mEditKey->getHeight());
89
mEditValue->setCoord(mEditKey->getRight() + mEditSpace, mEditValue->getTop(), width - (mEditKey->getRight() + mEditSpace + mEditRight), mEditValue->getHeight());
91
half_width = (width - (mButtonLeft + mButtonRight + mButtonSpace)) / 2;
92
mButtonAdd->setSize(half_width, mButtonAdd->getHeight());
93
mButtonDelete->setCoord(mButtonAdd->getRight() + mButtonSpace, mButtonDelete->getTop(), width - (mButtonAdd->getRight() + mButtonSpace + mButtonRight), mButtonDelete->getHeight());
96
void PanelUserData::notifyAddUserData(MyGUI::Widget* _sender)
98
std::string key = mEditKey->getOnlyText();
99
std::string value = mEditValue->getOnlyText();
100
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
101
if (!widgetContainer->existUserData(key))
103
mMultilist->addItem(key);
105
mMultilist->setSubItemNameAt(1, mMultilist->findSubItemWith(0, key), MyGUI::TextIterator::toTagsString(value));
106
widgetContainer->setUserData(key, value);
107
UndoManager::getInstance().addValue();
110
void PanelUserData::notifyDeleteUserData(MyGUI::Widget* _sender)
112
size_t item = mMultilist->getIndexSelected();
113
if (MyGUI::ITEM_NONE == item) return;
115
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
116
widgetContainer->clearUserData(mMultilist->getItemNameAt(item));
117
mMultilist->removeItemAt(item);
118
UndoManager::getInstance().addValue();
121
void PanelUserData::notifyUpdateUserData(MyGUI::EditBox* _widget)
123
size_t item = mMultilist->getIndexSelected();
124
if (MyGUI::ITEM_NONE == item)
129
std::string key = mEditKey->getOnlyText();
130
std::string value = mEditValue->getOnlyText();
131
std::string lastkey = mMultilist->getItemNameAt(item);
133
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
134
mMultilist->removeItemAt(mMultilist->findSubItemWith(0, lastkey));
135
widgetContainer->clearUserData(lastkey);
136
if (!widgetContainer->existUserData(key))
138
mMultilist->addItem(key);
140
mMultilist->setSubItemNameAt(1, mMultilist->findSubItemWith(0, key), MyGUI::TextIterator::toTagsString(value));
141
mMultilist->setIndexSelected(mMultilist->findSubItemWith(0, key));
142
widgetContainer->setUserData(key, value);
143
UndoManager::getInstance().addValue();
146
void PanelUserData::notifySelectUserDataItem(MyGUI::MultiListBox* _widget, size_t _index)
148
size_t item = mMultilist->getIndexSelected();
149
if (MyGUI::ITEM_NONE == item) return;
150
std::string key = mMultilist->getSubItemNameAt(0, item);
151
std::string value = mMultilist->getSubItemNameAt(1, item);
152
mEditKey->setOnlyText(key);
153
mEditValue->setCaption(value);
156
bool PanelUserData::checkUserData(WidgetContainer* _widgetContainer, const std::string& _key)
158
if (_key == "LE_TargetWidgetType")
161
std::string widgetTypeName = _widgetContainer->getUserData("LE_TargetWidgetType");
163
WidgetStyle* widgetType = WidgetTypes::getInstance().findWidgetStyle(_widgetContainer->getType());
165
for (MyGUI::VectorStringPairs::iterator iter = widgetType->parameterData.begin(); iter != widgetType->parameterData.end(); ++iter)
167
if ((*iter).first == _key)
171
if (!widgetTypeName.empty())
173
WidgetStyle* widgetTargetType = WidgetTypes::getInstance().findWidgetStyle(widgetTypeName);
175
for (MyGUI::VectorStringPairs::iterator iter = widgetTargetType->templateData.begin(); iter != widgetTargetType->templateData.end(); ++iter)
177
if ((*iter).first == _key)
3
@author Georgiy Evmenov
7
#include "Precompiled.h"
8
#include "PanelUserData.h"
11
#include "UndoManager.h"
12
#include "WidgetStyle.h"
13
#include "WidgetTypes.h"
18
PanelUserData::PanelUserData() :
19
BasePanelViewItem("PanelUserData.layout"),
23
mButtonDelete(nullptr),
25
mCurrentWidget(nullptr),
35
void PanelUserData::initialise()
37
mPanelCell->setCaption(replaceTags("PanelUserDataName"));
39
assignWidget(mEditKey, "editKey");
40
assignWidget(mEditValue, "editValue");
41
assignWidget(mButtonAdd, "buttonAdd");
42
assignWidget(mButtonDelete, "buttonDelete");
43
assignWidget(mMultilist, "multilist");
45
mButtonAdd->eventMouseButtonClick += MyGUI::newDelegate(this, &PanelUserData::notifyAddUserData);
46
mButtonDelete->eventMouseButtonClick += MyGUI::newDelegate(this, &PanelUserData::notifyDeleteUserData);
47
mEditKey->eventEditSelectAccept += MyGUI::newDelegate(this, &PanelUserData::notifyUpdateUserData);
48
mEditValue->eventEditSelectAccept += MyGUI::newDelegate(this, &PanelUserData::notifyUpdateUserData);
49
mMultilist->eventListChangePosition += MyGUI::newDelegate(this, &PanelUserData::notifySelectUserDataItem);
51
mEditLeft = mEditKey->getLeft();
52
mEditRight = mMainWidget->getWidth() - mEditValue->getRight();
53
mEditSpace = mEditValue->getLeft() - mEditKey->getRight();
55
mButtonLeft = mButtonAdd->getLeft();
56
mButtonRight = mMainWidget->getWidth() - mButtonDelete->getRight();
57
mButtonSpace = mButtonDelete->getLeft() - mButtonAdd->getRight();
60
void PanelUserData::shutdown()
64
void PanelUserData::update(MyGUI::Widget* _currentWidget)
66
mCurrentWidget = _currentWidget;
67
if (mCurrentWidget == nullptr)
70
mMultilist->removeAllItems();
72
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_currentWidget);
73
WidgetContainer::UserDataEnumerator userData = widgetContainer->getUserDataEnumerator();
74
while (userData.next())
76
if (checkUserData(widgetContainer, userData.current().first))
78
mMultilist->addItem(userData.current().first);
79
mMultilist->setSubItemNameAt(1, mMultilist->getItemCount() - 1, MyGUI::TextIterator::toTagsString(userData.current().second));
84
void PanelUserData::notifyChangeWidth(int _width)
86
int width = mMainWidget->getClientCoord().width;
88
int half_width = (width - (mEditLeft + mEditRight + mEditSpace)) / 2;
89
mEditKey->setSize(half_width, mEditKey->getHeight());
90
mEditValue->setCoord(mEditKey->getRight() + mEditSpace, mEditValue->getTop(), width - (mEditKey->getRight() + mEditSpace + mEditRight), mEditValue->getHeight());
92
half_width = (width - (mButtonLeft + mButtonRight + mButtonSpace)) / 2;
93
mButtonAdd->setSize(half_width, mButtonAdd->getHeight());
94
mButtonDelete->setCoord(mButtonAdd->getRight() + mButtonSpace, mButtonDelete->getTop(), width - (mButtonAdd->getRight() + mButtonSpace + mButtonRight), mButtonDelete->getHeight());
97
void PanelUserData::notifyAddUserData(MyGUI::Widget* _sender)
99
std::string key = mEditKey->getOnlyText();
100
std::string value = mEditValue->getOnlyText();
101
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
102
if (!widgetContainer->existUserData(key))
104
mMultilist->addItem(key);
106
mMultilist->setSubItemNameAt(1, mMultilist->findSubItemWith(0, key), MyGUI::TextIterator::toTagsString(value));
107
widgetContainer->setUserData(key, value);
108
UndoManager::getInstance().addValue();
111
void PanelUserData::notifyDeleteUserData(MyGUI::Widget* _sender)
113
size_t item = mMultilist->getIndexSelected();
114
if (MyGUI::ITEM_NONE == item) return;
116
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
117
widgetContainer->clearUserData(mMultilist->getItemNameAt(item));
118
mMultilist->removeItemAt(item);
119
UndoManager::getInstance().addValue();
122
void PanelUserData::notifyUpdateUserData(MyGUI::EditBox* _widget)
124
size_t item = mMultilist->getIndexSelected();
125
if (MyGUI::ITEM_NONE == item)
130
std::string key = mEditKey->getOnlyText();
131
std::string value = mEditValue->getOnlyText();
132
std::string lastkey = mMultilist->getItemNameAt(item);
134
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
135
mMultilist->removeItemAt(mMultilist->findSubItemWith(0, lastkey));
136
widgetContainer->clearUserData(lastkey);
137
if (!widgetContainer->existUserData(key))
139
mMultilist->addItem(key);
141
mMultilist->setSubItemNameAt(1, mMultilist->findSubItemWith(0, key), MyGUI::TextIterator::toTagsString(value));
142
mMultilist->setIndexSelected(mMultilist->findSubItemWith(0, key));
143
widgetContainer->setUserData(key, value);
144
UndoManager::getInstance().addValue();
147
void PanelUserData::notifySelectUserDataItem(MyGUI::MultiListBox* _widget, size_t _index)
149
size_t item = mMultilist->getIndexSelected();
150
if (MyGUI::ITEM_NONE == item) return;
151
std::string key = mMultilist->getSubItemNameAt(0, item);
152
std::string value = mMultilist->getSubItemNameAt(1, item);
153
mEditKey->setOnlyText(key);
154
mEditValue->setCaption(value);
157
bool PanelUserData::checkUserData(WidgetContainer* _widgetContainer, const std::string& _key)
159
if (_key == "LE_TargetWidgetType")
162
std::string widgetTypeName = _widgetContainer->getUserData("LE_TargetWidgetType");
164
WidgetStyle* widgetType = WidgetTypes::getInstance().findWidgetStyle(_widgetContainer->getType());
166
for (MyGUI::VectorStringPairs::iterator iter = widgetType->parameterData.begin(); iter != widgetType->parameterData.end(); ++iter)
168
if ((*iter).first == _key)
172
if (!widgetTypeName.empty())
174
WidgetStyle* widgetTargetType = WidgetTypes::getInstance().findWidgetStyle(widgetTypeName);
176
for (MyGUI::VectorStringPairs::iterator iter = widgetTargetType->templateData.begin(); iter != widgetTargetType->templateData.end(); ++iter)
178
if ((*iter).first == _key)