diff options
author | Jared Adams <jaxad0127@gmail.com> | 2009-03-26 21:35:58 -0600 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-03-26 21:35:58 -0600 |
commit | 2d5d31406ab057abd9417d13ab808f6823b2860b (patch) | |
tree | 363b70f23aa89e3f765e81b9b430924385626f9e /src/gui | |
parent | bf6f383e82add4634c8c091216093596b4587f0d (diff) | |
download | mana-client-2d5d31406ab057abd9417d13ab808f6823b2860b.tar.gz mana-client-2d5d31406ab057abd9417d13ab808f6823b2860b.tar.bz2 mana-client-2d5d31406ab057abd9417d13ab808f6823b2860b.tar.xz mana-client-2d5d31406ab057abd9417d13ab808f6823b2860b.zip |
Add WhisperTabs
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/chat.cpp | 38 | ||||
-rw-r--r-- | src/gui/chat.h | 6 | ||||
-rw-r--r-- | src/gui/widgets/chattab.h | 2 | ||||
-rw-r--r-- | src/gui/widgets/whispertab.cpp | 77 | ||||
-rw-r--r-- | src/gui/widgets/whispertab.h | 54 |
5 files changed, 176 insertions, 1 deletions
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index 8961b704..174285c9 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -29,6 +29,7 @@ #include "sdlinput.h" #include "widgets/tabbedarea.h" +#include "widgets/whispertab.h" #include "../beingmanager.h" #include "../configuration.h" @@ -96,6 +97,7 @@ ChatWindow::~ChatWindow() delete mRecorder; #endif delete_all(mTabs); + delete_all(mWhispers); delete mItemLinkHandler; } @@ -137,6 +139,12 @@ void ChatWindow::widgetResized(const gcn::Event &event) void ChatWindow::logic() { Window::logic(); + + Tab *tab = getFocused(); + if (tab != currentTab) { + currentTab == tab; + adjustTabSize(); + } } void ChatWindow::chatLog(std::string line, int own, std::string channelName, @@ -394,3 +402,33 @@ void ChatWindow::setRecordingFile(const std::string &msg) { mRecorder->setRecordingFile(msg); } + +void ChatWindow::whisper(std::string nick, std::string mes, bool own) +{ + if (mes.length() == 0) return; + std::string playerName = player_node->getName(); + std::string tempNick = nick; + + toLower(playerName); + toLower(tempNick); + + if (tempNick.compare(playerName) == 0) + if (own) + ; + else + return; + + ChatTab *tab = mWhispers[tempNick]; + + if (!tab) + { + tab = new WhisperTab(tempNick); + mWhispers[tempNick] = tab; + mChatTabs->addTab(tab, tab->mScrollArea); + } + + if (own) + tab->chatSend(mes); + else + tab->chatLog(nick, mes); +} diff --git a/src/gui/chat.h b/src/gui/chat.h index 89bb033e..46358268 100644 --- a/src/gui/chat.h +++ b/src/gui/chat.h @@ -45,6 +45,7 @@ class ItemLinkHandler; #ifdef EATHENA_SUPPORT class Network; #endif +class WhisperTab; enum { @@ -227,8 +228,11 @@ class ChatWindow : public Window, void doPresent(); + void whisper(std::string nick, std::string mes, bool own = false); + protected: friend class ChatTab; + friend class WhisperTab; void adjustTabSize(); @@ -249,10 +253,12 @@ class ChatWindow : public Window, /** Tabbed area for holding each channel. */ TabbedArea *mChatTabs; + Tab *currentTab; typedef std::map<const std::string, ChatTab*> TabMap; /** Map each tab to its browser and scroll area. */ TabMap mTabs; + TabMap mWhispers; typedef std::list<std::string> History; typedef History::iterator HistoryIterator; diff --git a/src/gui/widgets/chattab.h b/src/gui/widgets/chattab.h index d102d7a0..9e2aff6b 100644 --- a/src/gui/widgets/chattab.h +++ b/src/gui/widgets/chattab.h @@ -90,7 +90,7 @@ class ChatTab : public Tab protected: friend class ChatWindow; - void sendChat(std::string &msg); + virtual void sendChat(std::string &msg); ScrollArea *mScrollArea; BrowserBox *mTextOutput; diff --git a/src/gui/widgets/whispertab.cpp b/src/gui/widgets/whispertab.cpp new file mode 100644 index 00000000..b67b74f8 --- /dev/null +++ b/src/gui/widgets/whispertab.cpp @@ -0,0 +1,77 @@ +/* + * The Mana World + * Copyright (C) 2008 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program 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. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <guichan/widgets/label.hpp> + +#include "whispertab.h" + +#include "../../beingmanager.h" +#include "../../commandhandler.h" +#include "../../channel.h" +#include "../../configuration.h" +#include "../../game.h" +#include "../../localplayer.h" + +#ifdef TMWSERV_SUPPORT +#include "../../net/tmwserv/chatserver/chatserver.h" +#include "../../net/tmwserv/gameserver/player.h" +#else +#include "../../party.h" +#include "../../net/messageout.h" +#include "../../net/ea/protocol.h" +#endif + +#include "../../resources/iteminfo.h" +#include "../../resources/itemdb.h" + +#include "../../utils/dtor.h" +#include "../../utils/gettext.h" +#include "../../utils/strprintf.h" +#include "../../utils/stringutils.h" + +WhisperTab::WhisperTab(std::string nick) : ChatTab(nick), + mNick(nick) +{ +} + +WhisperTab::~WhisperTab() +{ +} + +void WhisperTab::sendChat(std::string &msg) { + if (msg.length() == 0) { + chatLog(_("Cannot send empty chat!"), BY_SERVER, false); + return; + } + +#ifdef TMWSERV_SUPPORT + Net::ChatServer::privMsg(mNick, msg); +#else + MessageOut outMsg(chatWindow->mNetwork); + outMsg.writeInt16(CMSG_CHAT_WHISPER); + outMsg.writeInt16(msg.length() + 28); + outMsg.writeString(mNick, 24); + outMsg.writeString(msg, msg.length()); +#endif + + chatLog(strprintf(_("%s: %s"), player_node->getName().c_str(), + msg.c_str()), BY_PLAYER, false); +} diff --git a/src/gui/widgets/whispertab.h b/src/gui/widgets/whispertab.h new file mode 100644 index 00000000..66ec2720 --- /dev/null +++ b/src/gui/widgets/whispertab.h @@ -0,0 +1,54 @@ +/* + * The Mana World + * Copyright (C) 2009 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program 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. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef WHISPERTAB_H +#define WHISPERTAB_H + +#include "chattab.h" + +class Channel; + +/** + * A tab for whispers from a single nick. + */ +class WhisperTab : public ChatTab +{ + public: + /** + * Constructor. + */ + WhisperTab(std::string nick); + + /** + * Destructor. + */ + ~WhisperTab(); + + std::string getNick() { return mNick; } + + protected: + void sendChat(std::string &msg); + + private: + std::string mNick; +}; + +#endif // CHANNELTAB_H |