'nother music patch by matzeb
[supertux.git] / src / button.h
1 //  $Id$
2 // 
3 //  SuperTux
4 //  Copyright (C) 2004 Tobias Glaesser <tobi.web@gmx.de>
5 //
6 //  This program is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU General Public License
8 //  as published by the Free Software Foundation; either version 2
9 //  of the License, or (at your option) any later version.
10 //
11 //  This program is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 //  GNU General Public License for more details.
15 // 
16 //  You should have received a copy of the GNU General Public License
17 //  along with this program; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19 //  02111-1307, USA.
20
21 #ifndef SUPERTUX_BUTTON_H
22 #define SUPERTUX_BUTTON_H
23
24 #include <vector>
25 #include "texture.h"
26
27 enum ButtonState {
28   BUTTON_NONE = -1,
29   BUTTON_CLICKED,
30   BUTTON_PRESSED,
31   BUTTON_HOVER
32 };
33
34 class ButtonPanel;
35
36 class Button
37   {
38     friend class ButtonPanel;
39
40   public:
41     Button(std::string icon_file, std::string info, SDLKey shortcut, int x, int y, int mw = -1, int h = -1);
42     ~Button();
43     void event(SDL_Event& event);
44     void draw();
45     int get_state();
46     void change_icon(std::string icon_file, int mw, int mh);
47     int get_tag()
48     {
49       return tag;
50     }
51
52   private:
53     static Timer popup_timer;
54     Surface* icon;
55     Surface* bkgd;
56     std::string info;
57     SDLKey shortcut;
58     SDL_Rect rect;
59     bool show_info;
60     ButtonState state;
61     int tag;
62   };
63
64 class ButtonPanel
65   {
66   public:
67     ButtonPanel(int x, int y, int w, int h);
68     ~ButtonPanel();
69     void draw();
70     Button* event(SDL_Event &event);
71     void additem(Button* pbutton, int tag);
72     Button* button_panel_event(SDL_Event& event);
73     void set_button_size(int w, int h) { bw = w; bh = h; }
74
75   private:
76     int bw, bh;
77     bool hidden;
78     SDL_Rect rect;
79     std::vector<Button*> item;
80   };
81
82 #endif /*SUPERTUX_BUTTON_H*/