diff options
author | Jared Adams <jaxad0127@gmail.com> | 2009-03-26 23:04:14 -0600 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-03-26 23:04:14 -0600 |
commit | e64b5a25a54f56bc836af57223e37449a1daffe8 (patch) | |
tree | f14f80a0bdc5268a2c4e2c70b6afcac080242ac5 | |
parent | e03bd01fa02da71d41b85d3710a971da5a9c6c32 (diff) | |
download | mana-e64b5a25a54f56bc836af57223e37449a1daffe8.tar.gz mana-e64b5a25a54f56bc836af57223e37449a1daffe8.tar.bz2 mana-e64b5a25a54f56bc836af57223e37449a1daffe8.tar.xz mana-e64b5a25a54f56bc836af57223e37449a1daffe8.zip |
Major clean up of ChatTab handling
ChatTabs now manage their own adding/removal from the chat window, which
lost most of it's chat related messages. Whisper handling is stil done
by the ChatWindow, but it no longer manages any other tabs. ChannelTab
handling is now the sole responsability of the Channels they are
attached to. The general tab is handled by Game.
30 files changed, 291 insertions, 328 deletions
diff --git a/src/channel.cpp b/src/channel.cpp index 0cd850a9..3e4646fb 100644 --- a/src/channel.cpp +++ b/src/channel.cpp @@ -34,7 +34,12 @@ Channel::Channel(short id, const std::string &announcement) : mId(id), mName(name), - mAnnouncement(announcement) + mAnnouncement(announcement), + mTab(new ChannelTab(this)) { +} +Channel::~Channel() +{ + delete mTab; } diff --git a/src/channel.h b/src/channel.h index d9f72c12..b2080d4a 100644 --- a/src/channel.h +++ b/src/channel.h @@ -40,6 +40,8 @@ class Channel const std::string &name, const std::string &announcement = std::string()); + ~Channel(); + /** * Get the id associated witht his channel */ diff --git a/src/commandhandler.cpp b/src/commandhandler.cpp index 833ce718..f875fd85 100644 --- a/src/commandhandler.cpp +++ b/src/commandhandler.cpp @@ -27,6 +27,7 @@ #include "localplayer.h" #include "gui/widgets/channeltab.h" +#include "gui/widgets/chattab.h" #include "gui/chat.h" #ifdef TMWSERV_SUPPORT @@ -132,7 +133,7 @@ void CommandHandler::handleCommand(const std::string &command) } else { - chatWindow->chatLog("Unknown command"); + localChatTab->chatLog("Unknown command"); } } @@ -152,106 +153,106 @@ void CommandHandler::handleHelp(const std::string &args) { if (args == "") { - chatWindow->chatLog(_("-- Help --")); - chatWindow->chatLog(_("/help > Display this help.")); + localChatTab->chatLog(_("-- Help --")); + localChatTab->chatLog(_("/help > Display this help.")); - chatWindow->chatLog(_("/where > Display map name")); - chatWindow->chatLog(_("/who > Display number of online users")); - chatWindow->chatLog(_("/me > Tell something about yourself")); + localChatTab->chatLog(_("/where > Display map name")); + localChatTab->chatLog(_("/who > Display number of online users")); + localChatTab->chatLog(_("/me > Tell something about yourself")); - chatWindow->chatLog(_("/msg > Send a private message to a user")); - chatWindow->chatLog(_("/whisper > Alias of msg")); - chatWindow->chatLog(_("/w > Alias of msg")); + localChatTab->chatLog(_("/msg > Send a private message to a user")); + localChatTab->chatLog(_("/whisper > Alias of msg")); + localChatTab->chatLog(_("/w > Alias of msg")); #ifdef TMWSERV_SUPPORT - chatWindow->chatLog(_("/list > Display all public channels")); - chatWindow->chatLog(_("/users > Lists the users in the current channel")); - chatWindow->chatLog(_("/join > Join or create a channel")); - chatWindow->chatLog(_("/topic > Set the topic of the current channel")); - chatWindow->chatLog(_("/quit > Leave a channel")); - chatWindow->chatLog(_("/clear > Clears this window")); - chatWindow->chatLog(_("/op > Make a user a channel operator")); - chatWindow->chatLog(_("/kick > Kick a user from the channel")); - - chatWindow->chatLog(_("/party > Invite a user to party")); + localChatTab->chatLog(_("/list > Display all public channels")); + localChatTab->chatLog(_("/users > Lists the users in the current channel")); + localChatTab->chatLog(_("/join > Join or create a channel")); + localChatTab->chatLog(_("/topic > Set the topic of the current channel")); + localChatTab->chatLog(_("/quit > Leave a channel")); + localChatTab->chatLog(_("/clear > Clears this window")); + localChatTab->chatLog(_("/op > Make a user a channel operator")); + localChatTab->chatLog(_("/kick > Kick a user from the channel")); + + localChatTab->chatLog(_("/party > Invite a user to party")); #else - chatWindow->chatLog(_("/party > Party-related commands")); + localChatTab->chatLog(_("/party > Party-related commands")); #endif - chatWindow->chatLog(_("/record > Start recording the chat to an external file")); - chatWindow->chatLog(_("/toggle > Determine whether <return> toggles the chat log")); - chatWindow->chatLog(_("/present > Get list of players present (sent to chat log, if logging)")); + localChatTab->chatLog(_("/record > Start recording the chat to an external file")); + localChatTab->chatLog(_("/toggle > Determine whether <return> toggles the chat log")); + localChatTab->chatLog(_("/present > Get list of players present (sent to chat log, if logging)")); - chatWindow->chatLog(_("/announce > Global announcement (GM only)")); + localChatTab->chatLog(_("/announce > Global announcement (GM only)")); - chatWindow->chatLog(_("For more information, type /help <command>")); + localChatTab->chatLog(_("For more information, type /help <command>")); } else if (args == "announce") { - chatWindow->chatLog(_("Command: /announce <msg>")); - chatWindow->chatLog(_("*** only available to a GM ***")); - chatWindow->chatLog(_("This command sends the message <msg> to " + localChatTab->chatLog(_("Command: /announce <msg>")); + localChatTab->chatLog(_("*** only available to a GM ***")); + localChatTab->chatLog(_("This command sends the message <msg> to " "all players currently online.")); } else if (args == "clear") { - chatWindow->chatLog(_("Command: /clear")); - chatWindow->chatLog(_("This command clears the chat log of previous chat.")); + localChatTab->chatLog(_("Command: /clear")); + localChatTab->chatLog(_("This command clears the chat log of previous chat.")); } else if (args == "help") { - chatWindow->chatLog(_("Command: /help")); - chatWindow->chatLog(_("This command displays a list of all commands available.")); - chatWindow->chatLog(_("Command: /help <command>")); - chatWindow->chatLog(_("This command displays help on <command>.")); + localChatTab->chatLog(_("Command: /help")); + localChatTab->chatLog(_("This command displays a list of all commands available.")); + localChatTab->chatLog(_("Command: /help <command>")); + localChatTab->chatLog(_("This command displays help on <command>.")); } else if (args == "join") { - chatWindow->chatLog(_("Command: /join <channel>")); - chatWindow->chatLog(_("This command makes you enter <channel>.")); - chatWindow->chatLog(_("If <channel> doesn't exist, it's created.")); + localChatTab->chatLog(_("Command: /join <channel>")); + localChatTab->chatLog(_("This command makes you enter <channel>.")); + localChatTab->chatLog(_("If <channel> doesn't exist, it's created.")); } else if (args == "kick") { - chatWindow->chatLog(_("Command: /kick <nick>")); - chatWindow->chatLog(_("This command makes <nick> leave the channel.")); - chatWindow->chatLog(_("If the <nick> has spaces in it, enclose it in " + localChatTab->chatLog(_("Command: /kick <nick>")); + localChatTab->chatLog(_("This command makes <nick> leave the channel.")); + localChatTab->chatLog(_("If the <nick> has spaces in it, enclose it in " "double quotes (\").")); } else if (args == "list") { - chatWindow->chatLog(_("Command: /list")); - chatWindow->chatLog(_("This command shows a list of all channels.")); + localChatTab->chatLog(_("Command: /list")); + localChatTab->chatLog(_("This command shows a list of all channels.")); } else if (args == "me") { - chatWindow->chatLog(_("Command: /me <message>")); - chatWindow->chatLog(_("This command tell others you are (doing) <msg>.")); + localChatTab->chatLog(_("Command: /me <message>")); + localChatTab->chatLog(_("This command tell others you are (doing) <msg>.")); } else if (args == "msg" || args == "whisper" || args == "w") { - chatWindow->chatLog(_("Command: /msg <nick> <message>")); - chatWindow->chatLog(_("Command: /whisper <nick> <message>")); - chatWindow->chatLog(_("Command: /w <nick> <message>")); - chatWindow->chatLog(_("This command sends the text <message> to <nick>.")); - chatWindow->chatLog(_("If the <nick> has spaces in it, enclose it in " + localChatTab->chatLog(_("Command: /msg <nick> <message>")); + localChatTab->chatLog(_("Command: /whisper <nick> <message>")); + localChatTab->chatLog(_("Command: /w <nick> <message>")); + localChatTab->chatLog(_("This command sends the text <message> to <nick>.")); + localChatTab->chatLog(_("If the <nick> has spaces in it, enclose it in " "double quotes (\").")); } else if (args == "op") { - chatWindow->chatLog(_("Command: /op <nick>")); - chatWindow->chatLog(_("This command makes <nick> a channel operator.")); - chatWindow->chatLog(_("If the <nick> has spaces in it, enclose it in " + localChatTab->chatLog(_("Command: /op <nick>")); + localChatTab->chatLog(_("This command makes <nick> a channel operator.")); + localChatTab->chatLog(_("If the <nick> has spaces in it, enclose it in " "double quotes (\").")); - chatWindow->chatLog(_("Channel operators can kick and op other users " + localChatTab->chatLog(_("Channel operators can kick and op other users " "from the channel.")); } #ifdef TMWSERV_SUPPORT else if (args == "party") { - chatWindow->chatLog(_("Command: /party <nick>")); - chatWindow->chatLog(_("This command invites <nick> to party with you.")); - chatWindow->chatLog(_("If the <nick> has spaces in it, enclose it in " + localChatTab->chatLog(_("Command: /party <nick>")); + localChatTab->chatLog(_("This command invites <nick> to party with you.")); + localChatTab->chatLog(_("If the <nick> has spaces in it, enclose it in " "double quotes (\").")); #else else if (args.substr(0, 5) == "party") @@ -261,68 +262,68 @@ void CommandHandler::handleHelp(const std::string &args) } else if (args == "present") { - chatWindow->chatLog(_("Command: /present")); - chatWindow->chatLog(_("This command gets a list of players within hearing and " + localChatTab->chatLog(_("Command: /present")); + localChatTab->chatLog(_("This command gets a list of players within hearing and " "sends it to either the record log if recording, or the chat " "log otherwise.")); } else if (args == "quit") { - chatWindow->chatLog(_("Command: /quit")); - chatWindow->chatLog(_("This command leaves the current channel.")); - chatWindow->chatLog(_("If you're the last person in the channel, it will be deleted.")); + localChatTab->chatLog(_("Command: /quit")); + localChatTab->chatLog(_("This command leaves the current channel.")); + localChatTab->chatLog(_("If you're the last person in the channel, it will be deleted.")); } else if (args == "record") { - chatWindow->chatLog(_("Command: /record <filename>")); - chatWindow->chatLog(_("This command starts recording the chat log to the file " + localChatTab->chatLog(_("Command: /record <filename>")); + localChatTab->chatLog(_("This command starts recording the chat log to the file " "<filename>.")); - chatWindow->chatLog(_("Command: /record")); - chatWindow->chatLog(_("This command finishes a recording session.")); + localChatTab->chatLog(_("Command: /record")); + localChatTab->chatLog(_("This command finishes a recording session.")); } else if (args == "toggle") { - chatWindow->chatLog(_("Command: /toggle <state>")); - chatWindow->chatLog(_("This command sets whether the return key should toggle the " + localChatTab->chatLog(_("Command: /toggle <state>")); + localChatTab->chatLog(_("This command sets whether the return key should toggle the " "chat log, or whether the chat log turns off automatically.")); - chatWindow->chatLog(_("<state> can be one of \"1\", \"yes\", \"true\" to " + localChatTab->chatLog(_("<state> can be one of \"1\", \"yes\", \"true\" to " "turn the toggle on, or \"0\", \"no\", \"false\" to turn the " "toggle off.")); - chatWindow->chatLog(_("Command: /toggle")); - chatWindow->chatLog(_("This command displays the return toggle status.")); + localChatTab->chatLog(_("Command: /toggle")); + localChatTab->chatLog(_("This command displays the return toggle status.")); } else if (args == "topic") { - chatWindow->chatLog(_("Command: /topic <message>")); - chatWindow->chatLog(_("This command sets the topic to <message>.")); + localChatTab->chatLog(_("Command: /topic <message>")); + localChatTab->chatLog(_("This command sets the topic to <message>.")); } else if (args == "users") { - chatWindow->chatLog(_("Command: /users <channel>")); - chatWindow->chatLog(_("This command shows the users in <channel>.")); + localChatTab->chatLog(_("Command: /users <channel>")); + localChatTab->chatLog(_("This command shows the users in <channel>.")); } else if (args == "where") { - chatWindow->chatLog(_("Command: /where")); - chatWindow->chatLog(_("This command displays the name of the current map.")); + localChatTab->chatLog(_("Command: /where")); + localChatTab->chatLog(_("This command displays the name of the current map.")); } else if (args == "who") { - chatWindow->chatLog(_("Command: /who")); - chatWindow->chatLog(_("This command displays the number of players currently " + localChatTab->chatLog(_("Command: /who")); + localChatTab->chatLog(_("This command displays the number of players currently " "online.")); } else { - chatWindow->chatLog(_("Unknown command.")); - chatWindow->chatLog(_("Type /help for a list of commands.")); + localChatTab->chatLog(_("Unknown command.")); + localChatTab->chatLog(_("Type /help for a list of commands.")); } } void CommandHandler::handleWhere() { // TODO: add position - chatWindow->chatLog(map_path, BY_SERVER); + localChatTab->chatLog(map_path, BY_SERVER); } void CommandHandler::handleWho() @@ -386,7 +387,7 @@ void CommandHandler::handleMsg(const std::string &args) chatWindow->whisper(recvnick, msg, true); } else - chatWindow->chatLog("Cannont send empty whispers!"); + localChatTab->chatLog("Cannont send empty whispers!"); #endif } @@ -402,7 +403,7 @@ void CommandHandler::handleJoin(const std::string &args) std::string::size_type pos = args.find(' '); std::string name(args, 0, pos); std::string password(args, pos+1); - chatWindow->chatLog("Requesting to join channel " + name); + localChatTab->chatLog("Requesting to join channel " + name); Net::ChatServer::enterChannel(name, password); } @@ -426,7 +427,7 @@ void CommandHandler::handleTopic(const std::string &args) } else { - chatWindow->chatLog("Unable to set this channel's topic", BY_CHANNEL); + localChatTab->chatLog("Unable to set this channel's topic", BY_CHANNEL); } } @@ -440,7 +441,7 @@ void CommandHandler::handleQuit() } else { - chatWindow->chatLog("Unable to quit this channel", BY_CHANNEL); + localChatTab->chatLog("Unable to quit this channel", BY_CHANNEL); } } @@ -458,7 +459,7 @@ void CommandHandler::handleOp(const std::string &args) } else { - chatWindow->chatLog("Unable to set this user's mode", BY_CHANNEL); + localChatTab->chatLog("Unable to set this user's mode", BY_CHANNEL); } } @@ -475,7 +476,7 @@ void CommandHandler::handleKick(const std::string &args) } else { - chatWindow->chatLog("Unable to kick user", BY_CHANNEL); + localChatTab->chatLog("Unable to kick user", BY_CHANNEL); } } @@ -491,7 +492,7 @@ void CommandHandler::handleParty(const std::string &args) #else if (args.empty()) { - chatWindow->chatLog(_("Unknown party command... Type \"/help\" party for more " + localChatTab->chatLog(_("Unknown party command... Type \"/help\" party for more " "information."), BY_SERVER); return; } @@ -516,22 +517,22 @@ void CommandHandler::handleParty(const std::string &args) { char temp[2] = "."; *temp = chatWindow->getPartyPrefix(); - chatWindow->chatLog(_("The current party prefix is ") + std::string(temp)); + localChatTab->chatLog(_("The current party prefix is ") + std::string(temp)); } else if (rest.length() != 1) { - chatWindow->chatLog(_("Party prefix must be one character long.")); + localChatTab->chatLog(_("Party prefix must be one character long.")); } else { if (rest == "/") { - chatWindow->chatLog(_("Cannot use a '/' as the prefix.")); + localChatTab->chatLog(_("Cannot use a '/' as the prefix.")); } else { chatWindow->setPartyPrefix(rest.at(0)); - chatWindow->chatLog(_("Changing prefix to ") + rest); + localChatTab->chatLog(_("Changing prefix to ") + rest); } } } @@ -558,7 +559,7 @@ void CommandHandler::handleToggle(const std::string &args) { if (args.empty()) { - chatWindow->chatLog(chatWindow->getReturnTogglesChat() ? + localChatTab->chatLog(chatWindow->getReturnTogglesChat() ? _("Return toggles chat.") : _("Message closes chat.")); return; } @@ -569,7 +570,7 @@ void CommandHandler::handleToggle(const std::string &args) opt == "y" || opt == "Y" || opt == "t" || opt == "T") { - chatWindow->chatLog(_("Return now toggles chat.")); + localChatTab->chatLog(_("Return now toggles chat.")); chatWindow->setReturnTogglesChat(true); return; } @@ -577,12 +578,12 @@ void CommandHandler::handleToggle(const std::string &args) opt == "n" || opt == "N" || opt == "f" || opt == "F") { - chatWindow->chatLog(_("Message now closes chat.")); + localChatTab->chatLog(_("Message now closes chat.")); chatWindow->setReturnTogglesChat(false); return; } else - chatWindow->chatLog(_("Options to /toggle are \"yes\", \"no\", \"true\", " + localChatTab->chatLog(_("Options to /toggle are \"yes\", \"no\", \"true\", " "\"false\", \"1\", \"0\".")); } diff --git a/src/game.cpp b/src/game.cpp index d45387fd..91d8fa3a 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -181,6 +181,7 @@ CommandHandler *commandHandler = NULL; Particle *particleEngine = NULL; EffectManager *effectManager = NULL; +ChatTab *localChatTab = NULL; #ifdef EATHENA_SUPPORT Party *playerParty = NULL; #endif @@ -287,7 +288,7 @@ void createGuiWindows(Network *network) emoteShortcutWindow = new ShortcutWindow("emoteShortcut", new EmoteShortcutContainer); - chatWindow->addTab(new ChatTab(std::string("General"))); + localChatTab = new ChatTab(_("General")); // Set initial window visibility chatWindow->setVisible((bool) config.getValue( @@ -330,6 +331,7 @@ void createGuiWindows(Network *network) void destroyGuiWindows() { logger->setChatWindow(NULL); + delete localChatTab; // Need to do this first, so it can remove itself delete chatWindow; delete statusWindow; delete miniStatusWindow; @@ -540,11 +542,11 @@ static bool saveScreenshot() { std::stringstream chatlogentry; chatlogentry << _("Screenshot saved to ~/") << filenameSuffix.str(); - chatWindow->chatLog(chatlogentry.str(), BY_SERVER); + localChatTab->chatLog(chatlogentry.str(), BY_SERVER); } else { - chatWindow->chatLog(_("Saving screenshot failed!"), BY_SERVER); + localChatTab->chatLog(_("Saving screenshot failed!"), BY_SERVER); logger->log("Error: could not save screenshot."); } @@ -936,16 +938,16 @@ void Game::handleInput() unsigned int deflt = player_relations.getDefault(); if (deflt & PlayerRelation::TRADE) { - chatWindow->chatLog( - _("Ignoring incoming trade requests"), - BY_SERVER); + localChatTab->chatLog( + _("Ignoring incoming trade requests"), + BY_SERVER); deflt &= ~PlayerRelation::TRADE; } else { - chatWindow->chatLog( - _("Accepting incoming trade requests"), - BY_SERVER); + localChatTab->chatLog( + _("Accepting incoming trade requests"), + BY_SERVER); deflt |= PlayerRelation::TRADE; } diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index 174285c9..8baf702e 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -96,7 +96,6 @@ ChatWindow::~ChatWindow() config.setValue("ReturnToggles", mReturnToggles ? "1" : "0"); delete mRecorder; #endif - delete_all(mTabs); delete_all(mWhispers); delete mItemLinkHandler; } @@ -147,22 +146,6 @@ void ChatWindow::logic() } } -void ChatWindow::chatLog(std::string line, int own, std::string channelName, - bool ignoreRecord) -{ - ChatTab *tab; - if(!channelName.empty()) - tab = findTab(channelName); - else -#ifdef TMWSERV_SUPPORT - tab = getFocused(); -#else - tab = findTab("General"); -#endif - - tab->chatLog(line, own, ignoreRecord); -} - ChatTab* ChatWindow::getFocused() const { return dynamic_cast<ChatTab*>(mChatTabs->getSelectedTab()); @@ -173,11 +156,6 @@ void ChatWindow::clearTab(ChatTab* tab) if (tab) tab->clearText(); } -void ChatWindow::clearTab(const std::string &tab) -{ - clearTab(findTab(tab)); -} - void ChatWindow::clearTab() { clearTab(getFocused()); @@ -249,33 +227,21 @@ bool ChatWindow::isInputFocused() return mChatInput->isFocused(); } -ChatTab* ChatWindow::findTab(const std::string &tabName) -{ - return mTabs[tabName]; -} - void ChatWindow::removeTab(ChatTab *tab) { - mTabs.erase(tab->getCaption()); - mChatTabs->removeTab(tab); -} - -void ChatWindow::removeTab(const std::string &tabName) -{ - ChatTab *tab = findTab(tabName); - if (tab) removeTab(tab); + // Prevent removal of the local chat tab + if (tab != localChatTab) mChatTabs->removeTab(tab); } void ChatWindow::addTab(ChatTab *tab) { // Make sure we don't end up with duplicates in the gui - removeTab(tab->getCaption()); - - mTabs[tab->getCaption()] = tab; + // TODO mChatTabs->addTab(tab, tab->mScrollArea); - if (mTabs.size() == 1) + // Fix for layout issues when adding the first tab + if (tab == localChatTab) adjustTabSize(); // Update UI @@ -322,11 +288,12 @@ void ChatWindow::doPresent() mRecorder->record(timeStr.str() + _("Present: ") + response + "."); - chatLog(_("Attendance written to record log."), BY_SERVER, std::string(), true); + localChatTab->chatLog(_("Attendance written to record log."), + BY_SERVER, true); } else { - chatLog(_("Present: ") + response, BY_SERVER); + localChatTab->chatLog(_("Present: ") + response, BY_SERVER); } } @@ -392,12 +359,6 @@ void ChatWindow::setVisible(bool isVisible) mTmpVisible = false; } -bool ChatWindow::tabExists(const std::string &tabName) -{ - Tab *tab = mChatTabs->getTab(tabName); - return tab != 0; -} - void ChatWindow::setRecordingFile(const std::string &msg) { mRecorder->setRecordingFile(msg); @@ -424,7 +385,6 @@ void ChatWindow::whisper(std::string nick, std::string mes, bool own) { tab = new WhisperTab(tempNick); mWhispers[tempNick] = tab; - mChatTabs->addTab(tab, tab->mScrollArea); } if (own) diff --git a/src/gui/chat.h b/src/gui/chat.h index 46358268..736f9284 100644 --- a/src/gui/chat.h +++ b/src/gui/chat.h @@ -47,21 +47,6 @@ class Network; #endif class WhisperTab; -enum -{ - BY_GM, -#ifdef EATHENA_SUPPORT - BY_PARTY, -#endif - BY_PLAYER, - BY_OTHER, - BY_SERVER, - BY_CHANNEL, - ACT_WHISPER, // getting whispered at - ACT_IS, // equivalent to "/me" on IRC - BY_LOGGER -}; - /** * gets in between usernick and message text depending on * message type @@ -119,29 +104,11 @@ class ChatWindow : public Window, void resetToDefaultSize(); /** - * Adds a line of text to our message list. Parameters: - * - * @param line Text message. - * @param own Type of message (usually the owner-type). - * @param channelName which channel to send the message to. - * @param ignoreRecord should this not be recorded? - */ - void chatLog(std::string line, - int own = BY_SERVER, - std::string channelName = "", - bool ignoreRecord = false); - - /** * Gets the focused tab. */ ChatTab* getFocused() const; /** - * Clear the tab with the given name. - */ - void clearTab(const std::string &tab); - - /** * Clear the given tab. */ void clearTab(ChatTab* tab); @@ -169,16 +136,6 @@ class ChatWindow : public Window, */ bool isInputFocused(); - ChatTab* findTab(const std::string &tabName); - - /** Remove the given tab from the window */ - void removeTab(ChatTab *tab); - - void removeTab(const std::string &tabName); - - /** Add the tab to the window */ - void addTab(ChatTab *tab); - /** * Passes the text to the current tab as input * @@ -199,9 +156,6 @@ class ChatWindow : public Window, /** Override to reset mTmpVisible */ void setVisible(bool visible); - /** Check if tab with that name already exists */ - bool tabExists(const std::string &tabName); - /** * Scrolls the chat window * @@ -234,6 +188,12 @@ class ChatWindow : public Window, friend class ChatTab; friend class WhisperTab; + /** Remove the given tab from the window */ + void removeTab(ChatTab *tab); + + /** Add the tab to the window */ + void addTab(ChatTab *tab); + void adjustTabSize(); #ifdef EATHENA_SUPPORT @@ -256,8 +216,7 @@ class ChatWindow : public Window, Tab *currentTab; typedef std::map<const std::string, ChatTab*> TabMap; - /** Map each tab to its browser and scroll area. */ - TabMap mTabs; + /** Manage whisper tabs */ TabMap mWhispers; typedef std::list<std::string> History; diff --git a/src/gui/guildwindow.cpp b/src/gui/guildwindow.cpp index 263b8181..c8a1872f 100644 --- a/src/gui/guildwindow.cpp +++ b/src/gui/guildwindow.cpp @@ -127,7 +127,7 @@ void GuildWindow::action(const gcn::ActionEvent &event) if (guild) { Net::ChatServer::Guild::quitGuild(guild); - chatWindow->chatLog("Guild " + mGuildTabs->getSelectedTab()->getCaption() + " quit", BY_SERVER); + localChatTab->chatLog("Guild " + mGuildTabs->getSelectedTab()->getCaption() + " quit", BY_SERVER); } } else if (eventId == "CREATE_GUILD_OK") @@ -143,7 +143,7 @@ void GuildWindow::action(const gcn::ActionEvent &event) // Defocus dialog mFocus = false; - chatWindow->chatLog("Creating Guild called " + name, BY_SERVER); + localChatTab->chatLog("Creating Guild called " + name, BY_SERVER); guildDialog->scheduleDelete(); } else if (eventId == "INVITE_USER_OK") @@ -156,7 +156,7 @@ void GuildWindow::action(const gcn::ActionEvent &event) // Defocus dialog mFocus = false; - chatWindow->chatLog("Invited user " + name, BY_SERVER); + localChatTab->chatLog("Invited user " + name, BY_SERVER); inviteDialog->scheduleDelete(); } else if (eventId == "yes") @@ -233,7 +233,7 @@ void GuildWindow::openAcceptDialog(const std::string &inviterName, const std::string &guildName) { std::string msg = inviterName + " has invited you to join the guild " + guildName; - chatWindow->chatLog(msg, BY_SERVER); + localChatTab->chatLog(msg, BY_SERVER); acceptDialog = new ConfirmDialog("Accept Guild Invite", msg, this); acceptDialog->addActionListener(this); diff --git a/src/gui/npcpostdialog.cpp b/src/gui/npcpostdialog.cpp index 9bda8a4c..278bc397 100644 --- a/src/gui/npcpostdialog.cpp +++ b/src/gui/npcpostdialog.cpp @@ -78,7 +78,7 @@ void NpcPostDialog::action(const gcn::ActionEvent &event) { if (mSender->getText().empty() || mText->getText().empty()) { - chatWindow->chatLog("Failed to send as sender or letter invalid"); + localChatTab->chatLog("Failed to send as sender or letter invalid"); } else { diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp index ae2a5196..3f857b5c 100644 --- a/src/gui/partywindow.cpp +++ b/src/gui/partywindow.cpp @@ -111,14 +111,14 @@ 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", + localChatTab->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); + localChatTab->chatLog(msg, BY_SERVER); // show invite acceptDialog = new ConfirmDialog("Accept Party Invite", msg, this); @@ -134,7 +134,7 @@ void PartyWindow::action(const gcn::ActionEvent &event) // check if they accepted the invite if (eventId == "yes") { - chatWindow->chatLog("Accepted invite from " + mPartyInviter); + localChatTab->chatLog("Accepted invite from " + mPartyInviter); Net::ChatServer::Party::acceptInvite(mPartyInviter); mPartyInviter = ""; } diff --git a/src/gui/recorder.cpp b/src/gui/recorder.cpp index 0536188c..4f919bef 100644 --- a/src/gui/recorder.cpp +++ b/src/gui/recorder.cpp @@ -26,6 +26,7 @@ #include "recorder.h" #include "windowcontainer.h" +#include "widgets/chattab.h" #include "widgets/layout.h" #include "../utils/stringutils.h" @@ -82,16 +83,16 @@ void Recorder::setRecordingFile(const std::string &msg) * Message should go after mStream is closed so that it isn't * recorded. */ - mChat->chatLog(_("Finishing recording."), BY_SERVER); + localChatTab->chatLog(_("Finishing recording."), BY_SERVER); } else { - mChat->chatLog(_("Not currently recording."), BY_SERVER); + localChatTab->chatLog(_("Not currently recording."), BY_SERVER); } } else if (mStream.is_open()) { - mChat->chatLog(_("Already recording."), BY_SERVER); + localChatTab->chatLog(_("Already recording."), BY_SERVER); } else { @@ -99,7 +100,7 @@ void Recorder::setRecordingFile(const std::string &msg) * Message should go before mStream is opened so that it isn't * recorded. */ - mChat->chatLog(_("Starting to record..."), BY_SERVER); + localChatTab->chatLog(_("Starting to record..."), BY_SERVER); const std::string file = std::string(PHYSFS_getUserDir()) + "/.tmw/" + msgCopy; @@ -108,7 +109,7 @@ void Recorder::setRecordingFile(const std::string &msg) if (mStream.is_open()) setVisible(true); else - mChat->chatLog(_("Failed to start recording."), BY_SERVER); + localChatTab->chatLog(_("Failed to start recording."), BY_SERVER); } } diff --git a/src/gui/trade.cpp b/src/gui/trade.cpp index a95e1d43..2d80d12d 100644 --- a/src/gui/trade.cpp +++ b/src/gui/trade.cpp @@ -309,7 +309,7 @@ void TradeWindow::action(const gcn::ActionEvent &event) if (mMyInventory->contains(item)) { - chatWindow->chatLog(_("Failed adding item. You can not " + localChatTab->chatLog(_("Failed adding item. You can not " "overlap one kind of item on the window."), BY_SERVER); return; diff --git a/src/gui/widgets/channeltab.h b/src/gui/widgets/channeltab.h index 149eb5ec..91b4f7c6 100644 --- a/src/gui/widgets/channeltab.h +++ b/src/gui/widgets/channeltab.h @@ -32,6 +32,12 @@ class Channel; class ChannelTab : public ChatTab { public: + + Channel *getChannel() { return mChannel; } + + protected: + friend class Channel; + /** * Constructor. */ @@ -42,9 +48,6 @@ class ChannelTab : public ChatTab */ ~ChannelTab(); - Channel *getChannel() { return mChannel; } - - protected: void sendChat(std::string &msg); private: diff --git a/src/gui/widgets/chattab.cpp b/src/gui/widgets/chattab.cpp index ff856361..120d4e21 100644 --- a/src/gui/widgets/chattab.cpp +++ b/src/gui/widgets/chattab.cpp @@ -62,15 +62,23 @@ ChatTab::ChatTab(const std::string &name) : Tab() gcn::ScrollArea::SHOW_ALWAYS); mScrollArea->setScrollAmount(0, 1); mScrollArea->setOpaque(false); + + chatWindow->addTab(this); } ChatTab::~ChatTab() { + chatWindow->removeTab(this); delete mTextOutput; delete mScrollArea; } -void ChatTab::chatLog(std::string line, int own, bool ignoreRecord) +void ChatTab::chatLog(const char* line, int own, bool ignoreRecord) +{ + chatLog(std::string(line), own, ignoreRecord); +} + +void ChatTab::chatLog(std::string line, int own, bool ignoreRecord) { // Trim whitespace trim(line); diff --git a/src/gui/widgets/chattab.h b/src/gui/widgets/chattab.h index 9e2aff6b..a478abeb 100644 --- a/src/gui/widgets/chattab.h +++ b/src/gui/widgets/chattab.h @@ -32,6 +32,21 @@ class BrowserBox; class Recorder; class ScrollArea; +enum +{ + BY_GM, +#ifdef EATHENA_SUPPORT + BY_PARTY, +#endif + BY_PLAYER, + BY_OTHER, + BY_SERVER, + BY_CHANNEL, + ACT_WHISPER, // getting whispered at + ACT_IS, // equivalent to "/me" on IRC + BY_LOGGER +}; + /** * A tab for the chat window. This is special to ease chat handling. */ @@ -56,7 +71,8 @@ class ChatTab : public Tab * @param channelName which channel to send the message to. * @param ignoreRecord should this not be recorded? */ - void chatLog(std::string line, int own, bool ignoreRecord); + void chatLog(std::string line, int own = BY_SERVER, bool ignoreRecord = false); + void chatLog(const char* line, int own = BY_SERVER, bool ignoreRecord = false); /** * Adds the text to the message list @@ -97,4 +113,6 @@ class ChatTab : public Tab //Recorder *mRecorder; }; +extern ChatTab *localChatTab; + #endif // CHATTAB_H diff --git a/src/gui/widgets/whispertab.h b/src/gui/widgets/whispertab.h index 66ec2720..059346fa 100644 --- a/src/gui/widgets/whispertab.h +++ b/src/gui/widgets/whispertab.h @@ -32,6 +32,11 @@ class Channel; class WhisperTab : public ChatTab { public: + std::string getNick() { return mNick; } + + protected: + friend class ChatWindow; + /** * Constructor. */ @@ -42,9 +47,6 @@ class WhisperTab : public ChatTab */ ~WhisperTab(); - std::string getNick() { return mNick; } - - protected: void sendChat(std::string &msg); private: diff --git a/src/log.cpp b/src/log.cpp index b0024f80..75b015da 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -103,7 +103,7 @@ void Logger::log(const char *log_text, ...) if (mChatWindow) { - mChatWindow->chatLog(buf, BY_LOGGER); + localChatTab->chatLog(buf, BY_LOGGER); } // Delete temporary buffer diff --git a/src/net/ea/buysellhandler.cpp b/src/net/ea/buysellhandler.cpp index 8dbc2953..d60cb0e2 100644 --- a/src/net/ea/buysellhandler.cpp +++ b/src/net/ea/buysellhandler.cpp @@ -105,7 +105,7 @@ void BuySellHandler::handleMessage(MessageIn &msg) } else { - chatWindow->chatLog(_("Nothing to sell"), BY_SERVER); + localChatTab->chatLog(_("Nothing to sell"), BY_SERVER); current_npc = 0; } break; @@ -113,22 +113,22 @@ void BuySellHandler::handleMessage(MessageIn &msg) case SMSG_NPC_BUY_RESPONSE: if (msg.readInt8() == 0) { - chatWindow->chatLog(_("Thanks for buying"), BY_SERVER); + localChatTab->chatLog(_("Thanks for buying"), BY_SERVER); } else { // Reset player money since buy dialog already assumed purchase // would go fine buyDialog->setMoney(player_node->getMoney()); - chatWindow->chatLog(_("Unable to buy"), BY_SERVER); + localChatTab->chatLog(_("Unable to buy"), BY_SERVER); } break; case SMSG_NPC_SELL_RESPONSE: if (msg.readInt8() == 0) - chatWindow->chatLog(_("Thanks for selling"), BY_SERVER); + localChatTab->chatLog(_("Thanks for selling"), BY_SERVER); else - chatWindow->chatLog(_("Unable to sell"), BY_SERVER); + localChatTab->chatLog(_("Unable to sell"), BY_SERVER); break; } diff --git a/src/net/ea/chathandler.cpp b/src/net/ea/chathandler.cpp index aaf56555..c4743ff2 100644 --- a/src/net/ea/chathandler.cpp +++ b/src/net/ea/chathandler.cpp @@ -69,13 +69,13 @@ void ChatHandler::handleMessage(MessageIn &msg) { case 0x00: // comment out since we'll local echo in chat.cpp instead, then only report failures - //chatWindow->chatLog("Whisper sent", BY_SERVER); + //localChatTab->chatLog("Whisper sent", BY_SERVER); break; case 0x01: - chatWindow->chatLog(_("Whisper could not be sent, user is offline"), BY_SERVER); + localChatTab->chatLog(_("Whisper could not be sent, user is offline"), BY_SERVER); break; case 0x02: - chatWindow->chatLog(_("Whisper could not be sent, ignored by user"), BY_SERVER); + localChatTab->chatLog(_("Whisper could not be sent, ignored by user"), BY_SERVER); break; } break; @@ -94,7 +94,7 @@ void ChatHandler::handleMessage(MessageIn &msg) if (player_relations.hasPermission(nick, PlayerRelation::WHISPER)) chatWindow->whisper(nick, chatMsg); else - chatWindow->chatLog(chatMsg, BY_SERVER); + localChatTab->chatLog(chatMsg, BY_SERVER); break; @@ -118,7 +118,7 @@ void ChatHandler::handleMessage(MessageIn &msg) // We use getIgnorePlayer instead of ignoringPlayer here because ignorePlayer' side // effects are triggered right below for Being::IGNORE_SPEECH_FLOAT. if (player_relations.checkPermissionSilently(sender_name, PlayerRelation::SPEECH_LOG)) - chatWindow->chatLog(chatMsg, BY_OTHER); + localChatTab->chatLog(chatMsg, BY_OTHER); chatMsg.erase(0, pos + 3); trim(chatMsg); @@ -142,7 +142,7 @@ void ChatHandler::handleMessage(MessageIn &msg) if (msg.getId() == SMSG_PLAYER_CHAT) { - chatWindow->chatLog(chatMsg, BY_PLAYER); + localChatTab->chatLog(chatMsg, BY_PLAYER); if (pos != std::string::npos) chatMsg.erase(0, pos + 3); @@ -153,20 +153,20 @@ void ChatHandler::handleMessage(MessageIn &msg) } else { - chatWindow->chatLog(chatMsg, BY_GM); + localChatTab->chatLog(chatMsg, BY_GM); } break; } case SMSG_WHO_ANSWER: - chatWindow->chatLog("Online users: " + toString(msg.readInt32()), + localChatTab->chatLog("Online users: " + toString(msg.readInt32()), BY_SERVER); break; case 0x010c: // Display MVP player msg.readInt32(); // id - chatWindow->chatLog("MVP player", BY_SERVER); + localChatTab->chatLog("MVP player", BY_SERVER); break; } } diff --git a/src/net/ea/equipmenthandler.cpp b/src/net/ea/equipmenthandler.cpp index f5377cf2..d1e51900 100644 --- a/src/net/ea/equipmenthandler.cpp +++ b/src/net/ea/equipmenthandler.cpp @@ -98,7 +98,7 @@ void EquipmentHandler::handleMessage(MessageIn &msg) logger->log("Equipping: %i %i %i", index, equipPoint, type); if (!type) { - chatWindow->chatLog(_("Unable to equip."), BY_SERVER); + localChatTab->chatLog(_("Unable to equip."), BY_SERVER); break; } @@ -136,7 +136,7 @@ void EquipmentHandler::handleMessage(MessageIn &msg) type = msg.readInt8(); if (!type) { - chatWindow->chatLog(_("Unable to unequip."), BY_SERVER); + localChatTab->chatLog(_("Unable to unequip."), BY_SERVER); break; } diff --git a/src/net/ea/inventoryhandler.cpp b/src/net/ea/inventoryhandler.cpp index addcb06f..ce2e22e7 100644 --- a/src/net/ea/inventoryhandler.cpp +++ b/src/net/ea/inventoryhandler.cpp @@ -156,14 +156,14 @@ void InventoryHandler::handleMessage(MessageIn &msg) if (msg.readInt8() > 0) { if (config.getValue("showpickupchat", true)) { - chatWindow->chatLog(_("Unable to pick up item"), BY_SERVER); + localChatTab->chatLog(_("Unable to pick up item"), BY_SERVER); } } else { const ItemInfo &itemInfo = ItemDB::get(itemId); const std::string amountStr = (amount > 1) ? toString(amount) : "a"; if (config.getValue("showpickupchat", true)) { - chatWindow->chatLog(strprintf(_("You picked up %s [%s]"), + localChatTab->chatLog(strprintf(_("You picked up %s [%s]"), amountStr.c_str(), itemInfo.getName().c_str()), BY_SERVER); } @@ -206,7 +206,7 @@ void InventoryHandler::handleMessage(MessageIn &msg) amount = msg.readInt16(); if (msg.readInt8() == 0) { - chatWindow->chatLog(_("Failed to use item"), BY_SERVER); + localChatTab->chatLog(_("Failed to use item"), BY_SERVER); } else { if (Item *item = inventory->getItem(index)) item->setQuantity(amount); diff --git a/src/net/ea/playerhandler.cpp b/src/net/ea/playerhandler.cpp index fcc44cb0..60f0de79 100644 --- a/src/net/ea/playerhandler.cpp +++ b/src/net/ea/playerhandler.cpp @@ -284,7 +284,7 @@ void PlayerHandler::handleMessage(MessageIn &msg) int curGp = player_node->getMoney(); player_node->setMoney(msg.readInt32()); if (player_node->getMoney() > curGp) - chatWindow->chatLog(_("You picked up ") + + localChatTab->chatLog(_("You picked up ") + Units::formatCurrency(player_node->getMoney() - curGp), BY_SERVER); } @@ -407,7 +407,7 @@ void PlayerHandler::handleMessage(MessageIn &msg) switch (type) { case 0: - chatWindow->chatLog(_("Equip arrows first"), + localChatTab->chatLog(_("Equip arrows first"), BY_SERVER); break; default: diff --git a/src/net/ea/skillhandler.cpp b/src/net/ea/skillhandler.cpp index c3f4ffec..ac474adc 100644 --- a/src/net/ea/skillhandler.cpp +++ b/src/net/ea/skillhandler.cpp @@ -200,7 +200,7 @@ void SkillHandler::handleMessage(MessageIn &msg) } } - chatWindow->chatLog(msg); + localChatTab->chatLog(msg); break; } } diff --git a/src/net/ea/tradehandler.cpp b/src/net/ea/tradehandler.cpp index 78472083..0a44d995 100644 --- a/src/net/ea/tradehandler.cpp +++ b/src/net/ea/tradehandler.cpp @@ -104,15 +104,15 @@ void TradeHandler::handleMessage(MessageIn &msg) switch (msg.readInt8()) { case 0: // Too far away - chatWindow->chatLog(_("Trading isn't possible. Trade partner is too far away."), + localChatTab->chatLog(_("Trading isn't possible. Trade partner is too far away."), BY_SERVER); break; case 1: // Character doesn't exist - chatWindow->chatLog(_("Trading isn't possible. Character doesn't exist."), + localChatTab->chatLog(_("Trading isn't possible. Character doesn't exist."), BY_SERVER); break; case 2: // Invite request check failed... - chatWindow->chatLog(_("Trade cancelled due to an unknown reason."), + localChatTab->chatLog(_("Trade cancelled due to an unknown reason."), BY_SERVER); break; case 3: // Trade accepted @@ -124,7 +124,7 @@ void TradeHandler::handleMessage(MessageIn &msg) case 4: // Trade cancelled if (player_relations.hasPermission(tradePartnerName, PlayerRelation::SPEECH_LOG)) - chatWindow->chatLog(_("Trade with ") + tradePartnerName + + localChatTab->chatLog(_("Trade with ") + tradePartnerName + _(" cancelled"), BY_SERVER); // otherwise ignore silently @@ -132,7 +132,7 @@ void TradeHandler::handleMessage(MessageIn &msg) player_node->setTrading(false); break; default: // Shouldn't happen as well, but to be sure - chatWindow->chatLog(_("Unhandled trade cancel packet"), + localChatTab->chatLog(_("Unhandled trade cancel packet"), BY_SERVER); break; } @@ -182,16 +182,16 @@ void TradeHandler::handleMessage(MessageIn &msg) break; case 1: // Add item failed - player overweighted - chatWindow->chatLog(_("Failed adding item. Trade partner is over weighted."), + localChatTab->chatLog(_("Failed adding item. Trade partner is over weighted."), BY_SERVER); break; case 2: // Add item failed - player has no free slot - chatWindow->chatLog(_("Failed adding item. Trade partner has no free slot."), + localChatTab->chatLog(_("Failed adding item. Trade partner has no free slot."), BY_SERVER); break; default: - chatWindow->chatLog(_("Failed adding item for unknown reason."), + localChatTab->chatLog(_("Failed adding item for unknown reason."), BY_SERVER); break; } @@ -204,14 +204,14 @@ void TradeHandler::handleMessage(MessageIn &msg) break; case SMSG_TRADE_CANCEL: - chatWindow->chatLog(_("Trade canceled."), BY_SERVER); + localChatTab->chatLog(_("Trade canceled."), BY_SERVER); tradeWindow->setVisible(false); tradeWindow->reset(); player_node->setTrading(false); break; case SMSG_TRADE_COMPLETE: - chatWindow->chatLog(_("Trade completed."), BY_SERVER); + localChatTab->chatLog(_("Trade completed."), BY_SERVER); tradeWindow->setVisible(false); tradeWindow->reset(); player_node->setTrading(false); diff --git a/src/net/tmwserv/chathandler.cpp b/src/net/tmwserv/chathandler.cpp index 65fd062c..2d151472 100644 --- a/src/net/tmwserv/chathandler.cpp +++ b/src/net/tmwserv/chathandler.cpp @@ -38,6 +38,8 @@ #include "../../gui/chat.h" #include "../../gui/guildwindow.h" +#include "utils/gettext.h" + extern Being *player_node; ChatHandler::ChatHandler() @@ -105,22 +107,22 @@ void ChatHandler::handleGameChatMessage(MessageIn &msg) if (id == 0) { - chatWindow->chatLog(chatMsg, BY_SERVER); + localChatTab->chatLog(chatMsg, BY_SERVER); return; } Being *being = beingManager->findBeing(id); + std::string mes; if (being) { - chatWindow->chatLog(being->getName() + " : " + chatMsg, - being == player_node ? BY_PLAYER : BY_OTHER, "General"); + mes = being->getName() + " : " + chatMsg; being->setSpeech(chatMsg, SPEECH_TIME); } else - { - chatWindow->chatLog("Unknown : " + chatMsg, BY_OTHER, "General"); - } + mes = "Unknown : " + chatMsg; + + localChatTab->chatLog(mes, being == player_node ? BY_PLAYER : BY_OTHER); } void ChatHandler::handleEnterChannelResponse(MessageIn &msg) @@ -132,12 +134,12 @@ void ChatHandler::handleEnterChannelResponse(MessageIn &msg) std::string announcement = msg.readString(); Channel *channel = new Channel(channelId, channelName, announcement); channelManager->addChannel(channel); - chatWindow->addTab(new ChannelTab(channel)); - chatWindow->chatLog("Topic: " + announcement, BY_CHANNEL, channelName); + ChatTab *tab = channel->getTab(); + tab->chatLog(_("Topic: ") + announcement, BY_CHANNEL); std::string user; std::string userModes; - chatWindow->chatLog("Players in this channel:", BY_CHANNEL, channelName); + tab->chatLog("Players in this channel:", BY_CHANNEL); while(msg.getUnreadLength()) { user = msg.readString(); @@ -148,19 +150,19 @@ void ChatHandler::handleEnterChannelResponse(MessageIn &msg) { user = "@" + user; } - chatWindow->chatLog(user, BY_CHANNEL, channelName); + tab->chatLog(user, BY_CHANNEL); } } else { - chatWindow->chatLog("Error joining channel", BY_SERVER); + localChatTab->chatLog("Error joining channel", BY_SERVER); } } void ChatHandler::handleListChannelsResponse(MessageIn &msg) { - chatWindow->chatLog("Listing Channels", BY_SERVER); + localChatTab->chatLog("Listing Channels", BY_SERVER); while(msg.getUnreadLength()) { std::string channelName = msg.readString(); @@ -170,9 +172,9 @@ void ChatHandler::handleListChannelsResponse(MessageIn &msg) numUsers << msg.readInt16(); channelName += " - "; channelName += numUsers.str(); - chatWindow->chatLog(channelName, BY_SERVER); + localChatTab->chatLog(channelName, BY_SERVER); } - chatWindow->chatLog("End of channel list", BY_SERVER); + localChatTab->chatLog("End of channel list", BY_SERVER); } void ChatHandler::handlePrivateMessage(MessageIn &msg) @@ -186,7 +188,7 @@ void ChatHandler::handlePrivateMessage(MessageIn &msg) void ChatHandler::handleAnnouncement(MessageIn &msg) { std::string chatMsg = msg.readString(); - chatWindow->chatLog(chatMsg, BY_GM); + localChatTab->chatLog(chatMsg, BY_GM); } void ChatHandler::handleChatMessage(MessageIn &msg) @@ -205,17 +207,17 @@ void ChatHandler::handleQuitChannelResponse(MessageIn &msg) { short channelId = msg.readInt16(); Channel *channel = channelManager->findById(channelId); - // remove the chat tab - chatWindow->removeTab(channel->getTab()); + channelManager->removeChannel(channel); } } void ChatHandler::handleListChannelUsersResponse(MessageIn &msg) { - std::string channel = msg.readString(); + std::string channelName = msg.readString(); std::string userNick; std::string userModes; - chatWindow->chatLog("Players in this channel:", BY_CHANNEL, channel); + Channel *channel = channelManager->findByName(channelName); + channel->getTab()->chatLog("Players in this channel:", BY_CHANNEL); while(msg.getUnreadLength()) { userNick = msg.readString(); @@ -228,7 +230,7 @@ void ChatHandler::handleListChannelUsersResponse(MessageIn &msg) { userNick = "@" + userNick; } - chatWindow->chatLog(userNick, BY_CHANNEL, channel); + localChatTab->chatLog(userNick, BY_CHANNEL, channel); } } @@ -277,7 +279,7 @@ void ChatHandler::handleChannelEvent(MessageIn &msg) line = "Unknown channel event."; } - chatWindow->chatLog(line, BY_CHANNEL, channel->getName()); + channel->getTab()->chatLog(line, BY_CHANNEL); } } diff --git a/src/net/tmwserv/guildhandler.cpp b/src/net/tmwserv/guildhandler.cpp index 5927f175..2127b730 100644 --- a/src/net/tmwserv/guildhandler.cpp +++ b/src/net/tmwserv/guildhandler.cpp @@ -64,12 +64,12 @@ void GuildHandler::handleMessage(MessageIn &msg) if(msg.readInt8() == ERRMSG_OK) { // TODO - Acknowledge guild was created - chatWindow->chatLog("Guild created."); + localChatTab->chatLog("Guild created."); joinedGuild(msg); } else { - chatWindow->chatLog("Error creating guild."); + localChatTab->chatLog("Error creating guild."); } } break; @@ -79,7 +79,7 @@ void GuildHandler::handleMessage(MessageIn &msg) if(msg.readInt8() == ERRMSG_OK) { // TODO - Acknowledge invite was sent - chatWindow->chatLog("Invite sent."); + localChatTab->chatLog("Invite sent."); } } break; @@ -181,12 +181,12 @@ void GuildHandler::handleMessage(MessageIn &msg) if (msg.readInt8() == ERRMSG_OK) { // promotion succeeded - chatWindow->chatLog("Member was promoted successfully"); + localChatTab->chatLog("Member was promoted successfully"); } else { // promotion failed - chatWindow->chatLog("Failed to promote member"); + localChatTab->chatLog("Failed to promote member"); } } @@ -210,7 +210,7 @@ void GuildHandler::handleMessage(MessageIn &msg) if (guild) { Channel *channel = channelManager->findByName(guild->getName()); - chatWindow->removeTab(channel->getTab()); + channelManager->removeChannel(channel); guildWindow->removeTab(guildId); player_node->removeGuild(guildId); } @@ -237,6 +237,5 @@ void GuildHandler::joinedGuild(MessageIn &msg) // COMMENT: Should this go here?? Channel *channel = new Channel(channelId, guildName, announcement); channelManager->addChannel(channel); - chatWindow->addTab(new ChannelTab(channel)); - chatWindow->chatLog("Topic: " + announcement, BY_CHANNEL, guildName); + channel->getTab()->chatLog("Topic: " + announcement, BY_CHANNEL); } diff --git a/src/net/tmwserv/partyhandler.cpp b/src/net/tmwserv/partyhandler.cpp index aa5ef0b8..880674d3 100644 --- a/src/net/tmwserv/partyhandler.cpp +++ b/src/net/tmwserv/partyhandler.cpp @@ -70,7 +70,7 @@ void PartyHandler::handleMessage(MessageIn &msg) if (msg.readInt8() == ERRMSG_OK) { player_node->setInParty(true); - chatWindow->chatLog("Joined party"); + localChatTab->chatLog("Joined party"); } } @@ -87,7 +87,7 @@ void PartyHandler::handleMessage(MessageIn &msg) msg.readInt16(); // being id std::string name = msg.readString(); - chatWindow->chatLog(name + " joined the party"); + localChatTab->chatLog(name + " joined the party"); if (!player_node->getInParty()) player_node->setInParty(true); diff --git a/src/net/tmwserv/playerhandler.cpp b/src/net/tmwserv/playerhandler.cpp index f5fbe784..e8efef52 100644 --- a/src/net/tmwserv/playerhandler.cpp +++ b/src/net/tmwserv/playerhandler.cpp @@ -280,7 +280,7 @@ void PlayerHandler::handleMessage(MessageIn &msg) switch (type) { case 0: - chatWindow->chatLog("Equip arrows first", + localChatTab->chatLog("Equip arrows first", BY_SERVER); break; default: diff --git a/src/net/tmwserv/tradehandler.cpp b/src/net/tmwserv/tradehandler.cpp index bfbdbdef..525d46f0 100644 --- a/src/net/tmwserv/tradehandler.cpp +++ b/src/net/tmwserv/tradehandler.cpp @@ -73,9 +73,9 @@ void TradeHandler::setAcceptTradeRequests(bool acceptTradeRequests) { mAcceptTradeRequests = acceptTradeRequests; if (mAcceptTradeRequests) { - chatWindow->chatLog("Accepting incoming trade requests", BY_SERVER); + localChatTab->chatLog("Accepting incoming trade requests", BY_SERVER); } else { - chatWindow->chatLog("Ignoring incoming trade requests", BY_SERVER); + localChatTab->chatLog("Ignoring incoming trade requests", BY_SERVER); } } @@ -121,14 +121,14 @@ void TradeHandler::handleMessage(MessageIn &msg) break; case GPMSG_TRADE_CANCEL: - chatWindow->chatLog("Trade canceled.", BY_SERVER); + localChatTab->chatLog("Trade canceled.", BY_SERVER); tradeWindow->setVisible(false); tradeWindow->reset(); player_node->setTrading(false); break; case GPMSG_TRADE_COMPLETE: - chatWindow->chatLog("Trade completed.", BY_SERVER); + localChatTab->chatLog("Trade completed.", BY_SERVER); tradeWindow->setVisible(false); tradeWindow->reset(); player_node->setTrading(false); diff --git a/src/party.cpp b/src/party.cpp index 33336eb8..51a86360 100644 --- a/src/party.cpp +++ b/src/party.cpp @@ -23,6 +23,7 @@ #include "localplayer.h" #include "party.h" +#include "gui/widgets/chattab.h" #include "gui/chat.h" #include "gui/confirm_dialog.h" @@ -52,7 +53,7 @@ void Party::respond(const std::string &command, const std::string &args) } if (command == "settings") { - chatWindow->chatLog(_("Not yet implemented!"), BY_SERVER); + localChatTab->chatLog(_("Not yet implemented!"), BY_SERVER); return; /* MessageOut outMsg(mNetwork); @@ -61,14 +62,14 @@ void Party::respond(const std::string &command, const std::string &args) outMsg.writeInt16(0); // Item */ } - chatWindow->chatLog(_("Party command not known."), BY_SERVER); + localChatTab->chatLog(_("Party command not known."), BY_SERVER); } void Party::create(const std::string &party) { if (party.empty()) { - chatWindow->chatLog(_("Party name is missing."), BY_SERVER); + localChatTab->chatLog(_("Party name is missing."), BY_SERVER); return; } MessageOut outMsg(mNetwork); @@ -81,7 +82,7 @@ void Party::leave(const std::string &args) { MessageOut outMsg(mNetwork); outMsg.writeInt16(CMSG_PARTY_LEAVE); - chatWindow->chatLog(_("Left party."), BY_SERVER); + localChatTab->chatLog(_("Left party."), BY_SERVER); mInParty = false; } @@ -89,12 +90,12 @@ void Party::createResponse(bool ok) { if (ok) { - chatWindow->chatLog(_("Party successfully created."), BY_SERVER); + localChatTab->chatLog(_("Party successfully created."), BY_SERVER); mInParty = true; } else { - chatWindow->chatLog(_("Could not create party."), BY_SERVER); + localChatTab->chatLog(_("Could not create party."), BY_SERVER); } } @@ -103,15 +104,15 @@ void Party::inviteResponse(const std::string &nick, int status) switch (status) { case 0: - chatWindow->chatLog(strprintf(_("%s is already a member of a party."), + localChatTab->chatLog(strprintf(_("%s is already a member of a party."), nick.c_str()), BY_SERVER); break; case 1: - chatWindow->chatLog(strprintf(_("%s refused your invitation."), + localChatTab->chatLog(strprintf(_("%s refused your invitation."), nick.c_str()), BY_SERVER); break; case 2: - chatWindow->chatLog(strprintf(_("%s is now a member of your party."), + localChatTab->chatLog(strprintf(_("%s is now a member of your party."), nick.c_str()), BY_SERVER); break; } @@ -123,7 +124,7 @@ void Party::invitedAsk(const std::string &nick, int gender, mPartyName = partyName; /* Quick and nasty - needs redoing */ if (nick.empty()) { - chatWindow->chatLog(_("You can\'t have a blank party name!"), BY_SERVER); + localChatTab->chatLog(_("You can\'t have a blank party name!"), BY_SERVER); return; } mCreating = false; @@ -146,7 +147,7 @@ void Party::InviteListener::action(const gcn::ActionEvent &event) void Party::leftResponse(const std::string &nick) { - chatWindow->chatLog(strprintf(_("%s has left your party."), nick.c_str()), + localChatTab->chatLog(strprintf(_("%s has left your party."), nick.c_str()), BY_SERVER); } @@ -158,12 +159,12 @@ void Party::receiveChat(Being *being, const std::string &msg) } if (being->getType() != Being::PLAYER) { - chatWindow->chatLog(_("Party chat received, but being is not a player"), + localChatTab->chatLog(_("Party chat received, but being is not a player"), BY_SERVER); return; } being->setSpeech(msg, SPEECH_TIME); - chatWindow->chatLog(being->getName() + " : " + msg, BY_PARTY); + localChatTab->chatLog(being->getName() + " : " + msg, BY_PARTY); } void Party::help(const std::string &args) @@ -173,35 +174,35 @@ void Party::help(const std::string &args) if (msg.empty()) { - chatWindow->chatLog(_("Command: /party <command> <args>"), BY_SERVER); - chatWindow->chatLog(_("where <command> can be one of:"), BY_SERVER); - chatWindow->chatLog(_(" /new"), BY_SERVER); - chatWindow->chatLog(_(" /create"), BY_SERVER); - chatWindow->chatLog(_(" /prefix"), BY_SERVER); - chatWindow->chatLog(_(" /leave"), BY_SERVER); - chatWindow->chatLog(_("This command implements the partying function."), + localChatTab->chatLog(_("Command: /party <command> <args>"), BY_SERVER); + localChatTab->chatLog(_("where <command> can be one of:"), BY_SERVER); + localChatTab->chatLog(_(" /new"), BY_SERVER); + localChatTab->chatLog(_(" /create"), BY_SERVER); + localChatTab->chatLog(_(" /prefix"), BY_SERVER); + localChatTab->chatLog(_(" /leave"), BY_SERVER); + localChatTab->chatLog(_("This command implements the partying function."), BY_SERVER); - chatWindow->chatLog(_("Type /help party <command> for further help."), + localChatTab->chatLog(_("Type /help party <command> for further help."), BY_SERVER); return; } if (msg == "new" || msg == "create") { - chatWindow->chatLog(_("Command: /party new <party-name>"), BY_SERVER); - chatWindow->chatLog(_("Command: /party create <party-name>"), BY_SERVER); - chatWindow->chatLog(_("These commands create a new party <party-name."), + localChatTab->chatLog(_("Command: /party new <party-name>"), BY_SERVER); + localChatTab->chatLog(_("Command: /party create <party-name>"), BY_SERVER); + localChatTab->chatLog(_("These commands create a new party <party-name."), BY_SERVER); return; } if (msg == "prefix") { - chatWindow->chatLog(_("Command: /party prefix <prefix-char>"), BY_SERVER); - chatWindow->chatLog(_("This command sets the party prefix character."), + localChatTab->chatLog(_("Command: /party prefix <prefix-char>"), BY_SERVER); + localChatTab->chatLog(_("This command sets the party prefix character."), BY_SERVER); - chatWindow->chatLog(_("Any message preceded by <prefix-char> is sent to " + localChatTab->chatLog(_("Any message preceded by <prefix-char> is sent to " "the party instead of everyone."), BY_SERVER); - chatWindow->chatLog(_("Command: /party prefix"), BY_SERVER); - chatWindow->chatLog(_("This command reports the current party prefix " + localChatTab->chatLog(_("Command: /party prefix"), BY_SERVER); + localChatTab->chatLog(_("This command reports the current party prefix " "character."), BY_SERVER); return; } @@ -209,11 +210,11 @@ void Party::help(const std::string &args) //if (msg == "info") if (msg == "leave") { - chatWindow->chatLog(_("Command: /party leave"), BY_SERVER); - chatWindow->chatLog(_("This command causes the player to leave the party."), + localChatTab->chatLog(_("Command: /party leave"), BY_SERVER); + localChatTab->chatLog(_("This command causes the player to leave the party."), BY_SERVER); return; } - chatWindow->chatLog(_("Unknown /party command."), BY_SERVER); - chatWindow->chatLog(_("Type /help party for a list of options."), BY_SERVER); + localChatTab->chatLog(_("Unknown /party command."), BY_SERVER); + localChatTab->chatLog(_("Type /help party for a list of options."), BY_SERVER); } diff --git a/src/statuseffect.cpp b/src/statuseffect.cpp index 70e8d59f..077fbb63 100644 --- a/src/statuseffect.cpp +++ b/src/statuseffect.cpp @@ -46,7 +46,7 @@ void StatusEffect::playSFX() void StatusEffect::deliverMessage() { if (!mMessage.empty()) - chatWindow->chatLog(mMessage, BY_SERVER); + localChatTab->chatLog(mMessage, BY_SERVER); } Particle *StatusEffect::getParticle() @@ -171,4 +171,4 @@ void StatusEffect::unload() unloadMap(statusEffects[1]); unloadMap(stunEffects[0]); unloadMap(stunEffects[1]); -}
\ No newline at end of file +} |