233 lines
4.3 KiB
C++
233 lines
4.3 KiB
C++
//#include "Platform.h"
|
|
#include <iostream>
|
|
#include "interface/Component.h"
|
|
#include "interface/Engine.h"
|
|
#include "interface/Point.h"
|
|
#include "interface/Window.h"
|
|
#include "interface/Panel.h"
|
|
|
|
using namespace ui;
|
|
|
|
Component::Component(Window* parent_state):
|
|
parentstate_(parent_state),
|
|
_parent(NULL),
|
|
Position(Point(0,0)),
|
|
Size(Point(0,0)),
|
|
Locked(false),
|
|
Visible(true),
|
|
textPosition(0, 0),
|
|
textSize(0, 0),
|
|
iconPosition(0, 0),
|
|
drawn(false),
|
|
menu(NULL)
|
|
{
|
|
|
|
}
|
|
|
|
Component::Component(Point position, Point size):
|
|
parentstate_(0),
|
|
_parent(NULL),
|
|
Position(position),
|
|
Size(size),
|
|
Locked(false),
|
|
Visible(true),
|
|
textPosition(0, 0),
|
|
textSize(0, 0),
|
|
iconPosition(0, 0),
|
|
drawn(false),
|
|
menu(NULL)
|
|
{
|
|
|
|
}
|
|
|
|
Component::Component():
|
|
parentstate_(NULL),
|
|
_parent(NULL),
|
|
Position(Point(0,0)),
|
|
Size(Point(0,0)),
|
|
Locked(false),
|
|
Visible(true),
|
|
textPosition(0, 0),
|
|
textSize(0, 0),
|
|
iconPosition(0, 0),
|
|
drawn(false),
|
|
menu(NULL)
|
|
{
|
|
|
|
}
|
|
|
|
void Component::Refresh()
|
|
{
|
|
drawn = false;
|
|
}
|
|
|
|
void Component::TextPosition(std::string displayText)
|
|
{
|
|
|
|
textPosition = ui::Point(0, 0);
|
|
|
|
int textWidth, textHeight = 10;
|
|
Graphics::textsize((char*)displayText.c_str(), textWidth, textHeight);
|
|
textSize.X = textWidth; textSize.Y = textHeight;
|
|
textHeight-=3;
|
|
textWidth-=1;
|
|
if(Appearance.icon)
|
|
{
|
|
textWidth += 13;
|
|
}
|
|
|
|
int textAreaWidth = Size.X-(Appearance.Margin.Right+Appearance.Margin.Left);
|
|
int textAreaHeight = Size.Y-(Appearance.Margin.Top+Appearance.Margin.Bottom);
|
|
|
|
switch(Appearance.VerticalAlign)
|
|
{
|
|
case ui::Appearance::AlignTop:
|
|
textPosition.Y = Appearance.Margin.Top+2;
|
|
break;
|
|
case ui::Appearance::AlignMiddle:
|
|
textPosition.Y = Appearance.Margin.Top+((textAreaHeight-textHeight)/2);
|
|
break;
|
|
case ui::Appearance::AlignBottom:
|
|
textPosition.Y = Size.Y-(textHeight+Appearance.Margin.Bottom);
|
|
break;
|
|
}
|
|
|
|
switch(Appearance.HorizontalAlign)
|
|
{
|
|
case ui::Appearance::AlignLeft:
|
|
textPosition.X = Appearance.Margin.Left;
|
|
break;
|
|
case ui::Appearance::AlignCentre:
|
|
textPosition.X = Appearance.Margin.Left+((textAreaWidth-textWidth)/2);
|
|
break;
|
|
case ui::Appearance::AlignRight:
|
|
textPosition.X = Size.X-(textWidth+Appearance.Margin.Right);
|
|
break;
|
|
}
|
|
if(Appearance.icon)
|
|
{
|
|
iconPosition = textPosition-ui::Point(0, 1);
|
|
textPosition.X += 15;
|
|
}
|
|
}
|
|
|
|
bool Component::IsFocused() const
|
|
{
|
|
if(parentstate_)
|
|
return parentstate_->IsFocused(this);
|
|
return false;
|
|
}
|
|
|
|
void Component::SetParentWindow(Window* window)
|
|
{
|
|
parentstate_ = window;
|
|
}
|
|
|
|
void Component::SetParent(Panel* new_parent)
|
|
{
|
|
if(new_parent == NULL)
|
|
{
|
|
if(_parent != NULL)
|
|
{
|
|
// remove from current parent and send component to parent state
|
|
for(int i = 0; i < _parent->GetChildCount(); ++i)
|
|
{
|
|
if(_parent->GetChild(i) == this)
|
|
{
|
|
// remove ourself from parent component
|
|
_parent->RemoveChild(i, false);
|
|
|
|
// add ourself to the parent state
|
|
GetParentWindow()->AddComponent(this);
|
|
|
|
//done in this loop.
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// remove from parent state (if in parent state) and place in new parent
|
|
if(GetParentWindow())
|
|
GetParentWindow()->RemoveComponent(this);
|
|
new_parent->children.push_back(this);
|
|
}
|
|
this->_parent = new_parent;
|
|
}
|
|
|
|
// ***** OVERRIDEABLES *****
|
|
// Kept empty.
|
|
|
|
void Component::OnContextMenuAction(int item)
|
|
{
|
|
|
|
}
|
|
|
|
void Component::Draw(const Point& screenPos)
|
|
{
|
|
drawn = true;
|
|
}
|
|
|
|
void Component::Tick(float dt)
|
|
{
|
|
}
|
|
|
|
void Component::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
|
|
{
|
|
}
|
|
|
|
void Component::OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseClick(int localx, int localy, unsigned button)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseDown(int x, int y, unsigned button)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseHover(int localx, int localy)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseMoved(int localx, int localy, int dx, int dy)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseMovedInside(int localx, int localy, int dx, int dy)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseEnter(int localx, int localy)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseLeave(int localx, int localy)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseUnclick(int localx, int localy, unsigned button)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseUp(int x, int y, unsigned button)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseWheel(int localx, int localy, int d)
|
|
{
|
|
}
|
|
|
|
void Component::OnMouseWheelInside(int localx, int localy, int d)
|
|
{
|
|
}
|
|
|
|
Component::~Component()
|
|
{
|
|
if(menu)
|
|
delete menu;
|
|
}
|