diff options
author | David Athay <ko2fan@gmail.com> | 2008-07-04 17:02:03 +0000 |
---|---|---|
committer | David Athay <ko2fan@gmail.com> | 2008-07-04 17:02:03 +0000 |
commit | 6423c8eda76babaa50c13525b0deb7df5f2d24bd (patch) | |
tree | 6a44f0fde271ad739a5d2f1521b86445bd99d0e8 /src | |
parent | d22c6843a9b9f06a0f9e05bed268bfab90b75031 (diff) | |
download | mana-6423c8eda76babaa50c13525b0deb7df5f2d24bd.tar.gz mana-6423c8eda76babaa50c13525b0deb7df5f2d24bd.tar.bz2 mana-6423c8eda76babaa50c13525b0deb7df5f2d24bd.tar.xz mana-6423c8eda76babaa50c13525b0deb7df5f2d24bd.zip |
Ugly hack for chat scrolling.
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/chat.cpp | 27 | ||||
-rw-r--r-- | src/gui/chat.h | 12 |
2 files changed, 30 insertions, 9 deletions
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index ba9ef8ee..ad5e0c9b 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -71,6 +71,7 @@ ChatWindow::ChatWindow(): scrollArea->getFrameSize(), scrollArea->getFrameSize()); scrollArea->setScrollPolicy( gcn::ScrollArea::SHOW_NEVER, gcn::ScrollArea::SHOW_ALWAYS); + scrollArea->setScrollAmount(0, 1); scrollArea->setOpaque(false); mChatTabs = new TabbedArea(); @@ -123,7 +124,24 @@ void ChatWindow::widgetResized(const gcn::Event &event) mChatTabs->setWidth(area.width - 2 * mChatTabs->getFrameSize()); mChatTabs->setHeight(area.height - 2 * mChatTabs->getFrameSize()); - const std::string &channelName = mChatTabs->getSelectedTab()->getCaption(); + const std::string &channelName = getFocused(); + 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() - 5); + scroll->logic(); + } +} + +void ChatWindow::logic() +{ + Window::logic(); + + const gcn::Rectangle area = getChildrenArea(); + + const std::string &channelName = getFocused(); ChannelMap::const_iterator chan = mChannels.find(channelName); if (chan != mChannels.end()) { ScrollArea *scroll = chan->second.scroll; @@ -139,7 +157,7 @@ ChatWindow::chatLog(std::string line, int own, std::string channelName) { if(channelName == "getFocused\"") channelName = getFocused(); - + ChannelMap::const_iterator chan = mChannels.find(channelName); if (chan == mChannels.end()) return; @@ -210,7 +228,7 @@ ChatWindow::chatLog(std::string line, int own, std::string channelName) // We look if the Vertical Scroll Bar is set at the max before // adding a row, otherwise the max will always be a row higher // at comparison. - if (scroll->getVerticalScrollAmount() == scroll->getVerticalMaxScroll()) + if (scroll->getVerticalScrollAmount() >= scroll->getVerticalMaxScroll()) { output->addRow(line); scroll->setVerticalScrollAmount(scroll->getVerticalMaxScroll()); @@ -289,7 +307,7 @@ void ChatWindow::chatSend(std::string const &msg) if (msg.empty()) return; // Prepare ordinary message - if (msg[0] != '/') + if (msg[0] != '/') { if (getFocused() == "General") { @@ -330,6 +348,7 @@ ChatWindow::removeChannel(Channel *channel) Tab *tab = mChatTabs->getTab(channel->getName()); if (!tab) return; + clearTab(channel->getName()); mChatTabs->removeTab(tab); mChannels.erase(channel->getName()); channelManager->removeChannel(channel); diff --git a/src/gui/chat.h b/src/gui/chat.h index a999f8fc..e0e61ce5 100644 --- a/src/gui/chat.h +++ b/src/gui/chat.h @@ -75,12 +75,12 @@ class ChatWindow : public Window, * the tabbed area. */ void widgetResized(const gcn::Event &event); - + /** * Gets the focused tab's name */ const std::string& getFocused() const; - + /** * Clear the tab with the given name */ @@ -93,8 +93,8 @@ class ChatWindow : public Window, * @param own Type of message (usually the owner-type). * @param channelName which channel to send the message to. */ - void chatLog(std::string line, - int own = BY_SERVER, + void chatLog(std::string line, + int own = BY_SERVER, std::string channelName = "getFocused\""); /** @@ -116,7 +116,7 @@ class ChatWindow : public Window, * Determines whether the message is a command or message, then * sends the given message to the game server to be said, or to the * command handler - * + * * @param msg The message text which is to be sent. * */ @@ -156,6 +156,8 @@ class ChatWindow : public Window, bool tabExists(const std::string &tabName); + void logic(); + private: bool mTmpVisible; |