| 
									
										
										
										
											2009-05-19 18:23:04 +00:00
										 |  |  | #include "AdventureMapButton.h"
 | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | #include "CAdvmapInterface.h"
 | 
					
						
							|  |  |  | #include "SDL_Extensions.h"
 | 
					
						
							| 
									
										
										
										
											2009-05-20 10:08:56 +00:00
										 |  |  | #include "../hch/CDefHandler.h"
 | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | #include "CGameInfo.h"
 | 
					
						
							| 
									
										
										
										
											2009-05-20 10:08:56 +00:00
										 |  |  | #include "../hch/CLodHandler.h"
 | 
					
						
							|  |  |  | #include "../hch/CGeneralTextHandler.h"
 | 
					
						
							|  |  |  | #include "../hch/CTownHandler.h"
 | 
					
						
							|  |  |  | #include "../CCallback.h"
 | 
					
						
							|  |  |  | #include "CConfigHandler.h"
 | 
					
						
							|  |  |  | #include "Graphics.h"
 | 
					
						
							| 
									
										
										
										
											2009-01-29 18:07:31 +00:00
										 |  |  | #include "CBattleInterface.h"
 | 
					
						
							| 
									
										
										
										
											2009-05-20 09:02:50 +00:00
										 |  |  | #include "CPlayerInterface.h"
 | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | #include "CMessage.h"
 | 
					
						
							| 
									
										
										
										
											2009-04-15 14:03:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * AdevntureMapButton.cpp, part of VCMI engine | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Authors: listed in file AUTHORS in main folder | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * License: GNU General Public License v2.0 or later | 
					
						
							|  |  |  |  * Full text of license available in license.txt file, in main folder | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | CButtonBase::CButtonBase() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	bitmapOffset = 0; | 
					
						
							|  |  |  | 	curimg=0; | 
					
						
							|  |  |  | 	type=-1; | 
					
						
							|  |  |  | 	abs=false; | 
					
						
							|  |  |  | 	//active=false;
 | 
					
						
							|  |  |  | 	notFreeButton = false; | 
					
						
							|  |  |  | 	ourObj=NULL; | 
					
						
							|  |  |  | 	state=0; | 
					
						
							|  |  |  | 	text = NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CButtonBase::~CButtonBase() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	delete text; | 
					
						
							|  |  |  | 	if(notFreeButton) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	for(int i =0; i<imgs.size();i++) | 
					
						
							|  |  |  | 		for(int j=0;j<imgs[i].size();j++) | 
					
						
							|  |  |  | 			SDL_FreeSurface(imgs[i][j]); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CButtonBase::show(SDL_Surface * to) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	int img = std::min(state+bitmapOffset,int(imgs[curimg].size()-1)); | 
					
						
							|  |  |  | 	img = std::max(0, img); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (abs) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		blitAt(imgs[curimg][img],pos.x,pos.y,to); | 
					
						
							|  |  |  | 		if(text) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			CSDL_Ext::printAt(text->text, text->x + pos.x + state, text->y + pos.y + state, text->font, zwykly, to); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		blitAt(imgs[curimg][img],pos.x+ourObj->pos.x,pos.y+ourObj->pos.y,to); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CButtonBase::showAll( SDL_Surface * to ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	show(to); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CButtonBase::addTextOverlay( const std::string Text, EFonts font ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	text = new TextOverlay; | 
					
						
							|  |  |  | 	text->text = Text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const Font *f = graphics->fonts[font]; | 
					
						
							|  |  |  | 	text->x = pos.w/2 - f->getWidth(Text.c_str())/2; | 
					
						
							|  |  |  | 	text->y = pos.h/2 - f->height/2; | 
					
						
							|  |  |  | 	text->font = font; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | AdventureMapButton::AdventureMapButton () | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	type=2; | 
					
						
							|  |  |  | 	abs=true; | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	hoverable = false; | 
					
						
							|  |  |  | 	//active=false;
 | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	ourObj=NULL; | 
					
						
							|  |  |  | 	state=0; | 
					
						
							| 
									
										
										
										
											2008-08-27 10:19:18 +00:00
										 |  |  | 	blocked = actOnDown = false; | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2008-08-25 10:25:16 +00:00
										 |  |  | //AdventureMapButton::AdventureMapButton( std::string Name, std::string HelpBox, boost::function<void()> Callback, int x, int y, std::string defName, bool activ,  std::vector<std::string> * add, bool playerColoredButton)
 | 
					
						
							|  |  |  | //{
 | 
					
						
							|  |  |  | //	init(Callback, Name, HelpBox, playerColoredButton, defName, add, x, y, activ);
 | 
					
						
							|  |  |  | //}
 | 
					
						
							| 
									
										
										
										
											2008-10-19 13:17:32 +00:00
										 |  |  | AdventureMapButton::AdventureMapButton( const std::string &Name, const std::string &HelpBox, const CFunctionList<void()> &Callback, int x, int y,  const std::string &defName,int key, std::vector<std::string> * add, bool playerColoredButton ) | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | 	std::map<int,std::string> pom; | 
					
						
							|  |  |  | 	pom[0] = Name; | 
					
						
							| 
									
										
										
										
											2008-10-19 13:17:32 +00:00
										 |  |  | 	init(Callback, pom, HelpBox, playerColoredButton, defName, add, x, y, key); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-19 13:17:32 +00:00
										 |  |  | AdventureMapButton::AdventureMapButton( const std::map<int,std::string> &Name, const std::string &HelpBox, const CFunctionList<void()> &Callback, int x, int y, const std::string &defName, int key, std::vector<std::string> * add /*= NULL*/, bool playerColoredButton /*= false */ ) | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2008-10-19 13:17:32 +00:00
										 |  |  | 	init(Callback, Name, HelpBox, playerColoredButton, defName, add, x, y, key); | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-12 18:26:23 +00:00
										 |  |  | AdventureMapButton::AdventureMapButton( const std::string &Name, const std::string &HelpBox, const CFunctionList<void()> &Callback, config::ButtonInfo *info, int key/*=0*/ ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	std::map<int,std::string> pom; | 
					
						
							|  |  |  | 	pom[0] = Name; | 
					
						
							|  |  |  | 	init(Callback, pom, HelpBox, info->playerColoured, info->defName, &info->additionalDefs, info->x, info->y, key); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2009-02-06 11:15:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | AdventureMapButton::AdventureMapButton( const std::pair<std::string, std::string> help, const CFunctionList<void()> &Callback, int x, int y, const std::string &defName, int key/*=0*/, std::vector<std::string> * add /*= NULL*/, bool playerColoredButton /*= false */ ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	std::map<int,std::string> pom; | 
					
						
							|  |  |  | 	pom[0] = help.first; | 
					
						
							|  |  |  | 	init(Callback, pom, help.second, playerColoredButton, defName, add, x, y, key); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | void AdventureMapButton::clickLeft(tribool down, bool previousState) | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2008-08-27 10:19:18 +00:00
										 |  |  | 	if(blocked) | 
					
						
							|  |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	if (down) | 
					
						
							|  |  |  | 		state=1; | 
					
						
							| 
									
										
										
										
											2008-08-02 15:08:03 +00:00
										 |  |  | 	else | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 		state=0; | 
					
						
							| 
									
										
										
										
											2009-05-24 23:21:55 +00:00
										 |  |  | 	show(screenBuf); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	if (actOnDown && down) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | 		callback(); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | 	else if (!actOnDown && previousState && (down==false)) | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | 		callback(); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | void AdventureMapButton::clickRight(tribool down, bool previousState) | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	if(down && helpBox.size()) //there is no point to show window with nothing inside...
 | 
					
						
							|  |  |  | 		if(LOCPLINT) | 
					
						
							|  |  |  | 			LOCPLINT->adventureInt->handleRightClick(helpBox,down,this); | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			GH.pushInt(new CRClickPopupInt(CMessage::genWindow(helpBox, 0),true)); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void AdventureMapButton::hover (bool on) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	if(hoverable) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if(on) | 
					
						
							|  |  |  | 			state = 2; | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			state = 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(pressedL) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if(on) | 
					
						
							|  |  |  | 			state = 1; | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			state = hoverable ? 2 : 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | 	////Hoverable::hover(on);
 | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | 	std::string *name = (vstd::contains(hoverTexts,state))  | 
					
						
							|  |  |  | 							? (&hoverTexts[state])  | 
					
						
							|  |  |  | 							: (vstd::contains(hoverTexts,0) ? (&hoverTexts[0]) : NULL); | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	if(LOCPLINT &&  name && blocked!=1) //if there is no name, there is nohing to display also
 | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2009-04-14 12:47:09 +00:00
										 |  |  | 		if (LOCPLINT->battleInt) //for battle buttons
 | 
					
						
							| 
									
										
										
										
											2009-01-29 18:07:31 +00:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			if(on && LOCPLINT->battleInt->console->alterTxt == "") | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				LOCPLINT->battleInt->console->alterTxt = *name; | 
					
						
							|  |  |  | 				LOCPLINT->battleInt->console->whoSetAlter = 1; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			else if (LOCPLINT->battleInt->console->alterTxt == *name) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				LOCPLINT->battleInt->console->alterTxt = ""; | 
					
						
							|  |  |  | 				LOCPLINT->battleInt->console->whoSetAlter = 0; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else //for other buttons
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			if (on) | 
					
						
							|  |  |  | 				LOCPLINT->statusbar->print(*name); | 
					
						
							|  |  |  | 			else if ( LOCPLINT->statusbar->getCurrent()==(*name) ) | 
					
						
							|  |  |  | 				LOCPLINT->statusbar->clear(); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void AdventureMapButton::activate() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | // 	if (active) return;
 | 
					
						
							|  |  |  | // 	active=true;
 | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | 	activateLClick(); | 
					
						
							|  |  |  | 	activateRClick(); | 
					
						
							|  |  |  | 	activateHover(); | 
					
						
							|  |  |  | 	activateKeys(); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | } | 
					
						
							|  |  |  | void AdventureMapButton::deactivate() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | // 	if (!active) return;
 | 
					
						
							|  |  |  | // 	active=false;
 | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | 	deactivateLClick(); | 
					
						
							|  |  |  | 	deactivateRClick(); | 
					
						
							|  |  |  | 	deactivateHover(); | 
					
						
							|  |  |  | 	deactivateKeys(); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-19 13:17:32 +00:00
										 |  |  | void AdventureMapButton::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, int key) | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	callback = Callback; | 
					
						
							| 
									
										
										
										
											2008-08-27 10:19:18 +00:00
										 |  |  | 	blocked = actOnDown = false; | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 	type=2; | 
					
						
							|  |  |  | 	abs=true; | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	hoverable = false; | 
					
						
							|  |  |  | 	//active=false;
 | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 	ourObj=NULL; | 
					
						
							| 
									
										
										
										
											2008-11-01 22:32:56 +00:00
										 |  |  | 	assignedKeys.insert(key); | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 	state=0; | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | 	hoverTexts = Name; | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 	helpBox=HelpBox; | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	setDef(defName, playerColoredButton); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-12 18:26:23 +00:00
										 |  |  | 	if (add && add->size()) | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		imgs.resize(imgs.size()+add->size()); | 
					
						
							| 
									
										
										
										
											2008-12-21 19:17:35 +00:00
										 |  |  | 		for (size_t i=0; i<add->size();i++) | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 			CDefHandler *temp = CDefHandler::giveDef((*add)[i]); | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 			temp->notFreeImgs = true; | 
					
						
							| 
									
										
										
										
											2008-12-21 19:17:35 +00:00
										 |  |  | 			for (size_t j=0;j<temp->ourImages.size();j++) | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 				imgs[i+1].push_back(temp->ourImages[j].bitmap); | 
					
						
							| 
									
										
										
										
											2009-01-29 18:07:31 +00:00
										 |  |  | 				if(playerColoredButton) | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 					graphics->blueToPlayersAdv(imgs[1+i][j],LOCPLINT->playerID); | 
					
						
							| 
									
										
										
										
											2009-01-29 18:07:31 +00:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			delete temp; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2008-11-12 18:26:23 +00:00
										 |  |  | 		//delete add;
 | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	pos.x += x; | 
					
						
							|  |  |  | 	pos.y += y; | 
					
						
							| 
									
										
										
										
											2008-08-15 12:11:42 +00:00
										 |  |  | 	pos.w = imgs[curimg][0]->w; | 
					
						
							|  |  |  | 	pos.h = imgs[curimg][0]->h  -1; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-09 16:18:48 +00:00
										 |  |  | void AdventureMapButton::block( ui8 on ) | 
					
						
							| 
									
										
										
										
											2008-08-27 10:19:18 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	blocked = on; | 
					
						
							|  |  |  | 	state = 0; | 
					
						
							|  |  |  | 	bitmapOffset = on ? 2 : 0; | 
					
						
							| 
									
										
										
										
											2009-05-24 23:21:55 +00:00
										 |  |  | 	show(screenBuf); | 
					
						
							| 
									
										
										
										
											2008-08-27 10:19:18 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | void AdventureMapButton::setDef(const std::string & defName, bool playerColoredButton) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	CDefHandler * temp = CDefHandler::giveDef(defName);  | 
					
						
							|  |  |  | 	temp->notFreeImgs = true; | 
					
						
							|  |  |  | 	for (size_t i=0;i<temp->ourImages.size();i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		imgs.resize(1); | 
					
						
							|  |  |  | 		imgs[0].push_back(temp->ourImages[i].bitmap); | 
					
						
							|  |  |  | 		if(playerColoredButton) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			graphics->blueToPlayersAdv(imgs[curimg][i],LOCPLINT->playerID); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	delete temp; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2008-09-18 13:54:54 +00:00
										 |  |  | void CHighlightableButton::select(bool on) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	selected = on; | 
					
						
							|  |  |  | 	state = selected ? 3 : 0; | 
					
						
							|  |  |  | 	if(selected) | 
					
						
							|  |  |  | 		callback(); | 
					
						
							|  |  |  | 	else  | 
					
						
							|  |  |  | 		callback2(); | 
					
						
							|  |  |  | 	if(hoverTexts.size()>1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		hover(false); | 
					
						
							|  |  |  | 		hover(true); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2008-08-27 10:19:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | void CHighlightableButton::clickLeft(tribool down, bool previousState) | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	if(blocked) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	if (down) | 
					
						
							|  |  |  | 		state=1; | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		state = selected ? 3 : 0; | 
					
						
							| 
									
										
										
										
											2009-05-24 23:21:55 +00:00
										 |  |  | 	show(screenBuf); | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | 	if(previousState  &&  down == false) | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2008-09-19 08:16:19 +00:00
										 |  |  | 		if(!onlyOn || !selected) | 
					
						
							|  |  |  | 			select(!selected); | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 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) | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2008-10-19 13:17:32 +00:00
										 |  |  | 	init(onSelect,Name,HelpBox,playerColoredButton,defName,add,x,y,key); | 
					
						
							| 
									
										
										
										
											2008-08-28 17:36:34 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | CHighlightableButton::CHighlightableButton( const std::pair<std::string, std::string> help, const CFunctionList<void()> &onSelect, int x, int y, const std::string &defName, int myid, int key/*=0*/, std::vector<std::string> * add /*= NULL*/, bool playerColoredButton /*= false */ ) | 
					
						
							| 
									
										
										
										
											2009-08-21 00:59:12 +00:00
										 |  |  | : onlyOn(false), selected(false) // TODO: callback2(???)
 | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	ID = myid; | 
					
						
							|  |  |  | 	std::map<int,std::string> pom; | 
					
						
							|  |  |  | 	pom[0] = help.first; | 
					
						
							|  |  |  | 	init(onSelect, pom, help.second, playerColoredButton, defName, add, x, y, key); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | void CHighlightableButtonsGroup::addButton(CHighlightableButton* bt) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	bt->callback += boost::bind(&CHighlightableButtonsGroup::selectionChanged,this,bt->ID); | 
					
						
							|  |  |  | 	buttons.push_back(bt); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-19 13:17:32 +00:00
										 |  |  | 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) | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 	CHighlightableButton *bt = new CHighlightableButton(OnSelect, 0, tooltip, HelpBox, false, defName, 0, x, y, key); | 
					
						
							|  |  |  | 	if(musicLike) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		bt->bitmapOffset = buttons.size() - 3; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | 	bt->ID = uid; | 
					
						
							|  |  |  | 	bt->callback += boost::bind(&CHighlightableButtonsGroup::selectionChanged,this,bt->ID); | 
					
						
							|  |  |  | 	bt->onlyOn = true; | 
					
						
							|  |  |  | 	buttons.push_back(bt); | 
					
						
							|  |  |  | }	 | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | CHighlightableButtonsGroup::CHighlightableButtonsGroup(const CFunctionList2<void(int)> &OnChange, bool musicLikeButtons) | 
					
						
							|  |  |  | : musicLike(musicLikeButtons), onChange(OnChange) | 
					
						
							|  |  |  | {} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | CHighlightableButtonsGroup::~CHighlightableButtonsGroup() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 	for(size_t i=0;i<buttons.size();i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		delete buttons[i]; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | void CHighlightableButtonsGroup::activate() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 	for(size_t i=0;i<buttons.size();i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | 		buttons[i]->activate(); | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | void CHighlightableButtonsGroup::deactivate() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 	for(size_t i=0;i<buttons.size();i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | 		buttons[i]->deactivate(); | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | void CHighlightableButtonsGroup::select(int id, bool mode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	CHighlightableButton *bt = NULL; | 
					
						
							|  |  |  | 	if(mode) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2008-12-21 19:17:35 +00:00
										 |  |  | 		for(size_t i=0;i<buttons.size() && !bt; ++i) | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | 			if (buttons[i]->ID == id) | 
					
						
							|  |  |  | 				bt = buttons[i]; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		bt = buttons[id]; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	bt->select(true); | 
					
						
							|  |  |  | 	selectionChanged(bt->ID); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CHighlightableButtonsGroup::selectionChanged(int to) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2008-12-21 19:17:35 +00:00
										 |  |  | 	for(size_t i=0;i<buttons.size(); ++i) | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | 		if(buttons[i]->ID!=to && buttons[i]->selected) | 
					
						
							|  |  |  | 			buttons[i]->select(false); | 
					
						
							|  |  |  | 	onChange(to); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | void CHighlightableButtonsGroup::show(SDL_Surface * to ) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-04-14 12:47:09 +00:00
										 |  |  | 	for(size_t i=0;i<buttons.size(); ++i)  | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2009-05-06 10:21:05 +00:00
										 |  |  | 		if(!musicLike || (musicLike && buttons[i]->selected)) //if musicLike, print only selected button
 | 
					
						
							| 
									
										
										
										
											2009-05-06 10:14:48 +00:00
										 |  |  | 			buttons[i]->show(to); | 
					
						
							| 
									
										
										
										
											2009-04-14 12:47:09 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-09-24 08:15:49 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | void CHighlightableButtonsGroup::showAll( SDL_Surface * to ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	show(to); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | void CSlider::sliderClicked() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if(!moving) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | 		activateMouseMove(); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 		moving = true; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-25 14:09:31 +00:00
										 |  |  | void CSlider::mouseMoved (const SDL_MouseMotionEvent & sEvent) | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	float v = 0; | 
					
						
							|  |  |  | 	if(horizontal) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if(	std::abs(sEvent.y-(pos.y+pos.h/2)) > pos.h/2+40  ||  std::abs(sEvent.x-(pos.x+pos.w/2)) > pos.w/2  )  | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		v = sEvent.x - pos.x - 24; | 
					
						
							|  |  |  | 		v *= positions; | 
					
						
							|  |  |  | 		v /= (pos.w - 48); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if(std::abs(sEvent.x-(pos.x+pos.w/2)) > pos.w/2+40  ||  std::abs(sEvent.y-(pos.y+pos.h/2)) > pos.h/2  )  | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		v = sEvent.y - pos.y - 24; | 
					
						
							|  |  |  | 		v *= positions; | 
					
						
							|  |  |  | 		v /= (pos.h - 48); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2009-03-26 23:05:40 +00:00
										 |  |  | 	v += 0.5f; | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	if(v!=value) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		moveTo(v); | 
					
						
							|  |  |  | 		redrawSlider(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CSlider::redrawSlider() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	slider->show(screenBuf); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CSlider::moveLeft() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	moveTo(value-1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CSlider::moveRight() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	moveTo(value+1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CSlider::moveTo(int to) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	amax(to, 0); | 
					
						
							|  |  |  | 	amin(to, positions); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	//same, old position?
 | 
					
						
							|  |  |  | 	if(value == to) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	value = to; | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	if(horizontal) | 
					
						
							| 
									
										
										
										
											2008-05-31 20:37:54 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 		if(positions) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			float part = (float)to/positions; | 
					
						
							|  |  |  | 			part*=(pos.w-48); | 
					
						
							|  |  |  | 			slider->pos.x = part + pos.x + 16; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			slider->pos.x = pos.x+16; | 
					
						
							| 
									
										
										
										
											2008-05-31 20:37:54 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		if(positions) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			float part = (float)to/positions; | 
					
						
							|  |  |  | 			part*=(pos.h-48); | 
					
						
							|  |  |  | 			slider->pos.y = part + pos.y + 16; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			slider->pos.y = pos.y+16; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	moved(to); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | void CSlider::clickLeft(tribool down, bool previousState) | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	if(down) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 		float pw = 0; | 
					
						
							|  |  |  | 		float rw = 0; | 
					
						
							|  |  |  | 		if(horizontal) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			pw = GH.current->motion.x-pos.x-24; | 
					
						
							|  |  |  | 			rw = pw / ((float)(pos.w-48)); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			pw = GH.current->motion.y-pos.y-24; | 
					
						
							|  |  |  | 			rw = pw / ((float)(pos.h-48)); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if(pw < -8  ||  pw > (horizontal ? pos.w : pos.h) + 8) | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | // 		if (rw>1) return;
 | 
					
						
							|  |  |  | // 		if (rw<0) return;
 | 
					
						
							|  |  |  | 		moveTo(rw * positions  +  0.5f); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if(moving) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2009-08-11 16:05:33 +00:00
										 |  |  | 		deactivateMouseMove(); | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 		moving = false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CSlider::~CSlider() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	delete imgs; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | CSlider::CSlider(int x, int y, int totalw, boost::function<void(int)> Moved, int Capacity, int Amount, int Value, bool Horizontal, int style) | 
					
						
							|  |  |  | :capacity(Capacity),amount(Amount),horizontal(Horizontal), moved(Moved) | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	OBJ_CONSTRUCTION; | 
					
						
							|  |  |  | 	setAmount(amount); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	used = LCLICK; | 
					
						
							| 
									
										
										
										
											2008-05-18 17:33:39 +00:00
										 |  |  | 	moving = false; | 
					
						
							|  |  |  | 	strongInterest = true; | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	left = new AdventureMapButton; | 
					
						
							|  |  |  | 	right = new AdventureMapButton; | 
					
						
							|  |  |  | 	slider = new AdventureMapButton; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(horizontal) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		left->pos.y = slider->pos.y = right->pos.y = pos.y = y; | 
					
						
							|  |  |  | 		left->pos.x = pos.x = x; | 
					
						
							|  |  |  | 		right->pos.x = x + totalw - 16; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else  | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		left->pos.x = slider->pos.x = right->pos.x = pos.x = x; | 
					
						
							|  |  |  | 		left->pos.y = pos.y = y; | 
					
						
							|  |  |  | 		right->pos.y = y + totalw - 16; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	left->callback = boost::bind(&CSlider::moveLeft,this); | 
					
						
							|  |  |  | 	right->callback = boost::bind(&CSlider::moveRight,this); | 
					
						
							|  |  |  | 	slider->callback = boost::bind(&CSlider::sliderClicked,this); | 
					
						
							|  |  |  | 	left->pos.w = left->pos.h = right->pos.w = right->pos.h = slider->pos.w = slider->pos.h = 16; | 
					
						
							|  |  |  | 	if(horizontal) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		pos.h = 16; | 
					
						
							|  |  |  | 		pos.w = totalw; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		pos.w = 16; | 
					
						
							|  |  |  | 		pos.h = totalw; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(style == 0) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		imgs = CDefHandler::giveDefEss("IGPCRDIV.DEF"); | 
					
						
							|  |  |  | 		left->imgs.resize(1); right->imgs.resize(1); slider->imgs.resize(1); | 
					
						
							|  |  |  | 		left->imgs[0].push_back(imgs->ourImages[0].bitmap); left->imgs[0].push_back(imgs->ourImages[1].bitmap); | 
					
						
							|  |  |  | 		right->imgs[0].push_back(imgs->ourImages[2].bitmap); right->imgs[0].push_back(imgs->ourImages[3].bitmap); | 
					
						
							|  |  |  | 		slider->imgs[0].push_back(imgs->ourImages[4].bitmap); | 
					
						
							|  |  |  | 		left->notFreeButton = right->notFreeButton = slider->notFreeButton = true; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		imgs = NULL; | 
					
						
							|  |  |  | 		left->setDef(horizontal ? "SCNRBLF.DEF" : "SCNRBUP.DEF", false); | 
					
						
							|  |  |  | 		right->setDef(horizontal ? "SCNRBRT.DEF" : "SCNRBDN.DEF", false); | 
					
						
							|  |  |  | 		slider->setDef("SCNRBSL.DEF", false); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	slider->actOnDown = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	value = -1; | 
					
						
							|  |  |  | 	moveTo(Value); | 
					
						
							| 
									
										
										
										
											2008-08-02 15:08:03 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2008-09-07 03:38:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | void CSlider::block( bool on ) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-17 08:50:31 +00:00
										 |  |  | 	left->block(on); | 
					
						
							|  |  |  | 	right->block(on); | 
					
						
							|  |  |  | 	slider->block(on); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CSlider::setAmount( int to ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	positions = to - capacity; | 
					
						
							|  |  |  | 	amax(positions, 1); | 
					
						
							| 
									
										
										
										
											2009-08-21 00:59:12 +00:00
										 |  |  | } |