summaryrefslogtreecommitdiff
path: root/src/gui/partywindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/partywindow.cpp')
-rw-r--r--src/gui/partywindow.cpp56
1 files changed, 36 insertions, 20 deletions
diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp
index dbd8f3ef..317811ee 100644
--- a/src/gui/partywindow.cpp
+++ b/src/gui/partywindow.cpp
@@ -23,6 +23,9 @@
#include "gui/widgets/chattab.h"
+#include "beingmanager.h"
+#include "player.h"
+
#include "net/net.h"
#include "net/partyhandler.h"
@@ -46,15 +49,15 @@ PartyWindow::PartyWindow() :
{
setWindowName("Party");
setVisible(false);
+ setSaveVisible(true);
setResizable(true);
setSaveVisible(true);
setCloseButton(true);
- setMinWidth(200);
+ setMinWidth(212);
setMinHeight(200);
- setDefaultSize(590, 200, 200, 200);
+ setDefaultSize(590, 200, 212, 200);
loadWindowState();
- setVisible(false); // Do not start out visible
}
PartyWindow::~PartyWindow()
@@ -62,6 +65,16 @@ PartyWindow::~PartyWindow()
delete_all(mMembers);
}
+void PartyWindow::setPartyName(const std::string &name)
+{
+ setCaption(strprintf(_("Party (%s)"), name.c_str()));
+}
+
+void PartyWindow::clearPartyName()
+{
+ setCaption(_("Party"));
+}
+
PartyMember *PartyWindow::findMember(int id) const
{
PartyList::const_iterator it = mMembers.find(id);
@@ -105,18 +118,15 @@ int PartyWindow::findMember(const std::string &name) const
void PartyWindow::updateMember(int id, const std::string &memberName,
bool leader, bool online)
{
- PartyMember *player = findOrCreateMember(id);
- player->name = memberName;
- player->leader = leader;
- player->online = online;
- player->avatar->setName(memberName);
- player->avatar->setOnline(online);
-
- // show the window
- if (mMembers.size() > 0)
- {
- setVisible(true);
- }
+ PartyMember *member = findOrCreateMember(id);
+ member->name = memberName;
+ member->leader = leader;
+ member->online = online;
+ member->avatar->setName(memberName);
+ member->avatar->setOnline(online);
+
+ if (Player *player = dynamic_cast<Player*>(beingManager->findBeing(id)))
+ player->setInParty(true);
}
void PartyWindow::updateMemberHP(int id, int hp, int maxhp)
@@ -130,11 +140,8 @@ void PartyWindow::removeMember(int id)
{
mMembers.erase(id);
- // if no-one left, remove the party window
- if (mMembers.size() < 1)
- {
- setVisible(false);
- }
+ if (Player *player = dynamic_cast<Player*>(beingManager->findBeing(id)))
+ player->setInParty(false);
}
void PartyWindow::removeMember(const std::string &name)
@@ -201,10 +208,19 @@ void PartyWindow::action(const gcn::ActionEvent &event)
}
}
+void clearMembersSub(const std::pair<int, PartyMember*> &p)
+{
+ Player *player = dynamic_cast<Player*>(beingManager->findBeing(p.first));
+ if (player)
+ player->setInParty(false);
+}
+
void PartyWindow::clearMembers()
{
clearLayout();
+ std::for_each(mMembers.begin(), mMembers.end(), clearMembersSub);
+
delete_all(mMembers);
mMembers.clear();
}