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

« back to all changes in this revision

Viewing changes to Tools/LayoutEditor/PanelUserData.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 "PanelUserData.h"
9
 
#include "Common.h"
10
 
#include "Localise.h"
11
 
#include "UndoManager.h"
12
 
#include "WidgetStyle.h"
13
 
#include "WidgetTypes.h"
14
 
 
15
 
namespace tools
16
 
{
17
 
        PanelUserData::PanelUserData() :
18
 
                BasePanelViewItem("PanelUserData.layout"),
19
 
                mEditKey(nullptr),
20
 
                mEditValue(nullptr),
21
 
                mButtonAdd(nullptr),
22
 
                mButtonDelete(nullptr),
23
 
                mMultilist(nullptr),
24
 
                mCurrentWidget(nullptr),
25
 
                mEditLeft(0),
26
 
                mEditRight(0),
27
 
                mEditSpace(0),
28
 
                mButtonLeft(0),
29
 
                mButtonRight(0),
30
 
                mButtonSpace(0)
31
 
        {
32
 
        }
33
 
 
34
 
        void PanelUserData::initialise()
35
 
        {
36
 
                mPanelCell->setCaption(replaceTags("PanelUserDataName"));
37
 
 
38
 
                assignWidget(mEditKey, "editKey");
39
 
                assignWidget(mEditValue, "editValue");
40
 
                assignWidget(mButtonAdd, "buttonAdd");
41
 
                assignWidget(mButtonDelete, "buttonDelete");
42
 
                assignWidget(mMultilist, "multilist");
43
 
 
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);
49
 
 
50
 
                mEditLeft = mEditKey->getLeft();
51
 
                mEditRight = mMainWidget->getWidth() - mEditValue->getRight();
52
 
                mEditSpace = mEditValue->getLeft() - mEditKey->getRight();
53
 
 
54
 
                mButtonLeft = mButtonAdd->getLeft();
55
 
                mButtonRight = mMainWidget->getWidth() - mButtonDelete->getRight();
56
 
                mButtonSpace = mButtonDelete->getLeft() - mButtonAdd->getRight();
57
 
        }
58
 
 
59
 
        void PanelUserData::shutdown()
60
 
        {
61
 
        }
62
 
 
63
 
        void PanelUserData::update(MyGUI::Widget* _currentWidget)
64
 
        {
65
 
                mCurrentWidget = _currentWidget;
66
 
                if (mCurrentWidget == nullptr)
67
 
                        return;
68
 
 
69
 
                mMultilist->removeAllItems();
70
 
 
71
 
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_currentWidget);
72
 
                WidgetContainer::UserDataEnumerator userData = widgetContainer->getUserDataEnumerator();
73
 
                while (userData.next())
74
 
                {
75
 
                        if (checkUserData(widgetContainer, userData.current().first))
76
 
                        {
77
 
                                mMultilist->addItem(userData.current().first);
78
 
                                mMultilist->setSubItemNameAt(1, mMultilist->getItemCount() - 1, MyGUI::TextIterator::toTagsString(userData.current().second));
79
 
                        }
80
 
                }
81
 
        }
82
 
 
83
 
        void PanelUserData::notifyChangeWidth(int _width)
84
 
        {
85
 
                int width = mMainWidget->getClientCoord().width;
86
 
 
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());
90
 
 
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());
94
 
        }
95
 
 
96
 
        void PanelUserData::notifyAddUserData(MyGUI::Widget* _sender)
97
 
        {
98
 
                std::string key = mEditKey->getOnlyText();
99
 
                std::string value = mEditValue->getOnlyText();
100
 
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
101
 
                if (!widgetContainer->existUserData(key))
102
 
                {
103
 
                        mMultilist->addItem(key);
104
 
                }
105
 
                mMultilist->setSubItemNameAt(1, mMultilist->findSubItemWith(0, key), MyGUI::TextIterator::toTagsString(value));
106
 
                widgetContainer->setUserData(key, value);
107
 
                UndoManager::getInstance().addValue();
108
 
        }
109
 
 
110
 
        void PanelUserData::notifyDeleteUserData(MyGUI::Widget* _sender)
111
 
        {
112
 
                size_t item = mMultilist->getIndexSelected();
113
 
                if (MyGUI::ITEM_NONE == item) return;
114
 
 
115
 
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
116
 
                widgetContainer->clearUserData(mMultilist->getItemNameAt(item));
117
 
                mMultilist->removeItemAt(item);
118
 
                UndoManager::getInstance().addValue();
119
 
        }
120
 
 
121
 
        void PanelUserData::notifyUpdateUserData(MyGUI::EditBox* _widget)
