2008-01-10 21:01:25 +02:00
# pragma once
2008-03-16 02:09:43 +02:00
# include "CPlayerInterface.h"
2008-08-15 15:11:42 +03:00
# include "client/FunctionList.h"
2008-05-18 20:33:39 +03:00
# include <boost/bind.hpp>
2008-03-16 02:09:43 +02:00
class AdventureMapButton
: public ClickableL , public ClickableR , public Hoverable , public KeyInterested , public CButtonBase
{
public :
2008-08-28 20:36:34 +03:00
std : : map < int , std : : string > hoverTexts ; //state -> text for statusbar
2008-03-16 02:09:43 +02:00
std : : string helpBox ; //for right-click help
char key ; //key shortcut
2008-08-15 15:11:42 +03:00
CFunctionList < void ( ) > callback ;
2008-08-27 13:19:18 +03:00
bool colorChange , blocked ,
2008-04-04 20:30:53 +03:00
actOnDown ; //runs when mouse is pressed down over it, not when up
2008-03-16 02:09:43 +02:00
void clickRight ( tribool down ) ;
2008-08-28 20:36:34 +03:00
virtual void clickLeft ( tribool down ) ;
void hover ( bool on ) ;
void block ( bool on ) ; //if button is blocked then it'll change it's graphic to inactive (offset==2) and won't react on l-clicks
2008-09-25 17:09:31 +03:00
void keyPressed ( const SDL_KeyboardEvent & key ) ;
2008-03-16 02:09:43 +02:00
void activate ( ) ; // makes button active
void deactivate ( ) ; // makes button inactive (but doesn't delete)
AdventureMapButton ( ) ; //c-tor
2008-08-28 20:36:34 +03:00
AdventureMapButton ( const std : : map < int , std : : string > & , const std : : string & HelpBox , const CFunctionList < void ( ) > & Callback , int x , int y , const std : : string & defName , bool activ = false , std : : vector < std : : string > * add = NULL , bool playerColoredButton = false ) ; //c-tor
AdventureMapButton ( const std : : string & Name , const std : : string & HelpBox , const CFunctionList < void ( ) > & Callback , int x , int y , const std : : string & defName , bool activ = false , std : : vector < std : : string > * add = NULL , bool playerColoredButton = false ) ; //c-tor
2008-08-25 13:25:16 +03:00
//AdventureMapButton( std::string Name, std::string HelpBox, boost::function<void()> Callback, int x, int y, std::string defName, bool activ=false, std::vector<std::string> * add = NULL, bool playerColoredButton = false );//c-tor
2008-08-15 15:11:42 +03:00
2008-08-28 20:36:34 +03:00
void init ( const CFunctionList < void ( ) > & Callback , const std : : map < int , std : : string > & Name , const std : : string & HelpBox , bool playerColoredButton , const std : : string & defName , std : : vector < std : : string > * add , int x , int y , bool activ ) ;
} ;
class CHighlightableButton
: public AdventureMapButton
{
public :
CHighlightableButton ( const CFunctionList < void ( ) > & onSelect , const CFunctionList < void ( ) > & onDeselect , const std : : map < int , std : : string > & Name , const std : : string & HelpBox , bool playerColoredButton , const std : : string & defName , std : : vector < std : : string > * add , int x , int y , bool activ ) ;
2008-09-19 11:16:19 +03:00
bool selected , onlyOn ;
2008-08-28 20:36:34 +03:00
CFunctionList < void ( ) > callback2 ; //when disselecting
2008-09-18 16:54:54 +03:00
void select ( bool on ) ;
2008-08-28 20:36:34 +03:00
void clickLeft ( tribool down ) ;
2008-03-16 02:09:43 +02:00
} ;
2008-09-24 11:15:49 +03:00
class CHighlightableButtonsGroup
{
public :
CFunctionList2 < void ( int ) > onChange ; //called when changing selected button with new button's id
std : : vector < CHighlightableButton * > buttons ;
//void addButton(const std::map<int,std::string> &tooltip, const std::string &HelpBox, const std::string &defName, int x, int y, int uid);
void addButton ( CHighlightableButton * bt ) ; //add existing button, it'll be deleted by CHighlightableButtonsGroup destructor
void addButton ( const std : : map < int , std : : string > & tooltip , const std : : string & HelpBox , const std : : string & defName , int x , int y , int uid , const CFunctionList < void ( ) > & OnSelect = 0 ) ; //creates new button
CHighlightableButtonsGroup ( const CFunctionList2 < void ( int ) > & OnChange ) ;
~ CHighlightableButtonsGroup ( ) ;
void activate ( ) ;
void deactivate ( ) ;
void select ( int id , bool mode ) ; //mode==0: id is serial; mode==1: id is unique button id
void selectionChanged ( int to ) ;
void show ( SDL_Surface * to = NULL ) ;
} ;
2008-01-31 23:35:30 +02:00
2008-04-04 20:30:53 +03:00
class CSlider : public IShowable , public MotionInterested , public ClickableL
{
public :
2008-05-18 20:33:39 +03:00
AdventureMapButton left , right , slider ; //if vertical then left=up
2008-04-04 20:30:53 +03:00
int capacity , //how many elements can be active at same time
amount , //how many elements
value ; //first active element
bool horizontal , moving ;
CDefEssential * imgs ;
2008-05-18 20:33:39 +03:00
boost : : function < void ( int ) > moved ;
//void(T::*moved)(int to);
//T* owner;
2008-04-04 20:30:53 +03:00
void redrawSlider ( ) ;
void sliderClicked ( ) ;
void moveLeft ( ) ;
void clickLeft ( tribool down ) ;
2008-09-25 17:09:31 +03:00
void mouseMoved ( const SDL_MouseMotionEvent & sEvent ) ;
2008-04-04 20:30:53 +03:00
void moveRight ( ) ;
void moveTo ( int to ) ;
2008-09-07 06:38:37 +03:00
void block ( bool on ) ;
2008-04-04 20:30:53 +03:00
void activate ( ) ; // makes button active
void deactivate ( ) ; // makes button inactive (but doesn't delete)
void show ( SDL_Surface * to = NULL ) ;
2008-05-18 20:33:39 +03:00
CSlider ( int x , int y , int totalw , boost : : function < void ( int ) > Moved , int Capacity , int Amount ,
2008-04-04 20:30:53 +03:00
int Value = 0 , bool Horizontal = true ) ;
~ CSlider ( ) ;
} ;