summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/charselectdialog.cpp29
-rw-r--r--src/gui/charselectdialog.h4
2 files changed, 22 insertions, 11 deletions
diff --git a/src/gui/charselectdialog.cpp b/src/gui/charselectdialog.cpp
index d8794afd..1fe7d3ba 100644
--- a/src/gui/charselectdialog.cpp
+++ b/src/gui/charselectdialog.cpp
@@ -59,6 +59,9 @@
#include <string>
#include <cassert>
+// Character slots per row in the dialog
+static const int SLOTS_PER_ROW = 5;
+
/**
* Listener for confirming character deletion.
*/
@@ -118,6 +121,7 @@ CharSelectDialog::CharSelectDialog(LoginData *loginData):
mLocked(false),
mUnregisterButton(0),
mChangeEmailButton(0),
+ mCharacterEntries(0),
mLoginData(loginData),
mCharHandler(Net::getCharHandler())
{
@@ -154,10 +158,10 @@ CharSelectDialog::CharSelectDialog(LoginData *loginData):
place = getPlacer(0, 1);
- for (int i = 0; i < MAX_CHARACTER_COUNT; i++)
+ for (int i = 0; i < (int)mLoginData->characterSlots; i++)
{
- mCharacterEntries[i] = new CharacterDisplay(this);
- place(i, 0, mCharacterEntries[i]);
+ mCharacterEntries.push_back(new CharacterDisplay(this));
+ place(i % SLOTS_PER_ROW, (int)i / SLOTS_PER_ROW, mCharacterEntries[i]);
}
reflowLayout();
@@ -180,9 +184,14 @@ void CharSelectDialog::action(const gcn::ActionEvent &event)
// Check if a button of a character was pressed
const gcn::Widget *sourceParent = event.getSource()->getParent();
int selected = -1;
- for (int i = 0; i < MAX_CHARACTER_COUNT; ++i)
+ for (int i = 0; i < (int)mCharacterEntries.size(); ++i)
+ {
if (mCharacterEntries[i] == sourceParent)
+ {
selected = i;
+ break;
+ }
+ }
const std::string &eventId = event.getId();
@@ -263,14 +272,16 @@ void CharSelectDialog::attemptCharacterSelect(int index)
void CharSelectDialog::setCharacters(const Net::Characters &characters)
{
// Reset previous characters
- for (int i = 0; i < MAX_CHARACTER_COUNT; ++i)
- mCharacterEntries[i]->setCharacter(0);
+ std::vector<CharacterDisplay*>::iterator iter, iter_end;
+ for (iter = mCharacterEntries.begin(), iter_end = mCharacterEntries.end();
+ iter != iter_end; ++iter)
+ (*iter)->setCharacter(0);
Net::Characters::const_iterator i, i_end = characters.end();
for (i = characters.begin(); i != i_end; ++i)
{
Net::Character *character = *i;
- if (character->slot >= MAX_CHARACTER_COUNT)
+ if (character->slot >= (int)mCharacterEntries.size())
{
logger->log("Warning: slot out of range: %d", character->slot);
continue;
@@ -302,7 +313,7 @@ void CharSelectDialog::setLocked(bool locked)
if (mChangeEmailButton)
mChangeEmailButton->setEnabled(!locked);
- for (int i = 0; i < MAX_CHARACTER_COUNT; ++i)
+ for (int i = 0; i < (int)mCharacterEntries.size(); ++i)
mCharacterEntries[i]->setActive(!mLocked);
}
@@ -312,7 +323,7 @@ bool CharSelectDialog::selectByName(const std::string &name,
if (mLocked)
return false;
- for (int i = 0; i < MAX_CHARACTER_COUNT; ++i)
+ for (int i = 0; i < (int)mCharacterEntries.size(); ++i)
{
if (Net::Character *character = mCharacterEntries[i]->getCharacter())
{
diff --git a/src/gui/charselectdialog.h b/src/gui/charselectdialog.h
index 2c0444bf..455ec2df 100644
--- a/src/gui/charselectdialog.h
+++ b/src/gui/charselectdialog.h
@@ -96,8 +96,8 @@ class CharSelectDialog : public Window, public gcn::ActionListener,
gcn::Button *mUnregisterButton;
gcn::Button *mChangeEmailButton;
- enum { MAX_CHARACTER_COUNT = 3 };
- CharacterDisplay *mCharacterEntries[MAX_CHARACTER_COUNT];
+ /** The player boxes */
+ std::vector<CharacterDisplay*> mCharacterEntries;
LoginData *mLoginData;