1 /*!
2 	@file
3 	@author		Albert Semenov
4 	@date		08/2010
5 */
6 
7 #include "Precompiled.h"
8 #include "SelectorControl.h"
9 #include "SettingsManager.h"
10 
11 namespace tools
12 {
13 
SelectorControlLE(const std::string & _layout,MyGUI::Widget * _parent)14 	SelectorControlLE::SelectorControlLE(const std::string& _layout, MyGUI::Widget* _parent) :
15 		wraps::BaseLayout(_layout, _parent),
16 		mScaleValue(1.0)
17 	{
18 		assignWidget(mProjection, "Projection", false, false);
19 
20 		if (mProjection != nullptr)
21 		{
22 			mCoordReal = mProjection->getCoord();
23 			mProjectionDiff = mMainWidget->getAbsoluteCoord() - mProjection->getAbsoluteCoord();
24 		}
25 		else
26 		{
27 			mCoordReal = mMainWidget->getCoord();
28 		}
29 
30 		MyGUI::Window* window = mMainWidget->castType<MyGUI::Window>(false);
31 		if (window != nullptr)
32 			window->eventWindowChangeCoord += MyGUI::newDelegate(this, &SelectorControlLE::notifyWindowChangeCoord);
33 
34 		SettingsManager::getInstance().eventSettingsChanged.connect(this, &SelectorControlLE::notifySettingsChanged);
35 	}
36 
~SelectorControlLE()37 	SelectorControlLE::~SelectorControlLE()
38 	{
39 		SettingsManager::getInstance().eventSettingsChanged.disconnect(this);
40 
41 		MyGUI::Window* window = mMainWidget->castType<MyGUI::Window>(false);
42 		if (window != nullptr)
43 			window->eventWindowChangeCoord -= MyGUI::newDelegate(this, &SelectorControlLE::notifyWindowChangeCoord);
44 	}
45 
setVisible(bool _value)46 	void SelectorControlLE::setVisible(bool _value)
47 	{
48 		mMainWidget->setVisible(_value);
49 	}
50 
setSize(const MyGUI::IntSize & _value)51 	void SelectorControlLE::setSize(const MyGUI::IntSize& _value)
52 	{
53 		mCoordValue = _value;
54 		updateCoord();
55 	}
56 
setPosition(const MyGUI::IntPoint & _value)57 	void SelectorControlLE::setPosition(const MyGUI::IntPoint& _value)
58 	{
59 		mCoordValue = _value;
60 		updateCoord();
61 	}
62 
setCoord(const MyGUI::IntCoord & _value)63 	void SelectorControlLE::setCoord(const MyGUI::IntCoord& _value)
64 	{
65 		mCoordValue = _value;
66 		updateCoord();
67 	}
68 
setScale(double _value)69 	void SelectorControlLE::setScale(double _value)
70 	{
71 		mScaleValue = _value;
72 		updateCoord();
73 	}
74 
updateCoord()75 	void SelectorControlLE::updateCoord()
76 	{
77 		mCoordReal.left = (int)((double)mCoordValue.left * mScaleValue) + mProjectionDiff.left;
78 		mCoordReal.top = (int)((double)mCoordValue.top * mScaleValue) + mProjectionDiff.top;
79 		mCoordReal.width = (int)((double)mCoordValue.width * mScaleValue) + mProjectionDiff.width;
80 		mCoordReal.height = (int)((double)mCoordValue.height * mScaleValue) + mProjectionDiff.height;
81 
82 		mMainWidget->setCoord(mCoordReal);
83 	}
84 
notifyWindowChangeCoord(MyGUI::Window * _sender)85 	void SelectorControlLE::notifyWindowChangeCoord(MyGUI::Window* _sender)
86 	{
87 		MyGUI::IntCoord coord = _sender->getCoord() - mProjectionDiff;
88 		const MyGUI::IntCoord& actionScale = _sender->getActionScale();
89 
90 		if (actionScale.left != 0 && actionScale.width != 0)
91 		{
92 			int right = mCoordValue.right();
93 			mCoordValue.width = (int)((double)coord.width / mScaleValue);
94 			mCoordValue.left = right - mCoordValue.width;
95 		}
96 		else
97 		{
98 			mCoordValue.left = (int)((double)coord.left / mScaleValue);
99 			mCoordValue.width = (int)((double)coord.width / mScaleValue);
100 		}
101 
102 		if (actionScale.top != 0 && actionScale.height != 0)
103 		{
104 			int bottom = mCoordValue.bottom();
105 			mCoordValue.height = (int)((double)coord.height / mScaleValue);
106 			mCoordValue.top = bottom - mCoordValue.height;
107 		}
108 		else
109 		{
110 			mCoordValue.top = (int)((double)coord.top / mScaleValue);
111 			mCoordValue.height = (int)((double)coord.height / mScaleValue);
112 		}
113 
114 		updateCoord();
115 		eventChangePosition();
116 	}
117 
getPosition()118 	MyGUI::IntPoint SelectorControlLE::getPosition()
119 	{
120 		return mCoordValue.point();
121 	}
122 
getSize()123 	MyGUI::IntSize SelectorControlLE::getSize()
124 	{
125 		return mCoordValue.size();
126 	}
127 
getCoord() const128 	const MyGUI::IntCoord& SelectorControlLE::getCoord() const
129 	{
130 		return mCoordValue;
131 	}
132 
setEnabled(bool _value)133 	void SelectorControlLE::setEnabled(bool _value)
134 	{
135 		mMainWidget->setNeedMouseFocus(_value);
136 	}
137 
getCapture()138 	bool SelectorControlLE::getCapture()
139 	{
140 		MyGUI::Window* window = mMainWidget->castType<MyGUI::Window>(false);
141 		if (window != nullptr)
142 			return !window->getActionScale().empty();
143 		return false;
144 	}
145 
getActionScale() const146 	MyGUI::IntCoord SelectorControlLE::getActionScale() const
147 	{
148 		MyGUI::Window* window = mMainWidget->castType<MyGUI::Window>(false);
149 		if (window != nullptr)
150 			return window->getActionScale();
151 		return MyGUI::IntCoord();
152 	}
153 
setColour(MyGUI::Colour _value)154 	void SelectorControlLE::setColour(MyGUI::Colour _value)
155 	{
156 		mMainWidget->setColour(_value);
157 		mMainWidget->setAlpha(_value.alpha);
158 	}
159 
notifySettingsChanged(const std::string & _path)160 	void SelectorControlLE::notifySettingsChanged(const std::string& _path)
161 	{
162 		if (!mPropertyColour.empty() && _path == ("Workspace/Colours/" + mPropertyColour))
163 		{
164 			MyGUI::Colour colour = SettingsManager::getInstance().getValue<MyGUI::Colour>("Workspace/Colours/" + mPropertyColour);
165 			setColour(colour);
166 		}
167 	}
168 
setPropertyColour(const std::string & _propertyName)169 	void SelectorControlLE::setPropertyColour(const std::string& _propertyName)
170 	{
171 		mPropertyColour = _propertyName;
172 		MyGUI::Colour colour = SettingsManager::getInstance().getValue<MyGUI::Colour>("Workspace/Colours/" + mPropertyColour);
173 		setColour(colour);
174 	}
175 
getMainWidget()176 	MyGUI::Widget* SelectorControlLE::getMainWidget()
177 	{
178 		return mMainWidget;
179 	}
180 
181 }
182