minor refactoring

This commit is contained in:
Vladislav Khorev 2014-01-07 10:35:42 +00:00
parent 91638909f6
commit 67bf868991
2 changed files with 85 additions and 73 deletions

View File

@ -22,11 +22,10 @@ extern const std::string CONST_TAPDOWN_SIGNAL_NAME;
typedef boost::variant<cardinal, vec2> TSignalParam;
struct TWidgetStruct
struct TWidgetDataStruct
{
std::string Name;
std::string GroupName;
int Order;
bool IsMouseDown;
@ -34,10 +33,9 @@ struct TWidgetStruct
std::map<std::string, std::shared_ptr<boost::signal<void (TSignalParam)>>> SignalMap;
TWidgetStruct(const std::string& name, const std::string& groupName, std::shared_ptr<TInstancingWidgetAncestor> widget, int order = 0)
TWidgetDataStruct(const std::string& name, const std::string& groupName, std::shared_ptr<TInstancingWidgetAncestor> widget)
: Name(name)
, GroupName(groupName)
, Order(order)
, IsMouseDown(false)
, Widget(widget)
{
@ -47,30 +45,63 @@ struct TWidgetStruct
SignalMap[CONST_DRAG_SIGNAL_NAME] = std::shared_ptr<boost::signal<void (TSignalParam)>>(new boost::signal<void (TSignalParam)>());
}
TWidgetStruct(const TWidgetStruct& widgetStruct)
TWidgetDataStruct(const TWidgetDataStruct& widgetStruct)
{
Name = widgetStruct.Name;
Widget = widgetStruct.Widget;
GroupName = widgetStruct.GroupName;
IsMouseDown = widgetStruct.IsMouseDown;
Order = widgetStruct.Order;
SignalMap = widgetStruct.SignalMap;
}
TWidgetStruct& operator=(const TWidgetStruct& widgetStruct)
TWidgetDataStruct& operator=(const TWidgetDataStruct& widgetStruct)
{
//Self-assignment is ok
Name = widgetStruct.Name;
Widget = widgetStruct.Widget;
GroupName = widgetStruct.GroupName;
IsMouseDown = widgetStruct.IsMouseDown;
Order = widgetStruct.Order;
SignalMap = widgetStruct.SignalMap;
return *this;
}
~TWidgetDataStruct()
{
}
};
struct TWidgetStruct
{
boost::shared_ptr<TWidgetDataStruct> WidgetData;
int Order;
TWidgetStruct(const std::string& name, const std::string& groupName, std::shared_ptr<TInstancingWidgetAncestor> widget, int order = 0)
: WidgetData(new TWidgetDataStruct(name, groupName, widget))
, Order(order)
{
}
TWidgetStruct(const TWidgetStruct& widgetStruct)
{
WidgetData = widgetStruct.WidgetData;
Order = widgetStruct.Order;
}
TWidgetStruct& operator=(const TWidgetStruct& widgetStruct)
{
if (&widgetStruct != this)
{
WidgetData = widgetStruct.WidgetData;
Order = widgetStruct.Order;
}
return *this;
}
~TWidgetStruct()
{
}
@ -158,8 +189,6 @@ public:
void DeleteWidgetOnUpdate(const std::string& name);
void DeleteWidgetGroupOnUpdate(const std::string& groupName);
void DeleteWidgetLaterOnUpdate(const std::string& name);
void DeleteWidgetGroupLaterOnUpdate(const std::string& groupName);
void Update(cardinal dt);
void Draw();

View File

@ -48,7 +48,7 @@ void TGUIManager::AddWidget(std::shared_ptr<TInstancingWidgetAncestor> widgetAnc
{
for (TWidgetArr::iterator i = WidgetArr.begin(); i != WidgetArr.end(); i++)
{
if (i->Name == name)
if (i->WidgetData->Name == name)
{
return;
}
@ -61,7 +61,7 @@ void TGUIManager::DeleteWidget(std::string name)
{
for (TWidgetArr::iterator i = WidgetArr.begin(); i != WidgetArr.end(); i++)
{
if (i->Name == name)
if (i->WidgetData->Name == name)
{
WidgetArr.erase(i);
return;
@ -75,7 +75,7 @@ void TGUIManager::DeleteWidgetGroup(std::string groupName)
for (TWidgetArr::iterator i = WidgetArr.begin(); i != WidgetArr.end();)
{
widgetErased = false;
if (i->GroupName == groupName)
if (i->WidgetData->GroupName == groupName)
{
i = WidgetArr.erase(i);
widgetErased = true;
@ -90,31 +90,14 @@ void TGUIManager::DeleteWidgetGroup(std::string groupName)
void TGUIManager::DeleteWidgetOnUpdate(const std::string& name)
{
//PerformInMainThreadAsyncLater(boost::bind(&TGUIManager::DeleteWidget, this, name));
PerformInMainThreadAsync(boost::bind(&TGUIManager::DeleteWidget, this, name));
PerformInMainThreadAsyncLater(boost::bind(&TGUIManager::DeleteWidget, this, name));
}
void TGUIManager::DeleteWidgetGroupOnUpdate(const std::string& groupName)
{
//PerformInMainThreadAsyncLater(boost::bind(&TGUIManager::DeleteWidgetGroup, this, groupName));
PerformInMainThreadAsync(boost::bind(&TGUIManager::DeleteWidgetGroup, this, groupName));
PerformInMainThreadAsyncLater(boost::bind(&TGUIManager::DeleteWidgetGroup, this, groupName));
}
void TGUIManager::DeleteWidgetLaterOnUpdate(const std::string& name)
{
PerformInMainThreadAsyncLater(boost::bind(&TGUIManager::DeleteWidget, this, name));
}
void TGUIManager::DeleteWidgetGroupLaterOnUpdate(const std::string& groupName)
{
PerformInMainThreadAsyncLater(boost::bind(&TGUIManager::DeleteWidgetGroup, this, groupName));
}
void TGUIManager::AddWidgetTransformTask(TWidgetTransformTask widgetTransformTask)
{
WidgetTrasfromTaskList.push_back(widgetTransformTask);
@ -130,12 +113,12 @@ void TGUIManager::Update(cardinal dt)
{
//i->Widget->Update(dt);
if (i->IsMouseDown)
if (i->WidgetData->IsMouseDown)
{
signalMap.push_back((i->SignalMap[CONST_HOLD_SIGNAL_NAME]));
signalMap.push_back((i->WidgetData->SignalMap[CONST_HOLD_SIGNAL_NAME]));
}
i->Widget->Update(dt);
i->WidgetData->Widget->Update(dt);
}
@ -182,7 +165,7 @@ void TGUIManager::Update(cardinal dt)
for (TWidgetArr::iterator j = WidgetArr.begin(); j != WidgetArr.end(); ++j)
{
if (j->GroupName == i->GroupName)
if (j->WidgetData->GroupName == i->GroupName)
{
MoveWidgetByIterator(j, moveDistance);
}
@ -213,7 +196,7 @@ void TGUIManager::Draw()
TRenderPairList::iterator j;
for (j = i->Widget->TriangleListVector.begin(); j != i->Widget->TriangleListVector.end(); ++j)
for (j = i->WidgetData->Widget->TriangleListVector.begin(); j != i->WidgetData->Widget->TriangleListVector.end(); ++j)
{
TRenderParamsSetter paramSetter(j->first);
@ -232,7 +215,7 @@ TWidgetArr::iterator TGUIManager::FindWidgetInArr(const std::string& widgetName)
for (i = WidgetArr.begin(); i != WidgetArr.end(); ++i)
{
if (i->Name == widgetName)
if (i->WidgetData->Name == widgetName)
{
break;
}
@ -248,13 +231,13 @@ TWidgetArr::iterator TGUIManager::FindWidgetInArr(const std::string& widgetName)
void TGUIManager::MoveWidgetByIterator(TWidgetArr::iterator widget, vec2 shift)
{
widget->Widget->LeftBottomPos += shift;
widget->WidgetData->Widget->LeftBottomPos += shift;
std::vector<vec3>::iterator i;
TRenderPairList::iterator itr;
for (itr = widget->Widget->TriangleListVector.begin(); itr != widget->Widget->TriangleListVector.end(); ++itr)
for (itr = widget->WidgetData->Widget->TriangleListVector.begin(); itr != widget->WidgetData->Widget->TriangleListVector.end(); ++itr)
{
std::vector<vec3>& vertexCoordVec = itr->second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB];
@ -278,7 +261,7 @@ void TGUIManager::MoveWidgetGroup(const std::string& widgetGroupName, const std:
{
for (TWidgetArr::iterator i = WidgetArr.begin(); i != WidgetArr.end(); ++i)
{
if (i->GroupName == widgetGroupName && i->Name != exceptWidget)
if (i->WidgetData->GroupName == widgetGroupName && i->WidgetData->Name != exceptWidget)
{
MoveWidgetByIterator(i, shift);
}
@ -302,14 +285,14 @@ void TGUIManager::OnMouseDown(vec2 pos, int touchNumber)
for (i = WidgetArr.rbegin(); i != WidgetArr.rend(); ++i)
{
if (i->Widget->CheckClick(pos))
if (i->WidgetData->Widget->CheckClick(pos))
{
bool isTransparentForInput = i->Widget->IsTransparentForInput();
bool isTransparentForInput = i->WidgetData->Widget->IsTransparentForInput();
i->Widget->OnTapDown(pos);
i->IsMouseDown = true;
i->WidgetData->Widget->OnTapDown(pos);
i->WidgetData->IsMouseDown = true;
signalMap.push_back((i->SignalMap[CONST_TAPDOWN_SIGNAL_NAME]));
signalMap.push_back((i->WidgetData->SignalMap[CONST_TAPDOWN_SIGNAL_NAME]));
if (! isTransparentForInput)
{
@ -340,13 +323,13 @@ void TGUIManager::OnMouseUp(vec2 pos, int touchNumber)
for (i = WidgetArr.rbegin(); i != WidgetArr.rend(); ++i)
{
if (i->Widget->CheckClick(pos))
if (i->WidgetData->Widget->CheckClick(pos))
{
bool isTransparentForInput = i->Widget->IsTransparentForInput();
i->Widget->OnTapUp(pos);
i->IsMouseDown = false;
bool isTransparentForInput = i->WidgetData->Widget->IsTransparentForInput();
i->WidgetData->Widget->OnTapUp(pos);
i->WidgetData->IsMouseDown = false;
signalMap.push_back((i->SignalMap[CONST_CLICK_SIGNAL_NAME]));
signalMap.push_back((i->WidgetData->SignalMap[CONST_CLICK_SIGNAL_NAME]));
if (! isTransparentForInput)
{
@ -378,11 +361,11 @@ void TGUIManager::OnMouseUp(vec2 pos, int touchNumber)
for (i = WidgetArr.rbegin(); i != WidgetArr.rend(); ++i)
{
if (i->Widget->CheckClick(pos))
if (i->WidgetData->Widget->CheckClick(pos))
{
bool isTransparentForInput = i->Widget->IsTransparentForInput();
i->Widget->OnTapUpAfterMove(pos);
i->IsMouseDown = false;
bool isTransparentForInput = i->WidgetData->Widget->IsTransparentForInput();
i->WidgetData->Widget->OnTapUpAfterMove(pos);
i->WidgetData->IsMouseDown = false;
//signalMap.push_back((i->SignalMap[CONST_CLICK_SIGNAL_NAME]));
//Do not call signals here
@ -393,11 +376,11 @@ void TGUIManager::OnMouseUp(vec2 pos, int touchNumber)
}
}
if (i->Widget->CheckClick(LastTapPos[touchNumber]) && !i->Widget->CheckClick(pos))
if (i->WidgetData->Widget->CheckClick(LastTapPos[touchNumber]) && !i->WidgetData->Widget->CheckClick(pos))
{
bool isTransparentForInput = i->Widget->IsTransparentForInput();
i->Widget->OnTapUpAfterMoveOut(pos);
i->IsMouseDown = false;
bool isTransparentForInput = i->WidgetData->Widget->IsTransparentForInput();
i->WidgetData->Widget->OnTapUpAfterMoveOut(pos);
i->WidgetData->IsMouseDown = false;
//signalMap.push_back((i->SignalMap[CONST_CLICK_SIGNAL_NAME]));
//Do not call signals here
@ -438,13 +421,13 @@ void TGUIManager::OnMove(vec2 shift, int touchNumber)
for (i = WidgetArr.rbegin(); i != WidgetArr.rend(); ++i)
{
if (!moveIsProcessed && i->Widget->CheckClick(LastTapPos[touchNumber]-TotalShift[touchNumber]))
if (!moveIsProcessed && i->WidgetData->Widget->CheckClick(LastTapPos[touchNumber]-TotalShift[touchNumber]))
{
bool isTransparentForInput = i->Widget->IsTransparentForInput();
bool isTransparentForInput = i->WidgetData->Widget->IsTransparentForInput();
i->Widget->OnMove(shift);
i->WidgetData->Widget->OnMove(shift);
signalMap.push_back((i->SignalMap[CONST_DRAG_SIGNAL_NAME]));
signalMap.push_back((i->WidgetData->SignalMap[CONST_DRAG_SIGNAL_NAME]));
if (! isTransparentForInput)
{
@ -462,12 +445,12 @@ void TGUIManager::OnMove(vec2 shift, int touchNumber)
for (i = WidgetArr.rbegin(); i != WidgetArr.rend(); ++i)
{
if (!moveOutIsProcessed && i->Widget->CheckClick(LastTapPos[touchNumber]) && !i->Widget->CheckClick(LastTapPos[touchNumber]-TotalShift[touchNumber]))
if (!moveOutIsProcessed && i->WidgetData->Widget->CheckClick(LastTapPos[touchNumber]) && !i->WidgetData->Widget->CheckClick(LastTapPos[touchNumber]-TotalShift[touchNumber]))
{
bool isTransparentForInput = i->Widget->IsTransparentForInput();
bool isTransparentForInput = i->WidgetData->Widget->IsTransparentForInput();
i->Widget->OnMoveOut();
i->IsMouseDown = false;
i->WidgetData->Widget->OnMoveOut();
i->WidgetData->IsMouseDown = false;
if (! isTransparentForInput)
{
moveOutIsProcessed = true;
@ -529,7 +512,7 @@ void TGUIManager::PrintWidgetList()
for (i = WidgetArr.begin(); i != WidgetArr.end(); ++i)
{
std::string widgetRow = i->Name + " (" + tostr(i->Widget->LeftBottomPos.v[0]) + ", " + tostr(i->Widget->LeftBottomPos.v[1]) + ")";
std::string widgetRow = i->WidgetData->Name + " (" + tostr(i->WidgetData->Widget->LeftBottomPos.v[0]) + ", " + tostr(i->WidgetData->Widget->LeftBottomPos.v[1]) + ")";
Console->PrintImmediate(widgetRow);
}
}
@ -540,7 +523,7 @@ std::shared_ptr<boost::signal<void (TSignalParam)>> TGUIManager::GetOnClickSigna
TWidgetArr::iterator i = FindWidgetInArr(widgetName);
return i->SignalMap[CONST_CLICK_SIGNAL_NAME];
return i->WidgetData->SignalMap[CONST_CLICK_SIGNAL_NAME];
}
@ -549,7 +532,7 @@ std::shared_ptr<boost::signal<void (TSignalParam)>> TGUIManager::GetOnHoldSignal
TWidgetArr::iterator i = FindWidgetInArr(widgetName);
return i->SignalMap[CONST_HOLD_SIGNAL_NAME];
return i->WidgetData->SignalMap[CONST_HOLD_SIGNAL_NAME];
}
@ -558,7 +541,7 @@ std::shared_ptr<boost::signal<void (TSignalParam)>> TGUIManager::GetOnTapDownSig
TWidgetArr::iterator i = FindWidgetInArr(widgetName);
return i->SignalMap[CONST_TAPDOWN_SIGNAL_NAME];
return i->WidgetData->SignalMap[CONST_TAPDOWN_SIGNAL_NAME];
}
@ -567,12 +550,12 @@ std::shared_ptr<boost::signal<void (TSignalParam)>> TGUIManager::GetSignal(const
TWidgetArr::iterator i = FindWidgetInArr(widgetName);
if (i->SignalMap.count(signalName) == 0)
if (i->WidgetData->SignalMap.count(signalName) == 0)
{
throw ErrorToLog("Illegal signal: "+signalName);
}
return i->SignalMap[signalName];
return i->WidgetData->SignalMap[signalName];
}
void TGUIManager::SQ_MoveWidget(const SQChar *widgetName, float x, float y)