diff options
author | David Athay <ko2fan@gmail.com> | 2008-04-28 17:21:22 +0000 |
---|---|---|
committer | David Athay <ko2fan@gmail.com> | 2008-04-28 17:21:22 +0000 |
commit | 5bbb89e2dbcafb80f33030ba2ffef6d2515b9209 (patch) | |
tree | bc0660c85891a0fae0acc7dea80547962f39ff1a /src/gui/partywindow.cpp | |
parent | a6731dd30a4ab7b2b19af18295293c13895b664d (diff) | |
download | mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.tar.gz mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.tar.bz2 mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.tar.xz mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.zip |
Added party invite dialog
Diffstat (limited to 'src/gui/partywindow.cpp')
-rw-r--r-- | src/gui/partywindow.cpp | 81 |
1 files changed, 69 insertions, 12 deletions
diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp index db066910..5ec1e6bf 100644 --- a/src/gui/partywindow.cpp +++ b/src/gui/partywindow.cpp @@ -22,43 +22,71 @@ */ #include "partywindow.h" +#include "chat.h" #include "../utils/gettext.h" +#include "../net/chatserver/party.h" PartyWindow::PartyWindow() : Window(_("Party")) { setVisible(false); } +PartyWindow::~PartyWindow() +{ + PartyList::iterator itr = mPartyMembers.begin(), + itr_end = mPartyMembers.end(); + + while (itr != itr_end) + { + delete (*itr); + } + + mPartyMembers.clear(); +} + void PartyWindow::draw(gcn::Graphics *graphics) { } -void PartyWindow::addPartyMember(Player *player) +void PartyWindow::addPartyMember(const std::string &memberName) { - PartyList::iterator itr = std::find(mPartyMembers.begin(), - mPartyMembers.end(), - player); - if (itr == mPartyMembers.end()) + PartyMember *player = new PartyMember; + PartyList::iterator itr = mPartyMembers.begin(), + itr_end = mPartyMembers.end(); + + while (itr != itr_end) { - mPartyMembers.push_back(player); + if ((*itr)->name == memberName) + { + return; + } + ++itr; } + player->name = memberName; + mPartyMembers.push_back(player); + if (mPartyMembers.size() > 1) { setVisible(true); } } -void PartyWindow::removePartyMember(Player *player) +void PartyWindow::removePartyMember(const std::string &memberName) { - PartyList::iterator itr = std::find(mPartyMembers.begin(), - mPartyMembers.end(), - player); - if (itr != mPartyMembers.end()) + PartyList::iterator itr = mPartyMembers.begin(), + itr_end = mPartyMembers.end(); + + while (itr != itr_end) { - mPartyMembers.erase(itr); + if ((*itr)->name == memberName) + { + mPartyMembers.erase(itr); + break; + } + ++itr; } if (mPartyMembers.size() < 1) @@ -69,5 +97,34 @@ void PartyWindow::removePartyMember(Player *player) void PartyWindow::showPartyInvite(const std::string &inviter) { + if (mPartyInviter != "") + { + chatWindow->chatLog("Received party request, but one already exists", + BY_SERVER); + return; + } + std::string msg = inviter + " has invited you to join their party"; + chatWindow->chatLog(msg, BY_SERVER); + + acceptDialog = new ConfirmDialog("Accept Party Invite", msg, this); + acceptDialog->addActionListener(this); + + mPartyInviter = inviter; +} + +void PartyWindow::action(const gcn::ActionEvent &event) +{ + const std::string &eventId = event.getId(); + if (eventId == "yes") + { + Net::ChatServer::Party::acceptInvite(mPartyInviter); + mPartyInviter = ""; + delete acceptDialog; + } + else if (eventId == "no") + { + mPartyInviter = ""; + delete acceptDialog; + } } |