From baaf4e4f299573b951f377b421b2747a4f53e202 Mon Sep 17 00:00:00 2001 From: ewewukek Date: Fri, 29 Mar 2024 00:09:36 +0300 Subject: Scroll #General chat tab to bottom on join Add ChatTab::scrollToBottom utility method Implement scrolling logic in loadFromLogFile --- src/gui/widgets/tabs/chat/chattab.cpp | 19 +++++++++++++++---- src/gui/widgets/tabs/chat/chattab.h | 5 +++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/gui/widgets/tabs/chat/chattab.cpp b/src/gui/widgets/tabs/chat/chattab.cpp index ec9042694..f411249fe 100644 --- a/src/gui/widgets/tabs/chat/chattab.cpp +++ b/src/gui/widgets/tabs/chat/chattab.cpp @@ -290,8 +290,7 @@ void ChatTab::chatLog(std::string line, mScrollArea->getVerticalMaxScroll()) { addRow(line); - mScrollArea->setVerticalScrollAmount( - mScrollArea->getVerticalMaxScroll()); + scrollToBottom(); } else { @@ -428,6 +427,12 @@ void ChatTab::scroll(const int amount) mTextOutput->showPart(scr); } +void ChatTab::scrollToBottom() +{ + mScrollArea->setVerticalScrollAmount( + mScrollArea->getVerticalMaxScroll()); +} + void ChatTab::clearText() { mTextOutput->clearRows(); @@ -514,6 +519,9 @@ void ChatTab::loadFromLogFile(const std::string &name) { if (chatLogger != nullptr) { + bool doScroll = mScrollArea->getVerticalScrollAmount() >= + mScrollArea->getVerticalMaxScroll(); + std::list list; chatLogger->loadLast(name, list, 5); std::list::const_iterator i = list.begin(); @@ -523,6 +531,10 @@ void ChatTab::loadFromLogFile(const std::string &name) addRow(line); ++i; } + + if (doScroll) + scrollToBottom(); + mScrollArea->logic(); } } @@ -532,8 +544,7 @@ void ChatTab::addNewRow(std::string &line) mScrollArea->getVerticalMaxScroll()) { addRow(line); - mScrollArea->setVerticalScrollAmount( - mScrollArea->getVerticalMaxScroll()); + scrollToBottom(); } else { diff --git a/src/gui/widgets/tabs/chat/chattab.h b/src/gui/widgets/tabs/chat/chattab.h index 7a3774fc2..adb14861d 100644 --- a/src/gui/widgets/tabs/chat/chattab.h +++ b/src/gui/widgets/tabs/chat/chattab.h @@ -113,6 +113,11 @@ class ChatTab notfinal : public Tab */ void scroll(const int amount); + /** + * Scrolls the chat window to the bottom + */ + void scrollToBottom(); + /** * Clears the text from the tab */ -- cgit v1.2.3-60-g2f50