122
 
        {
123
 
                size_t item = mMultilist->getIndexSelected();
124
 
                if (MyGUI::ITEM_NONE == item)
125
 
                {
126
 
                        notifyAddUserData();
127
 
                        return;
128
 
                }
129
 
                std::string key = mEditKey->getOnlyText();
130
 
                std::string value = mEditValue->getOnlyText();
131
 
                std::string lastkey = mMultilist->getItemNameAt(item);
132
 
 
133
 
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
134
 
                mMultilist->removeItemAt(mMultilist->findSubItemWith(0, lastkey));
135
 
                widgetContainer->clearUserData(lastkey);
136
 
                if (!widgetContainer->existUserData(key))
137
 
                {
138
 
                        mMultilist->addItem(key);
139
 
                }
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();
144
 
        }
145
 
 
146
 
        void PanelUserData::notifySelectUserDataItem(MyGUI::MultiListBox* _widget, size_t _index)
147
 
        {
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);
154
 
        }
155
 
 
156
 
        bool PanelUserData::checkUserData(WidgetContainer* _widgetContainer, const std::string& _key)
157
 
        {
158
 
                if (_key == "LE_TargetWidgetType")
159
 
                        return false;
160
 
 
161
 
                std::string widgetTypeName = _widgetContainer->getUserData("LE_TargetWidgetType");
162
 
 
163
 
                WidgetStyle* widgetType = WidgetTypes::getInstance().findWidgetStyle(_widgetContainer->getType());
164
 
 
165
 
                for (MyGUI::VectorStringPairs::iterator iter = widgetType->parameterData.begin(); iter != widgetType->parameterData.end(); ++iter)
166
 
                {
167
 
                        if ((*iter).first == _key)
168
 
                                return false;
169
 
                }
170
 
 
171
 
                if (!widgetTypeName.empty())
172
 
                {
173
 
                        WidgetStyle* widgetTargetType = WidgetTypes::getInstance().findWidgetStyle(widgetTypeName);
174
 
 
175
 
                        for (MyGUI::VectorStringPairs::iterator iter = widgetTargetType->templateData.begin(); iter != widgetTargetType->templateData.end(); ++iter)
176
 
                        {
177
 
                                if ((*iter).first == _key)
178
 
                                        return false;
179
 
                        }
180
 
                }
181
 
 
182
 
                return true;
183
 
        }
184
 
 
185
 
} // namespace tools
 
1
/*!
 
2
        @file
 
3
        @author         Georgiy Evmenov
 
4
        @date           09/2008
 
5
*/
 
6
 
 
7
#include "Precompiled.h"
 
8
#include "PanelUserData.h"
 
9
#include "Common.h"
 
10
#include "Localise.h"
 
11
#include "UndoManager.h"
 
12
#include "WidgetStyle.h"
 
13
#include "WidgetTypes.h"
 
14
 
 
15
namespace tools
 
16
{
 
17
 
 
18
        PanelUserData::PanelUserData() :
 
19
                BasePanelViewItem("PanelUserData.layout"),
 
20
                mEditKey(nullptr),
 
21
                mEditValue(nullptr),
 
22
                mButtonAdd(nullptr),
 
23
                mButtonDelete(nullptr),
 
24
                mMultilist(nullptr),
 
25
                mCurrentWidget(nullptr),
 
26
                mEditLeft(0),
 
27
                mEditRight(0),
 
28
                mEditSpace(0),
 
29
                mButtonLeft(0),
 
30
                mButtonRight(0),
 
31
                mButtonSpace(0)
 
32
        {
 
33
        }
 
34
 
 
35
        void PanelUserData::initialise()
 
36
        {
 
37
                mPanelCell->setCaption(replaceTags("PanelUserDataName"));
 
38
 
 
39
                assignWidget(mEditKey, "editKey");
 
40
                assignWidget(mEditValue, "editValue");
 
41
                assignWidget(mButtonAdd, "buttonAdd");
 
42
                assignWidget(mButtonDelete, "buttonDelete");
 
43
                assignWidget(mMultilist, "multilist");
 
44
 
 
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);
 
50
 
 
51
                mEditLeft = mEditKey->getLeft();
 
52
                mEditRight = mMainWidget->getWidth() - mEditValue->getRight();
 
53
                mEditSpace = mEditValue->getLeft() - mEditKey->getRight();
 
54
 
 
55
                mButtonLeft = mButtonAdd->getLeft();
 
56
                mButtonRight = mMainWidget->getWidth() - mButtonDelete->getRight();
 
57
                mButtonSpace = mButtonDelete->getLeft() - mButtonAdd->getRight();
 
58
        }
 
59
 
 
60
        void PanelUserData::shutdown()
 
61
        {
 
62
        }
 
63
 
 
64
        void PanelUserData::update(MyGUI::Widget* _currentWidget)
 
