~ubuntu-branches/ubuntu/vivid/mygui/vivid

« back to all changes in this revision

Viewing changes to Tools/LayoutEditor/PanelItems.cpp

  • Committer: Package Import Robot
  • Author(s): Scott Howard, Bret Curtis, Scott Howard
  • Date: 2014-09-18 17:57:48 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20140918175748-dd8va78mvpw1jbes
Tags: 3.2.1-1
[ Bret Curtis ]
* Updated license for majority of files from LGPL to Expat (MIT)

[ Scott Howard ]
* New upstream release
* Updated patch to add build option for system GLEW libraries
* All patches accepted upstream except shared_libraries.patch
* Bumped SONAME due to dropped symbols, updated *.symbols and package
  names
* Updated license of debian/* to Expat with permission of all authors
* Don't install Doxygen autogenerated md5 and map files (thanks
  lintian)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*!
2
 
        @file
3
 
        @author         Georgiy Evmenov
4
 
        @date           09/2008
5
 
*/
6
 
 
7
 
#include "Precompiled.h"
8
 
#include "Common.h"
9
 
#include "Localise.h"
10
 
#include "PanelItems.h"
11
 
#include "EditorWidgets.h"
12
 
#include "WidgetTypes.h"
13
 
#include "UndoManager.h"
14
 
 
15
 
namespace tools
16
 
{
17
 
 
18
 
        PanelItems::PanelItems() :
19
 
                BasePanelViewItem("PanelItems.layout"),
20
 
                mEdit(nullptr),
21
 
                mList(nullptr),
22
 
                mButtonAdd(nullptr),
23
 
                mButtonDelete(nullptr),
24
 
                mCurrentWidget(nullptr),
25
 
                mButtonLeft(0),
26
 
                mButtonRight(0),
27
 
                mButtonSpace(0)
28
 
        {
29
 
        }
30
 
 
31
 
        void PanelItems::initialise()
32
 
        {
33
 
                mPanelCell->setCaption(replaceTags("Items"));
34
 
 
35
 
                assignWidget(mEdit, "edit");
36
 
                assignWidget(mList, "list");
37
 
                assignWidget(mButtonAdd, "buttonAdd");
38
 
                assignWidget(mButtonDelete, "buttonDelete");
39
 
 
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);
44
 
 
45
 
                mButtonLeft = mButtonAdd->getLeft();
46
 
                mButtonRight = mMainWidget->getWidth() - mButtonDelete->getRight();
47
 
                mButtonSpace = mButtonDelete->getLeft() - mButtonAdd->getRight();
48
 
        }
49
 
 
50
 
        void PanelItems::shutdown()
51
 
        {
52
 
        }
53
 
 
54
 
        void PanelItems::notifyChangeWidth(int _width)
55
 
        {
56
 
                int width = mMainWidget->getClientCoord().width;
57
 
 
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());
61
 
        }
62
 
 
63
 
        void PanelItems::update(MyGUI::Widget* _currentWidget)
64
 
        {
65
 
                mCurrentWidget = _currentWidget;
66
 
 
67
 
                if (mCurrentWidget == nullptr)
68
 
                {
69
 
                        setVisible(false);
70
 
                        return;
71
 
                }
72
 
 
73
 
                selectItem(mCurrentWidget);
74
 
 
75
 
                WidgetStyle* widgetType = WidgetTypes::getInstance().findWidgetStyle(mCurrentWidget->getTypeName());
76
 
 
77
 
                if (widgetType->many_items)
78
 
                {
79
 
                        setVisible(true);
80
 
 
81
 
                        mPanelCell->setCaption(replaceTags("Items"));
82
 
 
83
 
                        updateList();
84
 
 
85
 
                        mEdit->setCaption("");
86
 
                        //обновляем кнопки
87
 
                        notifyChangeWidth(0);
88
 
                }
89
 
                else
90
 
                {
91
 
                        setVisible(false);
92
 
                }
93
 
        }
94
 
 
95
 
        void PanelItems::selectItem(MyGUI::Widget* _widget)
