1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
/*!
@file
@author Albert Semenov
@date 07/2012
*/
#include "Precompiled.h"
#include "FocusInfoControl.h"
#include "CommandManager.h"
#include "SettingsManager.h"
namespace tools
{
FocusInfoControl::FocusInfoControl() :
mMouseView(nullptr),
mKeyView(nullptr)
{
}
FocusInfoControl::~FocusInfoControl()
{
MyGUI::Gui::getInstance().eventFrameStart -= MyGUI::newDelegate(this, &FocusInfoControl::notifyFrameStart);
}
void FocusInfoControl::OnInitialise(Control* _parent, MyGUI::Widget* _place, const std::string& _layoutName)
{
Control::OnInitialise(_parent, _place, "FocusInfoControl.layout");
assignWidget(mMouseView, "MouseView");
assignWidget(mKeyView, "KeyView");
mMouseView->setVisible(false);
mMouseView->setCoord(MyGUI::IntCoord());
mKeyView->setVisible(false);
mKeyView->setCoord(MyGUI::IntCoord());
CommandManager::getInstance().getEvent("Command_FocusVisible")->connect(this, &FocusInfoControl::Command_FocusVisible);
getRoot()->setVisible(SettingsManager::getInstance().getValue<bool>("Controls/FocusInfoControl/Visible"));
MyGUI::Gui::getInstance().eventFrameStart += MyGUI::newDelegate(this, &FocusInfoControl::notifyFrameStart);
}
void FocusInfoControl::Command_FocusVisible(const MyGUI::UString& _commandName, bool& _result)
{
getRoot()->setVisible(!getRoot()->getVisible());
SettingsManager::getInstance().setValue("Controls/FocusInfoControl/Visible", getRoot()->getVisible());
mMouseView->setVisible(false);
mKeyView->setVisible(false);
_result = true;
}
void FocusInfoControl::notifyFrameStart(float _time)
{
if (getRoot()->getVisible())
updateFocusWidgetHelpers();
}
void FocusInfoControl::updateFocusWidgetHelpers()
{
MyGUI::InputManager* input = MyGUI::InputManager::getInstancePtr();
if (input == nullptr)
return;
MyGUI::Widget* mouse = input->getMouseFocusWidget();
if (mouse != nullptr)
{
if (!mMouseView->getVisible())
mMouseView->setVisible(true);
if (mouse->getAbsoluteCoord() != mMouseCoord)
{
mMouseCoord = mouse->getAbsoluteCoord();
mMouseView->setCoord(mMouseCoord);
}
}
else
{
if (mMouseView->getVisible())
mMouseView->setVisible(false);
}
MyGUI::Widget* key = input->getKeyFocusWidget();
if (key != nullptr)
{
if (!mKeyView->getVisible())
mKeyView->setVisible(true);
if (key->getAbsoluteCoord() != mKeyCoord)
{
mKeyCoord = key->getAbsoluteCoord();
mKeyView->setCoord(mKeyCoord.left - 1, mKeyCoord.top - 1, mKeyCoord.width + 2, mKeyCoord.height + 2);
}
}
else
{
if (mKeyView->getVisible())
mKeyView->setVisible(false);
}
}
}
|