3
@author Georgiy Evmenov
7
#include "Precompiled.h"
8
#include "PropertiesPanelView.h"
9
#include "EditorWidgets.h"
10
#include "CommandManager.h"
11
#include "WidgetSelectorManager.h"
16
PropertiesPanelView::PropertiesPanelView(MyGUI::Widget* _parent) :
17
BaseLayout("PropertiesPanelView.layout", _parent),
19
mPanelMainProperties(nullptr),
21
mPanelUserData(nullptr),
22
mPanelControllers(nullptr),
23
mPanelTemplateProperties(nullptr),
24
mPanelExtensionProperties(nullptr),
25
mCurrentWidget(nullptr)
27
assignBase(mPanelView, "scroll_View");
29
MyGUI::Window* window = mMainWidget->castType<MyGUI::Window>(false);
30
if (window != nullptr)
32
window->eventWindowChangeCoord += MyGUI::newDelegate(this, &PropertiesPanelView::notifyWindowChangeCoord);
33
mOldSize = window->getSize();
36
mPanelMainProperties = new PanelMainProperties();
37
mPanelView->addItem(mPanelMainProperties);
39
mPanelTemplateProperties = new PanelTemplateProperties();
40
mPanelView->addItem(mPanelTemplateProperties);
42
mPanelExtensionProperties = new PanelExtensionProperties();
43
mPanelView->addItem(mPanelExtensionProperties);
45
mPanelItems = new PanelItems();
46
mPanelView->addItem(mPanelItems);
48
mPanelUserData = new PanelUserData();
49
mPanelView->addItem(mPanelUserData);
51
mPanelControllers = new PanelControllers();
52
mPanelView->addItem(mPanelControllers);
54
WidgetSelectorManager::getInstance().eventChangeSelectedWidget += MyGUI::newDelegate(this, &PropertiesPanelView::notifyChangeSelectedWidget);
56
notifyChangeSelectedWidget(nullptr);
59
PropertiesPanelView::~PropertiesPanelView()
61
WidgetSelectorManager::getInstance().eventChangeSelectedWidget -= MyGUI::newDelegate(this, &PropertiesPanelView::notifyChangeSelectedWidget);
63
mPanelView->removeAllItems();
64
delete mPanelMainProperties;
66
delete mPanelUserData;
67
delete mPanelControllers;
68
delete mPanelTemplateProperties;
69
delete mPanelExtensionProperties;
71
for (MapPropertyWindow::iterator item = mMapPropertyWindow.begin(); item != mMapPropertyWindow.end(); ++ item)
72
delete (*item).second;
73
mMapPropertyWindow.clear();
76
void PropertiesPanelView::notifyWindowChangeCoord(MyGUI::Window* _sender)
78
const MyGUI::IntSize& size = _sender->getSize();
82
mPanelView->setNeedUpdate();
86
void PropertiesPanelView::notifyChangeSelectedWidget(MyGUI::Widget* _currentWidget)
88
mCurrentWidget = _currentWidget;
90
if (nullptr != mCurrentWidget)
92
MyGUI::LayerManager::getInstance().upLayerItem(mCurrentWidget);
93
MyGUI::Widget* parent = mCurrentWidget;
95
// if we select TabItem, it's chuld or subchild then show TabItem
96
while (nullptr != parent && !parent->isType<MyGUI::TabItem>())
97
parent = parent->getParent();
98
if (nullptr != parent)
100
MyGUI::TabControl* tab = parent->getParent()->castType<MyGUI::TabControl>();
101
MyGUI::TabItem* sheet = parent->castType<MyGUI::TabItem>();
102
tab->setItemSelected(sheet);
105
EditorWidgets::getInstance().onSetWidgetCoord(mCurrentWidget, mCurrentWidget->getAbsoluteCoord(), "PropertiesPanelView");
108
for (MapPropertyWindow::iterator item = mMapPropertyWindow.begin(); item != mMapPropertyWindow.end(); ++ item)
110
(*item).second->setVisible(false);
111
(*item).second->update(nullptr, nullptr);
114
if (nullptr == mCurrentWidget)
116
mPanelMainProperties->setVisible(false);
117
mPanelMainProperties->update(nullptr);
119
mPanelItems->setVisible(false);
120
mPanelItems->update(nullptr);
122
mPanelUserData->setVisible(false);
123
mPanelUserData->update(nullptr);
125
mPanelControllers->setVisible(false);
126
mPanelControllers->update(nullptr);
128
mPanelTemplateProperties->setVisible(false);
129
mPanelTemplateProperties->update(nullptr, nullptr);
131
mPanelExtensionProperties->setVisible(false);
132
mPanelExtensionProperties->update(nullptr);
136
mPanelMainProperties->setVisible(true);
137
mPanelMainProperties->update(mCurrentWidget);
139
mPanelItems->setVisible(true);
140
mPanelItems->update(mCurrentWidget);
142
mPanelUserData->setVisible(true);
143
mPanelUserData->update(mCurrentWidget);
145
mPanelControllers->setVisible(true);
146
mPanelControllers->update(mCurrentWidget);
148
mPanelExtensionProperties->setVisible(true);
149
mPanelExtensionProperties->update(mCurrentWidget);
151
std::string widgetTypeName = mCurrentWidget->getTypeName();
153
bool templateName = false;
154
WidgetContainer* container = EditorWidgets::getInstance().find(mCurrentWidget);
155
if (container->existUserData("LE_TargetWidgetType"))
157
widgetTypeName = container->getUserData("LE_TargetWidgetType");
161
WidgetStyle* widgetType = WidgetTypes::getInstance().findWidgetStyle(widgetTypeName);
163
mPanelTemplateProperties->setVisible(true);
164
mPanelTemplateProperties->update(mCurrentWidget, templateName ? widgetType : nullptr);
166
while (widgetType != nullptr)
168
PanelProperties* panel = getPropertyWindow(widgetType, widgetType->deep);
169
panel->setVisible(true);
170
panel->update(mCurrentWidget, widgetType);
172
if (widgetType->name == "Widget")
175
widgetType = WidgetTypes::getInstance().findWidgetStyle(widgetType->base);
180
PanelProperties* PropertiesPanelView::getPropertyWindow(WidgetStyle* _style, size_t _deep)
182
MapPropertyWindow::iterator item = mMapPropertyWindow.find(_style);
183
if (item == mMapPropertyWindow.end())
185
PanelProperties* result = new PanelProperties();
186
result->setDeep(_deep);
188
mPanelView->insertItem(getIndexByDeep(_deep), result);
190
mMapPropertyWindow[_style] = result;
194
return (*item).second;
197
size_t PropertiesPanelView::getIndexByDeep(size_t _deep)
200
for (MapPropertyWindow::iterator item = mMapPropertyWindow.begin(); item != mMapPropertyWindow.end(); ++ item)
202
if ((*item).second->getDeep() < _deep)
204
size_t index = getIndexPanel((*item).second);
212
size_t PropertiesPanelView::getIndexPanel(PanelProperties* _panel)
214
for (size_t index = 0; index < mPanelView->getItemCount(); ++ index)
216
if (mPanelView->getItem(index) == _panel)
219
return MyGUI::ITEM_NONE;
3
@author Georgiy Evmenov
7
#include "Precompiled.h"
8
#include "PropertiesPanelView.h"
9
#include "EditorWidgets.h"
10
#include "CommandManager.h"
11
#include "WidgetSelectorManager.h"
16
PropertiesPanelView::PropertiesPanelView(MyGUI::Widget* _parent) :
17
BaseLayout("PropertiesPanelView.layout", _parent),
19
mPanelMainProperties(nullptr),
21
mPanelUserData(nullptr),
22
mPanelControllers(nullptr),
23
mPanelTemplateProperties(nullptr),
24
mPanelExtensionProperties(nullptr),
25
mCurrentWidget(nullptr)
27
assignBase(mPanelView, "scroll_View");
29
MyGUI::Window* window = mMainWidget->castType<MyGUI::Window>(false);
30
if (window != nullptr)
32
window->eventWindowChangeCoord += MyGUI::newDelegate(this, &PropertiesPanelView::notifyWindowChangeCoord);
33
mOldSize = window->getSize();
36
mPanelMainProperties = new PanelMainProperties();
37
mPanelView->addItem(mPanelMainProperties);
39
mPanelTemplateProperties = new PanelTemplateProperties();
40
mPanelView->addItem(mPanelTemplateProperties);
42
mPanelExtensionProperties = new PanelExtensionProperties();
43
mPanelView->addItem(mPanelExtensionProperties);
45
mPanelItems = new PanelItems();
46
mPanelView->addItem(mPanelItems);
48
mPanelUserData = new PanelUserData();
49
mPanelView->addItem(mPanelUserData);
51
mPanelControllers = new PanelControllers();
52
mPanelView->addItem(mPanelControllers);
54
WidgetSelectorManager::getInstance().eventChangeSelectedWidget += MyGUI::newDelegate(this, &PropertiesPanelView::notifyChangeSelectedWidget);
56
notifyChangeSelectedWidget(nullptr);
59
PropertiesPanelView::~PropertiesPanelView()
61
WidgetSelectorManager::getInstance().eventChangeSelectedWidget -= MyGUI::newDelegate(this, &PropertiesPanelView::notifyChangeSelectedWidget);
63
mPanelView->removeAllItems();
64
delete mPanelMainProperties;
66
delete mPanelUserData;
67
delete mPanelControllers;
68
delete mPanelTemplateProperties;
69
delete mPanelExtensionProperties;
71
for (MapPropertyWindow::iterator item = mMapPropertyWindow.begin(); item != mMapPropertyWindow.end(); ++ item)
72
delete (*item).second;
73
mMapPropertyWindow.clear();
76
void PropertiesPanelView::notifyWindowChangeCoord(MyGUI::Window* _sender)
78
const MyGUI::IntSize& size = _sender->getSize();
82
mPanelView->setNeedUpdate();
86
void PropertiesPanelView::notifyChangeSelectedWidget(MyGUI::Widget* _currentWidget)
88
mCurrentWidget = _currentWidget;
90
if (nullptr != mCurrentWidget)
92
MyGUI::LayerManager::getInstance().upLayerItem(mCurrentWidget);
93
MyGUI::Widget* parent = mCurrentWidget;
95
// if we select TabItem, it's chuld or subchild then show TabItem
96
while (nullptr != parent && !parent->isType<MyGUI::TabItem>())
97
parent = parent->getParent();
98
if (nullptr != parent)
100
MyGUI::TabControl* tab = parent->getParent()->castType<MyGUI::TabControl>();
101
MyGUI::TabItem* sheet = parent->castType<MyGUI::TabItem>();
102
tab->setItemSelected(sheet);
105
EditorWidgets::getInstance().onSetWidgetCoord(mCurrentWidget, mCurrentWidget->getAbsoluteCoord(), "PropertiesPanelView");
108
for (MapPropertyWindow::iterator item = mMapPropertyWindow.begin(); item != mMapPropertyWindow.end(); ++ item)
110
(*item).second->setVisible(false);
111
(*item).second->update(nullptr, nullptr);
114
if (nullptr == mCurrentWidget)
116
mPanelMainProperties->setVisible(false);
117
mPanelMainProperties->update(nullptr);
119
mPanelItems->setVisible(false);
120
mPanelItems->update(nullptr);
122
mPanelUserData->setVisible(false);
123
mPanelUserData->update(nullptr);
125
mPanelControllers->setVisible(false);
126
mPanelControllers->update(nullptr);
128
mPanelTemplateProperties->setVisible(false);
129
mPanelTemplateProperties->update(nullptr, nullptr);
131
mPanelExtensionProperties->setVisible(false);
132
mPanelExtensionProperties->update(nullptr);
136
mPanelMainProperties->setVisible(true);
137
mPanelMainProperties->update(mCurrentWidget);
139
mPanelItems->setVisible(true);
140
mPanelItems->update(mCurrentWidget);
142
mPanelUserData->setVisible(true);
143
mPanelUserData->update(mCurrentWidget);
145
mPanelControllers->setVisible(true);
146
mPanelControllers->update(mCurrentWidget);
148
mPanelExtensionProperties->setVisible(true);
149
mPanelExtensionProperties->update(mCurrentWidget);
151
std::string widgetTypeName = mCurrentWidget->getTypeName();
153
bool templateName = false;
154
WidgetContainer* container = EditorWidgets::getInstance().find(mCurrentWidget);
155
if (container->existUserData("LE_TargetWidgetType"))
157
widgetTypeName = container->getUserData("LE_TargetWidgetType");
161
WidgetStyle* widgetType = WidgetTypes::getInstance().findWidgetStyle(widgetTypeName);
163
mPanelTemplateProperties->setVisible(true);
164
mPanelTemplateProperties->update(mCurrentWidget, templateName ? widgetType : nullptr);
166
while (widgetType != nullptr)
168
PanelProperties* panel = getPropertyWindow(widgetType, widgetType->depth);
169
panel->setVisible(true);
170
panel->update(mCurrentWidget, widgetType);
172
if (widgetType->name == "Widget")
175
widgetType = WidgetTypes::getInstance().findWidgetStyle(widgetType->base);
180
PanelProperties* PropertiesPanelView::getPropertyWindow(WidgetStyle* _style, size_t _depth)
182
MapPropertyWindow::iterator item = mMapPropertyWindow.find(_style);
183
if (item == mMapPropertyWindow.end())
185
PanelProperties* result = new PanelProperties();
186
result->setDepth(_depth);
188
mPanelView->insertItem(getIndexByDepth(_depth), result);
190
mMapPropertyWindow[_style] = result;
194
return (*item).second;
197
size_t PropertiesPanelView::getIndexByDepth(size_t _depth)
200
for (MapPropertyWindow::iterator item = mMapPropertyWindow.begin(); item != mMapPropertyWindow.end(); ++ item)
202
if ((*item).second->getDepth() < _depth)
204
size_t index = getIndexPanel((*item).second);
212
size_t PropertiesPanelView::getIndexPanel(PanelProperties* _panel)
214
for (size_t index = 0; index < mPanelView->getItemCount(); ++ index)
216
if (mPanelView->getItem(index) == _panel)
219
return MyGUI::ITEM_NONE;