96
 
        {
97
 
                MyGUI::IItem* item = dynamic_cast<MyGUI::IItem*>(_widget);
98
 
                if (item != nullptr && item->_getItemContainer() != nullptr)
99
 
                        item->_getItemContainer()->_setItemSelected(item);
100
 
 
101
 
                if (_widget->getParent() != nullptr)
102
 
                        selectItem(_widget->getParent());
103
 
        }
104
 
 
105
 
        void PanelItems::updateList()
106
 
        {
107
 
                mList->removeAllItems();
108
 
 
109
 
                MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
110
 
 
111
 
                if (itemContainer != nullptr)
112
 
                {
113
 
                        size_t count = itemContainer->_getItemCount();
114
 
                        for (size_t index = 0; index < count; ++ index)
115
 
                                mList->addItem(MyGUI::TextIterator::toTagsString(itemContainer->_getItemNameAt(index)));
116
 
                }
117
 
        }
118
 
 
119
 
        void PanelItems::setContainerProperty(MyGUI::Widget* _widget, const std::string& _key, const std::string& _value)
120
 
        {
121
 
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
122
 
 
123
 
                if (_value.empty())
124
 
                        widgetContainer->clearProperty(_key);
125
 
                else
126
 
                        widgetContainer->setProperty(_key, _value);
127
 
        }
128
 
 
129
 
        void PanelItems::addItem(const std::string& _value)
130
 
        {
131
 
                MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
132
 
 
133
 
                if (itemContainer != nullptr)
134
 
                {
135
 
                        itemContainer->_addItem(_value);
136
 
 
137
 
                        MyGUI::Widget* item = itemContainer->_getItemAt(itemContainer->_getItemCount() - 1);
138
 
 
139
 
                        if (item != nullptr)
140
 
                        {
141
 
                                WidgetContainer* container = new WidgetContainer(item->getTypeName(), "", item, "");
142
 
                                EditorWidgets::getInstance().add(container);
143
 
 
144
 
                                setContainerProperty(item, "Caption", _value);
145
 
                        }
146
 
                        else
147
 
                        {
148
 
                                addPropertyValue(mCurrentWidget, "AddItem", _value);
149
 
                        }
150
 
 
151
 
                        UndoManager::getInstance().addValue();
152
 
                }
153
 
        }
154
 
 
155
 
        void PanelItems::removeItem(size_t _index)
156
 
        {
157
 
                MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
158
 
 
159
 
                if (itemContainer != nullptr)
160
 
                {
161
 
                        MyGUI::Widget* item = itemContainer->_getItemAt(_index);
162
 
 
163
 
                        if (item == nullptr)
164
 
                                erasePropertyValue(mCurrentWidget, _index, "AddItem");
165
 
 
166
 
                        // при удалении виджета он сам удалит контейнер
167
 
                        itemContainer->_removeItemAt(_index);
168
 
                }
169
 
        }
170
 
 
171
 
        void PanelItems::notifyAddItem(MyGUI::Widget* _sender)
172
 
        {
173
 
                addItem(mEdit->getOnlyText());
174
 
                mList->addItem(MyGUI::TextIterator::toTagsString(mEdit->getOnlyText()));
175
 
                UndoManager::getInstance().addValue();
176
 
        }
177
 
 
178
 
        void PanelItems::notifyDeleteItem(MyGUI::Widget* _sender)
179
 
        {
180
 
                size_t item = mList->getIndexSelected();
181
 
                if (MyGUI::ITEM_NONE == item)
182
 
                        return;
183
 
 
184
 
                removeItem(item);
185
 
                mList->removeItemAt(item);
186
 
                UndoManager::getInstance().addValue();
187
 
        }
188
 
 
189
 
        void PanelItems::notifyUpdateItem(MyGUI::EditBox* _widget)
