The-Powder-Toy/src/interface/Component.cpp

222 lines
4.1 KiB
C++
Raw Normal View History

2012-01-14 12:51:24 -06:00
//#include "Platform.h"
2012-05-15 12:13:17 -05:00
#include <iostream>
2012-01-08 11:39:03 -06:00
#include "interface/Component.h"
2012-01-14 12:51:24 -06:00
#include "interface/Engine.h"
#include "interface/Point.h"
2012-01-17 14:46:06 -06:00
#include "interface/Window.h"
2012-01-14 12:51:24 -06:00
#include "interface/Panel.h"
2012-01-08 11:39:03 -06:00
2012-01-14 12:51:24 -06:00
using namespace ui;
2012-01-08 11:39:03 -06:00
2012-01-17 14:46:06 -06:00
Component::Component(Window* parent_state):
2012-01-14 12:51:24 -06:00
parentstate_(parent_state),
_parent(NULL),
Position(Point(0,0)),
Size(Point(0,0)),
Locked(false),
2012-05-15 12:13:17 -05:00
Visible(true),
textPosition(0, 0),
textSize(0, 0),
2012-05-15 12:13:17 -05:00
iconPosition(0, 0),
drawn(false)
2012-01-08 11:39:03 -06:00
{
2012-01-14 12:51:24 -06:00
2012-01-08 11:39:03 -06:00
}
2012-01-14 12:51:24 -06:00
Component::Component(Point position, Point size):
2012-05-15 12:13:17 -05:00
parentstate_(0),
2012-01-14 12:51:24 -06:00
_parent(NULL),
Position(position),
Size(size),
Locked(false),
2012-05-15 12:13:17 -05:00
Visible(true),
textPosition(0, 0),
textSize(0, 0),
2012-05-15 12:13:17 -05:00
iconPosition(0, 0),
drawn(false)
2012-01-08 11:39:03 -06:00
{
2012-01-14 12:51:24 -06:00
2012-01-08 11:39:03 -06:00
}
2012-01-14 12:51:24 -06:00
Component::Component():
parentstate_(NULL),
_parent(NULL),
Position(Point(0,0)),
Size(Point(0,0)),
Locked(false),
2012-05-15 12:13:17 -05:00
Visible(true),
textPosition(0, 0),
textSize(0, 0),
2012-05-15 12:13:17 -05:00
iconPosition(0, 0),
drawn(false)
{
}
void Component::Refresh()
{
drawn = false;
}
void Component::TextPosition(std::string displayText)
2012-01-08 11:39:03 -06:00
{
2012-01-14 12:51:24 -06:00
2012-05-15 12:13:17 -05:00
textPosition = ui::Point(0, 0);
int textWidth, textHeight = 10;
Graphics::textsize((char*)displayText.c_str(), textWidth, textHeight);
textSize.X = textWidth; textSize.Y = textHeight;
2012-05-15 12:13:17 -05:00
textHeight-=3;
textWidth-=1;
if(Appearance.icon)
{
2012-05-23 14:25:35 -05:00
textWidth += 13;
2012-05-15 12:13:17 -05:00
}
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;
2012-05-15 12:13:17 -05:00
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)
{
2012-07-24 09:21:01 -05:00
iconPosition = textPosition-ui::Point(0, 1);
2012-05-15 12:13:17 -05:00
textPosition.X += 15;
}
2012-01-08 11:39:03 -06:00
}
2012-01-14 12:51:24 -06:00
bool Component::IsFocused() const
2012-01-08 11:39:03 -06:00
{
2012-01-14 12:51:24 -06:00
return parentstate_->IsFocused(this);
2012-01-08 11:39:03 -06:00
}
2012-01-17 14:46:06 -06:00
void Component::SetParentWindow(Window* window)
2012-01-08 11:39:03 -06:00
{
2012-01-17 14:46:06 -06:00
parentstate_ = window;
2012-01-08 11:39:03 -06:00
}
2012-01-14 12:51:24 -06:00
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
2012-01-17 14:46:06 -06:00
GetParentWindow()->AddComponent(this);
2012-01-14 12:51:24 -06:00
//done in this loop.
break;
}
}
}
}
else
{
// remove from parent state (if in parent state) and place in new parent
2012-01-17 14:46:06 -06:00
if(GetParentWindow())
GetParentWindow()->RemoveComponent(this);
2012-01-14 12:51:24 -06:00
new_parent->children.push_back(this);
}
this->_parent = new_parent;
}
// ***** OVERRIDEABLES *****
// Kept empty.
void Component::Draw(const Point& screenPos)
2012-01-08 11:39:03 -06:00
{
2012-05-15 12:13:17 -05:00
drawn = true;
2012-01-08 11:39:03 -06:00
}
2012-01-14 12:51:24 -06:00
void Component::Tick(float dt)
2012-01-08 11:39:03 -06:00
{
}
void Component::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
2012-01-08 11:39:03 -06:00
{
}
void Component::OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt)
2012-01-08 11:39:03 -06:00
{
}
2012-01-14 12:51:24 -06:00
void Component::OnMouseClick(int localx, int localy, unsigned button)
2012-01-08 11:39:03 -06:00
{
}
2012-01-14 12:51:24 -06:00
void Component::OnMouseDown(int x, int y, unsigned button)
2012-01-08 11:39:03 -06:00
{
}
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)
{
}
2012-01-14 12:51:24 -06:00
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)
2012-01-08 11:39:03 -06:00
{
}
void Component::OnMouseWheel(int localx, int localy, int d)
{
}
void Component::OnMouseWheelInside(int localx, int localy, int d)
{
}
2012-01-14 12:51:24 -06:00
Component::~Component()
2012-01-08 11:39:03 -06:00
{
2012-01-08 11:39:03 -06:00
}