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