1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-12 02:28:11 +02:00

* music volume buttons in system options window (unfortunately seems not to affect volume at all despite appropriate music handler call)

This commit is contained in:
mateuszb 2009-05-06 10:14:48 +00:00
parent 8c36658c56
commit bf2fec8e64
4 changed files with 53 additions and 23 deletions

View File

@ -198,6 +198,7 @@ void AdventureMapButton::block( ui8 on )
bitmapOffset = on ? 2 : 0;
show(screen2);
}
void CHighlightableButton::select(bool on)
{
selected = on;
@ -232,50 +233,61 @@ void CHighlightableButton::clickLeft( tribool down )
{
pressedL=state;
}
}
CHighlightableButton::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, int key )
{
onlyOn = false;
selected = false;
init(onSelect,Name,HelpBox,playerColoredButton,defName,add,x,y,key);
callback2 = onDeselect;
}
CHighlightableButton::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, int key)
: onlyOn(false), selected(false), callback2(onDeselect)
{
init(onSelect,Name,HelpBox,playerColoredButton,defName,add,x,y,key);
}
void CHighlightableButtonsGroup::addButton(CHighlightableButton* bt)
{
bt->callback += boost::bind(&CHighlightableButtonsGroup::selectionChanged,this,bt->ID);
buttons.push_back(bt);
}
void CHighlightableButtonsGroup::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, int key)
{
CHighlightableButton *bt = new CHighlightableButton(OnSelect,0,tooltip,HelpBox,false,defName,0,x,y,key);
CHighlightableButton *bt = new CHighlightableButton(OnSelect, 0, tooltip, HelpBox, false, defName, 0, x, y, key);
if(musicLike)
{
bt->bitmapOffset = buttons.size() - 3;
}
bt->ID = uid;
bt->callback += boost::bind(&CHighlightableButtonsGroup::selectionChanged,this,bt->ID);
bt->onlyOn = true;
buttons.push_back(bt);
}
CHighlightableButtonsGroup::CHighlightableButtonsGroup(const CFunctionList2<void(int)> &OnChange)
{
onChange = OnChange;
}
CHighlightableButtonsGroup::CHighlightableButtonsGroup(const CFunctionList2<void(int)> &OnChange, bool musicLikeButtons)
: musicLike(musicLikeButtons), onChange(OnChange)
{}
CHighlightableButtonsGroup::~CHighlightableButtonsGroup()
{
for(size_t i=0;i<buttons.size();i++) {
delete buttons[i]; //TODO smartpointers
}
for(size_t i=0;i<buttons.size();i++)
{
delete buttons[i];
}
}
void CHighlightableButtonsGroup::activate()
{
for(size_t i=0;i<buttons.size();i++) {
for(size_t i=0;i<buttons.size();i++)
{
buttons[i]->activate();
}
}
}
void CHighlightableButtonsGroup::deactivate()
{
for(size_t i=0;i<buttons.size();i++) {
for(size_t i=0;i<buttons.size();i++)
{
buttons[i]->deactivate();
}
}
}
void CHighlightableButtonsGroup::select(int id, bool mode)
{
CHighlightableButton *bt = NULL;
@ -300,11 +312,13 @@ void CHighlightableButtonsGroup::selectionChanged(int to)
buttons[i]->select(false);
onChange(to);
}
void CHighlightableButtonsGroup::show(SDL_Surface * to )
{
for(size_t i=0;i<buttons.size(); ++i)
{
buttons[i]->show(to);
if(musicLike && buttons[i]->selected) //if musicLike, print only selected button
buttons[i]->show(to);
}
}

View File

@ -51,7 +51,7 @@ 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, int key=0 );
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, int key=0);
bool selected, onlyOn;
CFunctionList<void()> callback2; //when disselecting
void select(bool on);
@ -63,11 +63,12 @@ class CHighlightableButtonsGroup
public:
CFunctionList2<void(int)> onChange; //called when changing selected button with new button's id
std::vector<CHighlightableButton*> buttons;
bool musicLike; //determines the behaviour of this group
//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, int key=0); //creates new button
CHighlightableButtonsGroup(const CFunctionList2<void(int)> &OnChange);
CHighlightableButtonsGroup(const CFunctionList2<void(int)> &OnChange, bool musicLikeButtons = false);
~CHighlightableButtonsGroup();
void activate();
void deactivate();

View File

@ -997,6 +997,7 @@ CButtonBase::~CButtonBase()
void CButtonBase::show(SDL_Surface * to)
{
int img = std::min(state+bitmapOffset,int(imgs[curimg].size()-1));
img = std::max(0, img);
if (abs)
{
@ -4435,6 +4436,15 @@ CSystemOptionsWindow::CSystemOptionsWindow(const SDL_Rect &pos, CPlayerInterface
mapScrollSpeed->addButton(boost::assign::map_list_of(0,CGI->generaltexth->zelp[359].first),CGI->generaltexth->zelp[359].second, "sysob11.def", 315, 267, 4);
mapScrollSpeed->select(owner->mapScrollingSpeed, 1);
mapScrollSpeed->onChange = boost::bind(&CPlayerInterface::setMapScrollingSpeed, owner, _1);
musicVolume = new CHighlightableButtonsGroup(0, true);
for(int i=1; i<=10; ++i)
{
musicVolume->addButton(boost::assign::map_list_of(0,CGI->generaltexth->zelp[359+i].first),CGI->generaltexth->zelp[359+i].second, "syslb.def", 188 + 19*(i-1), 415, i*10);
}
musicVolume->select(CGI->audioh->getMusicVolume(), 1);
musicVolume->onChange = boost::bind(&CAudioHandler::setMusicVolume, CGI->audioh, _1);
}
CSystemOptionsWindow::~CSystemOptionsWindow()
@ -4446,6 +4456,7 @@ CSystemOptionsWindow::~CSystemOptionsWindow()
delete backToMap;
delete heroMoveSpeed;
delete mapScrollSpeed;
delete musicVolume;
}
void CSystemOptionsWindow::bquitf()
@ -4477,6 +4488,7 @@ void CSystemOptionsWindow::activate()
backToMap->activate();
heroMoveSpeed->activate();
mapScrollSpeed->activate();
musicVolume->activate();
}
void CSystemOptionsWindow::deactivate()
@ -4486,6 +4498,7 @@ void CSystemOptionsWindow::deactivate()
backToMap->deactivate();
heroMoveSpeed->deactivate();
mapScrollSpeed->deactivate();
musicVolume->deactivate();
}
void CSystemOptionsWindow::show(SDL_Surface *to)
@ -4497,6 +4510,7 @@ void CSystemOptionsWindow::show(SDL_Surface *to)
backToMap->show(to);
heroMoveSpeed->show(to);
mapScrollSpeed->show(to);
musicVolume->show(to);
}
CTavernWindow::CTavernWindow(const CGHeroInstance *H1, const CGHeroInstance *H2, const std::string &gossip)

View File

@ -902,6 +902,7 @@ private:
AdventureMapButton *load, *save, *restart, *mainMenu, * quitGame, * backToMap; //load, restart and main menu are not used yet
CHighlightableButtonsGroup * heroMoveSpeed;
CHighlightableButtonsGroup * mapScrollSpeed;
CHighlightableButtonsGroup * musicVolume, * effectsVolume;
public:
CSystemOptionsWindow(const SDL_Rect & pos, CPlayerInterface * owner); //c-tor
~CSystemOptionsWindow(); //d-tor