From 9d68ee18a9d1f37cbdf4b984d6db72f7fc59cf51 Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Fri, 27 Mar 2009 07:32:02 -0600 Subject: Add a close command to WhisperTab --- src/commandhandler.cpp | 1 + src/gui/chat.cpp | 10 +++++++++- src/gui/chat.h | 2 ++ src/gui/widgets/chattab.cpp | 7 ++++++- src/gui/widgets/chattab.h | 2 ++ src/gui/widgets/whispertab.cpp | 9 +++++++++ src/gui/widgets/whispertab.h | 2 ++ 7 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/commandhandler.cpp b/src/commandhandler.cpp index b315b628..7ccd7d80 100644 --- a/src/commandhandler.cpp +++ b/src/commandhandler.cpp @@ -163,6 +163,7 @@ void CommandHandler::handleHelp(const std::string &args) localChatTab->chatLog(_("/msg > Send a private message to a user")); localChatTab->chatLog(_("/whisper > Alias of msg")); localChatTab->chatLog(_("/w > Alias of msg")); + localChatTab->chatLog(_("/close > Close the whisper tab (only works in whisper tabs)")); #ifdef TMWSERV_SUPPORT localChatTab->chatLog(_("/list > Display all public channels")); diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index 7861bdb6..b0b15dbc 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -232,7 +232,10 @@ bool ChatWindow::isInputFocused() void ChatWindow::removeTab(ChatTab *tab) { // Prevent removal of the local chat tab - if (tab != localChatTab) mChatTabs->removeTab(tab); + if (tab == localChatTab) + return; + + mChatTabs->removeTab(tab); } void ChatWindow::addTab(ChatTab *tab) @@ -250,6 +253,11 @@ void ChatWindow::addTab(ChatTab *tab) logic(); } +void ChatWindow::removeWhisper(std::string nick) +{ + mWhispers.erase(nick); +} + void ChatWindow::chatSend(std::string &msg) { ChatTab *tab = getFocused(); diff --git a/src/gui/chat.h b/src/gui/chat.h index 7c080960..177aa38f 100644 --- a/src/gui/chat.h +++ b/src/gui/chat.h @@ -194,6 +194,8 @@ class ChatWindow : public Window, /** Add the tab to the window */ void addTab(ChatTab *tab); + void removeWhisper(std::string nick); + void adjustTabSize(); #ifdef EATHENA_SUPPORT diff --git a/src/gui/widgets/chattab.cpp b/src/gui/widgets/chattab.cpp index 120d4e21..46116a37 100644 --- a/src/gui/widgets/chattab.cpp +++ b/src/gui/widgets/chattab.cpp @@ -290,7 +290,7 @@ void ChatTab::chatSend(std::string &msg) } else { - commandHandler->handleCommand(std::string(msg, 1)); + handleCommand(std::string(msg, 1)); } } @@ -322,3 +322,8 @@ void ChatTab::sendChat(std::string &msg) { return; #endif } + +void ChatTab::handleCommand(std::string msg) +{ + commandHandler->handleCommand(msg); +} diff --git a/src/gui/widgets/chattab.h b/src/gui/widgets/chattab.h index a478abeb..14c4c130 100644 --- a/src/gui/widgets/chattab.h +++ b/src/gui/widgets/chattab.h @@ -108,6 +108,8 @@ class ChatTab : public Tab virtual void sendChat(std::string &msg); + virtual void handleCommand(std::string msg); + ScrollArea *mScrollArea; BrowserBox *mTextOutput; //Recorder *mRecorder; diff --git a/src/gui/widgets/whispertab.cpp b/src/gui/widgets/whispertab.cpp index ba469c00..8af8d427 100644 --- a/src/gui/widgets/whispertab.cpp +++ b/src/gui/widgets/whispertab.cpp @@ -55,6 +55,7 @@ WhisperTab::WhisperTab(const std::string &nick) : WhisperTab::~WhisperTab() { + chatWindow->removeWhisper(mNick); } void WhisperTab::sendChat(std::string &msg) { @@ -76,3 +77,11 @@ void WhisperTab::sendChat(std::string &msg) { chatLog(strprintf(_("%s: %s"), player_node->getName().c_str(), msg.c_str()), BY_PLAYER, false); } + +void WhisperTab::handleCommand(std::string msg) +{ + if (msg == "close") + delete this; + else + ChatTab::handleCommand(msg); +} diff --git a/src/gui/widgets/whispertab.h b/src/gui/widgets/whispertab.h index e3ebf0f3..6f9db1ee 100644 --- a/src/gui/widgets/whispertab.h +++ b/src/gui/widgets/whispertab.h @@ -48,6 +48,8 @@ class WhisperTab : public ChatTab void sendChat(std::string &msg); + void handleCommand(std::string msg); + private: std::string mNick; }; -- cgit v1.2.3-60-g2f50