summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/charcreatedialog.cpp8
-rw-r--r--src/gui/charcreatedialog.h1
-rw-r--r--src/gui/inventorywindow.cpp6
-rw-r--r--src/gui/itemamountwindow.cpp10
-rw-r--r--src/gui/outfitwindow.cpp381
-rw-r--r--src/gui/outfitwindow.h2
-rw-r--r--src/gui/popupmenu.cpp12
-rw-r--r--src/gui/shopwindow.cpp13
-rw-r--r--src/gui/socialwindow.cpp2
-rw-r--r--src/gui/statuswindow.cpp4
-rw-r--r--src/gui/whoisonline.cpp176
-rw-r--r--src/gui/whoisonline.h68
-rw-r--r--src/gui/widgets/setupitem.cpp10
-rw-r--r--src/gui/widgets/vertcontainer.cpp6
-rw-r--r--src/gui/widgets/vertcontainer.h6
15 files changed, 255 insertions, 450 deletions
diff --git a/src/gui/charcreatedialog.cpp b/src/gui/charcreatedialog.cpp
index a1233fdcc..641e07db6 100644
--- a/src/gui/charcreatedialog.cpp
+++ b/src/gui/charcreatedialog.cpp
@@ -47,6 +47,7 @@
#include "resources/chardb.h"
#include "resources/colordb.h"
#include "resources/itemdb.h"
+#include "resources/iteminfo.h"
#include "utils/gettext.h"
#include "utils/stringutils.h"
@@ -99,6 +100,7 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *parent, int slot):
mNextRaceButton = new Button(_(">"), "nextrace", this);
mPrevRaceButton = new Button(_("<"), "prevrace", this);
mRaceLabel = new Label(_("Race:"));
+ mRaceNameLabel = new Label("qwerty");
}
mCreateButton = new Button(_("Create"), "create", this);
@@ -143,6 +145,7 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *parent, int slot):
mPrevRaceButton->setPosition(155, 93);
mNextRaceButton->setPosition(230, 93);
mRaceLabel->setPosition(5, 100);
+ mRaceNameLabel->setPosition(5, 118);
}
mAttributesLeft->setPosition(15, 280);
@@ -172,6 +175,7 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *parent, int slot):
add(mNextRaceButton);
add(mPrevRaceButton);
add(mRaceLabel);
+ add(mRaceNameLabel);
}
add(mAttributesLeft);
@@ -184,6 +188,8 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *parent, int slot):
center();
setVisible(true);
mNameField->requestFocus();
+ if (serverVersion >= 2)
+ updateRace();
}
CharCreateDialog::~CharCreateDialog()
@@ -448,4 +454,6 @@ void CharCreateDialog::updateRace()
}
mPlayer->setSubtype(mRace);
+ const ItemInfo &item = ItemDB::get(id);
+ mRaceNameLabel->setCaption(item.getName());
}
diff --git a/src/gui/charcreatedialog.h b/src/gui/charcreatedialog.h
index e369f1777..065b532c4 100644
--- a/src/gui/charcreatedialog.h
+++ b/src/gui/charcreatedialog.h
@@ -101,6 +101,7 @@ class CharCreateDialog : public Window, public gcn::ActionListener
gcn::Button *mNextRaceButton;
gcn::Button *mPrevRaceButton;
gcn::Label *mRaceLabel;
+ gcn::Label *mRaceNameLabel;
gcn::RadioButton *mMale;
gcn::RadioButton *mFemale;
diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp
index 01e2bdd17..4a54f5fb2 100644
--- a/src/gui/inventorywindow.cpp
+++ b/src/gui/inventorywindow.cpp
@@ -340,7 +340,7 @@ void InventoryWindow::action(const gcn::ActionEvent &event)
{
if (isStorageActive())
{
- Net::getInventoryHandler()->moveItem(Inventory::INVENTORY,
+ Net::getInventoryHandler()->moveItem2(Inventory::INVENTORY,
item->getInvIndex(), item->getQuantity(),
Inventory::STORAGE);
}
@@ -431,7 +431,7 @@ void InventoryWindow::mouseClicked(gcn::MouseEvent &event)
}
else
{
- Net::getInventoryHandler()->moveItem(Inventory::INVENTORY,
+ Net::getInventoryHandler()->moveItem2(Inventory::INVENTORY,
item->getInvIndex(), item->getQuantity(),
Inventory::STORAGE);
}
@@ -445,7 +445,7 @@ void InventoryWindow::mouseClicked(gcn::MouseEvent &event)
}
else
{
- Net::getInventoryHandler()->moveItem(Inventory::STORAGE,
+ Net::getInventoryHandler()->moveItem2(Inventory::STORAGE,
item->getInvIndex(), item->getQuantity(),
Inventory::INVENTORY);
}
diff --git a/src/gui/itemamountwindow.cpp b/src/gui/itemamountwindow.cpp
index 9e2a97681..3b01b559f 100644
--- a/src/gui/itemamountwindow.cpp
+++ b/src/gui/itemamountwindow.cpp
@@ -113,14 +113,12 @@ void ItemAmountWindow::finish(Item *item, int amount, int price, Usage usage)
Net::getInventoryHandler()->splitItem(item, amount);
break;
case StoreAdd:
- Net::getInventoryHandler()->moveItem(Inventory::INVENTORY,
- item->getInvIndex(), amount,
- Inventory::STORAGE);
+ Net::getInventoryHandler()->moveItem2(Inventory::INVENTORY,
+ item->getInvIndex(), amount, Inventory::STORAGE);
break;
case StoreRemove:
- Net::getInventoryHandler()->moveItem(Inventory::STORAGE,
- item->getInvIndex(), amount,
- Inventory::INVENTORY);
+ Net::getInventoryHandler()->moveItem2(Inventory::STORAGE,
+ item->getInvIndex(), amount, Inventory::INVENTORY);
break;
case ShopBuyAdd:
if (shopWindow)
diff --git a/src/gui/outfitwindow.cpp b/src/gui/outfitwindow.cpp
index 74e8dbe46..73484f1d5 100644
--- a/src/gui/outfitwindow.cpp
+++ b/src/gui/outfitwindow.cpp
@@ -491,375 +491,32 @@ void OutfitWindow::unequipNotInOutfit(int outfit)
}
}
+static const SDLKey numsTbl[] =
+{
+ SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5, SDLK_6, SDLK_7, SDLK_8, SDLK_9,
+ SDLK_0, SDLK_MINUS, SDLK_EQUALS, SDLK_BACKSPACE, SDLK_INSERT, SDLK_HOME,
+ SDLK_q, SDLK_w, SDLK_e, SDLK_r, SDLK_t, SDLK_y, SDLK_u, SDLK_i, SDLK_o,
+ SDLK_p, SDLK_LEFTBRACKET, SDLK_RIGHTBRACKET, SDLK_BACKSLASH, SDLK_a,
+ SDLK_s, SDLK_d, SDLK_f, SDLK_g, SDLK_h, SDLK_j, SDLK_k, SDLK_l,
+ SDLK_SEMICOLON, SDLK_QUOTE, SDLK_z, SDLK_x, SDLK_c, SDLK_v, SDLK_b, SDLK_n,
+ SDLK_m, SDLK_COMMA, SDLK_PERIOD, SDLK_SLASH
+};
+
int OutfitWindow::keyToNumber(SDLKey key) const
{
- int outfitNum = -1;
- switch (key)
+ for (unsigned f = 0; f < sizeof(numsTbl) / sizeof(SDLKey); f ++)
{
- case SDLK_1:
- case SDLK_2:
- case SDLK_3:
- case SDLK_4:
- case SDLK_5:
- case SDLK_6:
- case SDLK_7:
- case SDLK_8:
- case SDLK_9:
- outfitNum = key - SDLK_1;
- break;
-
- case SDLK_0:
- outfitNum = 9;
- break;
-
- case SDLK_MINUS:
- outfitNum = 10;
- break;
-
- case SDLK_EQUALS:
- outfitNum = 11;
- break;
-
- case SDLK_BACKSPACE:
- outfitNum = 12;
- break;
-
- case SDLK_INSERT:
- outfitNum = 13;
- break;
-
- case SDLK_HOME:
- outfitNum = 14;
- break;
-
- case SDLK_q:
- outfitNum = 15;
- break;
-
- case SDLK_w:
- outfitNum = 16;
- break;
-
- case SDLK_e:
- outfitNum = 17;
- break;
-
- case SDLK_r:
- outfitNum = 18;
- break;
-
- case SDLK_t:
- outfitNum = 19;
- break;
-
- case SDLK_y:
- outfitNum = 20;
- break;
-
- case SDLK_u:
- outfitNum = 21;
- break;
-
- case SDLK_i:
- outfitNum = 22;
- break;
-
- case SDLK_o:
- outfitNum = 23;
- break;
-
- case SDLK_p:
- outfitNum = 24;
- break;
-
- case SDLK_LEFTBRACKET:
- outfitNum = 25;
- break;
-
- case SDLK_RIGHTBRACKET:
- outfitNum = 26;
- break;
-
- case SDLK_BACKSLASH:
- outfitNum = 27;
- break;
-
- case SDLK_a:
- outfitNum = 28;
- break;
-
- case SDLK_s:
- outfitNum = 29;
- break;
-
- case SDLK_d:
- outfitNum = 30;
- break;
-
- case SDLK_f:
- outfitNum = 31;
- break;
-
- case SDLK_g:
- outfitNum = 32;
- break;
-
- case SDLK_h:
- outfitNum = 33;
- break;
-
- case SDLK_j:
- outfitNum = 34;
- break;
-
- case SDLK_k:
- outfitNum = 35;
- break;
-
- case SDLK_l:
- outfitNum = 36;
- break;
-
- case SDLK_SEMICOLON:
- outfitNum = 37;
- break;
-
- case SDLK_QUOTE:
- outfitNum = 38;
- break;
-
- case SDLK_z:
- outfitNum = 39;
- break;
-
-
- case SDLK_x:
- outfitNum = 40;
- break;
-
- case SDLK_c:
- outfitNum = 41;
- break;
-
- case SDLK_v:
- outfitNum = 42;
- break;
-
- case SDLK_b:
- outfitNum = 43;
- break;
-
- case SDLK_n:
- outfitNum = 44;
- break;
-
- case SDLK_m:
- outfitNum = 45;
- break;
-
- case SDLK_COMMA:
- outfitNum = 46;
- break;
-
- case SDLK_PERIOD:
- outfitNum = 47;
- break;
-
- case SDLK_SLASH:
- outfitNum = 48;
- break;
-
- default:
- break;
+ if (numsTbl[f] == key)
+ return f;
}
-
- return outfitNum;
+ return -1;
}
-SDLKey OutfitWindow::numberToKey(int number) const
+SDLKey OutfitWindow::numberToKey(unsigned number) const
{
- SDLKey key = SDLK_UNKNOWN;
- switch (number)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- key = static_cast<SDLKey>(
- static_cast<unsigned int>(SDLK_1) + number);
- break;
-
- case 9:
- key = SDLK_0;
- break;
-
- case 10:
- key = SDLK_MINUS;
- break;
-
- case 11:
- key = SDLK_EQUALS;
- break;
-
- case 12:
- key = SDLK_BACKSPACE;
- break;
-
- case 13:
- key = SDLK_INSERT;
- break;
-
- case 14:
- key = SDLK_HOME;
- break;
-
- case 15:
- key = SDLK_q;
- break;
-
- case 16:
- key = SDLK_w;
- break;
-
- case 17:
- key = SDLK_e;
- break;
-
- case 18:
- key = SDLK_r;
- break;
-
- case 19:
- key = SDLK_t;
- break;
-
- case 20:
- key = SDLK_y;
- break;
-
- case 21:
- key = SDLK_u;
- break;
-
- case 22:
- key = SDLK_i;
- break;
-
- case 23:
- key = SDLK_o;
- break;
-
- case 24:
- key = SDLK_p;
- break;
-
- case 25:
- key = SDLK_LEFTBRACKET;
- break;
-
- case 26:
- key = SDLK_RIGHTBRACKET;
- break;
-
- case 27:
- key = SDLK_BACKSLASH;
- break;
-
- case 28:
- key = SDLK_a;
- break;
-
- case 29:
- key = SDLK_s;
- break;
-
- case 30:
- key = SDLK_d;
- break;
-
- case 31:
- key = SDLK_f;
- break;
-
- case 32:
- key = SDLK_g;
- break;
-
- case 33:
- key = SDLK_h;
- break;
-
- case 34:
- key = SDLK_j;
- break;
-
- case 35:
- key = SDLK_k;
- break;
-
- case 36:
- key = SDLK_l;
- break;
-
- case 37:
- key = SDLK_SEMICOLON;
- break;
-
- case 38:
- key = SDLK_QUOTE;
- break;
-
- case 39:
- key = SDLK_z;
- break;
-
-
- case 40:
- key = SDLK_x;
- break;
-
- case 41:
- key = SDLK_c;
- break;
-
- case 42:
- key = SDLK_v;
- break;
-
- case 43:
- key = SDLK_b;
- break;
-
- case 44:
- key = SDLK_n;
- break;
-
- case 45:
- key = SDLK_m;
- break;
-
- case 46:
- key = SDLK_COMMA;
- break;
-
- case 47:
- key = SDLK_PERIOD;
- break;
-
- case 48:
- key = SDLK_SLASH;
- break;
-
- default:
- break;
- }
-
- return key;
+ if (number >= sizeof(numsTbl) / sizeof(SDLKey))
+ return SDLK_UNKNOWN;
+ return numsTbl[number];
}
std::string OutfitWindow::keyName(int number)
diff --git a/src/gui/outfitwindow.h b/src/gui/outfitwindow.h
index b2b46c7e7..a663f3657 100644
--- a/src/gui/outfitwindow.h
+++ b/src/gui/outfitwindow.h
@@ -90,7 +90,7 @@ class OutfitWindow : public Window, gcn::ActionListener
int keyToNumber(SDLKey key) const A_PURE;
- SDLKey numberToKey(int number) const A_PURE;
+ SDLKey numberToKey(unsigned number) const A_PURE;
void next();
diff --git a/src/gui/popupmenu.cpp b/src/gui/popupmenu.cpp
index cd3a4c5ad..142acc69c 100644
--- a/src/gui/popupmenu.cpp
+++ b/src/gui/popupmenu.cpp
@@ -1184,19 +1184,19 @@ void PopupMenu::handleLink(const std::string &link,
int cnt = 10;
if (cnt > mItem->getQuantity())
cnt = mItem->getQuantity();
- Net::getInventoryHandler()->moveItem(Inventory::INVENTORY,
+ Net::getInventoryHandler()->moveItem2(Inventory::INVENTORY,
mItem->getInvIndex(), cnt,
Inventory::STORAGE);
}
else if (link == "store half" && mItem)
{
- Net::getInventoryHandler()->moveItem(Inventory::INVENTORY,
+ Net::getInventoryHandler()->moveItem2(Inventory::INVENTORY,
mItem->getInvIndex(), mItem->getQuantity() / 2,
Inventory::STORAGE);
}
else if (link == "store all" && mItem)
{
- Net::getInventoryHandler()->moveItem(Inventory::INVENTORY,
+ Net::getInventoryHandler()->moveItem2(Inventory::INVENTORY,
mItem->getInvIndex(), mItem->getQuantity(),
Inventory::STORAGE);
}
@@ -1235,19 +1235,19 @@ void PopupMenu::handleLink(const std::string &link,
int cnt = 10;
if (cnt > mItem->getQuantity())
cnt = mItem->getQuantity();
- Net::getInventoryHandler()->moveItem(Inventory::STORAGE,
+ Net::getInventoryHandler()->moveItem2(Inventory::STORAGE,
mItem->getInvIndex(), cnt,
Inventory::INVENTORY);
}
else if (link == "retrieve half" && mItem)
{
- Net::getInventoryHandler()->moveItem(Inventory::STORAGE,
+ Net::getInventoryHandler()->moveItem2(Inventory::STORAGE,
mItem->getInvIndex(), mItem->getQuantity() / 2,
Inventory::INVENTORY);
}
else if (link == "retrieve all" && mItem)
{
- Net::getInventoryHandler()->moveItem(Inventory::STORAGE,
+ Net::getInventoryHandler()->moveItem2(Inventory::STORAGE,
mItem->getInvIndex(), mItem->getQuantity(),
Inventory::INVENTORY);
}
diff --git a/src/gui/shopwindow.cpp b/src/gui/shopwindow.cpp
index b6b87edb7..1a27b8b0c 100644
--- a/src/gui/shopwindow.cpp
+++ b/src/gui/shopwindow.cpp
@@ -55,6 +55,7 @@
#include "net/net.h"
#include "net/chathandler.h"
#include "net/npchandler.h"
+#include "net/playerhandler.h"
#include "net/tradehandler.h"
#include "resources/iteminfo.h"
@@ -206,11 +207,15 @@ void ShopWindow::action(const gcn::ActionEvent &event)
&& mBuyShopItemList->getSelected() >= 0)
{
mBuyShopItems->del(mBuyShopItemList->getSelected());
+ if (isShopEmpty() && player_node)
+ player_node->updateStatus();
}
else if (event.getId() == "delete sell" && mSellShopItemList
&& mSellShopItemList->getSelected() >= 0)
{
mSellShopItems->del(mSellShopItemList->getSelected());
+ if (isShopEmpty() && player_node)
+ player_node->updateStatus();
}
else if (event.getId() == "announce buy" && mBuyShopItems
&& mBuyShopItems->getNumberOfElements() > 0)
@@ -306,8 +311,12 @@ void ShopWindow::addBuyItem(Item *item, int amount, int price)
{
if (!mBuyShopItems || !item)
return;
+ bool emp = isShopEmpty();
mBuyShopItems->addItemNoDup(item->getId(),
item->getColor(), amount, price);
+ if (emp && player_node)
+ player_node->updateStatus();
+
updateButtonsAndLabels();
}
@@ -315,8 +324,12 @@ void ShopWindow::addSellItem(Item *item, int amount, int price)
{
if (!mBuyShopItems || !item)
return;
+ bool emp = isShopEmpty();
mSellShopItems->addItemNoDup(item->getId(),
item->getColor(), amount, price);
+ if (emp && player_node)
+ player_node->updateStatus();
+
updateButtonsAndLabels();
}
diff --git a/src/gui/socialwindow.cpp b/src/gui/socialwindow.cpp
index a1a6c1cee..59ace1685 100644
--- a/src/gui/socialwindow.cpp
+++ b/src/gui/socialwindow.cpp
@@ -1143,7 +1143,7 @@ public:
std::vector<std::string> *players
= player_relations.getPlayersByRelation(PlayerRelation::FRIEND);
- std::set<std::string> players2 = whoIsOnline->getOnlinePlayers();
+ const std::set<std::string> &players2 = whoIsOnline->getOnlineNicks();
if (!players)
return;
diff --git a/src/gui/statuswindow.cpp b/src/gui/statuswindow.cpp
index a5fd12d40..57c81bc04 100644
--- a/src/gui/statuswindow.cpp
+++ b/src/gui/statuswindow.cpp
@@ -424,12 +424,12 @@ void StatusWindow::addAttribute(int id, const std::string &name,
if (modifiable)
{
disp = new ChangeDisplay(id, name);
- mAttrCont->add(disp);
+ mAttrCont->add1(disp);
}
else
{
disp = new DerDisplay(id, name);
- mDAttrCont->add(disp);
+ mDAttrCont->add1(disp);
}
mAttrs[id] = disp;
}
diff --git a/src/gui/whoisonline.cpp b/src/gui/whoisonline.cpp
index a80fb4c89..7965221e4 100644
--- a/src/gui/whoisonline.cpp
+++ b/src/gui/whoisonline.cpp
@@ -48,6 +48,7 @@
#include "gui/chatwindow.h"
+#include "utils/dtor.h"
#include "utils/gettext.h"
#include "utils/stringutils.h"
@@ -68,21 +69,10 @@
class NameFunctuator
{
public:
- bool operator()(const std::string &left,
- const std::string &right) const
+ bool operator()(const OnlinePlayer *left,
+ const OnlinePlayer *right) const
{
- for (std::string::const_iterator lit = left.begin(),
- rit = right.begin();
- lit != left.end() && rit != right.end(); ++lit, ++rit)
- {
- if (tolower(*lit) < tolower(*rit))
- return true;
- else if (tolower(*lit) > tolower(*rit))
- return false;
- }
- if (left.size() < right.size())
- return true;
- return false;
+ return (compareStrI(left->getNick(), right->getNick()) < 0);
}
} nameCompare;
@@ -149,6 +139,14 @@ WhoIsOnline::~WhoIsOnline()
// Remove possibly leftover temporary download
delete[] mCurlError;
+
+ std::set<OnlinePlayer*>::iterator itd = mOnlinePlayers.begin();
+ std::set<OnlinePlayer*>::iterator itd_end = mOnlinePlayers.end();
+
+ for (; itd != itd_end; ++ itd)
+ delete *itd;
+ mOnlinePlayers.clear();
+ mOnlineNicks.clear();
}
void WhoIsOnline::handleLink(const std::string& link, gcn::MouseEvent *event)
@@ -186,10 +184,10 @@ void WhoIsOnline::handleLink(const std::string& link, gcn::MouseEvent *event)
}
}
-void WhoIsOnline::updateWindow(std::vector<std::string> &friends,
- std::vector<std::string> &neutral,
- std::vector<std::string> &disregard,
- std::vector<std::string> enemy,
+void WhoIsOnline::updateWindow(std::vector<OnlinePlayer*> &friends,
+ std::vector<OnlinePlayer*> &neutral,
+ std::vector<OnlinePlayer*> &disregard,
+ std::vector<OnlinePlayer*> enemy,
int numOnline)
{
//Set window caption
@@ -202,7 +200,7 @@ void WhoIsOnline::updateWindow(std::vector<std::string> &friends,
bool addedFromSection(false);
for (int i = 0; i < static_cast<int>(friends.size()); i++)
{
- mBrowserBox->addRow(friends.at(i));
+ mBrowserBox->addRow(friends.at(i)->getText());
addedFromSection = true;
}
if (addedFromSection == true)
@@ -212,7 +210,7 @@ void WhoIsOnline::updateWindow(std::vector<std::string> &friends,
}
for (int i = 0; i < static_cast<int>(enemy.size()); i++)
{
- mBrowserBox->addRow(enemy.at(i));
+ mBrowserBox->addRow(enemy.at(i)->getText());
addedFromSection = true;
}
if (addedFromSection == true)
@@ -222,7 +220,7 @@ void WhoIsOnline::updateWindow(std::vector<std::string> &friends,
}
for (int i = 0; i < static_cast<int>(neutral.size()); i++)
{
- mBrowserBox->addRow(neutral.at(i));
+ mBrowserBox->addRow(neutral.at(i)->getText());
addedFromSection = true;
}
if (addedFromSection == true && !disregard.empty())
@@ -232,7 +230,7 @@ void WhoIsOnline::updateWindow(std::vector<std::string> &friends,
}
for (int i = 0; i < static_cast<int>(disregard.size()); i++)
{
- mBrowserBox->addRow(disregard.at(i));
+ mBrowserBox->addRow(disregard.at(i)->getText());
}
if (mScrollArea->getVerticalMaxScroll() <
@@ -243,43 +241,59 @@ void WhoIsOnline::updateWindow(std::vector<std::string> &friends,
}
}
-void WhoIsOnline::loadList(std::vector<std::string> &list)
+void WhoIsOnline::loadList(std::vector<OnlinePlayer*> &list)
{
mBrowserBox->clearRows();
int numOnline = list.size();
- std::vector<std::string> friends;
- std::vector<std::string> neutral;
- std::vector<std::string> disregard;
- std::vector<std::string> enemy;
+ std::vector<OnlinePlayer*> friends;
+ std::vector<OnlinePlayer*> neutral;
+ std::vector<OnlinePlayer*> disregard;
+ std::vector<OnlinePlayer*> enemy;
+
+ std::set<OnlinePlayer*>::iterator itd = mOnlinePlayers.begin();
+ std::set<OnlinePlayer*>::iterator itd_end = mOnlinePlayers.end();
+ for (; itd != itd_end; ++ itd)
+ delete *itd;
mOnlinePlayers.clear();
+ mOnlineNicks.clear();
+
mShowLevel = config.getBoolValue("showlevel");
- std::vector<std::string>::const_iterator it = list.begin();
- std::vector<std::string>::const_iterator it_end = list.end();
+ std::vector<OnlinePlayer*>::iterator it = list.begin();
+ std::vector<OnlinePlayer*>::iterator it_end = list.end();
for (; it != it_end; ++ it)
{
- std::string nick = *it;
- mOnlinePlayers.insert(nick);
+ OnlinePlayer *player = *it;
+ std::string nick = player->getNick();
+ mOnlinePlayers.insert(player);
+ mOnlineNicks.insert(nick);
+
+ if (!mShowLevel)
+ player->setLevel(0);
switch (player_relations.getRelation(nick))
{
case PlayerRelation::NEUTRAL:
default:
- neutral.push_back(prepareNick(nick, 0, "0"));
+ player->setText("0");
+ neutral.push_back(player);
break;
case PlayerRelation::FRIEND:
- friends.push_back(prepareNick(nick, 0, "2"));
+ player->setText("2");
+ friends.push_back(player);
break;
case PlayerRelation::DISREGARDED:
case PlayerRelation::BLACKLISTED:
- disregard.push_back(prepareNick(nick, 0, "8"));
+ player->setText("8");
+ disregard.push_back(player);
break;
case PlayerRelation::ENEMY2:
- enemy.push_back(prepareNick(nick, 0, "1"));
+ player->setText("1");
+ enemy.push_back(player);
break;
case PlayerRelation::IGNORED:
@@ -290,10 +304,10 @@ void WhoIsOnline::loadList(std::vector<std::string> &list)
}
updateWindow(friends, neutral, disregard, enemy, numOnline);
- if (!mOnlinePlayers.empty())
+ if (!mOnlineNicks.empty())
{
if (chatWindow)
- chatWindow->updateOnline(mOnlinePlayers);
+ chatWindow->updateOnline(mOnlineNicks);
if (socialWindow)
socialWindow->updateActiveList();
}
@@ -313,15 +327,23 @@ void WhoIsOnline::loadWebList()
bool listStarted(false);
std::string lineStr;
int numOnline(0);
- std::vector<std::string> friends;
- std::vector<std::string> neutral;
- std::vector<std::string> disregard;
- std::vector<std::string> enemy;
+ std::vector<OnlinePlayer*> friends;
+ std::vector<OnlinePlayer*> neutral;
+ std::vector<OnlinePlayer*> disregard;
+ std::vector<OnlinePlayer*> enemy;
// Tokenize and add each line separately
char *line = strtok(mMemoryBuffer, "\n");
const std::string gmText = "(GM)";
+
+ std::set<OnlinePlayer*>::iterator itd = mOnlinePlayers.begin();
+ std::set<OnlinePlayer*>::iterator itd_end = mOnlinePlayers.end();
+
+ for (; itd != itd_end; ++ itd)
+ delete *itd;
+
mOnlinePlayers.clear();
+ mOnlineNicks.clear();
mShowLevel = config.getBoolValue("showlevel");
@@ -383,27 +405,38 @@ void WhoIsOnline::loadWebList()
}
}
- mOnlinePlayers.insert(nick);
+
+ if (!mShowLevel)
+ level = 0;
+
+ OnlinePlayer *player = new OnlinePlayer(nick, 255, level,
+ GENDER_UNSPECIFIED, -1);
+ mOnlinePlayers.insert(player);
+ mOnlineNicks.insert(nick);
numOnline++;
switch (player_relations.getRelation(nick))
{
case PlayerRelation::NEUTRAL:
default:
- neutral.push_back(prepareNick(nick, level, "0"));
+ player->setText("0");
+ neutral.push_back(player);
break;
case PlayerRelation::FRIEND:
- friends.push_back(prepareNick(nick, level, "2"));
+ player->setText("2");
+ friends.push_back(player);
break;
case PlayerRelation::DISREGARDED:
case PlayerRelation::BLACKLISTED:
- disregard.push_back(prepareNick(nick, level, "8"));
+ player->setText("8");
+ disregard.push_back(player);
break;
case PlayerRelation::ENEMY2:
- enemy.push_back(prepareNick(nick, level, "1"));
+ player->setText("1");
+ enemy.push_back(player);
break;
case PlayerRelation::IGNORED:
@@ -472,8 +505,8 @@ int WhoIsOnline::downloadThread(void *ptr)
curl_easy_setopt(curl, CURLOPT_WRITEDATA, ptr);
curl_easy_setopt(curl, CURLOPT_USERAGENT,
- strprintf(PACKAGE_EXTENDED_VERSION, branding
- .getValue("appShort", "mana").c_str()).c_str());
+ strprintf(PACKAGE_EXTENDED_VERSION,
+ branding.getStringValue("appName").c_str()).c_str());
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, wio->mCurlError);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
@@ -596,10 +629,10 @@ void WhoIsOnline::logic()
mUpdateButton->setEnabled(true);
mUpdateTimer = 0;
updateSize();
- if (!mOnlinePlayers.empty())
+ if (!mOnlineNicks.empty())
{
if (chatWindow)
- chatWindow->updateOnline(mOnlinePlayers);
+ chatWindow->updateOnline(mOnlineNicks);
if (socialWindow)
socialWindow->updateActiveList();
}
@@ -681,3 +714,46 @@ void WhoIsOnline::optionChanged(const std::string &name)
if (name == "updateOnlineList")
mUpdateOnlineList = config.getBoolValue("updateOnlineList");
}
+
+void OnlinePlayer::setText(std::string color)
+{
+ mText = strprintf("@@%s|##%s%s ", mNick.c_str(),
+ color.c_str(), mNick.c_str());
+
+ if (mStatus != 255 && actorSpriteManager)
+ {
+ Being *being = actorSpriteManager->findBeingByName(
+ mNick, Being::PLAYER);
+ if (being)
+ being->setState(mStatus);
+ }
+
+ if (mLevel > 0)
+ mText += strprintf("%d", mLevel);
+
+ if (mGender == GENDER_FEMALE)
+ mText += "\u2640";
+ else if (mGender == GENDER_MALE)
+ mText += "\u2642";
+
+ if (mStatus > 0 && mStatus != 255)
+ {
+ if (mStatus & Being::FLAG_SHOP)
+ mText += "$";
+ if (mStatus & Being::FLAG_AWAY)
+ {
+ // TRANSLATORS: this away status writed in player nick
+ mText += _("A");
+ }
+ if (mStatus & Being::FLAG_INACTIVE)
+ {
+ // TRANSLATORS: this inactive status writed in player nick
+ mText += _("I");
+ }
+ }
+
+ if (mVersion > 0)
+ mText += strprintf(" - %d", mVersion);
+
+ mText += strprintf("@@");
+}
diff --git a/src/gui/whoisonline.h b/src/gui/whoisonline.h
index ade391d5a..d2f0c30d0 100644
--- a/src/gui/whoisonline.h
+++ b/src/gui/whoisonline.h
@@ -42,6 +42,54 @@ class ScrollArea;
struct SDL_Thread;
+class OnlinePlayer
+{
+ public:
+ OnlinePlayer(std::string nick, unsigned char status,
+ char level, unsigned char gender, char version) :
+ mNick(nick),
+ mText(""),
+ mStatus(status),
+ mLevel(level),
+ mVersion(version),
+ mGender(gender)
+ {
+ }
+
+ const std::string getNick() const
+ { return mNick; }
+
+ unsigned char getStaus() const
+ { return mStatus; }
+
+ char getVersion() const
+ { return mVersion; }
+
+ char getLevel() const
+ { return mLevel; }
+
+ const std::string getText()
+ { return mText; }
+
+ void setText(std::string str);
+
+ void setLevel(char level)
+ { mLevel = level; }
+
+ private:
+ std::string mNick;
+
+ std::string mText;
+
+ unsigned char mStatus;
+
+ char mLevel;
+
+ char mVersion;
+
+ unsigned char mGender;
+};
+
/**
* Update progress window GUI
*
@@ -52,7 +100,7 @@ class WhoIsOnline : public Window,
public gcn::ActionListener,
public ConfigListener
{
- public:
+public:
/**
* Constructor.
*/
@@ -68,7 +116,7 @@ class WhoIsOnline : public Window,
*/
void loadWebList();
- void loadList(std::vector<std::string> &list);
+ void loadList(std::vector<OnlinePlayer*> &list);
void handleLink(const std::string& link, gcn::MouseEvent *event);
@@ -78,9 +126,12 @@ class WhoIsOnline : public Window,
void widgetResized(const gcn::Event &event);
- std::set<std::string> &getOnlinePlayers()
+ const std::set<OnlinePlayer*> &getOnlinePlayers()
{ return mOnlinePlayers; }
+ const std::set<std::string> &getOnlineNicks()
+ { return mOnlineNicks; }
+
void setAllowUpdate(bool n)
{ mAllowUpdate = n; }
@@ -109,10 +160,10 @@ private:
const std::string prepareNick(std::string nick, int level,
std::string color) const;
- void updateWindow(std::vector<std::string> &friends,
- std::vector<std::string> &neutral,
- std::vector<std::string> &disregard,
- std::vector<std::string> enemy,
+ void updateWindow(std::vector<OnlinePlayer*> &friends,
+ std::vector<OnlinePlayer*> &neutral,
+ std::vector<OnlinePlayer*> &disregard,
+ std::vector<OnlinePlayer*> enemy,
int numOnline);
enum DownloadStatus
@@ -143,7 +194,8 @@ private:
BrowserBox *mBrowserBox;
ScrollArea *mScrollArea;
time_t mUpdateTimer;
- std::set<std::string> mOnlinePlayers;
+ std::set<OnlinePlayer*> mOnlinePlayers;
+ std::set<std::string> mOnlineNicks;
gcn::Button *mUpdateButton;
bool mAllowUpdate;
diff --git a/src/gui/widgets/setupitem.cpp b/src/gui/widgets/setupitem.cpp
index 92ff625c2..059b05ba2 100644
--- a/src/gui/widgets/setupitem.cpp
+++ b/src/gui/widgets/setupitem.cpp
@@ -192,7 +192,7 @@ void SetupItemCheckBox::createControls()
load();
mCheckBox = new CheckBox(mText, mValue != "0", mParent, mEventName);
mWidget = mCheckBox;
- mParent->getContainer()->add(mWidget);
+ mParent->getContainer()->add1(mWidget);
mParent->addControl(this);
mParent->addActionListener(this);
mWidget->addActionListener(this);
@@ -275,7 +275,7 @@ void SetupItemTextField::createControls()
mHorizont->add(mTextField);
mHorizont->add(mButton);
- mParent->getContainer()->add(mHorizont, true, 4);
+ mParent->getContainer()->add2(mHorizont, true, 4);
mParent->addControl(this);
mParent->addControl(this, mEventName + "_EDIT");
mParent->addControl(this, mEventName + "_EDIT_OK");
@@ -398,7 +398,7 @@ void SetupItemIntTextField::createControls()
mHorizont->add(mTextField);
mHorizont->add(mButton);
- mParent->getContainer()->add(mHorizont, true, 4);
+ mParent->getContainer()->add2(mHorizont, true, 4);
mParent->addControl(this);
mParent->addControl(this, mEventName + "_EDIT");
mParent->addControl(this, mEventName + "_EDIT_OK");
@@ -486,7 +486,7 @@ void SetupItemLabel::createControls()
}
mWidget = mLabel;
- mParent->getContainer()->add(mWidget);
+ mParent->getContainer()->add1(mWidget);
mParent->addControl(this);
mParent->addActionListener(this);
mWidget->addActionListener(this);
@@ -568,7 +568,7 @@ void SetupItemDropDown::createControls()
mHorizont->add(mLabel);
mHorizont->add(mDropDown);
- mParent->getContainer()->add(mHorizont, true, 4);
+ mParent->getContainer()->add2(mHorizont, true, 4);
mParent->addControl(this);
mParent->addActionListener(this);
mWidget->addActionListener(this);
diff --git a/src/gui/widgets/vertcontainer.cpp b/src/gui/widgets/vertcontainer.cpp
index 42ae97802..0eb59c8f9 100644
--- a/src/gui/widgets/vertcontainer.cpp
+++ b/src/gui/widgets/vertcontainer.cpp
@@ -35,12 +35,12 @@ VertContainer::VertContainer(int verticalItemSize, bool resizable,
addWidgetListener(this);
}
-void VertContainer::add(gcn::Widget *widget, int spacing)
+void VertContainer::add1(gcn::Widget *widget, int spacing)
{
- add(widget, mResizable, spacing);
+ add2(widget, mResizable, spacing);
}
-void VertContainer::add(gcn::Widget *widget, bool resizable, int spacing)
+void VertContainer::add2(gcn::Widget *widget, bool resizable, int spacing)
{
if (!widget)
return;
diff --git a/src/gui/widgets/vertcontainer.h b/src/gui/widgets/vertcontainer.h
index 6e1305a06..b4e43d31d 100644
--- a/src/gui/widgets/vertcontainer.h
+++ b/src/gui/widgets/vertcontainer.h
@@ -39,10 +39,10 @@ class VertContainer : public Container, public gcn::WidgetListener
VertContainer(int verticalItemSize, bool resizable = true,
int leftSpacing = 0);
- virtual void add(gcn::Widget *widget, bool resizable,
- int spacing = -1);
+ virtual void add2(gcn::Widget *widget, bool resizable,
+ int spacing = -1);
- virtual void add(gcn::Widget *widget, int spacing = -1);
+ virtual void add1(gcn::Widget *widget, int spacing = -1);
virtual void clear();