190
 
        {
191
 
                size_t item = mList->getIndexSelected();
192
 
                if (MyGUI::ITEM_NONE == item)
193
 
                {
194
 
                        notifyAddItem();
195
 
                        return;
196
 
                }
197
 
 
198
 
                std::string value = mEdit->getOnlyText();
199
 
                mList->setItemNameAt(item, MyGUI::TextIterator::toTagsString(value));
200
 
 
201
 
                MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
202
 
 
203
 
                if (itemContainer != nullptr)
204
 
                {
205
 
                        itemContainer->_setItemNameAt(item, value);
206
 
                        MyGUI::Widget* widget = itemContainer->_getItemAt(item);
207
 
                        if (widget != nullptr)
208
 
                        {
209
 
                                setContainerProperty(widget, "Caption", value);
210
 
                        }
211
 
                        else
212
 
                        {
213
 
                                setPropertyValue(mCurrentWidget, item, "AddItem", value);
214
 
                        }
215
 
 
216
 
                        UndoManager::getInstance().addValue();
217
 
                }
218
 
        }
219
 
 
220
 
        void PanelItems::notifySelectItem(MyGUI::ListBox* _widget, size_t _position)
221
 
        {
222
 
                size_t index = mList->getIndexSelected();
223
 
                if (MyGUI::ITEM_NONE == index)
224
 
                        return;
225
 
 
226
 
                const MyGUI::UString& value = mList->getItemNameAt(index);
227
 
                mEdit->setCaption(value);
228
 
 
229
 
                if (mCurrentWidget->isType<MyGUI::TabControl>())
230
 
                {
231
 
                        mCurrentWidget->castType<MyGUI::TabControl>()->setIndexSelected(index);
232
 
                }
233
 
        }
234
 
 
235
 
        void PanelItems::setPropertyValue(MyGUI::Widget* _widget, size_t _index, const std::string& _propertyName, const std::string& _propertyValue)
236
 
        {
237
 
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
238
 
                widgetContainer->setPropertyByIndex(_index, _propertyName, _propertyValue);
239
 
        }
240
 
 
241
 
        void PanelItems::erasePropertyValue(MyGUI::Widget* _widget, size_t _index, const std::string& _propertyName)
242
 
        {
243
 
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
244
 
                widgetContainer->clearPropertyByIndex(_index, _propertyName);
245
 
        }
246
 
 
247
 
        void PanelItems::addPropertyValue(MyGUI::Widget* _widget, const std::string& _propertyName, const std::string& _propertyValue)
248
 
        {
249
 
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
250
 
                widgetContainer->setProperty(_propertyName, _propertyValue, false);
251
 
        }
252
 
 
253
 
} // namespace tools
 
1
/*!
 
2
        @file
 
3
        @author         Georgiy Evmenov
 
4
        @date           09/2008
 
5
*/
 
6
 
 
7
#include "Precompiled.h"
 
8
#include "Common.h"
 
9
#include "Localise.h"
 
10
#include "PanelItems.h"
 
11
#include "EditorWidgets.h"
 
12
#include "WidgetTypes.h"
 
13
#include "UndoManager.h"
 
14
 
 
15
namespace tools
 
16
{
 
17
 
 
18
        PanelItems::PanelItems() :
 
19
                BasePanelViewItem("PanelItems.layout"),
 
20
                mEdit(nullptr),
 
21
                mList(nullptr),
 
22
                mButtonAdd(nullptr),
 
23
                mButtonDelete(nullptr),
 
24
                mCurrentWidget(nullptr),
 
25
                mButtonLeft(0),
 
26
                mButtonRight(0),
 
27
                mButtonSpace(0)
 
28
        {
 
29
        }
 
30
 
 
31
        void PanelItems::initialise()
 
32
        {
 
33
                mPanelCell->setCaption(replaceTags("Items"));
 
34
 
 
35
                assignWidget(mEdit, "edit");
 
36
                assignWidget(mList, "list");
 
37
                assignWidget(mButtonAdd, "buttonAdd");
 
38
                assignWidget(mButtonDelete, "buttonDelete");
 
39
 
 
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);
 
44
 
 
45
                mButtonLeft = mButtonAdd->getLeft();
 
46
                mButtonRight = mMainWidget->getWidth() - mButtonDelete->getRight();
 
47
                mButtonSpace = mButtonDelete->getLeft() - mButtonAdd->getRight();
 
48
        }
 
