QTfrontend/ui/widget/chatwidget.cpp
changeset 8451 8c7da08df048
parent 8430 5a5c34a75e1a
child 8759 1a4b9b9fe2b0
child 8797 b7e0b7a18e3a
equal deleted inserted replaced
8449:2816230a107e 8451:8c7da08df048
    29 #include <QTime>
    29 #include <QTime>
    30 #include <QListView>
    30 #include <QListView>
    31 #include <QModelIndexList>
    31 #include <QModelIndexList>
    32 #include <QSortFilterProxyModel>
    32 #include <QSortFilterProxyModel>
    33 #include <QMenu>
    33 #include <QMenu>
       
    34 #include <QScrollBar>
    34 
    35 
    35 #include "DataManager.h"
    36 #include "DataManager.h"
    36 #include "hwconsts.h"
    37 #include "hwconsts.h"
    37 #include "gameuiconfig.h"
    38 #include "gameuiconfig.h"
    38 #include "playerslistmodel.h"
    39 #include "playerslistmodel.h"
   154 }
   155 }
   155 
   156 
   156 void HWChatWidget::displayError(const QString & message)
   157 void HWChatWidget::displayError(const QString & message)
   157 {
   158 {
   158     addLine("msg_Error", " !!! " + message);
   159     addLine("msg_Error", " !!! " + message);
   159     // scroll to the end
       
   160     chatText->moveCursor(QTextCursor::End);
       
   161 }
   160 }
   162 
   161 
   163 
   162 
   164 void HWChatWidget::displayNotice(const QString & message)
   163 void HWChatWidget::displayNotice(const QString & message)
   165 {
   164 {
   166     addLine("msg_Notice", " *** " + message);
   165     addLine("msg_Notice", " *** " + message);
   167     // scroll to the end
       
   168     chatText->moveCursor(QTextCursor::End);
       
   169 }
   166 }
   170 
   167 
   171 
   168 
   172 void HWChatWidget::displayWarning(const QString & message)
   169 void HWChatWidget::displayWarning(const QString & message)
   173 {
   170 {
   174     addLine("msg_Warning", " *!* " + message);
   171     addLine("msg_Warning", " *!* " + message);
   175     // scroll to the end
       
   176     chatText->moveCursor(QTextCursor::End);
       
   177 }
   172 }
   178 
   173 
   179 
   174 
   180 HWChatWidget::HWChatWidget(QWidget* parent, bool notify) :
   175 HWChatWidget::HWChatWidget(QWidget* parent, bool notify) :
   181     QWidget(parent),
   176     QWidget(parent),
   449 void HWChatWidget::addLine(const QString & cssClass, QString line, bool isHighlight)
   444 void HWChatWidget::addLine(const QString & cssClass, QString line, bool isHighlight)
   450 {
   445 {
   451     if (s_displayNone->contains(cssClass))
   446     if (s_displayNone->contains(cssClass))
   452         return; // the css forbids us to display this line
   447         return; // the css forbids us to display this line
   453 
   448 
       
   449     beforeContentAdd();
       
   450 
   454     if (chatStrings.size() > 250)
   451     if (chatStrings.size() > 250)
   455         chatStrings.removeFirst();
   452         chatStrings.removeFirst();
   456 
   453 
   457     if (s_isTimeStamped)
   454     if (s_isTimeStamped)
   458     {
   455     {
   471 
   468 
   472     chatStrings.append(line);
   469     chatStrings.append(line);
   473 
   470 
   474     chatText->setHtml("<html><body>"+chatStrings.join("<br>")+"</body></html>");
   471     chatText->setHtml("<html><body>"+chatStrings.join("<br>")+"</body></html>");
   475 
   472 
   476     chatText->moveCursor(QTextCursor::End);
   473     afterContentAdd();
   477 }
   474 }
   478 
   475 
   479 void HWChatWidget::onServerMessage(const QString& str)
   476 void HWChatWidget::onServerMessage(const QString& str)
   480 {
   477 {
       
   478     beforeContentAdd();
       
   479 
   481     if (chatStrings.size() > 250)
   480     if (chatStrings.size() > 250)
   482         chatStrings.removeFirst();
   481         chatStrings.removeFirst();
   483 
   482 
   484     chatStrings.append("<hr>" + str + "<hr>");
   483     chatStrings.append("<hr>" + str + "<hr>");
   485 
   484 
   486     chatText->setHtml("<html><body>"+chatStrings.join("<br>")+"</body></html>");
   485     chatText->setHtml("<html><body>"+chatStrings.join("<br>")+"</body></html>");
   487 
   486 
   488     chatText->moveCursor(QTextCursor::End);
   487     afterContentAdd();
   489 }
   488 }
   490 
   489 
   491 
   490 
   492 void HWChatWidget::nickAdded(const QString & nick, bool notifyNick)
   491 void HWChatWidget::nickAdded(const QString & nick, bool notifyNick)
   493 {
   492 {
   899     foreach(QAction * action, chatNicks->actions())
   898     foreach(QAction * action, chatNicks->actions())
   900         m_nicksMenu->addAction(action);
   899         m_nicksMenu->addAction(action);
   901 
   900 
   902     m_nicksMenu->popup(chatNicks->mapToGlobal(pos));
   901     m_nicksMenu->popup(chatNicks->mapToGlobal(pos));
   903 }
   902 }
       
   903 
       
   904 void HWChatWidget::beforeContentAdd()
       
   905 {
       
   906     m_scrollBarPos = chatText->verticalScrollBar()->value();
       
   907     m_scrollToBottom = m_scrollBarPos == chatText->verticalScrollBar()->maximum();
       
   908 }
       
   909 
       
   910 void HWChatWidget::afterContentAdd()
       
   911 {
       
   912     if(m_scrollToBottom)
       
   913     {
       
   914         chatText->verticalScrollBar()->setValue(chatText->verticalScrollBar()->maximum());
       
   915         chatText->moveCursor(QTextCursor::End);
       
   916     } else
       
   917     {
       
   918         chatText->verticalScrollBar()->setValue(m_scrollBarPos);
       
   919     }
       
   920 }