Revision
14574
Author
jmesquita
Date
2009-08-19 20:59:48 -0500 (Wed, 19 Aug 2009)

Log Message

Fix problem with autoscrolling on console. Should be tested with a high traffic server.

Modified Paths

Diff

Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui (14573 => 14574)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui	2009-08-19 23:28:41 UTC (rev 14573)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui	2009-08-20 01:59:48 UTC (rev 14574)
@@ -76,8 +76,6 @@
     <property name="title">
      <string>&amp;Console</string>
     </property>
-    <addaction name="actionAutomatic_Scroll"/>
-    <addaction name="separator"/>
     <addaction name="actionRealtime_Statistics"/>
    </widget>
    <addaction name="menu_File"/>

Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp (14573 => 14574)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp	2009-08-19 23:28:41 UTC (rev 14573)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp	2009-08-20 01:59:48 UTC (rev 14574)
@@ -29,8 +29,6 @@
                      this, SLOT(clearLogContents()));
     QObject::connect(consoleWindow->actionRealtime_Statistics, SIGNAL(triggered()),
                      this, SLOT(showRealtimeStats()));
-    QObject::connect(consoleWindow->actionAutomatic_Scroll, SIGNAL(toggled(bool)),
-                     this, SLOT(setAutoScroll(bool)));
 }
 
 ConsolePlugin::~ConsolePlugin(){}
@@ -409,44 +407,29 @@
 void ConsolePlugin::tabChanged(int index)
 {
     ESLconnection *esl = hashESL.value(consoleWindow->tabConsole->tabText(index), NULL);
-    ConsoleTabWidget *tab = qobject_cast<ConsoleTabWidget *>(consoleWindow->tabConsole->currentWidget());
     if (esl)
     {
         consoleWindow->action_Connect->setDisabled(esl->isConnected());
         consoleWindow->action_Disconnect->setEnabled(esl->isConnected());
-        consoleWindow->actionAutomatic_Scroll->setChecked(tab->getAutomaticScroll());
-        consoleWindow->actionAutomatic_Scroll->setEnabled(esl->isConnected());
-        tab->flipScrollTimer();
     }
 }
 
 void ConsolePlugin::connect()
 {
     ESLconnection *esl = hashESL.value(consoleWindow->tabConsole->tabText(consoleWindow->tabConsole->currentIndex()), NULL);
-    ConsoleTabWidget *tab = qobject_cast<ConsoleTabWidget *>(consoleWindow->tabConsole->currentWidget());
     if (esl)
     {
         esl->connect();
-        tab->flipScrollTimer();
     }
 }
 
 void ConsolePlugin::disconnect()
 {
     ESLconnection *esl = hashESL.value(consoleWindow->tabConsole->tabText(consoleWindow->tabConsole->currentIndex()), NULL);
-    ConsoleTabWidget *tab = qobject_cast<ConsoleTabWidget *>(consoleWindow->tabConsole->currentWidget());
     if (esl)
     {
         esl->disconnect();
-        tab->flipScrollTimer();
     }
 }
 
-void ConsolePlugin::setAutoScroll(bool checked)
-{
-    ConsoleTabWidget *tab = qobject_cast<ConsoleTabWidget *>(consoleWindow->tabConsole->currentWidget());
-    tab->setAutomaticScroll(checked);
-    tab->flipScrollTimer();
-}
-
 Q_EXPORT_PLUGIN2(consoleplugin, ConsolePlugin)

Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h (14573 => 14574)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h	2009-08-19 23:28:41 UTC (rev 14573)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h	2009-08-20 01:59:48 UTC (rev 14574)
@@ -53,7 +53,6 @@
     void changeDebugForegroundColor();
     void tabClose(int index);
     void tabChanged(int index);
-    void setAutoScroll(bool checked);
     void readSettings();
     void writeSettings();
 

Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp (14573 => 14574)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp	2009-08-19 23:28:41 UTC (rev 14573)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp	2009-08-20 01:59:48 UTC (rev 14574)
@@ -8,10 +8,8 @@
     QWidget(parent),
     m_ui(new Ui::ConsoleTabWidget),
     esl(eslconnection),
