treewars/menubutton.h

77 lines
1.6 KiB
C
Raw Permalink Normal View History

/* A clickable button widget
*
*/
#ifndef _MENUBUTTON_H_
#define _MENUBUTTON_H_
#include <SDL.h>
#include <SDL_ttf.h>
#include <string>
#include "entity.h"
#include "gamedata.h"
#include "gamevertex.h"
using std::string;
enum CustomButtonAction {BUTTON_NONE=0x0, BUTTON_END_TURN=0x1};
class ButtonAction
{
public:
ButtonAction();
Mode mode;
VertexType type;
CustomButtonAction action;
};
class MenuButton : public Entity
{
public:
MenuButton(ButtonAction action, string text = "", TTF_Font* font = NULL,
int x = 0, int y = 0, int colour=0x000000,
int hover_colour=0xff0000, int selected_colour=0x0000ff,
int background_colour=0x888888);
// Selectable buttons change colour for the duration they are selected,
// and should ignore clicks while selected
void set_selected(bool is_selected);
void set_visible(bool is_visible);
bool init();
void render(SDL_Surface* display);
void iterate();
bool is_at(int test_x, int test_y);
ButtonAction get_action() const { return action; }
// To get some complexity out of the Game class, let's teach MenuButton
// how to handle her own state, based on the current Mode and VertexType
// This isn't wonderful coupling, but it'll do
void set_state(Mode mode, VertexType type, GameVertex* current,
bool can_build);
private:
string text;
int x;
int y;
int colour;
int hover_colour;
int selected_colour;
int background_colour;
bool hover;
bool selected;
bool visible;
bool enabled;
TTF_Font* font;
ButtonAction action;
};
#endif