49
 
 
50
        void PanelItems::shutdown()
 
51
        {
 
52
        }
 
53
 
 
54
        void PanelItems::notifyChangeWidth(int _width)
 
55
        {
 
56
                int width = mMainWidget->getClientCoord().width;
 
57
 
 
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());
 
61
        }
 
62
 
 
63
        void PanelItems::update(MyGUI::Widget* _currentWidget)
 
64
        {
 
65
                mCurrentWidget = _currentWidget;
 
66
 
 
67
                if (mCurrentWidget == nullptr)
 
68
                {
 
69
                        setVisible(false);
 
70
                        return;
 
71
                }
 
72
 
 
73
                selectItem(mCurrentWidget);
 
74
 
 
75
                WidgetStyle* widgetType = WidgetTypes::getInstance().findWidgetStyle(mCurrentWidget->getTypeName());
 
76
 
 
77
                if (widgetType->many_items)
 
78
                {
 
79
                        setVisible(true);
 
80
 
 
81
                        mPanelCell->setCaption(replaceTags("Items"));
 
82
 
 
83
                        updateList();
 
84
 
 
85
                        mEdit->setCaption("");
 
86
                        //обновляем кнопки
 
87
                        notifyChangeWidth(0);
 
88
                }
 
89
                else
 
90
                {
 
91
                        setVisible(false);
 
92
                }
 
93
        }
 
94
 
 
95
        void PanelItems::selectItem(MyGUI::Widget* _widget)
 
96
        {
 
97
                MyGUI::IItem* item = dynamic_cast<MyGUI::IItem*>(_widget);
 
98
                if (item != nullptr && item->_getItemContainer() != nullptr)
 
99
                        item->_getItemContainer()->_setItemSelected(item);
 
100
 
 
101
                if (_widget->getParent() != nullptr)
 
102
                        selectItem(_widget->getParent());
 
103
        }
 
104
 
 
105
        void PanelItems::updateList()
 
106
        {
 
107
                mList->removeAllItems();
 
108
 
 
109
                MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
 
110
 
 
111
                if (itemContainer != nullptr)
 
112
                {
 
113
                        size_t count = itemContainer->_getItemCount();
 
114
                        for (size_t index = 0; index < count; ++ index)
 
115
                                mList->addItem(MyGUI::TextIterator::toTagsString(itemContainer->_getItemNameAt(index)));
 
116
                }
 
117
        }
 
118
 
 
119
        void PanelItems::setContainerProperty(MyGUI::Widget* _widget, const std::string& _key, const std::string& _value)
 
120
        {
 
121
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
 
122
 
 
123
                if (_value.empty())
 
124
                        widgetContainer->clearProperty(_key);
 
125
                else
 
126
                        widgetContainer->setProperty(_key, _value);
 
127
        }
 
128
 
 
129
        void PanelItems::addItem(const std::string& _value)
 
130
        {
 
131
                MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
 
132
 
 
133
                if (itemContainer != nullptr)
 
134
                {
 
135
                        itemContainer->_addItem(_value);
 
136
 
 
137
                        MyGUI::Widget* item = itemContainer->_getItemAt(itemContainer->_getItemCount() - 1);
 
138
 
 
139
                        if (item != nullptr)
 
140
                        {
 
141
                                WidgetContainer* container = new WidgetContainer(item->getTypeName(), "", item, "");
 
142
                                EditorWidgets::getInstance().add(container);
 
143
 
 
144
                                setContainerProperty(item, "Caption", _value);
 
145
                        }
 
146
                        else
 
147
                        {
 
148
                                addPropertyValue(mCurrentWidget, "AddItem", _value);
 
149
                        }
 
150
 
 
151
                        UndoManager::getInstance().addValue();
 
152
                }
 
153
        }
 
154
 
 
155
        void PanelItems::removeItem(size_t _index)
 
