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
|
/*!
@file
@author Albert Semenov
@date 08/2009
*/
#ifndef GRAPH_NODE_WEIGHT_H_
#define GRAPH_NODE_WEIGHT_H_
#include <MyGUI.h>
#include "BaseAnimationNode.h"
#include "WeightController.h"
namespace demo
{
class GraphNodeWeightController :
public BaseAnimationNode
{
public:
GraphNodeWeightController(const std::string& _name) :
BaseAnimationNode("GraphNodeWeight.layout", "WeightController", _name),
mConnectionOut(nullptr),
mEditPosition(nullptr),
mScrollPosition(nullptr),
mPosition(0)
{
}
virtual void addConnection(const std::string& _eventout, BaseAnimationNode* _node, const std::string& _eventin)
{
BaseAnimationNode::addConnection(_eventout, _node, _eventin);
onChangePosition(mPosition);
}
private:
virtual void initialise()
{
mMainWidget->castType<MyGUI::Window>()->setCaption(getName());
assignBase(mConnectionOut, "ConnectionOut");
assignWidget(mEditPosition, "EditPosition");
assignWidget(mScrollPosition, "ScrollPosition");
mEditPosition->eventEditSelectAccept += MyGUI::newDelegate(this, &GraphNodeWeightController::notifyEditSelectAccept);
mScrollPosition->eventScrollChangePosition += MyGUI::newDelegate(this, &GraphNodeWeightController::notifyScrollChangePosition);
updateWidgets();
}
virtual void shutdown()
{
}
void updateWidgets(bool _edit = true, bool _scroll = true)
{
if (_edit)
{
mEditPosition->setCaption(MyGUI::utility::toString(mPosition));
}
if (_scroll)
{
double range = (double)mScrollPosition->getScrollRange() - 1;
mScrollPosition->setScrollPosition((size_t)((range * (double)mPosition)));
}
onChangePosition(mPosition);
}
void notifyEditSelectAccept(MyGUI::EditBox* _sender)
{
mPosition = MyGUI::utility::parseValue<float>(_sender->getCaption());
if (mPosition < 0) mPosition = 0;
else if (mPosition > 1) mPosition = 1;
updateWidgets();
}
void notifyScrollChangePosition(MyGUI::ScrollBar* _sender, size_t _position)
{
double range = (double)_sender->getScrollRange() - 1;
double position = (double)_position;
mPosition = (float)(position / range);
updateWidgets(true, false);
}
void onChangePosition(float _position)
{
animation::WeightController* controller = dynamic_cast<animation::WeightController*>(getAnimationNode());
if (controller)
controller->generateEvent(_position);
}
private:
wraps::BaseGraphConnection* mConnectionOut;
MyGUI::EditBox* mEditPosition;
MyGUI::ScrollBar* mScrollPosition;
float mPosition;
};
} // namespace demo
#endif // GRAPH_NODE_WEIGHT_H_
|