summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/guildwindow.cpp6
-rw-r--r--src/gui/partywindow.cpp46
-rw-r--r--src/gui/partywindow.h3
-rw-r--r--src/gui/widgets/avatar.cpp61
-rw-r--r--src/gui/widgets/avatar.h61
5 files changed, 159 insertions, 18 deletions
diff --git a/src/gui/guildwindow.cpp b/src/gui/guildwindow.cpp
index a50bd219..3319489c 100644
--- a/src/gui/guildwindow.cpp
+++ b/src/gui/guildwindow.cpp
@@ -47,10 +47,10 @@
#include <guichan/widgets/tab.hpp>
GuildWindow::GuildWindow():
- Window(player_node->getName()),
+ Window(_("Guild")),
mFocus(false)
{
- setCaption("Guild");
+ setCaption(_("Guild"));
setResizable(false);
setCloseButton(true);
setMinWidth(200);
@@ -74,7 +74,7 @@ GuildWindow::GuildWindow():
layout.setColWidth(0, 48);
layout.setColWidth(1, 65);
- loadWindowState(player_node->getName());
+ loadWindowState("Guild");
}
GuildWindow::~GuildWindow()
diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp
index 484d81b0..1b963dae 100644
--- a/src/gui/partywindow.cpp
+++ b/src/gui/partywindow.cpp
@@ -24,51 +24,61 @@
#include "partywindow.h"
#include "chat.h"
+#include "widgets/avatar.h"
+
#include "../utils/gettext.h"
#include "../net/chatserver/party.h"
PartyWindow::PartyWindow() : Window(_("Party"))
{
setVisible(false);
+ setResizable(false);
+ setCaption(_("Party"));
+ setCloseButton(true);
+ setMinWidth(110);
+ setMinHeight(200);
+ setDefaultSize(620, 300, 110, 200);
+
+ loadWindowState("Party");
}
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)
{
-
+ Window::draw(graphics);
}
void PartyWindow::addPartyMember(const std::string &memberName)
{
- PartyMember *player = new PartyMember;
+ // check to see if player is already in the party
PartyList::iterator itr = mPartyMembers.begin(),
itr_end = mPartyMembers.end();
while (itr != itr_end)
{
- if ((*itr)->name == memberName)
+ if ((*itr).name == memberName)
{
+ // already in the party, dont add
return;
}
++itr;
}
- player->name = memberName;
+ // create new party member
+ PartyMember player;
+ player.name = memberName;
mPartyMembers.push_back(player);
- if (mPartyMembers.size() > 1)
+ // add avatar of the new member to window
+ Avatar *avatar = new Avatar(memberName);
+ add(avatar, 0, (mPartyMembers.size() - 1)*14);
+
+ // show the window
+ if (mPartyMembers.size() > 0)
{
setVisible(true);
}
@@ -76,12 +86,13 @@ void PartyWindow::addPartyMember(const std::string &memberName)
void PartyWindow::removePartyMember(const std::string &memberName)
{
+ // remove the party member
PartyList::iterator itr = mPartyMembers.begin(),
itr_end = mPartyMembers.end();
while (itr != itr_end)
{
- if ((*itr)->name == memberName)
+ if ((*itr).name == memberName)
{
mPartyMembers.erase(itr);
break;
@@ -89,6 +100,7 @@ void PartyWindow::removePartyMember(const std::string &memberName)
++itr;
}
+ // if no-one left, remove the party window
if (mPartyMembers.size() < 1)
{
setVisible(false);
@@ -97,15 +109,19 @@ void PartyWindow::removePartyMember(const std::string &memberName)
void PartyWindow::showPartyInvite(const std::string &inviter)
{
+ // check there isnt already an invite showing
if (mPartyInviter != "")
{
chatWindow->chatLog("Received party request, but one already exists",
BY_SERVER);
return;
}
+
+ // log invite
std::string msg = inviter + " has invited you to join their party";
chatWindow->chatLog(msg, BY_SERVER);
+ // show invite
acceptDialog = new ConfirmDialog("Accept Party Invite", msg, this);
acceptDialog->addActionListener(this);
@@ -116,8 +132,10 @@ void PartyWindow::action(const gcn::ActionEvent &event)
{
const std::string &eventId = event.getId();
+ // check if they accepted the invite
if (eventId == "yes")
{
+ chatWindow->chatLog("Accepted invite from " + mPartyInviter);
Net::ChatServer::Party::acceptInvite(mPartyInviter);
mPartyInviter = "";
}
diff --git a/src/gui/partywindow.h b/src/gui/partywindow.h
index fe126c2e..f09eeb6a 100644
--- a/src/gui/partywindow.h
+++ b/src/gui/partywindow.h
@@ -40,6 +40,7 @@
struct PartyMember
{
std::string name;
+ int vitality;
};
/**
@@ -86,7 +87,7 @@ class PartyWindow : public Window, gcn::ActionListener
void action(const gcn::ActionEvent &event);
private:
- typedef std::vector<PartyMember*> PartyList;
+ typedef std::vector<PartyMember> PartyList;
PartyList mPartyMembers;
std::string mPartyInviter;
ConfirmDialog *acceptDialog;
diff --git a/src/gui/widgets/avatar.cpp b/src/gui/widgets/avatar.cpp
new file mode 100644
index 00000000..03fa1aeb
--- /dev/null
+++ b/src/gui/widgets/avatar.cpp
@@ -0,0 +1,61 @@
+/*
+ * The Mana World
+ * Copyright 2008 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+#include "avatar.h"
+
+#include "../icon.h"
+
+#include "../../resources/image.h"
+#include "../../resources/resourcemanager.h"
+
+Avatar::Avatar(const std::string &name):
+ mName(name)
+{
+ setSize(110, 12);
+ mLabel = new gcn::Label(name);
+ mLabel->setSize(85, 12);
+ mLabel->setPosition(25, 0);
+ mStatusOffline = ResourceManager::getInstance()->getImage("graphics/gui/circle-gray.png");
+ mStatusOnline = ResourceManager::getInstance()->getImage("graphics/gui/circle-green.png");
+ mStatus = new Icon(mStatusOffline);
+ mStatus->setSize(25, 12);
+ mStatus->setPosition(0, 0);
+}
+
+void Avatar::setOnline(bool status)
+{
+ if (status)
+ {
+ mStatus->setImage(mStatusOnline);
+ }
+ else
+ {
+ mStatus->setImage(mStatusOffline);
+ }
+}
+
+void Avatar::draw(gcn::Graphics *g)
+{
+ mLabel->draw(g);
+ mStatus->draw(g);
+}
diff --git a/src/gui/widgets/avatar.h b/src/gui/widgets/avatar.h
new file mode 100644
index 00000000..3707e8f8
--- /dev/null
+++ b/src/gui/widgets/avatar.h
@@ -0,0 +1,61 @@
+/*
+ * The Mana World
+ * Copyright 2008 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+#ifndef _TMW_AVATAR_H
+#define _TMW_AVATAR_H
+
+#include <string>
+#include <guichan/widget.hpp>
+#include <guichan/widgets/label.hpp>
+
+class Image;
+class Icon;
+
+class Avatar : public gcn::Widget
+{
+public:
+ /**
+ * Constructor
+ * @param name Character name
+ */
+ Avatar(const std::string &name);
+
+ /**
+ * Set the avatar online status
+ */
+ void setOnline(bool status);
+
+ /**
+ * Draws the Avatar
+ */
+ void draw(gcn::Graphics *g);
+
+private:
+ std::string mName;
+ Icon *mStatus;
+ Image *mStatusOnline;
+ Image *mStatusOffline;
+ gcn::Label *mLabel;
+};
+
+#endif