Revision
14802
Author
jmesquita
Date
2009-09-10 00:49:25 -0500 (Thu, 10 Sep 2009)

Log Message

Add the ability to find within already filtered messages to position cursor.

Modified Paths

Added Paths

Diff

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


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui	2009-09-10 01:26:26 UTC (rev 14801)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui	2009-09-10 05:49:25 UTC (rev 14802)
@@ -74,6 +74,7 @@
     </property>
     <addaction name="action_Clear"/>
     <addaction name="separator"/>
+    <addaction name="action_Find"/>
    </widget>
    <widget class="QMenu" name="menu_Console">
     <property name="title">
@@ -163,6 +164,14 @@
     <string>Ctrl+R</string>
    </property>
   </action>
+  <action name="action_Find">
+   <property name="text">
+    <string>&amp;Find</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+F</string>
+   </property>
+  </action>
  </widget>
  <resources>
   <include location="../../resources/resources.qrc"/>

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


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp	2009-09-10 01:26:26 UTC (rev 14801)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp	2009-09-10 05:49:25 UTC (rev 14802)
@@ -35,6 +35,8 @@
                      this, SLOT(showRealtimeStats()));
     QObject::connect(consoleWindow->action_Pastebin_Log, SIGNAL(triggered()),
                      this, SLOT(pastebinLog()));
+    QObject::connect(consoleWindow->action_Find, SIGNAL(triggered()),
+                     this, SLOT(findText()));
 }
 
 ConsolePlugin::~ConsolePlugin(){}
@@ -183,6 +185,13 @@
         tab->pastebinLog();
 }
 
