3
@author Georgiy Evmenov
7
#include "Precompiled.h"
10
#include "PanelItems.h"
11
#include "EditorWidgets.h"
12
#include "WidgetTypes.h"
13
#include "UndoManager.h"
18
PanelItems::PanelItems() :
19
BasePanelViewItem("PanelItems.layout"),
23
mButtonDelete(nullptr),
24
mCurrentWidget(nullptr),
31
void PanelItems::initialise()
33
mPanelCell->setCaption(replaceTags("Items"));
35
assignWidget(mEdit, "edit");
36
assignWidget(mList, "list");
37
assignWidget(mButtonAdd, "buttonAdd");
38
assignWidget(mButtonDelete, "buttonDelete");
40
mButtonAdd->eventMouseButtonClick += MyGUI::newDelegate(this, &PanelItems::notifyAddItem);
41
mButtonDelete->eventMouseButtonClick += MyGUI::newDelegate(this, &PanelItems::notifyDeleteItem);
42
mEdit->eventEditSelectAccept += MyGUI::newDelegate(this, &PanelItems::notifyUpdateItem);
43
mList->eventListChangePosition += MyGUI::newDelegate(this, &PanelItems::notifySelectItem);
45
mButtonLeft = mButtonAdd->getLeft();
46
mButtonRight = mMainWidget->getWidth() - mButtonDelete->getRight();
47
mButtonSpace = mButtonDelete->getLeft() - mButtonAdd->getRight();
50
void PanelItems::shutdown()
54
void PanelItems::notifyChangeWidth(int _width)
56
int width = mMainWidget->getClientCoord().width;
58
int half_width = (width - (mButtonLeft + mButtonRight + mButtonSpace)) / 2;
59
mButtonAdd->setSize(half_width, mButtonAdd->getHeight());
60
mButtonDelete->setCoord(mButtonAdd->getRight() + mButtonSpace, mButtonDelete->getTop(), width - (mButtonAdd->getRight() + mButtonSpace + mButtonRight), mButtonDelete->getHeight());
63
void PanelItems::update(MyGUI::Widget* _currentWidget)
65
mCurrentWidget = _currentWidget;
67
if (mCurrentWidget == nullptr)
73
selectItem(mCurrentWidget);
75
WidgetStyle* widgetType = WidgetTypes::getInstance().findWidgetStyle(mCurrentWidget->getTypeName());
77
if (widgetType->many_items)
81
mPanelCell->setCaption(replaceTags("Items"));
85
mEdit->setCaption("");
95
void PanelItems::selectItem(MyGUI::Widget* _widget)
97
MyGUI::IItem* item = dynamic_cast<MyGUI::IItem*>(_widget);
98
if (item != nullptr && item->_getItemContainer() != nullptr)
99
item->_getItemContainer()->_setItemSelected(item);
101
if (_widget->getParent() != nullptr)
102
selectItem(_widget->getParent());
105
void PanelItems::updateList()
107
mList->removeAllItems();
109
MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
111
if (itemContainer != nullptr)
113
size_t count = itemContainer->_getItemCount();
114
for (size_t index = 0; index < count; ++ index)
115
mList->addItem(MyGUI::TextIterator::toTagsString(itemContainer->_getItemNameAt(index)));
119
void PanelItems::setContainerProperty(MyGUI::Widget* _widget, const std::string& _key, const std::string& _value)
121
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
124
widgetContainer->clearProperty(_key);
126
widgetContainer->setProperty(_key, _value);
129
void PanelItems::addItem(const std::string& _value)
131
MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
133
if (itemContainer != nullptr)
135
itemContainer->_addItem(_value);
137
MyGUI::Widget* item = itemContainer->_getItemAt(itemContainer->_getItemCount() - 1);
141
WidgetContainer* container = new WidgetContainer(item->getTypeName(), "", item, "");
142
EditorWidgets::getInstance().add(container);
144
setContainerProperty(item, "Caption", _value);
148
addPropertyValue(mCurrentWidget, "AddItem", _value);
151
UndoManager::getInstance().addValue();
155
void PanelItems::removeItem(size_t _index)
157
MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
159
if (itemContainer != nullptr)
161
MyGUI::Widget* item = itemContainer->_getItemAt(_index);
164
erasePropertyValue(mCurrentWidget, _index, "AddItem");
166
// при удалении виджета он сам удалит контейнер
167
itemContainer->_removeItemAt(_index);
171
void PanelItems::notifyAddItem(MyGUI::Widget* _sender)
173
addItem(mEdit->getOnlyText());
174
mList->addItem(MyGUI::TextIterator::toTagsString(mEdit->getOnlyText()));
175
UndoManager::getInstance().addValue();
178
void PanelItems::notifyDeleteItem(MyGUI::Widget* _sender)
180
size_t item = mList->getIndexSelected();
181
if (MyGUI::ITEM_NONE == item)
185
mList->removeItemAt(item);
186
UndoManager::getInstance().addValue();
189
void PanelItems::notifyUpdateItem(MyGUI::EditBox* _widget)
191
size_t item = mList->getIndexSelected();
192
if (MyGUI::ITEM_NONE == item)
198
std::string value = mEdit->getOnlyText();
199
mList->setItemNameAt(item, MyGUI::TextIterator::toTagsString(value));
201
MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
203
if (itemContainer != nullptr)
205
itemContainer->_setItemNameAt(item, value);
206
MyGUI::Widget* widget = itemContainer->_getItemAt(item);
207
if (widget != nullptr)
209
setContainerProperty(widget, "Caption", value);
213
setPropertyValue(mCurrentWidget, item, "AddItem", value);
216
UndoManager::getInstance().addValue();
220
void PanelItems::notifySelectItem(MyGUI::ListBox* _widget, size_t _position)
222
size_t index = mList->getIndexSelected();
223
if (MyGUI::ITEM_NONE == index)
226
const MyGUI::UString& value = mList->getItemNameAt(index);
227
mEdit->setCaption(value);
229
if (mCurrentWidget->isType<MyGUI::TabControl>())
231
mCurrentWidget->castType<MyGUI::TabControl>()->setIndexSelected(index);
235
void PanelItems::setPropertyValue(MyGUI::Widget* _widget, size_t _index, const std::string& _propertyName, const std::string& _propertyValue)
237
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
238
widgetContainer->setPropertyByIndex(_index, _propertyName, _propertyValue);
241
void PanelItems::erasePropertyValue(MyGUI::Widget* _widget, size_t _index, const std::string& _propertyName)
243
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
244
widgetContainer->clearPropertyByIndex(_index, _propertyName);
247
void PanelItems::addPropertyValue(MyGUI::Widget* _widget, const std::string& _propertyName, const std::string& _propertyValue)
249
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
250
widgetContainer->setProperty(_propertyName, _propertyValue, false);
3
@author Georgiy Evmenov
7
#include "Precompiled.h"
10
#include "PanelItems.h"
11
#include "EditorWidgets.h"
12
#include "WidgetTypes.h"
13
#include "UndoManager.h"
18
PanelItems::PanelItems() :
19
BasePanelViewItem("PanelItems.layout"),
23
mButtonDelete(nullptr),
24
mCurrentWidget(nullptr),
31
void PanelItems::initialise()
33
mPanelCell->setCaption(replaceTags("Items"));
35
assignWidget(mEdit, "edit");
36
assignWidget(mList, "list");
37
assignWidget(mButtonAdd, "buttonAdd");
38
assignWidget(mButtonDelete, "buttonDelete");
40
mButtonAdd->eventMouseButtonClick += MyGUI::newDelegate(this, &PanelItems::notifyAddItem);
41
mButtonDelete->eventMouseButtonClick += MyGUI::newDelegate(this, &PanelItems::notifyDeleteItem);
42
mEdit->eventEditSelectAccept += MyGUI::newDelegate(this, &PanelItems::notifyUpdateItem);
43
mList->eventListChangePosition += MyGUI::newDelegate(this, &PanelItems::notifySelectItem);
45
mButtonLeft = mButtonAdd->getLeft();
46
mButtonRight = mMainWidget->getWidth() - mButtonDelete->getRight();
47
mButtonSpace = mButtonDelete->getLeft() - mButtonAdd->getRight();
50
void PanelItems::shutdown()
54
void PanelItems::notifyChangeWidth(int _width)
56
int width = mMainWidget->getClientCoord().width;
58
int half_width = (width - (mButtonLeft + mButtonRight + mButtonSpace)) / 2;
59
mButtonAdd->setSize(half_width, mButtonAdd->getHeight());
60
mButtonDelete->setCoord(mButtonAdd->getRight() + mButtonSpace, mButtonDelete->getTop(), width - (mButtonAdd->getRight() + mButtonSpace + mButtonRight), mButtonDelete->getHeight());
63
void PanelItems::update(MyGUI::Widget* _currentWidget)
65
mCurrentWidget = _currentWidget;
67
if (mCurrentWidget == nullptr)
73
selectItem(mCurrentWidget);
75
WidgetStyle* widgetType = WidgetTypes::getInstance().findWidgetStyle(mCurrentWidget->getTypeName());
77
if (widgetType->many_items)
81
mPanelCell->setCaption(replaceTags("Items"));
85
mEdit->setCaption("");
95
void PanelItems::selectItem(MyGUI::Widget* _widget)
97
MyGUI::IItem* item = dynamic_cast<MyGUI::IItem*>(_widget);
98
if (item != nullptr && item->_getItemContainer() != nullptr)
99
item->_getItemContainer()->_setItemSelected(item);
101
if (_widget->getParent() != nullptr)
102
selectItem(_widget->getParent());
105
void PanelItems::updateList()
107
mList->removeAllItems();
109
MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
111
if (itemContainer != nullptr)
113
size_t count = itemContainer->_getItemCount();
114
for (size_t index = 0; index < count; ++ index)
115
mList->addItem(MyGUI::TextIterator::toTagsString(itemContainer->_getItemNameAt(index)));
119
void PanelItems::setContainerProperty(MyGUI::Widget* _widget, const std::string& _key, const std::string& _value)
121
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
124
widgetContainer->clearProperty(_key);
126
widgetContainer->setProperty(_key, _value);
129
void PanelItems::addItem(const std::string& _value)
131
MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
133
if (itemContainer != nullptr)
135
itemContainer->_addItem(_value);
137
MyGUI::Widget* item = itemContainer->_getItemAt(itemContainer->_getItemCount() - 1);
141
WidgetContainer* container = new WidgetContainer(item->getTypeName(), "", item, "");
142
EditorWidgets::getInstance().add(container);
144
setContainerProperty(item, "Caption", _value);
148
addPropertyValue(mCurrentWidget, "AddItem", _value);
151
UndoManager::getInstance().addValue();
155
void PanelItems::removeItem(size_t _index)
157
MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
159
if (itemContainer != nullptr)
161
MyGUI::Widget* item = itemContainer->_getItemAt(_index);
164
erasePropertyValue(mCurrentWidget, _index, "AddItem");
166
// при удалении виджета он сам удалит контейнер
167
itemContainer->_removeItemAt(_index);
171
void PanelItems::notifyAddItem(MyGUI::Widget* _sender)
173
addItem(mEdit->getOnlyText());
174
mList->addItem(MyGUI::TextIterator::toTagsString(mEdit->getOnlyText()));
175
UndoManager::getInstance().addValue();
178
void PanelItems::notifyDeleteItem(MyGUI::Widget* _sender)
180
size_t item = mList->getIndexSelected();
181
if (MyGUI::ITEM_NONE == item)
185
mList->removeItemAt(item);
186
UndoManager::getInstance().addValue();
189
void PanelItems::notifyUpdateItem(MyGUI::EditBox* _widget)
191
size_t item = mList->getIndexSelected();
192
if (MyGUI::ITEM_NONE == item)
198
std::string value = mEdit->getOnlyText();
199
mList->setItemNameAt(item, MyGUI::TextIterator::toTagsString(value));
201
MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
203
if (itemContainer != nullptr)
205
itemContainer->_setItemNameAt(item, value);
206
MyGUI::Widget* widget = itemContainer->_getItemAt(item);
207
if (widget != nullptr)
209
setContainerProperty(widget, "Caption", value);
213
setPropertyValue(mCurrentWidget, item, "AddItem", value);
216
UndoManager::getInstance().addValue();
220
void PanelItems::notifySelectItem(MyGUI::ListBox* _widget, size_t _position)
222
size_t index = mList->getIndexSelected();
223
if (MyGUI::ITEM_NONE == index)
226
const MyGUI::UString& value = mList->getItemNameAt(index);
227
mEdit->setCaption(value);
229
if (mCurrentWidget->isType<MyGUI::TabControl>())
231
mCurrentWidget->castType<MyGUI::TabControl>()->setIndexSelected(index);
235
void PanelItems::setPropertyValue(MyGUI::Widget* _widget, size_t _index, const std::string& _propertyName, const std::string& _propertyValue)
237
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
238
widgetContainer->setPropertyByIndex(_index, _propertyName, _propertyValue);
241
void PanelItems::erasePropertyValue(MyGUI::Widget* _widget, size_t _index, const std::string& _propertyName)
243
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
244
widgetContainer->clearPropertyByIndex(_index, _propertyName);
247
void PanelItems::addPropertyValue(MyGUI::Widget* _widget, const std::string& _propertyName, const std::string& _propertyValue)
249
WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
250
widgetContainer->setProperty(_propertyName, _propertyValue, false);