Skip to content

Commit 700eb38

Browse files
committed
Fix BR 779
1 parent 1a32576 commit 700eb38

2 files changed

Lines changed: 20 additions & 8 deletions

File tree

src/Basescape/CraftSoldiersState.cpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -133,15 +133,12 @@ void CraftSoldiersState::btnOkClick(Action *)
133133
}
134134

135135
/**
136-
* Shows the soldiers in a list.
136+
* Shows the soldiers in a list at specified offset/scroll.
137137
*/
138-
void CraftSoldiersState::init()
138+
void CraftSoldiersState::initList(Craft *c, size_t scrl)
139139
{
140-
State::init();
141-
Craft *c = _base->getCrafts()->at(_craft);
142-
_lstSoldiers->clearList();
143-
144140
int row = 0;
141+
_lstSoldiers->clearList();
145142
for (std::vector<Soldier*>::iterator i = _base->getSoldiers()->begin(); i != _base->getSoldiers()->end(); ++i)
146143
{
147144
_lstSoldiers->addRow(3, (*i)->getName(true, 19).c_str(), tr((*i)->getRankString()).c_str(), (*i)->getCraftString(_game->getLanguage()).c_str());
@@ -162,10 +159,20 @@ void CraftSoldiersState::init()
162159
_lstSoldiers->setRowColor(row, color);
163160
row++;
164161
}
162+
if(scrl)
163+
_lstSoldiers->scrollTo(scrl);
165164
_lstSoldiers->draw();
166165

167166
_txtAvailable->setText(tr("STR_SPACE_AVAILABLE").arg(c->getSpaceAvailable()));
168167
_txtUsed->setText(tr("STR_SPACE_USED").arg(c->getSpaceUsed()));
168+
}
169+
/**
170+
* Shows the soldiers in a list.
171+
*/
172+
void CraftSoldiersState::init()
173+
{
174+
State::init();
175+
initList(_base->getCrafts()->at(_craft), 0);
169176

170177
}
171178

@@ -202,6 +209,7 @@ void CraftSoldiersState::moveSoldierUp(Action *action, unsigned int row, bool ma
202209
{
203210
_base->getSoldiers()->erase(_base->getSoldiers()->begin() + row);
204211
_base->getSoldiers()->insert(_base->getSoldiers()->begin(), s);
212+
initList(_base->getCrafts()->at(_craft), 0);
205213
}
206214
else
207215
{
@@ -215,8 +223,8 @@ void CraftSoldiersState::moveSoldierUp(Action *action, unsigned int row, bool ma
215223
{
216224
_lstSoldiers->scrollUp(false);
217225
}
226+
initList(_base->getCrafts()->at(_craft), _lstSoldiers->getScroll());
218227
}
219-
init();
220228
}
221229

222230
/**
@@ -253,6 +261,7 @@ void CraftSoldiersState::moveSoldierDown(Action *action, unsigned int row, bool
253261
{
254262
_base->getSoldiers()->erase(_base->getSoldiers()->begin() + row);
255263
_base->getSoldiers()->insert(_base->getSoldiers()->end(), s);
264+
initList(_base->getCrafts()->at(_craft), _lstSoldiers->getRows());
256265
}
257266
else
258267
{
@@ -266,8 +275,8 @@ void CraftSoldiersState::moveSoldierDown(Action *action, unsigned int row, bool
266275
{
267276
_lstSoldiers->scrollDown(false);
268277
}
278+
initList(_base->getCrafts()->at(_craft), _lstSoldiers->getScroll());
269279
}
270-
init();
271280
}
272281

273282
/**

src/Basescape/CraftSoldiersState.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class Window;
2929
class Text;
3030
class TextList;
3131
class Base;
32+
class Craft;
3233

3334
/**
3435
* Select Squad screen that lets the player
@@ -44,6 +45,8 @@ class CraftSoldiersState : public State
4445

4546
Base *_base;
4647
size_t _craft;
48+
///initializes the display list based on the craft soldier's list and the position to display
49+
void initList(Craft *c, size_t scrl);
4750
public:
4851
/// Creates the Craft Soldiers state.
4952
CraftSoldiersState(Base *base, size_t craft);

0 commit comments

Comments
 (0)