+void ConsolePlugin::findText()
+{
+    ConsoleTabWidget *tab = qobject_cast<ConsoleTabWidget*>(consoleWindow->tabConsole->currentWidget());
+    if (tab)
+        tab->findText();
+}
+
 void ConsolePlugin::showRealtimeStats()
 {
     ConsoleTabWidget *tab = qobject_cast<ConsoleTabWidget*>(consoleWindow->tabConsole->currentWidget());

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


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h	2009-09-10 01:26:26 UTC (rev 14801)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h	2009-09-10 05:49:25 UTC (rev 14802)
@@ -80,6 +80,7 @@
     void clearLogContents();
     void saveLogToFile();
     void pastebinLog();
+    void findText();
     void showRealtimeStats();
     void changeConsoleBackgroundColor();
     void changeAlertBackgroundColor();

Modified: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro (14801 => 14802)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro	2009-09-10 01:26:26 UTC (rev 14801)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro	2009-09-10 05:49:25 UTC (rev 14802)
@@ -22,10 +22,8 @@
 QT += network
 TEMPLATE = lib
 TARGET = consoleplugin
-
 DESTDIR = ../../../bin/plugins/
 macx:DESTDIR = ../../../bin/fsgui.app/Contents/PlugIns/fsgui
-
 CONFIG += plugin
 INCLUDEPATH = ../../fsgui/ \
     ../../interfaces \
@@ -35,21 +33,23 @@
     consoletabwidget.h \
     realtimestatisticsdialog.h \
     realtimemodels.h \
-    pastebindialog.h
+    pastebindialog.h \
+    finddialog.h
 SOURCES = consoleplugin.cpp \
     sortfilterproxymodel.cpp \
     consoletabwidget.cpp \
     realtimestatisticsdialog.cpp \
     realtimemodels.cpp \
-    pastebindialog.cpp
+    pastebindialog.cpp \
+    finddialog.cpp
 FORMS += centralWidget.ui \
     console_settings.ui \
     consoletabwidget.ui \
     realtimestatisticsdialog.ui \
-    pastebindialog.ui
+    pastebindialog.ui \
+    finddialog.ui
 LIBS += -L../../interfaces \
     -linterfaces \
     -L../../../../../../libs/esl/ \
     -lesl
 RESOURCES += ../../resources/resources.qrc
-

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


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp	2009-09-10 01:26:26 UTC (rev 14801)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp	2009-09-10 05:49:25 UTC (rev 14802)
@@ -4,6 +4,7 @@
 #include "monitorstatemachine.h"
 #include "realtimestatisticsdialog.h"
 #include "pastebindialog.h"
+#include "finddialog.h"
 
 ConsoleTabWidget::ConsoleTabWidget(QWidget *parent, ESLconnection *eslconnection) :
     QWidget(parent),
@@ -11,6 +12,7 @@
     esl(eslconnection),
     _rtStatsDlg(NULL),
     _pastebinDlg(NULL),
+    _findDialog(NULL),
     findNext(false)
 {
     m_ui->setupUi(this);
@@ -379,3 +381,13 @@
 {
     model->toggleReverseFlag();
 }
+
+void ConsoleTabWidget::findText()
+{
+    if(!_findDialog)
+        _findDialog = new FindDialog(this, model, m_ui->consoleListView);
+
+    _findDialog->show();
+    _findDialog->raise();
+    _findDialog->activateWindow();
+}

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


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h	2009-09-10 01:26:26 UTC (rev 14801)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h	2009-09-10 05:49:25 UTC (rev 14802)
@@ -53,6 +53,7 @@
 class MonitorStateMachine;
 class RealtimeStatisticsDialog;
 class pastebinDialog;
+class FindDialog;
 
 class ConsoleTabWidget : public QWidget {
     Q_OBJECT
@@ -66,6 +67,7 @@
     void saveLogToFile();
     void pastebinLog();
     void filterLogUUID(QString);
+    void findText();
 
 protected:
     void changeEvent(QEvent *e);
@@ -102,6 +104,7 @@
     MonitorStateMachine *msm;
     RealtimeStatisticsDialog *_rtStatsDlg;
     pastebinDialog *_pastebinDlg;
+    FindDialog *_findDialog;
     bool findNext;
     bool autoScroll;
     int currentLogLevel;

Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/finddialog.cpp (0 => 14802)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/finddialog.cpp	                        (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/finddialog.cpp	2009-09-10 05:49:25 UTC (rev 14802)
@@ -0,0 +1,118 @@
+#include <QtGui>
+#include "finddialog.h"
+#include "ui_finddialog.h"
+#include "sortfilterproxymodel.h"
+
+FindDialog::FindDialog(QWidget *parent, SortFilterProxyModel* model, QTableView *console) :
+    QDialog(parent),
+    m_ui(new Ui::FindDialog),
+    _model(model),
+    _console(console)
+{
+    m_ui->setupUi(this);
+    QObject::connect(m_ui->lineFind, SIGNAL(textChanged(QString)),
+                     this, SLOT(findStringChanged(QString)));
+    QObject::connect(m_ui->btnFindNext, SIGNAL(clicked()),
+                     this, SLOT(findNext()));
+    QObject::connect(m_ui->btnFindPrev, SIGNAL(clicked()),
+                     this, SLOT(findPrevious()));
+
+    _currentHit = -1;
+}
+
+FindDialog::~FindDialog()
+{
+    delete m_ui;
+}
+
+void FindDialog::findNext()
+{
+    if (processFind())
+    {
+        _currentHit++;
+        _console->selectRow(_results.at(_currentHit).row());
+        if (_currentHit == _results.size()-1)
+            _currentHit--;
+    }
+}
+
+void FindDialog::findPrevious()
+{
+    if (processFind())
+    {
+        if (_currentHit == -1 || _currentHit == 0)
+            _currentHit = _results.size()-1;
+
+        _console->selectRow(_results.at(_currentHit).row());
+        _currentHit--;
+
+    }
+}
+
+void FindDialog::changeEvent(QEvent *e)
+{
+    QDialog::changeEvent(e);
+    switch (e->type()) {
+    case QEvent::LanguageChange:
+        m_ui->retranslateUi(this);
+        break;
+    default:
+        break;
+    }
+}
+
+bool FindDialog::processFind()
+{
+
+    QModelIndexList selectionList = _console->selectionModel()->selection().indexes();
+    QModelIndex start;
+    if (selectionList.isEmpty())
+        start = _model->index(0,0,QModelIndex());
+    else
+        start = selectionList.at(0);
+
+    /* String has changed. Restart the search!*/
+    if (QString::compare(m_ui->lineFind->text(), _findStr))
+    {
+        _findStr = m_ui->lineFind->text();
+        _currentHit = -1;
+
+        Qt::MatchFlags caseSensitivity =
+                m_ui->checkCaseSensitive->isChecked() ? Qt::MatchCaseSensitive
+                : Qt::MatchExactly;
+        switch (m_ui->comboStringType->currentIndex())
+        {
+        case 0:
+            {
+                _results = _model->match(start, Qt::DisplayRole, _findStr, -1, Qt::MatchContains | caseSensitivity);
+                break;
+            }
+        case 1:
+            {
+                _results = _model->match(start, Qt::DisplayRole, _findStr, -1, Qt::MatchRegExp | caseSensitivity);
+                break;
+            }
+        case 2:
+            {
+                _results = _model->match(start, Qt::DisplayRole, _findStr, -1, Qt::MatchWildcard | caseSensitivity);
+                break;
+            }
+        }
+
+
+        if (_results.isEmpty())
+        {
+            QMessageBox::warning(this, "FsGui", "No matches found!");
+            m_ui->lineFind->setText("");
+            m_ui->lineFind->setFocus();
+            return false;
+        }
+    }
+    return true;
+}
+
+void FindDialog::findStringChanged(QString ntext)
+{
+    m_ui->btnFindNext->setDisabled(ntext.isEmpty());
+    m_ui->btnFindPrev->setDisabled(ntext.isEmpty());
+}

Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/finddialog.h (0 => 14802)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/finddialog.h	                        (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/finddialog.h	2009-09-10 05:49:25 UTC (rev 14802)
@@ -0,0 +1,38 @@
+#ifndef FINDDIALOG_H
+#define FINDDIALOG_H
+
+#include <QtGui/QDialog>
+#include <QModelIndexList>
+
+namespace Ui {
+    class FindDialog;
+}
+
+class SortFilterProxyModel;
+class QTableView;
+
+class FindDialog : public QDialog {
+    Q_OBJECT
+public:
+    FindDialog(QWidget *parent, SortFilterProxyModel* model, QTableView* console);
+    ~FindDialog();
+
+protected:
+    void changeEvent(QEvent *e);
+
+private:
+    Ui::FindDialog *m_ui;
+    SortFilterProxyModel *_model;
+    QTableView *_console;
+    QString _findStr;
+    QModelIndexList _results;
+    int _currentHit;
+
+private slots:
+    bool processFind();
+    void findNext();
+    void findPrevious();
+    void findStringChanged(QString);
+};
+
+#endif // FINDDIALOG_H

Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/finddialog.ui (0 => 14802)


--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/finddialog.ui	                        (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/finddialog.ui	2009-09-10 05:49:25 UTC (rev 14802)
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FindDialog</class>
+ <widget class="QDialog" name="FindDialog">
+  <property name="windowModality">
+   <enum>Qt::NonModal</enum>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>485</width>
+    <height>114</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Find ...</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>Find what?</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineFind"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QComboBox" name="comboStringType">
+       <item>
+        <property name="text">
+         <string>Contains</string>
+        </property>
+       </item>
+       <item>
+        <property name="text">
+         <string>Regular Expression</string>
+        </property>
+       </item>
+       <item>
+        <property name="text">
+         <string>Wildcard</string>
+        </property>
+       </item>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="checkCaseSensitive">
+     <property name="text">
+      <string>Case Sensitive</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_3">
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="btnClose">
+       <property name="text">
+        <string>&amp;Close</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="btnFindPrev">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="text">
+        <string>Find &amp;Previous</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="btnFindNext">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="text">
+        <string>Find &amp;Next</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>btnClose</sender>
+   <signal>clicked()</signal>
+   <receiver>FindDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>216</x>
+     <y>101</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>114</x>
+     <y>107</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>