/* $Id$ */
#ifndef WIDGET_TYPES_H
#define WIDGET_TYPES_H
#include "widget.h"
#include "table/strings.h"
namespace gui {
struct Label : public Widget {
typedef Widget super;
protected:
StringID m_text;
public:
Label()
: Widget()
{}
Label(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, const Rect16 &rect, StringID text, StringID tooltip = 0, int color = COLOUR_NONE)
: Widget(container, id, feature_flags, (byte)color, rect, tooltip)
, m_text(text)
{
/* make the label transparent (no background) if color not provided */
if (color == COLOUR_NONE) m_feature_flags |= FF_TRANSPARENT;
}
/*virtual*/ void DrawBackground(EvtPaint &ev);
/*virtual*/ void OnPaint(EvtPaint &ev);
};
struct Button : public Widget {
typedef Widget super;
protected:
bool m_pushed;
CaptureTicket m_ticket_pressed;
public:
Button()
: Widget()
, m_pushed(false)
{}
Button(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, byte color, const Rect16 &rect, StringID tooltips)
: Widget(container, id, feature_flags, color, rect, tooltips)
, m_pushed(false)
{}
void OnCapturePressed(EvtMouseOver &e);
/*virtual*/ void DrawBackground(EvtPaint &ev);
/*virtual*/ void OnLeftButtonDown(EvtLeftButtonDown &ev);
};
struct ImageButton : public Button {
typedef Button super;
protected:
SpriteID m_sprite;
Point16 m_sprite_offset;
public:
ImageButton()
: Button()
, m_sprite(0)
{}
ImageButton(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, byte color, const Rect16 &rect, StringID tooltips, SpriteID sprite, Point16 sprite_offset)
: Button(container, id, feature_flags, color, rect, tooltips)
, m_sprite(sprite)
, m_sprite_offset(sprite_offset)
{}
/*virtual*/ void OnPaint(EvtPaint &ev);
};
struct ImageButton2 : public ImageButton {
typedef ImageButton super;
protected:
SpriteID m_sprite_pushed;
Point16 m_sprite_offset_pushed;
public:
ImageButton2()
: ImageButton()
, m_sprite_pushed(0)
{}
ImageButton2(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, byte color, const Rect16 &rect, StringID tooltips, SpriteID sprite, Point16 sprite_offset, SpriteID sprite_pushed, Point16 sprite_offset_pushed)
: ImageButton(container, id, feature_flags, color, rect, tooltips, sprite, sprite_offset)
, m_sprite_pushed(sprite_pushed)
, m_sprite_offset_pushed(sprite_offset_pushed)
{}
/*virtual*/ void OnPaint(EvtPaint &ev);
};
struct TextButton : public Button {
typedef Button super;
protected:
StringID m_text;
public:
TextButton()
: Button()
{}
TextButton(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, byte color, const Rect16 &rect, StringID tooltips, StringID text)
: Button(container, id, feature_flags, color, rect, tooltips)
, m_text(text)
{}
/*virtual*/ void OnPaint(EvtPaint &ev);
};
struct CloseBox : public Button {
typedef Button super;
static const int16 DEFAULT_WIDTH = 11;
static const int16 DEFAULT_HEIGHT = 14;
public:
CloseBox()
: Button()
{}
CloseBox(CompositeWidget *container)
: Button(container, -102, FF_NONE, container->m_color, Rect16(), STR_018B_CLOSE_WINDOW)
{}
/*virtual*/ void OnCreate(EvtCreate &ev);
/*virtual*/ void OnPaint(EvtPaint &ev);
/*virtual*/ void OnLeftClick(EvtLeftClick &ev);
};
struct StickyBox : public ImageButton2 {
typedef ImageButton2 super;
static const int16 DEFAULT_WIDTH = 12;
static const int16 DEFAULT_HEIGHT = 14;
public:
StickyBox()
: ImageButton2()
{}
StickyBox(CompositeWidget *container)
: ImageButton2(container, -103, FF_TOGGLE_BUTTON, container->m_color, Rect16(), STR_STICKY_BUTTON, SPR_PIN_DOWN, Point(0, 1), SPR_PIN_UP, Point(0, 1))
{}
/*virtual*/ void OnCreate(EvtCreate &ev);
// /*virtual*/ void OnPaint(EvtPaint &ev);
/*virtual*/ void OnLeftClick(EvtLeftClick &ev);
};
struct Caption : public Widget {
typedef Widget super;
protected:
Point16 m_moving_offset;
CaptureTicket m_ticket_moving;
public:
Caption()
: Widget()
{}
Caption(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, byte color, const Rect16 rect, byte text_color, StringID tooltips, StringID text)
: Widget(container, id, feature_flags, color, rect, tooltips)
{}
/*virtual*/ void DrawBackground(EvtPaint &ev);
/*virtual*/ void OnPaint(EvtPaint &ev);
/*virtual*/ void OnLeftButtonDown(EvtLeftButtonDown &ev);
void OnCaptureMoving(EvtMouseOver &e);
};
struct CaptionBar : public CompositeWidget {
typedef CompositeWidget super;
static const int16 DEFAULT_HEIGHT = 14;
public:
CaptionBar()
: CompositeWidget()
{}
CaptionBar(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, byte color)
: CompositeWidget(container, id, feature_flags, color, Rect16(0, 0, container->Right(), DEFAULT_HEIGHT - 1), 0)
{}
/*virtual*/ void CreateWidgets();
};
struct ResizeBox : public Widget {
typedef Widget super;
static const int16 DEFAULT_WIDTH = 11;
static const int16 DEFAULT_HEIGHT = 11;
protected:
Point16 m_sizing_offset;
CaptureTicket m_ticket_sizing;
public:
ResizeBox()
: Widget()
{}
ResizeBox(CompositeWidget *container)
: Widget(container, -101, FF_NONE, container->m_color, Rect16(), STR_RESIZE_BUTTON)
{}
/*virtual*/ void DrawBackground(EvtPaint &ev);
void OnCaptureSizing(EvtMouseOver &e);
/*virtual*/ void OnCreate(EvtCreate &ev);
/*virtual*/ void OnPaint(EvtPaint &ev);
/*virtual*/ void OnLeftButtonDown(EvtLeftButtonDown &ev);
/*virtual*/ void OnResizeParent(EvtResizeParent &ev);
};
}; // namespace gui
#endif /* WIDGET_TYPES_H */