65
        {
 
66
                mCurrentWidget = _currentWidget;
 
67
                if (mCurrentWidget == nullptr)
 
68
                        return;
 
69
 
 
70
                mMultilist->removeAllItems();
 
71
 
 
72
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(_currentWidget);
 
73
                WidgetContainer::UserDataEnumerator userData = widgetContainer->getUserDataEnumerator();
 
74
                while (userData.next())
 
75
                {
 
76
                        if (checkUserData(widgetContainer, userData.current().first))
 
77
                        {
 
78
                                mMultilist->addItem(userData.current().first);
 
79
                                mMultilist->setSubItemNameAt(1, mMultilist->getItemCount() - 1, MyGUI::TextIterator::toTagsString(userData.current().second));
 
80
                        }
 
81
                }
 
82
        }
 
83
 
 
84
        void PanelUserData::notifyChangeWidth(int _width)
 
85
        {
 
86
                int width = mMainWidget->getClientCoord().width;
 
87
 
 
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());
 
91
 
 
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());
 
95
        }
 
96
 
 
97
        void PanelUserData::notifyAddUserData(MyGUI::Widget* _sender)
 
98
        {
 
99
                std::string key = mEditKey->getOnlyText();
 
100
                std::string value = mEditValue->getOnlyText();
 
101
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
 
102
                if (!widgetContainer->existUserData(key))
 
103
                {
 
104
                        mMultilist->addItem(key);
 
105
                }
 
106
                mMultilist->setSubItemNameAt(1, mMultilist->findSubItemWith(0, key), MyGUI::TextIterator::toTagsString(value));
 
107
                widgetContainer->setUserData(key, value);
 
108
                UndoManager::getInstance().addValue();
 
109
        }
 
110
 
 
111
        void PanelUserData::notifyDeleteUserData(MyGUI::Widget* _sender)
 
112
        {
 
113
                size_t item = mMultilist->getIndexSelected();
 
114
                if (MyGUI::ITEM_NONE == item) return;
 
115
 
 
116
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
 
117
                widgetContainer->clearUserData(mMultilist->getItemNameAt(item));
 
118
                mMultilist->removeItemAt(item);
 
119
                UndoManager::getInstance().addValue();
 
120
        }
 
121
 
 
122
        void PanelUserData::notifyUpdateUserData(MyGUI::EditBox* _widget)
 
123
        {
 
124
                size_t item = mMultilist->getIndexSelected();
 
125
                if (MyGUI::ITEM_NONE == item)
 
126
                {
 
127
                        notifyAddUserData();
 
128
                        return;
 
129
                }
 
130
                std::string key = mEditKey->getOnlyText();
 
131
                std::string value = mEditValue->getOnlyText();
 
132
                std::string lastkey = mMultilist->getItemNameAt(item);
 
133
 
 
134
                WidgetContainer* widgetContainer = EditorWidgets::getInstance().find(mCurrentWidget);
 
135
                mMultilist->removeItemAt(mMultilist->findSubItemWith(0, lastkey));
 
136
                widgetContainer->clearUserData(lastkey);
 
137
                if (!widgetContainer->existUserData(key))
 
138
                {
 
139
                        mMultilist->addItem(key);
 
140
                }
 
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();
 
145
        }
 
146
 
 
147
        void PanelUserData::notifySelectUserDataItem(MyGUI::MultiListBox* _widget, size_t _index)
 
148
        {
 
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);
 
155
        }
 
156
 
 
157
        bool PanelUserData::checkUserData(WidgetContainer* _widgetContainer, const std::string& _key)
 
158
        {
 
159
                if (_key == "LE_TargetWidgetType")
 
160
                        return false;
 
161
 
 
162
                std::string widgetTypeName = _widgetContainer->getUserData("LE_TargetWidgetType");
 
163
 
 
164
                WidgetStyle* widgetType = WidgetTypes::getInstance().findWidgetStyle(_widgetContainer->getType());
 
165
 
 
166
                for (MyGUI::VectorStringPairs::iterator iter = widgetType->parameterData.begin(); iter != widgetType->parameterData.end(); ++iter)
 
167
                {
 
168
                        if ((*iter).first == _key)
 
169
                                return false;
 
170
                }
 
171
 
 
172
                if (!widgetTypeName.empty())
 
173
                {
 
174
                        WidgetStyle* widgetTargetType = WidgetTypes::getInstance().findWidgetStyle(widgetTypeName);
 
175
 
 
176
                        for (MyGUI::VectorStringPairs::iterator iter = widgetTargetType->templateData.begin(); iter != widgetTargetType->templateData.end(); ++iter)
 
177
                        {
 
178
                                if ((*iter).first == _key)
 
179
                                        return false;
 
180
                        }
 
181
                }
 
182
 
 
183
                return true;
 
184
        }
 
185
 
 
186
}