diff options
Diffstat (limited to 'src/gui/chat.cpp')
-rw-r--r-- | src/gui/chat.cpp | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index a9f3b931..2ed6cade 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -76,8 +76,8 @@ ChatWindow::ChatWindow(): mChatTabs->addTab("General", scrollArea); mChatTabs->setPosition(mChatTabs->getFrameSize(), mChatTabs->getFrameSize()); - mChannelOutput["General"] = textOutput; - mChannelScroll["General"] = scrollArea; + mChannels.insert( + std::make_pair("General", ChatArea(textOutput, scrollArea))); add(mChatTabs); add(mChatInput); @@ -99,9 +99,6 @@ ChatWindow::logic() // todo: only do this when the size changes (updateWidgets?) const gcn::Rectangle area = getChildrenArea(); - std::string channelName = mChatTabs->getSelectedTab()->getCaption(); - ScrollArea *scroll = mChannelScroll[channelName]; - mChatInput->setPosition(mChatInput->getFrameSize(), area.height - mChatInput->getHeight() - mChatInput->getFrameSize()); @@ -110,9 +107,14 @@ ChatWindow::logic() mChatTabs->setWidth(area.width - 2 * mChatTabs->getFrameSize()); mChatTabs->setHeight(area.height - 2 * mChatTabs->getFrameSize()); - scroll->setWidth(area.width - 2 * scroll->getFrameSize()); - scroll->setHeight(area.height - 2 * scroll->getFrameSize() - - mChatInput->getHeight() - 26); + const std::string &channelName = mChatTabs->getSelectedTab()->getCaption(); + ChannelMap::const_iterator chan = mChannels.find(channelName); + if (chan != mChannels.end()) { + ScrollArea *scroll = chan->second.scroll; + scroll->setWidth(area.width - 2 * scroll->getFrameSize()); + scroll->setHeight(area.height - 2 * scroll->getFrameSize() - + mChatInput->getHeight() - 26); + } Window::logic(); } @@ -120,6 +122,13 @@ ChatWindow::logic() void ChatWindow::chatLog(std::string line, int own, const std::string &channelName) { + ChannelMap::const_iterator chan = mChannels.find(channelName); + if (chan == mChannels.end()) + return; + + BrowserBox * const output = chan->second.browser; + ScrollArea * const scroll = chan->second.scroll; + // Trim whitespace trim(line); @@ -128,15 +137,6 @@ ChatWindow::chatLog(std::string line, int own, const std::string &channelName) tmp.nick = ""; tmp.text = line; - BrowserBox *output = mChannelOutput[channelName]; - ScrollArea *scroll = mChannelScroll[channelName]; - - // Fix the owner of welcome message. - if (line.substr(0, 7) == "Welcome") - { - own = BY_SERVER; - } - std::string::size_type pos = line.find(" : "); if (pos != std::string::npos) { tmp.nick = line.substr(0, pos); @@ -372,9 +372,9 @@ void ChatWindow::chatSend(std::string const &nick, std::string const &msg, } else if (command == "clear") { - BrowserBox *output = mChannelOutput[channelName]; - if (output) - output->clearRows(); + ChannelMap::const_iterator chan = mChannels.find(channelName); + if (chan != mChannels.end()) + chan->second.browser->clearRows(); } else { @@ -485,14 +485,13 @@ ChatWindow::removeChannel(const std::string &channelName) void ChatWindow::removeChannel(Channel *channel) { - if(channel) + if (channel) { gcn::Tab *tab = mChatTabs->getTab(channel->getName()); if (!tab) return; mChatTabs->removeTab(tab); - mChannelOutput.erase(channel->getName()); - mChannelScroll.erase(channel->getName()); + mChannels.erase(channel->getName()); channelManager->removeChannel(channel); logic(); @@ -513,8 +512,8 @@ ChatWindow::createNewChannelTab(const std::string &channelName) // Add channel to the tabbed area mChatTabs->addTab(channelName, scrollArea); - mChannelOutput[channelName] = textOutput; - mChannelScroll[channelName] = scrollArea; + mChannels.insert( + std::make_pair(channelName, ChatArea(textOutput, scrollArea))); // Ask for channel users Net::ChatServer::getUserList(channelName); |