src/widget/widget_types.h
author KUDr
Tue, 06 Mar 2007 13:06:38 +0000
branchcpp_gui
changeset 6290 8078f7a3c8a0
parent 6289 be3d8bd9fb02
child 6292 272c690043e3
permissions -rw-r--r--
(svn r9023) [cpp_gui] -Add: ImageButton and ImageButton2
-Add: Widget::DrawSprite() method that accepts sprite coordinates in the widget space instead of window space
/* $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 */