156
        {
 
157
                MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
 
158
 
 
159
                if (itemContainer != nullptr)
 
160
                {
 
161
                        MyGUI::Widget* item = itemContainer->_getItemAt(_index);
 
162
 
 
163
                        if (item == nullptr)
 
164
                                erasePropertyValue(mCurrentWidget, _index, "AddItem");
 
165
 
 
166
                        // при удалении виджета он сам удалит контейнер
 
167
                        itemContainer->_removeItemAt(_index);
 
168
                }
 
169
        }
 
170
 
 
171
        void PanelItems::notifyAddItem(MyGUI::Widget* _sender)
 
172
        {
 
173
                addItem(mEdit->getOnlyText());
 
174
                mList->addItem(MyGUI::TextIterator::toTagsString(mEdit->getOnlyText()));
 
175
                UndoManager::getInstance().addValue();
 
176
        }
 
177
 
 
178
        void PanelItems::notifyDeleteItem(MyGUI::Widget* _sender)
 
179
        {
 
180
                size_t item = mList->getIndexSelected();
 
181
                if (MyGUI::ITEM_NONE == item)
 
182
                        return;
 
183
 
 
184
                removeItem(item);
 
185
                mList->removeItemAt(item);
 
186
                UndoManager::getInstance().addValue();
 
187
        }
 
188
 
 
189
        void PanelItems::notifyUpdateItem(MyGUI::EditBox* _widget)
 
190
        {
 
191
                size_t item = mList->getIndexSelected();
 
192
                if (MyGUI::ITEM_NONE == item)
 
193
                {
 
194
                        notifyAddItem();
 
195
                        return;
 
196
                }
 
197
 
 
198
                std::string value = mEdit->getOnlyText();
 
199
                mList->setItemNameAt(item, MyGUI::TextIterator::toTagsString(value));
 
200
 
 
201
                MyGUI::IItemContainer* itemContainer = dynamic_cast<MyGUI::IItemContainer*>(mCurrentWidget);
 
202
 
 
203
                if (itemContainer != nullptr)
 
204
                {
 
205
                        itemContainer->_setItemNameAt(item, value);
 
206
                        MyGUI::Widget* widget = itemContainer->_getItemAt(item);
 
207
                        if (widget != nullptr)
 
208
                        {
 
209
                                setContainerProperty(widget, "Caption", value);
 
210
                        }
 
211
                        else
 
212
                        {
 
213
                                setPropertyValue(mCurrentWidget, item, "AddItem", value);
 
214
                        }
 
215
 
 
216
                        UndoManager::getInstance().addValue();
 
217
                }
 
218
        }
 
219
 
 
220
        void PanelItems::notifySelectItem(MyGUI::ListBox* _widget, size_t _position)
 
221
        {
 
222
                size_t index = mList->getIndexSelected();
 
223
                if (MyGUI::ITEM_NONE == index)
 
224
                        return;
 
225
 
 
226
                const MyGUI::UString& value = mList->getItemNameAt(index);
 
227
                mEdit->setCaption(value);
 
228
 
 
229
                if (mCurrentWidget->isType<MyGUI::TabControl>())
 
230
                {
 
231
                        mCurrentWidget->castType<MyGUI::TabControl>()->setIndexSelected(index);
 
232
                }
 
233
        }
 
234
 
 
235
        void PanelItems::setPropertyValue(MyGUI::Widget* _widget, size_t _index, const std::string& _propertyName, const std::string& _propertyValue)
 
236
        {
 
237
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
 
238
                widgetContainer->setPropertyByIndex(_index, _propertyName, _propertyValue);
 
239
        }
 
240
 
 
241
        void PanelItems::erasePropertyValue(MyGUI::Widget* _widget, size_t _index, const std::string& _propertyName)
 
242
        {
 
243
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
 
244
                widgetContainer->clearPropertyByIndex(_index, _propertyName);
 
245
        }
 
246
 
 
247
        void PanelItems::addPropertyValue(MyGUI::Widget* _widget, const std::string& _propertyName, const std::string& _propertyValue)
 
248
        {
 
249
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_widget);
 
250
                widgetContainer->setProperty(_propertyName, _propertyValue, false);
 
251
        }
 
252
 
 
253
}