mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-25 22:42:04 +02:00
End of buttons refactoring:
- cleanup of slider API - documentation fixes
This commit is contained in:
@@ -1286,7 +1286,7 @@ SelectionTab::SelectionTab(CMenuScreen::EState Type, const std::function<void(CM
|
|||||||
new CButton(Point(55, 86), "CamCusL.DEF", CButton::tooltip(), boost::bind(&SelectionTab::sortBy, this, _name)); //by name
|
new CButton(Point(55, 86), "CamCusL.DEF", CButton::tooltip(), boost::bind(&SelectionTab::sortBy, this, _name)); //by name
|
||||||
}
|
}
|
||||||
|
|
||||||
slider = new CSlider(372, 86, tabType != CMenuScreen::saveGame ? 480 : 430, boost::bind(&SelectionTab::sliderMove, this, _1), positions, curItems.size(), 0, false, 1);
|
slider = new CSlider(Point(372, 86), tabType != CMenuScreen::saveGame ? 480 : 430, boost::bind(&SelectionTab::sliderMove, this, _1), positions, curItems.size(), 0, false, CSlider::BLUE);
|
||||||
slider->addUsedEvents(WHEEL);
|
slider->addUsedEvents(WHEEL);
|
||||||
format = CDefHandler::giveDef("SCSELC.DEF");
|
format = CDefHandler::giveDef("SCSELC.DEF");
|
||||||
|
|
||||||
@@ -1353,16 +1353,16 @@ void SelectionTab::select( int position )
|
|||||||
if(!curItems.size()) return;
|
if(!curItems.size()) return;
|
||||||
|
|
||||||
// New selection. py is the index in curItems.
|
// New selection. py is the index in curItems.
|
||||||
int py = position + slider->value;
|
int py = position + slider->getValue();
|
||||||
vstd::amax(py, 0);
|
vstd::amax(py, 0);
|
||||||
vstd::amin(py, curItems.size()-1);
|
vstd::amin(py, curItems.size()-1);
|
||||||
|
|
||||||
selectionPos = py;
|
selectionPos = py;
|
||||||
|
|
||||||
if(position < 0)
|
if(position < 0)
|
||||||
slider->moveTo(slider->value + position);
|
slider->moveBy(position);
|
||||||
else if(position >= positions)
|
else if(position >= positions)
|
||||||
slider->moveTo(slider->value + position - positions + 1);
|
slider->moveBy(position - positions + 1);
|
||||||
|
|
||||||
if(txt)
|
if(txt)
|
||||||
{
|
{
|
||||||
@@ -1376,7 +1376,7 @@ void SelectionTab::select( int position )
|
|||||||
|
|
||||||
void SelectionTab::selectAbs( int position )
|
void SelectionTab::selectAbs( int position )
|
||||||
{
|
{
|
||||||
select(position - slider->value);
|
select(position - slider->getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
int SelectionTab::getPosition( int x, int y )
|
int SelectionTab::getPosition( int x, int y )
|
||||||
@@ -1399,7 +1399,7 @@ void SelectionTab::sliderMove( int slidPos )
|
|||||||
void SelectionTab::printMaps(SDL_Surface *to)
|
void SelectionTab::printMaps(SDL_Surface *to)
|
||||||
{
|
{
|
||||||
|
|
||||||
int elemIdx = slider->value;
|
int elemIdx = slider->getValue();
|
||||||
|
|
||||||
// Display all elements if there's enough space
|
// Display all elements if there's enough space
|
||||||
//if(slider->amount < slider->capacity)
|
//if(slider->amount < slider->capacity)
|
||||||
@@ -1557,15 +1557,15 @@ void SelectionTab::keyPressed( const SDL_KeyboardEvent & key )
|
|||||||
moveBy = +positions-1;
|
moveBy = +positions-1;
|
||||||
break;
|
break;
|
||||||
case SDLK_HOME:
|
case SDLK_HOME:
|
||||||
select(-slider->value);
|
select(-slider->getValue());
|
||||||
return;
|
return;
|
||||||
case SDLK_END:
|
case SDLK_END:
|
||||||
select(curItems.size() - slider->value);
|
select(curItems.size() - slider->getValue());
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
select(selectionPos - slider->value + moveBy);
|
select(selectionPos - slider->getValue() + moveBy);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectionTab::onDoubleClick()
|
void SelectionTab::onDoubleClick()
|
||||||
@@ -2243,7 +2243,7 @@ OptionsTab::OptionsTab():
|
|||||||
pos = bg->pos;
|
pos = bg->pos;
|
||||||
|
|
||||||
if(SEL->screenType == CMenuScreen::newGame)
|
if(SEL->screenType == CMenuScreen::newGame)
|
||||||
turnDuration = new CSlider(55, 551, 194, boost::bind(&OptionsTab::setTurnLength, this, _1), 1, 11, 11, true, 1);
|
turnDuration = new CSlider(Point(55, 551), 194, boost::bind(&OptionsTab::setTurnLength, this, _1), 1, 11, 11, true, CSlider::BLUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
OptionsTab::~OptionsTab()
|
OptionsTab::~OptionsTab()
|
||||||
@@ -2262,7 +2262,7 @@ void OptionsTab::showAll(SDL_Surface * to)
|
|||||||
printAtMiddleWBLoc(CGI->generaltexth->allTexts[520], 349, 110, FONT_SMALL, 70, Colors::YELLOW, to); //Starting Bonus
|
printAtMiddleWBLoc(CGI->generaltexth->allTexts[520], 349, 110, FONT_SMALL, 70, Colors::YELLOW, to); //Starting Bonus
|
||||||
printAtMiddleLoc(CGI->generaltexth->allTexts[521], 222, 538, FONT_SMALL, Colors::YELLOW, to); // Player Turn Duration
|
printAtMiddleLoc(CGI->generaltexth->allTexts[521], 222, 538, FONT_SMALL, Colors::YELLOW, to); // Player Turn Duration
|
||||||
if (turnDuration)
|
if (turnDuration)
|
||||||
printAtMiddleLoc(CGI->generaltexth->turnDurations[turnDuration->value], 319,559, FONT_SMALL, Colors::WHITE, to);//Turn duration value
|
printAtMiddleLoc(CGI->generaltexth->turnDurations[turnDuration->getValue()], 319,559, FONT_SMALL, Colors::WHITE, to);//Turn duration value
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsTab::nextCastle( PlayerColor player, int dir )
|
void OptionsTab::nextCastle( PlayerColor player, int dir )
|
||||||
|
|||||||
@@ -393,7 +393,10 @@ void CToggleButton::clickLeft(tribool down, bool previousState)
|
|||||||
if(previousState)//mouse up
|
if(previousState)//mouse up
|
||||||
{
|
{
|
||||||
if(down == false && getState() == PRESSED && canActivate())
|
if(down == false && getState() == PRESSED && canActivate())
|
||||||
|
{
|
||||||
|
onButtonClicked();
|
||||||
setSelected(!selected);
|
setSelected(!selected);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
doSelect(selected); // restore
|
doSelect(selected); // restore
|
||||||
}
|
}
|
||||||
@@ -499,13 +502,22 @@ void CSlider::mouseMoved (const SDL_MouseMotionEvent & sEvent)
|
|||||||
if(v!=value)
|
if(v!=value)
|
||||||
{
|
{
|
||||||
moveTo(v);
|
moveTo(v);
|
||||||
redrawSlider();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSlider::redrawSlider()
|
void CSlider::setScrollStep(int to)
|
||||||
{
|
{
|
||||||
//slider->show(screenBuf);
|
scrollStep = to;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CSlider::getAmount()
|
||||||
|
{
|
||||||
|
return amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CSlider::getValue()
|
||||||
|
{
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSlider::moveLeft()
|
void CSlider::moveLeft()
|
||||||
@@ -518,21 +530,18 @@ void CSlider::moveRight()
|
|||||||
moveTo(value+1);
|
moveTo(value+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSlider::moveTo(int to)
|
void CSlider::moveBy(int amount)
|
||||||
{
|
{
|
||||||
vstd::amax(to, 0);
|
moveTo(value + amount);
|
||||||
vstd::amin(to, positions);
|
}
|
||||||
|
|
||||||
//same, old position?
|
void CSlider::updateSliderPos()
|
||||||
if(value == to)
|
{
|
||||||
return;
|
|
||||||
|
|
||||||
value = to;
|
|
||||||
if(horizontal)
|
if(horizontal)
|
||||||
{
|
{
|
||||||
if(positions)
|
if(positions)
|
||||||
{
|
{
|
||||||
double part = static_cast<double>(to) / positions;
|
double part = static_cast<double>(value) / positions;
|
||||||
part*=(pos.w-48);
|
part*=(pos.w-48);
|
||||||
int newPos = part + pos.x + 16 - slider->pos.x;
|
int newPos = part + pos.x + 16 - slider->pos.x;
|
||||||
slider->moveBy(Point(newPos, 0));
|
slider->moveBy(Point(newPos, 0));
|
||||||
@@ -544,7 +553,7 @@ void CSlider::moveTo(int to)
|
|||||||
{
|
{
|
||||||
if(positions)
|
if(positions)
|
||||||
{
|
{
|
||||||
double part = static_cast<double>(to) / positions;
|
double part = static_cast<double>(value) / positions;
|
||||||
part*=(pos.h-48);
|
part*=(pos.h-48);
|
||||||
int newPos = part + pos.y + 16 - slider->pos.y;
|
int newPos = part + pos.y + 16 - slider->pos.y;
|
||||||
slider->moveBy(Point(0, newPos));
|
slider->moveBy(Point(0, newPos));
|
||||||
@@ -552,9 +561,21 @@ void CSlider::moveTo(int to)
|
|||||||
else
|
else
|
||||||
slider->moveTo(Point(pos.x, pos.y+16));
|
slider->moveTo(Point(pos.x, pos.y+16));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(moved)
|
void CSlider::moveTo(int to)
|
||||||
moved(to);
|
{
|
||||||
|
vstd::amax(to, 0);
|
||||||
|
vstd::amin(to, positions);
|
||||||
|
|
||||||
|
//same, old position?
|
||||||
|
if(value == to)
|
||||||
|
return;
|
||||||
|
value = to;
|
||||||
|
|
||||||
|
updateSliderPos();
|
||||||
|
|
||||||
|
moved(to);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSlider::clickLeft(tribool down, bool previousState)
|
void CSlider::clickLeft(tribool down, bool previousState)
|
||||||
@@ -590,11 +611,12 @@ CSlider::~CSlider()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CSlider::CSlider(int x, int y, int totalw, std::function<void(int)> Moved, int Capacity, int Amount, int Value, bool Horizontal, int style):
|
CSlider::CSlider(Point position, int totalw, std::function<void(int)> Moved, int Capacity, int Amount, int Value, bool Horizontal, CSlider::EStyle style):
|
||||||
capacity(Capacity),
|
capacity(Capacity),
|
||||||
amount(Amount),
|
|
||||||
scrollStep(1),
|
|
||||||
horizontal(Horizontal),
|
horizontal(Horizontal),
|
||||||
|
amount(Amount),
|
||||||
|
value(Value),
|
||||||
|
scrollStep(1),
|
||||||
moved(Moved)
|
moved(Moved)
|
||||||
{
|
{
|
||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
@@ -603,10 +625,10 @@ CSlider::CSlider(int x, int y, int totalw, std::function<void(int)> Moved, int C
|
|||||||
addUsedEvents(LCLICK | KEYBOARD | WHEEL);
|
addUsedEvents(LCLICK | KEYBOARD | WHEEL);
|
||||||
strongInterest = true;
|
strongInterest = true;
|
||||||
|
|
||||||
pos.x += x;
|
pos.x += position.x;
|
||||||
pos.y += y;
|
pos.y += position.y;
|
||||||
|
|
||||||
if(style == 0)
|
if(style == BROWN)
|
||||||
{
|
{
|
||||||
std::string name = horizontal?"IGPCRDIV.DEF":"OVBUTN2.DEF";
|
std::string name = horizontal?"IGPCRDIV.DEF":"OVBUTN2.DEF";
|
||||||
//NOTE: this images do not have "blocked" frames. They should be implemented somehow (e.g. palette transform or something...)
|
//NOTE: this images do not have "blocked" frames. They should be implemented somehow (e.g. palette transform or something...)
|
||||||
@@ -650,8 +672,7 @@ CSlider::CSlider(int x, int y, int totalw, std::function<void(int)> Moved, int C
|
|||||||
pos.h = totalw;
|
pos.h = totalw;
|
||||||
}
|
}
|
||||||
|
|
||||||
value = -1;
|
updateSliderPos();
|
||||||
moveTo(Value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSlider::block( bool on )
|
void CSlider::block( bool on )
|
||||||
|
|||||||
@@ -62,29 +62,36 @@ public:
|
|||||||
private:
|
private:
|
||||||
std::vector<std::string> imageNames;//store list of images that can be used by this button
|
std::vector<std::string> imageNames;//store list of images that can be used by this button
|
||||||
size_t currentImage;
|
size_t currentImage;
|
||||||
|
|
||||||
ButtonState state;//current state of button from enum
|
ButtonState state;//current state of button from enum
|
||||||
|
|
||||||
std::array<int, 4> stateToIndex; // mapping of button state to index of frame in animation
|
std::array<int, 4> stateToIndex; // mapping of button state to index of frame in animation
|
||||||
std::array<std::string, 4> hoverTexts; //text for statusbar
|
std::array<std::string, 4> hoverTexts; //texts for statusbar, if empty - first entry will be used
|
||||||
std::string helpBox; //for right-click help
|
std::string helpBox; //for right-click help
|
||||||
|
|
||||||
CAnimImage * image; //image for this button
|
CAnimImage * image; //image for this button
|
||||||
CIntObject * overlay;//object-overlay
|
CIntObject * overlay;//object-overlay, can be null
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void onButtonClicked(); // calls callback
|
void onButtonClicked(); // calls callback
|
||||||
void update();//to refresh button after image or text change
|
void update();//to refresh button after image or text change
|
||||||
|
|
||||||
|
// internal method to change state. Public change can be done only via block()
|
||||||
void setState(ButtonState newState);
|
void setState(ButtonState newState);
|
||||||
ButtonState getState();
|
ButtonState getState();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool actOnDown,//runs when mouse is pressed down over it, not when up
|
bool actOnDown,//runs when mouse is pressed down over it, not when up
|
||||||
hoverable,//if true, button will be highlighted when hovered
|
hoverable,//if true, button will be highlighted when hovered (e.g. main menu)
|
||||||
soundDisabled;
|
soundDisabled;
|
||||||
|
|
||||||
|
// if set, button will have 1-px border around it with this color
|
||||||
boost::optional<SDL_Color> borderColor;
|
boost::optional<SDL_Color> borderColor;
|
||||||
|
|
||||||
|
/// adds one more callback to on-click actions
|
||||||
void addCallback(std::function<void()> callback);
|
void addCallback(std::function<void()> callback);
|
||||||
|
|
||||||
|
/// adds overlay on top of button image. Only one overlay can be active at once
|
||||||
void addOverlay(CIntObject * newOverlay);
|
void addOverlay(CIntObject * newOverlay);
|
||||||
void addTextOverlay(const std::string &Text, EFonts font, SDL_Color color = Colors::WHITE);
|
void addTextOverlay(const std::string &Text, EFonts font, SDL_Color color = Colors::WHITE);
|
||||||
|
|
||||||
@@ -113,6 +120,7 @@ public:
|
|||||||
void hover (bool on) override;
|
void hover (bool on) override;
|
||||||
void showAll(SDL_Surface * to) override;
|
void showAll(SDL_Surface * to) override;
|
||||||
|
|
||||||
|
/// generates tooltip that can be passed into constructor
|
||||||
static std::pair<std::string, std::string> tooltip();
|
static std::pair<std::string, std::string> tooltip();
|
||||||
static std::pair<std::string, std::string> tooltip(const JsonNode & localizedTexts);
|
static std::pair<std::string, std::string> tooltip(const JsonNode & localizedTexts);
|
||||||
static std::pair<std::string, std::string> tooltip(const std::string & hover, const std::string & help = "");
|
static std::pair<std::string, std::string> tooltip(const std::string & hover, const std::string & help = "");
|
||||||
@@ -125,17 +133,20 @@ protected:
|
|||||||
|
|
||||||
bool selected;
|
bool selected;
|
||||||
|
|
||||||
|
// internal method for overrides
|
||||||
virtual void doSelect(bool on);
|
virtual void doSelect(bool on);
|
||||||
|
|
||||||
// returns true if toggle can change its state
|
// returns true if toggle can change its state
|
||||||
bool canActivate();
|
bool canActivate();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/// if set to false - button can not be deselected normally
|
||||||
bool allowDeselection;
|
bool allowDeselection;
|
||||||
|
|
||||||
CToggleBase(CFunctionList<void(bool)> callback);
|
CToggleBase(CFunctionList<void(bool)> callback);
|
||||||
virtual ~CToggleBase();
|
virtual ~CToggleBase();
|
||||||
|
|
||||||
|
/// Changes selection to "on", and calls callback
|
||||||
void setSelected(bool on);
|
void setSelected(bool on);
|
||||||
|
|
||||||
void addCallback(std::function<void(bool)> callback);
|
void addCallback(std::function<void(bool)> callback);
|
||||||
@@ -175,7 +186,10 @@ public:
|
|||||||
CToggleGroup(const CFunctionList<void(int)> & OnChange, bool musicLikeButtons = false);
|
CToggleGroup(const CFunctionList<void(int)> & OnChange, bool musicLikeButtons = false);
|
||||||
|
|
||||||
void addCallback(std::function<void(int)> callback);
|
void addCallback(std::function<void(int)> callback);
|
||||||
|
|
||||||
|
/// add one toggle/button into group
|
||||||
void addToggle(int index, CToggleBase * button);
|
void addToggle(int index, CToggleBase * button);
|
||||||
|
/// Changes selection to specific value. Will select toggle with this ID, if present
|
||||||
void setSelected(int id);
|
void setSelected(int id);
|
||||||
|
|
||||||
void show(SDL_Surface * to);
|
void show(SDL_Surface * to);
|
||||||
@@ -185,35 +199,63 @@ public:
|
|||||||
/// A typical slider which can be orientated horizontally/vertically.
|
/// A typical slider which can be orientated horizontally/vertically.
|
||||||
class CSlider : public CIntObject
|
class CSlider : public CIntObject
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
CButton *left, *right, *slider; //if vertical then left=up
|
CButton *left, *right, *slider; //if vertical then left=up
|
||||||
int capacity;//how many elements can be active at same time (e.g. hero list = 5)
|
int capacity;//how many elements can be active at same time (e.g. hero list = 5)
|
||||||
int amount; //total amount of elements (e.g. hero list = 0-8)
|
|
||||||
int positions; //number of highest position (0 if there is only one)
|
int positions; //number of highest position (0 if there is only one)
|
||||||
int value; //first active element
|
|
||||||
int scrollStep; // how many elements will be scrolled via one click, default = 1
|
|
||||||
bool horizontal;
|
bool horizontal;
|
||||||
bool wheelScrolling;
|
bool wheelScrolling;
|
||||||
bool keyScrolling;
|
bool keyScrolling;
|
||||||
|
|
||||||
std::function<void(int)> moved;
|
int amount; //total amount of elements (e.g. hero list = 0-8)
|
||||||
|
int value; //first active element
|
||||||
|
int scrollStep; // how many elements will be scrolled via one click, default = 1
|
||||||
|
CFunctionList<void(int)> moved;
|
||||||
|
|
||||||
void redrawSlider();
|
void updateSliderPos();
|
||||||
void sliderClicked();
|
void sliderClicked();
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum EStyle {
|
||||||
|
BROWN,
|
||||||
|
BLUE
|
||||||
|
};
|
||||||
|
|
||||||
|
void block(bool on);
|
||||||
|
|
||||||
|
/// Controls how many items wil be scrolled via one click
|
||||||
|
void setScrollStep(int to);
|
||||||
|
|
||||||
|
/// Value modifiers
|
||||||
void moveLeft();
|
void moveLeft();
|
||||||
void moveRight();
|
void moveRight();
|
||||||
void moveTo(int to);
|
void moveTo(int value);
|
||||||
void block(bool on);
|
void moveBy(int amount);
|
||||||
|
void moveToMax();
|
||||||
|
|
||||||
|
/// Amount modifier
|
||||||
void setAmount(int to);
|
void setAmount(int to);
|
||||||
|
|
||||||
|
/// Accessors
|
||||||
|
int getAmount();
|
||||||
|
int getValue();
|
||||||
|
|
||||||
|
void addCallback(std::function<void(int)> callback);
|
||||||
|
|
||||||
void keyPressed(const SDL_KeyboardEvent & key);
|
void keyPressed(const SDL_KeyboardEvent & key);
|
||||||
void wheelScrolled(bool down, bool in);
|
void wheelScrolled(bool down, bool in);
|
||||||
void clickLeft(tribool down, bool previousState);
|
void clickLeft(tribool down, bool previousState);
|
||||||
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
void mouseMoved (const SDL_MouseMotionEvent & sEvent);
|
||||||
void showAll(SDL_Surface * to);
|
void showAll(SDL_Surface * to);
|
||||||
|
|
||||||
CSlider(int x, int y, int totalw, std::function<void(int)> Moved, int Capacity, int Amount,
|
/**
|
||||||
int Value=0, bool Horizontal=true, int style = 0); //style 0 - brown, 1 - blue
|
* @param position, coordinates of slider
|
||||||
|
* @param length, length of slider ribbon, including left/right buttons
|
||||||
|
* @param Moved, function that will be called whenever slider moves
|
||||||
|
* @param Capacity, maximal number of visible at once elements
|
||||||
|
* @param Amount, total amount of elements, including not visible
|
||||||
|
* @param Value, starting position
|
||||||
|
*/
|
||||||
|
CSlider(Point position, int length, std::function<void(int)> Moved, int Capacity, int Amount,
|
||||||
|
int Value=0, bool Horizontal=true, EStyle style = BROWN);
|
||||||
~CSlider();
|
~CSlider();
|
||||||
void moveToMax();
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -96,8 +96,8 @@ CListBox::CListBox(CreateFunc create, DestroyFunc destroy, Point Pos, Point Item
|
|||||||
if (Slider & 1)
|
if (Slider & 1)
|
||||||
{
|
{
|
||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
slider = new CSlider(SliderPos.x, SliderPos.y, SliderPos.w, boost::bind(&CListBox::moveToPos, this, _1),
|
slider = new CSlider(SliderPos.topLeft(), SliderPos.w, boost::bind(&CListBox::moveToPos, this, _1),
|
||||||
VisibleSize, TotalSize, InitialPos, Slider & 2, Slider & 4);
|
VisibleSize, TotalSize, InitialPos, Slider & 2, Slider & 4 ? CSlider::BLUE : CSlider::BROWN);
|
||||||
}
|
}
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -295,9 +295,9 @@ void CTextBox::setText(const std::string &text)
|
|||||||
label->setText(text);
|
label->setText(text);
|
||||||
|
|
||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
slider = new CSlider(pos.w - 32, 0, pos.h, boost::bind(&CTextBox::sliderMoved, this, _1),
|
slider = new CSlider(Point(pos.w - 32, 0), pos.h, boost::bind(&CTextBox::sliderMoved, this, _1),
|
||||||
label->pos.h, label->textSize.y, 0, false, sliderStyle);
|
label->pos.h, label->textSize.y, 0, false, CSlider::EStyle(sliderStyle));
|
||||||
slider->scrollStep = graphics->fonts[label->font]->getLineHeight();
|
slider->setScrollStep(graphics->fonts[label->font]->getLineHeight());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ void CQuestLog::init()
|
|||||||
ok = new CButton(Point(547, 401), "IOKAY.DEF", CGI->generaltexth->zelp[445], boost::bind(&CQuestLog::close,this), SDLK_RETURN);
|
ok = new CButton(Point(547, 401), "IOKAY.DEF", CGI->generaltexth->zelp[445], boost::bind(&CQuestLog::close,this), SDLK_RETURN);
|
||||||
|
|
||||||
if (quests.size() > QUEST_COUNT)
|
if (quests.size() > QUEST_COUNT)
|
||||||
slider = new CSlider(203, 199, 230, boost::bind (&CQuestLog::sliderMoved, this, _1), QUEST_COUNT, quests.size(), false, 0);
|
slider = new CSlider(Point(203, 199), 230, boost::bind (&CQuestLog::sliderMoved, this, _1), QUEST_COUNT, quests.size(), false);
|
||||||
|
|
||||||
for (int i = 0; i < quests.size(); ++i)
|
for (int i = 0; i < quests.size(); ++i)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -702,8 +702,7 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket *Market, const CGHeroInstan
|
|||||||
|
|
||||||
if(sliderNeeded)
|
if(sliderNeeded)
|
||||||
{
|
{
|
||||||
slider = new CSlider(231,490,137,nullptr,0,0);
|
slider = new CSlider(Point(231, 490),137, boost::bind(&CMarketplaceWindow::sliderMoved,this,_1),0,0);
|
||||||
slider->moved = boost::bind(&CMarketplaceWindow::sliderMoved,this,_1);
|
|
||||||
max = new CButton(Point(229, 520), "IRCBTNS.DEF", CGI->generaltexth->zelp[596], [&] { setMax(); });
|
max = new CButton(Point(229, 520), "IRCBTNS.DEF", CGI->generaltexth->zelp[596], [&] { setMax(); });
|
||||||
max->block(true);
|
max->block(true);
|
||||||
}
|
}
|
||||||
@@ -793,7 +792,7 @@ void CMarketplaceWindow::makeDeal()
|
|||||||
{
|
{
|
||||||
int sliderValue = 0;
|
int sliderValue = 0;
|
||||||
if(slider)
|
if(slider)
|
||||||
sliderValue = slider->value;
|
sliderValue = slider->getValue();
|
||||||
else
|
else
|
||||||
sliderValue = !deal->isBlocked(); //should always be 1
|
sliderValue = !deal->isBlocked(); //should always be 1
|
||||||
|
|
||||||
@@ -816,7 +815,7 @@ void CMarketplaceWindow::makeDeal()
|
|||||||
|
|
||||||
if(slider)
|
if(slider)
|
||||||
{
|
{
|
||||||
LOCPLINT->cb->trade(market->o, mode, leftIdToSend, hRight->id, slider->value*r1, hero);
|
LOCPLINT->cb->trade(market->o, mode, leftIdToSend, hRight->id, slider->getValue()*r1, hero);
|
||||||
slider->moveTo(0);
|
slider->moveTo(0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -933,7 +932,7 @@ std::string CMarketplaceWindow::selectionSubtitle(bool Left) const
|
|||||||
case CREATURE:
|
case CREATURE:
|
||||||
{
|
{
|
||||||
int val = slider
|
int val = slider
|
||||||
? slider->value * r1
|
? slider->getValue() * r1
|
||||||
: (((deal->isBlocked())) ? 0 : r1);
|
: (((deal->isBlocked())) ? 0 : r1);
|
||||||
|
|
||||||
return boost::lexical_cast<std::string>(val);
|
return boost::lexical_cast<std::string>(val);
|
||||||
@@ -948,7 +947,7 @@ std::string CMarketplaceWindow::selectionSubtitle(bool Left) const
|
|||||||
{
|
{
|
||||||
case RESOURCE:
|
case RESOURCE:
|
||||||
if(slider)
|
if(slider)
|
||||||
return boost::lexical_cast<std::string>( slider->value * r2 );
|
return boost::lexical_cast<std::string>( slider->getValue() * r2 );
|
||||||
else
|
else
|
||||||
return boost::lexical_cast<std::string>(r2);
|
return boost::lexical_cast<std::string>(r2);
|
||||||
case ARTIFACT_TYPE:
|
case ARTIFACT_TYPE:
|
||||||
@@ -1109,8 +1108,7 @@ CAltarWindow::CAltarWindow(const IMarket *Market, const CGHeroInstance *Hero /*=
|
|||||||
//To sacrifice creatures, move them from your army on to the Altar and click Sacrifice
|
//To sacrifice creatures, move them from your army on to the Altar and click Sacrifice
|
||||||
new CTextBox(CGI->generaltexth->allTexts[480], Rect(320, 56, 256, 40), 0, FONT_SMALL, CENTER, Colors::YELLOW);
|
new CTextBox(CGI->generaltexth->allTexts[480], Rect(320, 56, 256, 40), 0, FONT_SMALL, CENTER, Colors::YELLOW);
|
||||||
|
|
||||||
slider = new CSlider(231,481,137,nullptr,0,0);
|
slider = new CSlider(Point(231,481),137,boost::bind(&CAltarWindow::sliderMoved,this,_1),0,0);
|
||||||
slider->moved = boost::bind(&CAltarWindow::sliderMoved,this,_1);
|
|
||||||
max = new CButton(Point(147, 520), "IRCBTNS.DEF", CGI->generaltexth->zelp[578], boost::bind(&CSlider::moveToMax, slider));
|
max = new CButton(Point(147, 520), "IRCBTNS.DEF", CGI->generaltexth->zelp[578], boost::bind(&CSlider::moveToMax, slider));
|
||||||
|
|
||||||
sacrificedUnits.resize(GameConstants::ARMY_SIZE, 0);
|
sacrificedUnits.resize(GameConstants::ARMY_SIZE, 0);
|
||||||
@@ -1200,7 +1198,7 @@ void CAltarWindow::makeDeal()
|
|||||||
if(mode == EMarketMode::CREATURE_EXP)
|
if(mode == EMarketMode::CREATURE_EXP)
|
||||||
{
|
{
|
||||||
blockTrade();
|
blockTrade();
|
||||||
slider->value = 0;
|
slider->moveTo(0);
|
||||||
|
|
||||||
std::vector<int> toSacrifice = sacrificedUnits;
|
std::vector<int> toSacrifice = sacrificedUnits;
|
||||||
for (int i = 0; i < toSacrifice.size(); i++)
|
for (int i = 0; i < toSacrifice.size(); i++)
|
||||||
@@ -1292,9 +1290,9 @@ void CAltarWindow::selectionChanged(bool side)
|
|||||||
stackCount++;
|
stackCount++;
|
||||||
|
|
||||||
slider->setAmount(hero->getStackCount(SlotID(hLeft->serial)) - (stackCount == 1));
|
slider->setAmount(hero->getStackCount(SlotID(hLeft->serial)) - (stackCount == 1));
|
||||||
slider->block(!slider->amount);
|
slider->block(!slider->getAmount());
|
||||||
slider->value = sacrificedUnits[hLeft->serial];
|
slider->moveTo(sacrificedUnits[hLeft->serial]);
|
||||||
max->block(!slider->amount);
|
max->block(!slider->getAmount());
|
||||||
readyToTrade = true;
|
readyToTrade = true;
|
||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
@@ -1323,7 +1321,7 @@ Point CAltarWindow::selectionOffset(bool Left) const
|
|||||||
std::string CAltarWindow::selectionSubtitle(bool Left) const
|
std::string CAltarWindow::selectionSubtitle(bool Left) const
|
||||||
{
|
{
|
||||||
if(Left && slider && hLeft)
|
if(Left && slider && hLeft)
|
||||||
return boost::lexical_cast<std::string>(slider->value);
|
return boost::lexical_cast<std::string>(slider->getValue());
|
||||||
else if(!Left && hRight)
|
else if(!Left && hRight)
|
||||||
return hRight->subtitle;
|
return hRight->subtitle;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ void CRecruitmentWindow::select(CCreatureCard *card)
|
|||||||
|
|
||||||
slider->setAmount(maxAmount);
|
slider->setAmount(maxAmount);
|
||||||
|
|
||||||
if(slider->value != maxAmount)
|
if(slider->getValue() != maxAmount)
|
||||||
slider->moveTo(maxAmount);
|
slider->moveTo(maxAmount);
|
||||||
else // if slider already at 0 - emulate call to sliderMoved()
|
else // if slider already at 0 - emulate call to sliderMoved()
|
||||||
sliderMoved(maxAmount);
|
sliderMoved(maxAmount);
|
||||||
@@ -214,7 +214,7 @@ void CRecruitmentWindow::buy()
|
|||||||
if(dst->ID == Obj::HERO)
|
if(dst->ID == Obj::HERO)
|
||||||
{
|
{
|
||||||
txt = CGI->generaltexth->allTexts[425]; //The %s would join your hero, but there aren't enough provisions to support them.
|
txt = CGI->generaltexth->allTexts[425]; //The %s would join your hero, but there aren't enough provisions to support them.
|
||||||
boost::algorithm::replace_first(txt, "%s", slider->value > 1 ? CGI->creh->creatures[crid]->namePl : CGI->creh->creatures[crid]->nameSing);
|
boost::algorithm::replace_first(txt, "%s", slider->getValue() > 1 ? CGI->creh->creatures[crid]->namePl : CGI->creh->creatures[crid]->nameSing);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -225,7 +225,7 @@ void CRecruitmentWindow::buy()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
onRecruit(crid, slider->value);
|
onRecruit(crid, slider->getValue());
|
||||||
if(level >= 0)
|
if(level >= 0)
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
@@ -261,8 +261,7 @@ CRecruitmentWindow::CRecruitmentWindow(const CGDwelling *Dwelling, int Level, co
|
|||||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||||
new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
new CGStatusBar(new CPicture(*background, Rect(8, pos.h - 26, pos.w - 16, 19), 8, pos.h - 26));
|
||||||
|
|
||||||
slider = new CSlider(176,279,135,nullptr,0,0,0,true);
|
slider = new CSlider(Point(176,279),135,boost::bind(&CRecruitmentWindow::sliderMoved,this, _1),0,0,0,true);
|
||||||
slider->moved = boost::bind(&CRecruitmentWindow::sliderMoved,this, _1);
|
|
||||||
|
|
||||||
maxButton = new CButton(Point(134, 313), "IRCBTNS.DEF", CGI->generaltexth->zelp[553], boost::bind(&CSlider::moveToMax,slider), SDLK_m);
|
maxButton = new CButton(Point(134, 313), "IRCBTNS.DEF", CGI->generaltexth->zelp[553], boost::bind(&CSlider::moveToMax,slider), SDLK_m);
|
||||||
buyButton = new CButton(Point(212, 313), "IBY6432.DEF", CGI->generaltexth->zelp[554], boost::bind(&CRecruitmentWindow::buy,this), SDLK_RETURN);
|
buyButton = new CButton(Point(212, 313), "IBY6432.DEF", CGI->generaltexth->zelp[554], boost::bind(&CRecruitmentWindow::buy,this), SDLK_RETURN);
|
||||||
@@ -341,10 +340,10 @@ void CRecruitmentWindow::availableCreaturesChanged()
|
|||||||
//restore selection
|
//restore selection
|
||||||
select(cards[selectedIndex]);
|
select(cards[selectedIndex]);
|
||||||
|
|
||||||
if(slider->value == slider->amount)
|
if(slider->getValue() == slider->getAmount())
|
||||||
slider->moveTo(slider->amount);
|
slider->moveToMax();
|
||||||
else // if slider already at 0 - emulate call to sliderMoved()
|
else // if slider already at 0 - emulate call to sliderMoved()
|
||||||
sliderMoved(slider->amount);
|
sliderMoved(slider->getAmount());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRecruitmentWindow::sliderMoved(int to)
|
void CRecruitmentWindow::sliderMoved(int to)
|
||||||
@@ -393,7 +392,7 @@ CSplitWindow::CSplitWindow(const CCreature * creature, std::function<void(int, i
|
|||||||
animLeft = new CCreaturePic(20, 54, creature, true, false);
|
animLeft = new CCreaturePic(20, 54, creature, true, false);
|
||||||
animRight = new CCreaturePic(177, 54,creature, true, false);
|
animRight = new CCreaturePic(177, 54,creature, true, false);
|
||||||
|
|
||||||
slider = new CSlider(21, 194, 257, boost::bind(&CSplitWindow::sliderMoved, this, _1), 0, sliderPositions, rightAmount - rightMin, true);
|
slider = new CSlider(Point(21, 194), 257, boost::bind(&CSplitWindow::sliderMoved, this, _1), 0, sliderPositions, rightAmount - rightMin, true);
|
||||||
|
|
||||||
std::string title = CGI->generaltexth->allTexts[256];
|
std::string title = CGI->generaltexth->allTexts[256];
|
||||||
boost::algorithm::replace_first(title,"%s", creature->namePl);
|
boost::algorithm::replace_first(title,"%s", creature->namePl);
|
||||||
|
|||||||
Reference in New Issue
Block a user