]> git.sesse.net Git - vlc/blob - modules/gui/skins2/controls/ctrl_button.hpp
skins2: improve refresh of layouts
[vlc] / modules / gui / skins2 / controls / ctrl_button.hpp
1 /*****************************************************************************
2  * ctrl_button.hpp
3  *****************************************************************************
4  * Copyright (C) 2003 the VideoLAN team
5  * $Id$
6  *
7  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
8  *          Olivier Teulière <ipkiss@via.ecp.fr>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License along
21  * with this program; if not, write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23  *****************************************************************************/
24
25 #ifndef CTRL_BUTTON_HPP
26 #define CTRL_BUTTON_HPP
27
28 #include "ctrl_generic.hpp"
29 #include "../utils/fsm.hpp"
30 #include "../src/anim_bitmap.hpp"
31
32 class GenericBitmap;
33 class CmdGeneric;
34
35
36 /// Base class for button controls
37 class CtrlButton: public CtrlGeneric, public Observer<AnimBitmap>
38 {
39 public:
40     /// Create a button with 3 images
41     CtrlButton( intf_thread_t *pIntf, const GenericBitmap &rBmpUp,
42                 const GenericBitmap &rBmpOver, const GenericBitmap &rBmpDown,
43                 CmdGeneric &rCommand, const UString &rTooltip,
44                 const UString &rHelp, VarBool *pVisible );
45
46     virtual ~CtrlButton();
47
48     /// Set the position and the associated layout of the control
49     virtual void setLayout( GenericLayout *pLayout,
50                             const Position &rPosition );
51     virtual void unsetLayout();
52
53     /// Handle an event
54     virtual void handleEvent( EvtGeneric &rEvent );
55
56     /// Check whether coordinates are inside the control
57     virtual bool mouseOver( int x, int y ) const;
58
59     /// Draw the control on the given graphics
60     virtual void draw( OSGraphics &rImage, int xDest, int yDest, int w, int h );
61
62     /// Get the text of the tooltip
63     virtual UString getTooltipText() const { return m_tooltip; }
64
65     /// Get the type of control (custom RTTI)
66     virtual string getType() const { return "button"; }
67
68 private:
69     /// Finite state machine of the control
70     FSM m_fsm;
71     /// Command triggered by the button
72     CmdGeneric &m_rCommand;
73     /// Tooltip text
74     const UString m_tooltip;
75     /// Images of the button in the different states
76     AnimBitmap m_imgUp, m_imgOver, m_imgDown;
77     /// Current image
78     AnimBitmap *m_pImg;
79
80     /// Callback objects
81     DEFINE_CALLBACK( CtrlButton, UpOverDownOver )
82     DEFINE_CALLBACK( CtrlButton, DownOverUpOver )
83     DEFINE_CALLBACK( CtrlButton, DownOverDown )
84     DEFINE_CALLBACK( CtrlButton, DownDownOver )
85     DEFINE_CALLBACK( CtrlButton, UpOverUp )
86     DEFINE_CALLBACK( CtrlButton, UpUpOver )
87     DEFINE_CALLBACK( CtrlButton, DownUp )
88     DEFINE_CALLBACK( CtrlButton, UpHidden )
89     DEFINE_CALLBACK( CtrlButton, HiddenUp )
90
91     /// Change the current image
92     void setImage( AnimBitmap *pImg );
93
94     /// Method called when an animated bitmap changes
95     virtual void onUpdate( Subject<AnimBitmap> &rBitmap, void* );
96
97     /// Method called when visibility or ActiveLayout is updated
98     virtual void onUpdate( Subject<VarBool> &rVariable , void* );
99
100 };
101
102
103 #endif