summaryrefslogtreecommitdiff
path: root/src/gui/widgets
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2009-03-29 20:35:19 -0600
committerJared Adams <jaxad0127@gmail.com>2009-03-29 20:36:58 -0600
commitbbf4d657e77fd39887b9941af1fe75a5ec27d988 (patch)
treed03c2973cff4d11e2eddbb856483369255ee40af /src/gui/widgets
parent985e65f31b9cc06f13b733ddd5c7a9daa1331e21 (diff)
downloadmana-client-bbf4d657e77fd39887b9941af1fe75a5ec27d988.tar.gz
mana-client-bbf4d657e77fd39887b9941af1fe75a5ec27d988.tar.bz2
mana-client-bbf4d657e77fd39887b9941af1fe75a5ec27d988.tar.xz
mana-client-bbf4d657e77fd39887b9941af1fe75a5ec27d988.zip
Fix up eAthena party handling some more
Diffstat (limited to 'src/gui/widgets')
-rw-r--r--src/gui/widgets/avatar.cpp48
-rw-r--r--src/gui/widgets/avatar.h16
-rw-r--r--src/gui/widgets/chattab.cpp27
-rw-r--r--src/gui/widgets/chattab.h5
4 files changed, 46 insertions, 50 deletions
diff --git a/src/gui/widgets/avatar.cpp b/src/gui/widgets/avatar.cpp
index a36c0302..2603e3ae 100644
--- a/src/gui/widgets/avatar.cpp
+++ b/src/gui/widgets/avatar.cpp
@@ -28,28 +28,52 @@
#include <guichan/widgets/label.hpp>
+namespace {
+ Image *avatarStatusOffline;
+ Image *avatarStatusOnline;
+ int avatarCount = 0;
+}
+
Avatar::Avatar(const std::string &name):
mName(name)
{
+ setOpaque(false);
setSize(110, 12);
+
+ if (avatarCount == 0)
+ {
+ ResourceManager *resman = ResourceManager::getInstance();
+ avatarStatusOffline = resman->getImage("graphics/gui/circle-gray.png");
+ avatarStatusOnline = resman->getImage("graphics/gui/circle-green.png");
+ }
+ avatarCount++;
+ avatarStatusOffline->incRef();
+ avatarStatusOnline->incRef();
+
+ mStatus = new Icon(avatarStatusOffline);
+ mStatus->setSize(12, 12);
+ add(mStatus, 1, 0);
+
mLabel = new gcn::Label(name);
mLabel->setSize(85, 12);
- mLabel->setPosition(25, 0);
- ResourceManager *resman = ResourceManager::getInstance();
- mStatusOffline = resman->getImage("graphics/gui/circle-gray.png");
- mStatusOnline = resman->getImage("graphics/gui/circle-green.png");
- mStatus = new Icon(mStatusOffline);
- mStatus->setSize(25, 12);
- mStatus->setPosition(0, 0);
+ add(mLabel, 14, 0);
}
-void Avatar::setOnline(bool online)
+Avatar::~Avatar()
{
- mStatus->setImage(online ? mStatusOnline : mStatusOffline);
+ avatarCount--;
+
+ avatarStatusOffline->decRef();
+ avatarStatusOnline->decRef();
}
-void Avatar::draw(gcn::Graphics *g)
+void Avatar::setName(const std::string &name)
+{
+ mName = name;
+ mLabel->setCaption(name);
+}
+
+void Avatar::setOnline(bool online)
{
- mLabel->draw(g);
- mStatus->draw(g);
+ mStatus->setImage(online ? avatarStatusOnline : avatarStatusOffline);
}
diff --git a/src/gui/widgets/avatar.h b/src/gui/widgets/avatar.h
index 16972104..026a3581 100644
--- a/src/gui/widgets/avatar.h
+++ b/src/gui/widgets/avatar.h
@@ -24,14 +24,14 @@
#include "guichanfwd.h"
-#include <guichan/widget.hpp>
+#include "gui/gccontainer.h"
#include <string>
class Image;
class Icon;
-class Avatar : public gcn::Widget
+class Avatar : public GCContainer
{
public:
/**
@@ -40,21 +40,21 @@ public:
*/
Avatar(const std::string &name);
+ ~Avatar();
+
/**
- * Set the avatar online status.
+ * Set the avatar's name.
*/
- void setOnline(bool online);
+ void setName(const std::string &name);
/**
- * Draws the avatar.
+ * Set the avatar's online status.
*/
- void draw(gcn::Graphics *g);
+ void setOnline(bool online);
private:
std::string mName;
Icon *mStatus;
- Image *mStatusOnline;
- Image *mStatusOffline;
gcn::Label *mLabel;
};
diff --git a/src/gui/widgets/chattab.cpp b/src/gui/widgets/chattab.cpp
index c4563cc9..4a63bbcd 100644
--- a/src/gui/widgets/chattab.cpp
+++ b/src/gui/widgets/chattab.cpp
@@ -150,12 +150,6 @@ void ChatTab::chatLog(std::string line, int own, bool ignoreRecord)
// TODO: Use a predefined color
lineColor = "##2"; // Equiv. to BrowserBox::GREEN
break;
-#ifdef EATHENA_SUPPORT
- case BY_PARTY:
- tmp.nick += CAT_NORMAL;
- lineColor = "##P";
- break;
-#endif
case ACT_WHISPER:
// Resend whisper through normal mechanism
chatWindow->whisper(tmp.nick, tmp.text);
@@ -215,7 +209,7 @@ void ChatTab::chatLog(std::string line, int own, bool ignoreRecord)
chatWindow->mRecorder->record(line.substr(3));
}
-void ChatTab::chatLog(std::string &nick, std::string &msg)
+void ChatTab::chatLog(const std::string &nick, const std::string &msg)
{
chatLog(nick + CAT_NORMAL + msg, nick == player_node->getName() ?
BY_PLAYER : BY_OTHER, false);
@@ -227,25 +221,6 @@ void ChatTab::chatInput(std::string &msg)
if (msg.empty()) return;
-#ifdef EATHENA_SUPPORT
- // Send party message
- if (msg.at(0) == chatWindow->mPartyPrefix)
- {
- msg.erase(0, 1);
- std::size_t length = msg.length() + 1;
-
- if (length == 0)
- {
- chatLog(_("Trying to send a blank party message."), BY_SERVER, true);
- return;
- }
- MessageOut outMsg(CMSG_PARTY_MESSAGE);
- outMsg.writeInt16(length + 4);
- outMsg.writeString(msg, length);
- return;
- }
-#endif
-
// Check for item link
std::string::size_type start = msg.find('[');
while (start != std::string::npos && msg[start+1] != '@')
diff --git a/src/gui/widgets/chattab.h b/src/gui/widgets/chattab.h
index 52449f6f..76b33011 100644
--- a/src/gui/widgets/chattab.h
+++ b/src/gui/widgets/chattab.h
@@ -34,9 +34,6 @@ class ScrollArea;
enum
{
BY_GM,
-#ifdef EATHENA_SUPPORT
- BY_PARTY,
-#endif
BY_PLAYER,
BY_OTHER,
BY_SERVER,
@@ -86,7 +83,7 @@ class ChatTab : public Tab
* @param msg The message text which is to be sent.
*
*/
- void chatLog(std::string &nick, std::string &msg);
+ void chatLog(const std::string &nick, const std::string &msg);
/**
* Determines whether the message is a command or message, then