-    scrollTimer(new QTimer),
     _rtStatsDlg(NULL),
-    findNext(false),
-    autoScroll(true)
+    findNext(false)
 {
     m_ui->setupUi(this);
     sourceModel = new QStandardItemModel(this);
@@ -57,13 +55,16 @@
     QObject::connect(esl, SIGNAL(receivedLogMessage(ESLevent)),
                      this, SLOT(gotEvent(ESLevent)));
 
-    QObject::connect(scrollTimer, SIGNAL(timeout()),
-                     this, SLOT(conditionalScroll()));
 
     esl->connect();
 
     msm = new MonitorStateMachine();
     msm->addESLconnection(esl);
+
+    scrollTimer = new QBasicTimer;
+    scrollTimer->start(0, this);
+    /* Number of items to be inserted */
+    batch = 40;
 }
 
 ConsoleTabWidget::~ConsoleTabWidget()
@@ -88,36 +89,25 @@
     }
 }
 
-void ConsoleTabWidget::flipScrollTimer()
+void ConsoleTabWidget::timerEvent(QTimerEvent *e)
 {
-    if (!esl->isConnected())
+    bool scroll = false;
+    if (e->timerId() == scrollTimer->timerId())
     {
-        scrollTimer->stop();
-        return;
-    }
+        if (m_ui->consoleListView->verticalScrollBar()->value() == m_ui->consoleListView->verticalScrollBar()->maximum())
+            scroll = true;
 
-    if (scrollTimer->isActive())
-        scrollTimer->stop();
-    else if (autoScroll)
-        scrollTimer->start(500);
+        int inserted_items = 0;
+        while( !_list_items.isEmpty() && inserted_items < batch)
+        {
+            sourceModel->appendRow(_list_items.takeFirst());
+            inserted_items++;
+        }
+        if (scroll)
+            m_ui->consoleListView->scrollToBottom();
+    }
 }
 
-void ConsoleTabWidget::setAutomaticScroll(bool enabled)
-{
-    autoScroll = enabled;
-}
-
-bool ConsoleTabWidget::getAutomaticScroll()
-{
-    return autoScroll;
-}
-
-void ConsoleTabWidget::conditionalScroll()
-{
-    if (autoScroll)
-        m_ui->consoleListView->scrollToBottom();
-}
-
 void ConsoleTabWidget::filterClear()
 {
     m_ui->lineFilter->clear();
@@ -195,7 +185,8 @@
     QPalette palette = settings.value(QString("log-level-%1-palette").arg(item->data(Qt::UserRole).toInt())).value<QPalette>();
     item->setBackground(palette.base());
     item->setForeground(palette.text());
-    sourceModel->appendRow(item);
+    //sourceModel->appendRow(item);
+    _list_items.append(item);
 }
 
 void ConsoleTabWidget::cmdSendClicked()

Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h (14573 => 14574)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h	2009-08-19 23:28:41 UTC (rev 14573)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h	2009-08-20 01:59:48 UTC (rev 14574)
@@ -25,12 +25,10 @@
 public slots:
     void clearConsoleContents();
     void showRealtimeStats();
-    void flipScrollTimer();
-    void setAutomaticScroll(bool enabled);
-    bool getAutomaticScroll();
 
 protected:
     void changeEvent(QEvent *e);
+    void timerEvent(QTimerEvent *);
 
 private slots:
     void conditionalScroll();
@@ -56,12 +54,13 @@
     QStandardItemModel *sourceModel;
     QModelIndexList foundItems;
     SortFilterProxyModel *model;
+    QBasicTimer *scrollTimer;
     ESLconnection *esl;
-    QTimer *scrollTimer;
     MonitorStateMachine *msm;
     RealtimeStatisticsDialog *_rtStatsDlg;
     bool findNext;
-    bool autoScroll;
+    QList<QStandardItem *> _list_items;
+    int batch;
 
 };