<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[Freeswitch-trunk][14463] </title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<div id="header">FreeSWITCH Subversion</div>
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://fisheye.freeswitch.org/changelog/FreeSWITCH?cs=14463">14463</a></dd>
<dt>Author</dt> <dd>jmesquita</dd>
<dt>Date</dt> <dd>2009-08-08 18:33:24 -0500 (Sat, 08 Aug 2009)</dd>
</dl>

<h3>Log Message</h3>
<pre>Adding new version of codebase. Not fully functional.</pre>

<h3>Added Paths</h3>
<ul>
<li>freeswitch/trunk/contrib/jmesquita/fsgui/</li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguifsguipro">freeswitch/trunk/contrib/jmesquita/fsgui/fsgui.pro</a></li>
<li>freeswitch/trunk/contrib/jmesquita/fsgui/src/</li>
<li>freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/</li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcfsguiappmanagercpp">freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/appmanager.cpp</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcfsguiappmanagerh">freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/appmanager.h</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcfsguiconfig_plugin_widgetui">freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/config_plugin_widget.ui</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcfsguifsguipro">freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/fsgui.pro</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcfsguimaincpp">freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/main.cpp</a></li>
<li>freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/</li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfaceseslconnectioncpp">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfaceseslconnectionh">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.h</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfacesinterfacesh">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/interfaces.h</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfacesinterfacespro">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/interfaces.pro</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfacesservermanagercpp">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.cpp</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfacesservermanagerh">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.h</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfacesservermanagerui">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.ui</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfacessettingsdialogcpp">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.cpp</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfacessettingsdialogh">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.h</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfacessettingsdialogui">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.ui</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcinterfacesui_settingsh">freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/ui_settings.h</a></li>
<li>freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/</li>
<li>freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/</li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcpluginsconsoleplugincentralWidgetui">freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsole_settingsui">freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/console_settings.ui</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsoleplugincpp">freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsolepluginh">freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsolepluginpro">freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsoletabwidgetcpp">freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsoletabwidgeth">freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsoletabwidgetui">freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.ui</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginsortfilterproxymodelcpp">freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.cpp</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginsortfilterproxymodelh">freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.h</a></li>
<li>freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/</li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcresourcesconnect_iconpng">freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/connect_icon.png</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcresourcesedit_iconpng">freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/edit_icon.png</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcresourcesfsgui_logopng">freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/fsgui_logo.png</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcresourcesnew_server_iconpng">freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/new_server_icon.png</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcresourcesremove_server_iconpng">freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/remove_server_icon.png</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcresourcesresourcesqrc">freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/resources.qrc</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcresourcessavepng">freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/save.png</a></li>
<li><a href="#freeswitchtrunkcontribjmesquitafsguisrcresourcesserver_iconpng">freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/server_icon.png</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="freeswitchtrunkcontribjmesquitafsguifsguipro"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/fsgui.pro (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/fsgui.pro                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/fsgui.pro        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+TEMPLATE = subdirs
+SUBDIRS  = src/interfaces \
+           src/fsgui \
+           src/plugins/consoleplugin
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcfsguiappmanagercpp"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/appmanager.cpp (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/appmanager.cpp                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/appmanager.cpp        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,173 @@
</span><ins>+#include &lt;QtGui&gt;
+#include &lt;QDir&gt;
+#include &lt;QtPlugin&gt;
+#include &quot;servermanager.h&quot;
+#include &quot;settingsdialog.h&quot;
+#include &quot;appmanager.h&quot;
+#include &quot;interfaces.h&quot;
+#include &quot;ui_config_plugin_widget.h&quot;
+
+AppManager::AppManager(QObject *parent)
+    : QObject(parent)
+{
+    QObject::connect(qApp, SIGNAL(lastWindowClosed()),
+                     this, SLOT(lastWindowClosed()));
+
+    QCoreApplication::setOrganizationName(&quot;FreeSWITCH&quot;);
+    QCoreApplication::setApplicationName(&quot;FsGui&quot;);
+    settings = new SettingsDialog();
+    QWidget *base = new QWidget;
+    pluginConfigPage = new Ui::configPage;
+    pluginConfigPage-&gt;setupUi(base);
+    settings-&gt;addConfigItem(&quot;Plugins&quot;, base);
+    QObject::connect(pluginConfigPage-&gt;btnRun, SIGNAL(clicked()),
+                     this, SLOT(runPlugin()));
+    QObject::connect(pluginConfigPage-&gt;listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
+                     this, SLOT(pluginSelected(QListWidgetItem*, QListWidgetItem*)));
+
+    serverManager = new ServerManager;
+
+    qApp-&gt;setWindowIcon(QIcon(&quot;:/icons/fsgui_logo.png&quot;));
+
+    createActions();
+    loadPlugins();
+    settings-&gt;show();
+}
+
+
+void AppManager::createActions()
+{
+    action_exit = new QAction(tr(&quot;E&amp;xit&quot;), this);
+    action_exit-&gt;setShortcut(tr(&quot;Ctrl+Q&quot;));
+    action_exit-&gt;setToolTip(tr(&quot;Exit FsGui&quot;));
+    QWidget::connect(action_exit, SIGNAL(triggered()),
+                     qApp, SLOT(closeAllWindows()));
+
+    action_preferences = new QAction(tr(&quot;&amp;Preferences&quot;), this);
+    QWidget::connect(action_preferences, SIGNAL(triggered()),
+                     settings, SLOT(show()));
+
+    action_about = new QAction(tr(&quot;&amp;About&quot;), this);
+    action_about-&gt;setShortcut(QKeySequence::HelpContents);
+    QWidget::connect(action_about, SIGNAL(triggered()),
+                     this, SLOT(about()));
+}
+
+
+void AppManager::createMenus(QMenuBar * menu_bar)
+{
+    bool file_exists, edit_exists, help_exists = false;
+    QList&lt;QAction *&gt; list = menu_bar-&gt;actions();
+    for (int i = 0; i &lt; list.size(); ++i) {
+        if (QString::compare(list.at(i)-&gt;text(), tr(&quot;&amp;File&quot;), Qt::CaseInsensitive) == 0)
+        {
+            list.at(i)-&gt;menu()-&gt;addAction(action_exit);
+            file_exists = true;
+        }
+        if (QString::compare(list.at(i)-&gt;text(), tr(&quot;&amp;Preferences&quot;), Qt::CaseInsensitive) == 0)
+        {
+            list.at(i)-&gt;menu()-&gt;addAction(action_preferences);
+            edit_exists = true;
+        }
+        if (QString::compare(list.at(i)-&gt;text(), tr(&quot;&amp;Help&quot;), Qt::CaseInsensitive) == 0)
+        {
+            list.at(i)-&gt;menu()-&gt;addAction(action_about);
+            help_exists = true;
+        }
+    }
+    if (!file_exists)
+    {
+        QMenu * menu_file = new QMenu(tr(&quot;&amp;File&quot;), menu_bar);
+        menu_file-&gt;addAction(action_exit);
+        menu_bar-&gt;insertMenu(list.at(0), menu_file);
+    }
+    if (!edit_exists)
+    {
+        QMenu * menu_edit = new QMenu(tr(&quot;&amp;Edit&quot;), menu_bar);
+        menu_edit-&gt;addAction(action_preferences);
+        menu_bar-&gt;insertMenu(list.at(1), menu_edit);
+    }
+    if (!help_exists)
+    {
+        QMenu *menu_help = menu_bar-&gt;addMenu(tr(&quot;&amp;Help&quot;));
+        menu_help-&gt;addAction(action_about);
+    }
+}
+
+void AppManager::loadPlugins()
+{
+    QDir pluginsDir = QDir(qApp-&gt;applicationDirPath());
+#if defined(Q_OS_WIN)
+    if (pluginsDir.dirName().toLower() == &quot;debug&quot; || pluginsDir.dirName().toLower() == &quot;release&quot;)
+        pluginsDir.cdUp();
+#elif defined(Q_OS_MAC)
+    if (pluginsDir.dirName() == &quot;MacOS&quot;) {
+        pluginsDir.cdUp();
+        pluginsDir.cdUp();
+        pluginsDir.cdUp();
+    }
+#endif
+    pluginsDir.cd(&quot;plugins&quot;);
+    foreach (QString fileName, pluginsDir.entryList(QDir::Files))
+    {
+        QPluginLoader *loader = new QPluginLoader(pluginsDir.absoluteFilePath(fileName));
+        if (MonitorInterface *interface = qobject_cast&lt;MonitorInterface *&gt;(loader-&gt;instance()))
+        {
+            if(QMainWindow *interface_window = qobject_cast&lt;QMainWindow *&gt;(loader-&gt;instance()))
+            {
+                list_available_monitor_plugins.append(loader);
+                interface_window-&gt;setWindowTitle(QString(&quot;FsGui - &quot;) + interface_window-&gt;windowTitle());
+                interface_window-&gt;setAttribute(Qt::WA_QuitOnClose);
+                interface-&gt;addConfigItens(settings);
+                interface-&gt;setServerManager(serverManager);
+                createMenus(interface_window-&gt;menuBar());
+                pluginConfigPage-&gt;listWidget-&gt;addItem(QString(&quot;%1 - %2&quot;).arg(interface-&gt;appName(),
+                                                                             interface-&gt;appDescription()));
+            }
+            else
+            {
+                QMessageBox::critical(0, tr(&quot;Error!&quot;),
+                                      tr(&quot;Plugin %1 does not have the proper main Window&quot;));
+            }
+        }
+    }
+    if (list_available_monitor_plugins.isEmpty())
+    {
+        QMessageBox::critical(0, tr(&quot;Error!&quot;),
+                                      tr(&quot;No available plugins. Install compatible plugins before running FsGui.&quot;));
+        exit(1);
+    }
+}
+
+void AppManager::runPlugin()
+{
+    if (list_available_monitor_plugins.at(pluginConfigPage-&gt;listWidget-&gt;currentRow())-&gt;isLoaded())
+    {
+        MonitorInterface * interface = qobject_cast&lt;MonitorInterface *&gt;(list_available_monitor_plugins.at(pluginConfigPage-&gt;listWidget-&gt;currentRow())-&gt;instance());
+        interface-&gt;newInstance();
+        settings-&gt;hide();
+    }
+}
+
+void AppManager::lastWindowClosed()
+{
+    for (int i = 0; i &lt; list_available_monitor_plugins.size(); ++i)
+    {
+        list_available_monitor_plugins.at(i)-&gt;unload();
+    }
+}
+
+void AppManager::pluginSelected(QListWidgetItem *current, QListWidgetItem */*previous*/)
+{
+    if (current)
+        pluginConfigPage-&gt;btnRun-&gt;setEnabled(true);
+    else
+        pluginConfigPage-&gt;btnRun-&gt;setEnabled(false);
+}
+
+void AppManager::about()
+{
+    QMessageBox::about(qobject_cast&lt;QMainWindow *&gt;(list_available_monitor_plugins.first()),
+                       tr(&quot;About FsGui&quot;),
+                       tr(&quot;Hey, this is FsGui!!!&quot;));
+}
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcfsguiappmanagerh"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/appmanager.h (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/appmanager.h                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/appmanager.h        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,74 @@
</span><ins>+#ifndef APPMANAGER_H
+#define APPMANAGER_H
+
+#include &lt;QObject&gt;
+#include &lt;QtCore&gt;
+
+namespace Ui {
+    class configPage;
+}
+class QMainWindow;
+class QAction;
+class QMenu;
+class QMenuBar;
+class QListWidgetItem;
+class MonitorInterface;
+class SettingsDialog;
+class ServerManager;
+
+/*!
+  \brief This class will be the center of each installation
+  and will load some plugins.
+  */
+class AppManager : public QObject
+{
+    Q_OBJECT
+
+public:
+    AppManager(QObject *parent = 0);
+
+private:
+    /*!
+      \brief Create all actions that belong to this specific window.
+      */
+    void createActions();
+    /*!
+      \brief Create menus and override offensing default menus.
+      */
+    void createMenus(QMenuBar *menu_bar);
+    /*!
+      \brief Load all plugins populating each corresponding list
+      */
+    void loadPlugins();
+
+    QList&lt;QPluginLoader *&gt; list_available_monitor_plugins; /*&lt; List of available Monitor plugins */
+    QAction *action_exit; /*&lt; Exit the application */
+    QAction *action_preferences; /*&lt; Show the preferences dialog */
+    QAction *action_about; /*&lt; Calls the about dialog */
+    QMenu *menu_file; /*&lt; The file menu on menu bar */
+    QMenu *menu_edit; /*&lt; The edit menu on menu bar */
+    QMenu *menu_help; /*&lt; The help menu on menu bar */
+    ServerManager *serverManager; /*&lt; The dialog that can fetch new esl connections from the config */
+    SettingsDialog *settings; /*&lt; Settings dialog */
+    Ui::configPage *pluginConfigPage; /*&lt; The plugin config page being used */
+
+private slots:
+    /*!
+      \brief Run the selected plugin.
+      */
+    void runPlugin();
+    /*!
+      \brief Cleanup and give plugins a chance to clean for themselves.
+      */
+    void lastWindowClosed();
+    /*!
+      \brief Just enables or disables the run button when no plugins is selected.
+      */
+    void pluginSelected(QListWidgetItem*, QListWidgetItem*);
+    /*!
+      \brief Show the about dialog.
+      */
+    void about();
+};
+
+#endif // APPMANAGER_H
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcfsguiconfig_plugin_widgetui"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/config_plugin_widget.ui (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/config_plugin_widget.ui                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/config_plugin_widget.ui        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;ui version=&quot;4.0&quot;&gt;
+ &lt;class&gt;configPage&lt;/class&gt;
+ &lt;widget class=&quot;QWidget&quot; name=&quot;configPage&quot;&gt;
+  &lt;property name=&quot;geometry&quot;&gt;
+   &lt;rect&gt;
+    &lt;x&gt;0&lt;/x&gt;
+    &lt;y&gt;0&lt;/y&gt;
+    &lt;width&gt;374&lt;/width&gt;
+    &lt;height&gt;210&lt;/height&gt;
+   &lt;/rect&gt;
+  &lt;/property&gt;
+  &lt;property name=&quot;windowTitle&quot;&gt;
+   &lt;string&gt;Form&lt;/string&gt;
+  &lt;/property&gt;
+  &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout&quot;&gt;
+   &lt;item&gt;
+    &lt;widget class=&quot;QListWidget&quot; name=&quot;listWidget&quot;/&gt;
+   &lt;/item&gt;
+   &lt;item&gt;
+    &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout&quot;&gt;
+     &lt;item&gt;
+      &lt;widget class=&quot;QPushButton&quot; name=&quot;btnRun&quot;&gt;
+       &lt;property name=&quot;enabled&quot;&gt;
+        &lt;bool&gt;false&lt;/bool&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;text&quot;&gt;
+        &lt;string&gt;&amp;amp;Run&lt;/string&gt;
+       &lt;/property&gt;
+      &lt;/widget&gt;
+     &lt;/item&gt;
+     &lt;item&gt;
+      &lt;spacer name=&quot;verticalSpacer&quot;&gt;
+       &lt;property name=&quot;orientation&quot;&gt;
+        &lt;enum&gt;Qt::Vertical&lt;/enum&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;sizeHint&quot; stdset=&quot;0&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;20&lt;/width&gt;
+         &lt;height&gt;40&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+      &lt;/spacer&gt;
+     &lt;/item&gt;
+    &lt;/layout&gt;
+   &lt;/item&gt;
+  &lt;/layout&gt;
+ &lt;/widget&gt;
+ &lt;resources/&gt;
+ &lt;connections/&gt;
+&lt;/ui&gt;
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcfsguifsguipro"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/fsgui.pro (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/fsgui.pro                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/fsgui.pro        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+# version check qt
+contains(QT_VERSION, ^4\.[0-4]\..*) { 
+    message(&quot;Cannot build Qt Creator with Qt version $$QT_VERSION.&quot;)
+    error(&quot;Use at least Qt 4.5.&quot;)
+}
+QT += network
+TARGET = ../../bin/fsgui
+TEMPLATE = app
+INCLUDEPATH = ../interfaces \
+    ../../../../../libs/esl/src/include/
+SOURCES += main.cpp \
+    appmanager.cpp
+HEADERS += appmanager.h
+LIBS += -L../interfaces \
+    -linterfaces \
+    -L../../../../../libs/esl/ \
+    -lesl
+FORMS += config_plugin_widget.ui
+RESOURCES += ../resources/resources.qrc
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcfsguimaincpp"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/main.cpp (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/main.cpp                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/fsgui/main.cpp        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+#include &lt;QtGui/QApplication&gt;
+#include &quot;appmanager.h&quot;
+
+int main(int argc, char *argv[])
+{
+    //Q_INIT_RESOURCE(sdi);
+    QApplication a(argc, argv);
+    AppManager w;
+    return a.exec();
+}
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfaceseslconnectioncpp"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.cpp        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,478 @@
</span><ins>+/*
+ * Copyright (c) 2007, Anthony Minessale II
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Contributor(s):
+ *
+ * Joao Mesquita &lt;jmesquita (at) gmail.com&gt;
+ *
+ */
+
+#include &lt;QtGui&gt;
+#include &lt;esl.h&gt;
+#include &quot;eslconnection.h&quot;
+
+#define event_construct_common() event = NULL; serialized_string = NULL; mine = 0; hp = NULL
+
+void eslSetLogLevel(int level)
+{
+    esl_global_set_default_logger(level);
+}
+
+ESLconnection::ESLconnection(const char *host, const char *port, const char *password, const char *name)
+        : handle(NULL),_host(new QString(host)), _port(new QString(port)),
+        _pass(new QString(password)), _name(new QString(name)){}
+ESLconnection::~ESLconnection()
+{
+    if (isConnected()) {
+        esl_disconnect(handle);
+    }
+
+}
+
+QString ESLconnection::getName()
+{
+    return *_name;
+}
+
+int ESLconnection::disconnect()
+{
+    if (handle)
+    {
+        if (handle-&gt;connected)
+        {
+            return esl_disconnect(handle);
+        }
+    }
+    return 0;
+}
+
+bool ESLconnection::setConsoleLogLevel(int level)
+{
+    ESLevent *event = sendRecv(QString(&quot;log %1&quot;).arg(level).toAscii());
+    if (event)
+    {
+        return true;
+    }
+    return false;
+}
+
+void ESLconnection::connect()
+{
+    start();
+}
+
+int ESLconnection::isConnected()
+{
+    if (handle)
+        return handle-&gt;connected;
+    return 0;
+}
+
+void ESLconnection::send(QString cmd)
+{
+    esl_send(handle, cmd.toAscii());
+}
+
+ESLevent *ESLconnection::sendRecv(const char *cmd)
+{
+    if (esl_send_recv(handle, cmd) == ESL_SUCCESS) {
+        esl_event_t *event;
+        esl_event_dup(&amp;event, handle-&gt;last_sr_event);
+        return new ESLevent(event, 1);
+    }
+
+    return NULL;
+}
+
+void ESLconnection::api(QString cmd)
+{
+    if (cmd.isEmpty()) {
+        return;
+    }
+
+    if (esl_send_recv(handle, QString(&quot;api %1&quot;).arg(cmd).toAscii()) == ESL_SUCCESS) {
+        esl_event_t *event;
+        esl_event_dup(&amp;event, handle-&gt;last_sr_event);
+        emit gotEvent(new ESLevent(event, 1));
+    }
+}
+
+void ESLconnection::bgapi(QString cmd)
+{
+    if (cmd.isEmpty()) {
+        return;
+    }
+
+    if (esl_send_recv(handle, QString(&quot;bgapi %1&quot;).arg(cmd).toAscii()) == ESL_SUCCESS) {
+        esl_event_t *event;
+        esl_event_dup(&amp;event, handle-&gt;last_sr_event);
+        emit gotEvent(new ESLevent(event, 1));
+    }
+}
+
+ESLevent *ESLconnection::getInfo()
+{
+    if (handle-&gt;connected &amp;&amp; handle-&gt;info_event) {
+        esl_event_t *event;
+        esl_event_dup(&amp;event, handle-&gt;info_event);
+        return new ESLevent(event, 1);
+    }
+
+    return NULL;
+}
+
+int ESLconnection::setAsyncExecute(const char *val)
+{
+    if (val) {
+        handle-&gt;async_execute = esl_true(val);
+    }
+    return handle-&gt;async_execute;
+}
+
+int ESLconnection::setEventLock(const char *val)
+{
+    if (val) {
+        handle-&gt;event_lock = esl_true(val);
+    }
+    return handle-&gt;event_lock;
+}
+
+int ESLconnection::execute(const char *app, const char *arg, const char *uuid)
+{
+    return esl_execute(handle, app, arg, uuid);
+}
+
+
+int ESLconnection::executeAsync(const char *app, const char *arg, const char *uuid)
+{
+    int async = handle-&gt;async_execute;
+    int r;
+
+    handle-&gt;async_execute = 1;
+    r = esl_execute(handle, app, arg, uuid);
+    handle-&gt;async_execute = async;
+
+    return r;
+}
+
+int ESLconnection::sendEvent(ESLevent *send_me)
+{
+    return esl_sendevent(handle, send_me-&gt;event);
+}
+
+ESLevent *ESLconnection::recvEvent()
+{
+    if (last_event_obj) {
+        delete last_event_obj;
+    }
+
+    if (esl_recv_event(handle, 1, NULL) == ESL_SUCCESS) {
+        esl_event_t *e = handle-&gt;last_ievent ? handle-&gt;last_ievent : handle-&gt;last_event;
+        if (e) {
+            esl_event_t *event;
+            esl_event_dup(&amp;event, e);
+            last_event_obj = new ESLevent(event, 1);
+            return last_event_obj;
+        }
+    }
+
+    last_event_obj = new ESLevent(&quot;server_disconnected&quot;);
+
+    return last_event_obj;
+}
+
+ESLevent *ESLconnection::recvEventTimed(int ms)
+{
+    if (last_event_obj) {
+        delete last_event_obj;
+        last_event_obj = NULL;
+    }
+
+    if (esl_recv_event_timed(handle, ms, 1, NULL) == ESL_SUCCESS) {
+        esl_event_t *e = handle-&gt;last_ievent ? handle-&gt;last_ievent : handle-&gt;last_event;
+        if (e) {
+            esl_event_t *event;
+            esl_event_dup(&amp;event, e);
+            last_event_obj = new ESLevent(event, 1);
+            return last_event_obj;
+        }
+    }
+
+    return NULL;
+}
+
+ESLevent *ESLconnection::filter(const char *header, const char *value)
+{
+    esl_status_t status = esl_filter(handle, header, value);
+
+    if (status == ESL_SUCCESS &amp;&amp; handle-&gt;last_sr_event) {
+        esl_event_t *event;
+        esl_event_dup(&amp;event, handle-&gt;last_sr_event);
+        return new ESLevent(event, 1);
+    }
+
+    return NULL;
+
+}
+
+int ESLconnection::events(const char *etype, const char *value)
+{
+    esl_event_type_t type_id = ESL_EVENT_TYPE_PLAIN;
+
+    if (!strcmp(etype, &quot;xml&quot;)) {
+        type_id = ESL_EVENT_TYPE_XML;
+    }
+
+    return esl_events(handle, type_id, value);
+}
+
+void ESLconnection::run(void)
+{
+
+    handle = new esl_handle_t;
+    memset(handle, 0, sizeof(esl_handle_t));
+    last_event_obj = NULL;
+    if (esl_connect(handle, _host-&gt;toAscii(), _port-&gt;toInt(), _pass-&gt;toAscii()) == ESL_SUCCESS)
+    {
+        send(&quot;event plain ALL&quot;);
+        send(&quot;log 7&quot;);
+        emit connected();
+    }
+    while(isConnected())
+    {
+        ESLevent * event = recvEventTimed(10);
+        if (event)
+        {
+            ESLevent * e = new ESLevent(event);
+            emit gotEvent(e);
+        }
+    }
+    if (!QString(handle-&gt;err).isEmpty())
+    {
+        emit connectionFailed(handle-&gt;err);
+    }
+    else
+    {
+        emit disconnected();
+    }
+}
+
+// ESLevent
+///////////////////////////////////////////////////////////////////////
+
+ESLevent::ESLevent(const char *type, const char *subclass_name)
+{
+    esl_event_types_t event_id;
+
+    event_construct_common();
+
+    if (esl_name_event(type, &amp;event_id) != ESL_SUCCESS) {
+        event_id = ESL_EVENT_MESSAGE;
+    }
+
+    if (!esl_strlen_zero(subclass_name) &amp;&amp; event_id != ESL_EVENT_CUSTOM) {
+        esl_log(ESL_LOG_WARNING, &quot;Changing event type to custom because you specified a subclass name!\n&quot;);
+        event_id = ESL_EVENT_CUSTOM;
+    }
+
+    if (esl_event_create_subclass(&amp;event, event_id, subclass_name) != ESL_SUCCESS) {
+        esl_log(ESL_LOG_ERROR, &quot;Failed to create event!\n&quot;);
+        event = NULL;
+    }
+
+    serialized_string = NULL;
+    mine = 1;
+}
+
+ESLevent::ESLevent(esl_event_t *wrap_me, int free_me)
+{
+    event_construct_common();
+    event = wrap_me;
+    mine = free_me;
+    serialized_string = NULL;
+}
+
+
+ESLevent::ESLevent(ESLevent *me)
+{
+    /* workaround for silly php thing */
+    event = me-&gt;event;
+    mine = me-&gt;mine;
+    serialized_string = NULL;
+    me-&gt;event = NULL;
+    me-&gt;mine = 0;
+    esl_safe_free(me-&gt;serialized_string);
+}
+
+ESLevent::~ESLevent()
+{
+
+    if (serialized_string) {
+        free(serialized_string);
+    }
+
+    if (event &amp;&amp; mine) {
+        esl_event_destroy(&amp;event);
+    }
+}
+
+const char *ESLevent::nextHeader(void)
+{
+    const char *name = NULL;
+
+    if (hp) {
+        name = hp-&gt;name;
+        hp = hp-&gt;next;
+    }
+
+    return name;
+}
+
+const char *ESLevent::firstHeader(void)
+{
+    if (event) {
+        hp = event-&gt;headers;
+    }
+
+    return nextHeader();
+}
+
+const char *ESLevent::serialize()
+{
+    this_check(&quot;&quot;);
+
+    esl_safe_free(serialized_string);
+
+    if (!event) {
+        return &quot;&quot;;
+    }
+
+    if (esl_event_serialize(event, &amp;serialized_string, ESL_TRUE) == ESL_SUCCESS) {
+        return serialized_string;
+    }
+
+    return &quot;&quot;;
+
+}
+
+bool ESLevent::setPriority(esl_priority_t priority)
+{
+    this_check(false);
+
+    if (event) {
+        esl_event_set_priority(event, priority);
+        return true;
+    } else {
+        esl_log(ESL_LOG_ERROR, &quot;Trying to setPriority an event that does not exist!\n&quot;);
+    }
+    return false;
+}
+
+const char *ESLevent::getHeader(const char *header_name)
+{
+    this_check(&quot;&quot;);
+
+    if (event) {
+        return esl_event_get_header(event, header_name);
+    } else {
+        esl_log(ESL_LOG_ERROR, &quot;Trying to getHeader an event that does not exist!\n&quot;);
+    }
+    return NULL;
+}
+
+bool ESLevent::addHeader(const char *header_name, const char *value)
+{
+    this_check(false);
+
+    if (event) {
+        return esl_event_add_header_string(event, ESL_STACK_BOTTOM, header_name, value) == ESL_SUCCESS ? true : false;
+    } else {
+        esl_log(ESL_LOG_ERROR, &quot;Trying to addHeader an event that does not exist!\n&quot;);
+    }
+
+    return false;
+}
+
+bool ESLevent::delHeader(const char *header_name)
+{
+    this_check(false);
+
+    if (event) {
+        return esl_event_del_header(event, header_name) == ESL_SUCCESS ? true : false;
+    } else {
+        esl_log(ESL_LOG_ERROR, &quot;Trying to delHeader an event that does not exist!\n&quot;);
+    }
+
+    return false;
+}
+
+
+bool ESLevent::addBody(const char *value)
+{
+    this_check(false);
+
+    if (event) {
+        return esl_event_add_body(event, &quot;%s&quot;, value) == ESL_SUCCESS ? true : false;
+    } else {
+        esl_log(ESL_LOG_ERROR, &quot;Trying to addBody an event that does not exist!\n&quot;);
+    }
+
+    return false;
+}
+
+char *ESLevent::getBody(void)
+{
+
+    this_check((char *)&quot;&quot;);
+
+    if (event) {
+        return esl_event_get_body(event);
+    } else {
+        esl_log(ESL_LOG_ERROR, &quot;Trying to getBody an event that does not exist!\n&quot;);
+    }
+
+    return NULL;
+}
+
+const char *ESLevent::getType(void)
+{
+    this_check(&quot;&quot;);
+
+    if (event) {
+        return esl_event_name(event-&gt;event_id);
+    } else {
+        esl_log(ESL_LOG_ERROR, &quot;Trying to getType an event that does not exist!\n&quot;);
+    }
+
+    return (char *) &quot;invalid&quot;;
+}
+
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfaceseslconnectionh"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.h (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.h                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/eslconnection.h        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,116 @@
</span><ins>+/*
+ * Copyright (c) 2007, Anthony Minessale II
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Contributor(s):
+ *
+ * Joao Mesquita &lt;jmesquita (at) gmail.com&gt;
+ *
+ */
+
+#ifndef ESLCONNECTION_H
+#define ESLCONNECTION_H
+#include &lt;QThread&gt;
+#include &lt;QtGui&gt;
+#include &lt;esl.h&gt;
+
+#define this_check(x) do { if (!this) { esl_log(ESL_LOG_ERROR, &quot;object is not initalized\n&quot;); return x;}} while(0)
+#define this_check_void() do { if (!this) { esl_log(ESL_LOG_ERROR, &quot;object is not initalized\n&quot;); return;}} while(0)
+
+
+class ESLevent {
+ private:
+        esl_event_header_t *hp;
+ public:
+        esl_event_t *event;
+        char *serialized_string;
+        int mine;
+
+        ESLevent(const char *type, const char *subclass_name = NULL);
+        ESLevent(esl_event_t *wrap_me, int free_me = 0);
+        ESLevent(ESLevent *me);
+        virtual ~ESLevent();
+        const char *serialize();
+        bool setPriority(esl_priority_t priority = ESL_PRIORITY_NORMAL);
+        const char *getHeader(const char *header_name);
+        char *getBody(void);
+        const char *getType(void);
+        bool addBody(const char *value);
+        bool addHeader(const char *header_name, const char *value);
+        bool delHeader(const char *header_name);
+        const char *firstHeader(void);
+        const char *nextHeader(void);
+};
+
+class ESLconnection : public QThread
+{
+    Q_OBJECT
+ private:
+    esl_handle_t *handle;
+    ESLevent *last_event_obj;
+    QString *_host;
+    QString *_port;
+    QString *_pass;
+    QString *_name;
+ public:
+    ESLconnection(const char *host, const char *port, const char *password, const char *name);
+    virtual ~ESLconnection();
+    int isConnected();
+    void connect();
+    ESLevent *getInfo();
+    ESLevent *sendRecv(const char *cmd);
+    int sendEvent(ESLevent *send_me);
+    ESLevent *recvEvent();
+    ESLevent *recvEventTimed(int ms);
+    ESLevent *filter(const char *header, const char *value);
+    int events(const char *etype, const char *value);
+    int execute(const char *app, const char *arg = NULL, const char *uuid = NULL);
+    int executeAsync(const char *app, const char *arg = NULL, const char *uuid = NULL);
+    int setAsyncExecute(const char *val);
+    int setEventLock(const char *val);
+    int disconnect(void);
+    bool setConsoleLogLevel(int);
+    void api(QString cmd);
+    void bgapi(QString cmd);
+    void send(QString cmd);
+    QString getName();
+signals:
+    void connected(void);
+    void disconnected(void);
+    void connectionFailed(QString);
+    void gotEvent(ESLevent*);
+protected:
+    void run();
+};
+
+void eslSetLogLevel(int level);
+
+#endif // ESLCONNECTION_H
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfacesinterfacesh"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/interfaces.h (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/interfaces.h                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/interfaces.h        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+#ifndef INTERFACES_H
+#define INTERFACES_H
+
+#include &lt;QtPlugin&gt;
+
+class ESLevent;
+class SettingsDialog;
+class ServerManager;
+
+/*!
+  \brief This interface is provided to extend FsGui with applications that
+  could do any kind of monitoring of any kinda of data inside FreeSWITCH
+  or its components
+  */
+class MonitorInterface
+{
+public:
+    virtual ~MonitorInterface() { }
+    /*!
+      \brief This returns the plugin itself so we can connect signals/slots
+      */
+    virtual QObject* getMonitorInterfaceObject() = 0;
+    /*!
+      \brief This should return the name of the application
+      */
+    virtual QString appName() = 0;
+    /*!
+      \brief This should return the application description.
+      */
+    virtual QString appDescription() = 0;
+    /*!
+      \brief Add a new configuration item to the settings dialog
+      */
+    virtual void addConfigItens(SettingsDialog *settings) = 0;
+    /*!
+      \brief Sets a pointer to ServerManager object
+      */
+    virtual void setServerManager(ServerManager *serverManager) = 0;
+    /*!
+      \brief Run a new instance of this application.
+    */
+    virtual void newInstance() = 0;
+};
+
+Q_DECLARE_INTERFACE(MonitorInterface, &quot;com.fsgui.fsgui.MonitorInterface/1.0&quot;)
+#endif // INTERFACES_H
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfacesinterfacespro"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/interfaces.pro (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/interfaces.pro                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/interfaces.pro        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+TEMPLATE = lib
+CONFIG += staticlib
+INCLUDEPATH = ../fsgui/ \
+    ../../../../../libs/esl/src/include/
+HEADERS = interfaces.h \
+    settingsdialog.h \
+    servermanager.h \
+    eslconnection.h
+SOURCES = settingsdialog.cpp \
+    servermanager.cpp \
+    eslconnection.cpp
+FORMS += settingsdialog.ui \
+    servermanager.ui
+LIBS+=-L../../../../../libs/esl/ \
+    -lesl
+RESOURCES += ../resources/resources.qrc
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfacesservermanagercpp"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.cpp (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.cpp                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.cpp        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,155 @@
</span><ins>+#include &lt;QtGui&gt;
+#include &quot;eslconnection.h&quot;
+#include &quot;servermanager.h&quot;
+#include &quot;ui_servermanager.h&quot;
+
+ServerManager::ServerManager(QWidget *parent) :
+    QDialog(parent),
+    m_ui(new Ui::ServerManager)
+{
+    m_ui-&gt;setupUi(this);
+
+    m_ui-&gt;serverConfigTabs-&gt;removeTab(1);
+
+    readSettings();
+    QObject::connect(m_ui-&gt;listServers, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
+                     this, SLOT(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)));
+    QObject::connect(m_ui-&gt;btnAddServer, SIGNAL(clicked()),
+                     this, SLOT(addServer()));
+    QObject::connect(m_ui-&gt;btnDelServer, SIGNAL(clicked()),
+                     this, SLOT(deleteServer()));
+    QObject::connect(m_ui-&gt;btnEdit, SIGNAL(clicked()),
+                     this, SLOT(editServer()));
+    QObject::connect(m_ui-&gt;btnSave, SIGNAL(clicked()),
+                     this, SLOT(saveServer()));
+}
+
+ServerManager::~ServerManager()
+{
+    delete m_ui;
+}
+
+ESLconnection * ServerManager::getESLconnection()
+{
+    QTreeWidgetItem * item = m_ui-&gt;listServers-&gt;selectedItems().first();
+    return new ESLconnection(item-&gt;data(0, ServerManager::Host).toByteArray(),
+                             item-&gt;data(0, ServerManager::Port).toByteArray(),
+                             item-&gt;data(0, ServerManager::Password).toByteArray(),
+                             item-&gt;data(0, ServerManager::Name).toByteArray());
+}
+
+void ServerManager::changeEvent(QEvent *e)
+{
+    QDialog::changeEvent(e);
+    switch (e-&gt;type()) {
+    case QEvent::LanguageChange:
+        m_ui-&gt;retranslateUi(this);
+        break;
+    default:
+        break;
+    }
+}
+
+void ServerManager::currentItemChanged (QTreeWidgetItem * current, QTreeWidgetItem * /*previous*/)
+{
+    if (current)
+    {
+        m_ui-&gt;lineHost-&gt;setText(current-&gt;data(0,ServerManager::Host).toString());
+        m_ui-&gt;linePassword-&gt;setText(current-&gt;data(0,ServerManager::Password).toString());
+        m_ui-&gt;linePort-&gt;setText(current-&gt;data(0,ServerManager::Port).toString());
+        m_ui-&gt;btnConnect-&gt;setEnabled(true);
+        m_ui-&gt;btnEdit-&gt;setEnabled(true);
+        m_ui-&gt;lineHost-&gt;setEnabled(false);
+        m_ui-&gt;linePassword-&gt;setEnabled(false);
+        m_ui-&gt;linePort-&gt;setEnabled(false);
+        m_ui-&gt;btnSave-&gt;setEnabled(false);
+    }
+    else
+    {
+        m_ui-&gt;btnEdit-&gt;setEnabled(false);
+        m_ui-&gt;btnConnect-&gt;setEnabled(false);
+    }
+}
+
+void ServerManager::addServer()
+{
+    bool ok;
+    QString text = QInputDialog::getText(this, tr(&quot;New Server Name&quot;),
+                                         tr(&quot;Server Name:&quot;), QLineEdit::Normal,
+                                         &quot;&quot;, &amp;ok);
+    if (ok &amp;&amp; !text.isEmpty())
+    {
+        QSettings settings;
+        settings.beginGroup(&quot;Servers&quot;);
+        settings.beginGroup(text);
+        settings.setValue(&quot;name&quot;, text);
+        settings.setValue(&quot;port&quot;, 8021);
+        settings.endGroup();
+        settings.endGroup();
+        readSettings();
+        m_ui-&gt;listServers-&gt;setCurrentItem(m_ui-&gt;listServers-&gt;findItems(text, Qt::MatchExactly, 0).first());
+    }
+}
+
+void ServerManager::editServer()
+{
+    m_ui-&gt;lineHost-&gt;setEnabled(true);
+    m_ui-&gt;linePassword-&gt;setEnabled(true);
+    m_ui-&gt;linePort-&gt;setEnabled(true);
+    m_ui-&gt;btnSave-&gt;setEnabled(true);
+    m_ui-&gt;btnEdit-&gt;setEnabled(false);
+    m_ui-&gt;lineHost-&gt;setFocus();
+}
+
+void ServerManager::saveServer()
+{
+    QTreeWidgetItem * item = m_ui-&gt;listServers-&gt;selectedItems().first();
+    item-&gt;setData(0, ServerManager::Host, m_ui-&gt;lineHost-&gt;text());
+    item-&gt;setData(0, ServerManager::Password, m_ui-&gt;linePassword-&gt;text());
+    item-&gt;setData(0, ServerManager::Port, m_ui-&gt;linePort-&gt;text());
+
+    QSettings settings;
+    settings.beginGroup(&quot;Servers&quot;);
+    settings.beginGroup(item-&gt;data(0, ServerManager::Name).toString());
+    settings.setValue(&quot;host&quot;, m_ui-&gt;lineHost-&gt;text());
+    settings.setValue(&quot;password&quot;, m_ui-&gt;linePassword-&gt;text());
+    settings.setValue(&quot;port&quot;, m_ui-&gt;linePort-&gt;text());
+    settings.endGroup();
+    settings.endGroup();
+
+    m_ui-&gt;lineHost-&gt;setEnabled(false);
+    m_ui-&gt;linePassword-&gt;setEnabled(false);
+    m_ui-&gt;linePort-&gt;setEnabled(false);
+    m_ui-&gt;btnSave-&gt;setEnabled(false);
+    m_ui-&gt;btnEdit-&gt;setEnabled(true);
+}
+
+void ServerManager::deleteServer()
+{
+    QTreeWidgetItem *item = m_ui-&gt;listServers-&gt;selectedItems().first();
+    QSettings settings;
+    settings.beginGroup(&quot;Servers&quot;);
+    settings.remove(item-&gt;data(0, ServerManager::Name).toString());
+    delete item;
+}
+
+void ServerManager::readSettings()
+{
+    m_ui-&gt;listServers-&gt;clear();
+    QSettings settings;
+    settings.beginGroup(&quot;Servers&quot;);
+    foreach (QString server, settings.childGroups())
+    {
+        settings.beginGroup(server);
+        QTreeWidgetItem *serverItem = new QTreeWidgetItem(m_ui-&gt;listServers-&gt;invisibleRootItem());
+        serverItem-&gt;setIcon(0, QIcon(&quot;:/icons/server_icon.png&quot;));
+        serverItem-&gt;setText(0, settings.value(&quot;name&quot;).toString());
+        serverItem-&gt;setData(0, ServerManager::Name, settings.value(&quot;name&quot;));
+        serverItem-&gt;setData(0, ServerManager::Host, settings.value(&quot;host&quot;));
+        serverItem-&gt;setData(0, ServerManager::Port, settings.value(&quot;port&quot;));
+        serverItem-&gt;setData(0, ServerManager::Password, settings.value(&quot;password&quot;));
+        settings.endGroup();
+    }
+    settings.endGroup();
+}
+
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfacesservermanagerh"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.h (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.h                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.h        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+#ifndef SERVERMANAGER_H
+#define SERVERMANAGER_H
+
+#include &lt;QtGui/QDialog&gt;
+
+namespace Ui {
+    class ServerManager;
+}
+
+class ESLconnection;
+
+class QTreeWidgetItem;
+
+class ServerManager : public QDialog {
+    Q_OBJECT
+public:
+    ServerManager(QWidget *parent = 0);
+    ~ServerManager();
+    ESLconnection * getESLconnection();
+
+protected:
+    void changeEvent(QEvent *e);
+
+private slots:
+    void currentItemChanged ( QTreeWidgetItem * current, QTreeWidgetItem * previous );
+    void addServer();
+    void editServer();
+    void saveServer();
+    void deleteServer();
+
+private:
+    Ui::ServerManager *m_ui;
+
+    enum {
+        Host = Qt::UserRole,
+        Port,
+        Password,
+        Name
+    };
+
+    void readSettings();
+};
+
+#endif // SERVERMANAGER_H
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfacesservermanagerui"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.ui (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.ui                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/servermanager.ui        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,285 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;ui version=&quot;4.0&quot;&gt;
+ &lt;class&gt;ServerManager&lt;/class&gt;
+ &lt;widget class=&quot;QDialog&quot; name=&quot;ServerManager&quot;&gt;
+  &lt;property name=&quot;windowModality&quot;&gt;
+   &lt;enum&gt;Qt::ApplicationModal&lt;/enum&gt;
+  &lt;/property&gt;
+  &lt;property name=&quot;geometry&quot;&gt;
+   &lt;rect&gt;
+    &lt;x&gt;0&lt;/x&gt;
+    &lt;y&gt;0&lt;/y&gt;
+    &lt;width&gt;534&lt;/width&gt;
+    &lt;height&gt;292&lt;/height&gt;
+   &lt;/rect&gt;
+  &lt;/property&gt;
+  &lt;property name=&quot;windowTitle&quot;&gt;
+   &lt;string&gt;Server Manager&lt;/string&gt;
+  &lt;/property&gt;
+  &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout_3&quot;&gt;
+   &lt;item&gt;
+    &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_4&quot;&gt;
+     &lt;item&gt;
+      &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout_2&quot;&gt;
+       &lt;item&gt;
+        &lt;widget class=&quot;QTreeWidget&quot; name=&quot;listServers&quot;&gt;
+         &lt;column&gt;
+          &lt;property name=&quot;text&quot;&gt;
+           &lt;string&gt;Servers&lt;/string&gt;
+          &lt;/property&gt;
+         &lt;/column&gt;
+        &lt;/widget&gt;
+       &lt;/item&gt;
+       &lt;item&gt;
+        &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout&quot;&gt;
+         &lt;item&gt;
+          &lt;widget class=&quot;QPushButton&quot; name=&quot;btnAddServer&quot;&gt;
+           &lt;property name=&quot;text&quot;&gt;
+            &lt;string&gt;&amp;amp;Add server&lt;/string&gt;
+           &lt;/property&gt;
+           &lt;property name=&quot;icon&quot;&gt;
+            &lt;iconset resource=&quot;../resources/resources.qrc&quot;&gt;
+             &lt;normaloff&gt;:/icons/new_server_icon.png&lt;/normaloff&gt;:/icons/new_server_icon.png&lt;/iconset&gt;
+           &lt;/property&gt;
+          &lt;/widget&gt;
+         &lt;/item&gt;
+         &lt;item&gt;
+          &lt;widget class=&quot;QPushButton&quot; name=&quot;btnDelServer&quot;&gt;
+           &lt;property name=&quot;text&quot;&gt;
+            &lt;string&gt;&amp;amp;Remove Server&lt;/string&gt;
+           &lt;/property&gt;
+           &lt;property name=&quot;icon&quot;&gt;
+            &lt;iconset resource=&quot;../resources/resources.qrc&quot;&gt;
+             &lt;normaloff&gt;:/icons/remove_server_icon.png&lt;/normaloff&gt;:/icons/remove_server_icon.png&lt;/iconset&gt;
+           &lt;/property&gt;
+          &lt;/widget&gt;
+         &lt;/item&gt;
+        &lt;/layout&gt;
+       &lt;/item&gt;
+      &lt;/layout&gt;
+     &lt;/item&gt;
+     &lt;item&gt;
+      &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout&quot;&gt;
+       &lt;item&gt;
+        &lt;widget class=&quot;QTabWidget&quot; name=&quot;serverConfigTabs&quot;&gt;
+         &lt;property name=&quot;enabled&quot;&gt;
+          &lt;bool&gt;true&lt;/bool&gt;
+         &lt;/property&gt;
+         &lt;property name=&quot;currentIndex&quot;&gt;
+          &lt;number&gt;0&lt;/number&gt;
+         &lt;/property&gt;
+         &lt;widget class=&quot;QWidget&quot; name=&quot;tabBasic&quot;&gt;
+          &lt;attribute name=&quot;title&quot;&gt;
+           &lt;string&gt;Basic&lt;/string&gt;
+          &lt;/attribute&gt;
+          &lt;layout class=&quot;QFormLayout&quot; name=&quot;formLayout&quot;&gt;
+           &lt;item row=&quot;0&quot; column=&quot;0&quot;&gt;
+            &lt;widget class=&quot;QLabel&quot; name=&quot;label&quot;&gt;
+             &lt;property name=&quot;enabled&quot;&gt;
+              &lt;bool&gt;true&lt;/bool&gt;
+             &lt;/property&gt;
+             &lt;property name=&quot;text&quot;&gt;
+              &lt;string&gt;Host&lt;/string&gt;
+             &lt;/property&gt;
+            &lt;/widget&gt;
+           &lt;/item&gt;
+           &lt;item row=&quot;0&quot; column=&quot;1&quot;&gt;
+            &lt;widget class=&quot;QLineEdit&quot; name=&quot;lineHost&quot;&gt;
+             &lt;property name=&quot;enabled&quot;&gt;
+              &lt;bool&gt;false&lt;/bool&gt;
+             &lt;/property&gt;
+            &lt;/widget&gt;
+           &lt;/item&gt;
+           &lt;item row=&quot;1&quot; column=&quot;0&quot;&gt;
+            &lt;widget class=&quot;QLabel&quot; name=&quot;label_2&quot;&gt;
+             &lt;property name=&quot;enabled&quot;&gt;
+              &lt;bool&gt;true&lt;/bool&gt;
+             &lt;/property&gt;
+             &lt;property name=&quot;text&quot;&gt;
+              &lt;string&gt;Password&lt;/string&gt;
+             &lt;/property&gt;
+            &lt;/widget&gt;
+           &lt;/item&gt;
+           &lt;item row=&quot;1&quot; column=&quot;1&quot;&gt;
+            &lt;widget class=&quot;QLineEdit&quot; name=&quot;linePassword&quot;&gt;
+             &lt;property name=&quot;enabled&quot;&gt;
+              &lt;bool&gt;false&lt;/bool&gt;
+             &lt;/property&gt;
+            &lt;/widget&gt;
+           &lt;/item&gt;
+           &lt;item row=&quot;2&quot; column=&quot;0&quot;&gt;
+            &lt;widget class=&quot;QLabel&quot; name=&quot;label_3&quot;&gt;
+             &lt;property name=&quot;enabled&quot;&gt;
+              &lt;bool&gt;true&lt;/bool&gt;
+             &lt;/property&gt;
+             &lt;property name=&quot;text&quot;&gt;
+              &lt;string&gt;Port&lt;/string&gt;
+             &lt;/property&gt;
+            &lt;/widget&gt;
+           &lt;/item&gt;
+           &lt;item row=&quot;2&quot; column=&quot;1&quot;&gt;
+            &lt;widget class=&quot;QLineEdit&quot; name=&quot;linePort&quot;&gt;
+             &lt;property name=&quot;enabled&quot;&gt;
+              &lt;bool&gt;false&lt;/bool&gt;
+             &lt;/property&gt;
+            &lt;/widget&gt;
+           &lt;/item&gt;
+          &lt;/layout&gt;
+         &lt;/widget&gt;
+         &lt;widget class=&quot;QWidget&quot; name=&quot;tabAdvanced&quot;&gt;
+          &lt;attribute name=&quot;title&quot;&gt;
+           &lt;string&gt;Advanced&lt;/string&gt;
+          &lt;/attribute&gt;
+         &lt;/widget&gt;
+        &lt;/widget&gt;
+       &lt;/item&gt;
+       &lt;item&gt;
+        &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_2&quot;&gt;
+         &lt;item&gt;
+          &lt;widget class=&quot;QPushButton&quot; name=&quot;btnSave&quot;&gt;
+           &lt;property name=&quot;enabled&quot;&gt;
+            &lt;bool&gt;false&lt;/bool&gt;
+           &lt;/property&gt;
+           &lt;property name=&quot;text&quot;&gt;
+            &lt;string&gt;&amp;amp;Save&lt;/string&gt;
+           &lt;/property&gt;
+           &lt;property name=&quot;icon&quot;&gt;
+            &lt;iconset resource=&quot;../resources/resources.qrc&quot;&gt;
+             &lt;normaloff&gt;:/icons/save.png&lt;/normaloff&gt;:/icons/save.png&lt;/iconset&gt;
+           &lt;/property&gt;
+           &lt;property name=&quot;iconSize&quot;&gt;
+            &lt;size&gt;
+             &lt;width&gt;20&lt;/width&gt;
+             &lt;height&gt;20&lt;/height&gt;
+            &lt;/size&gt;
+           &lt;/property&gt;
+          &lt;/widget&gt;
+         &lt;/item&gt;
+         &lt;item&gt;
+          &lt;widget class=&quot;QPushButton&quot; name=&quot;btnEdit&quot;&gt;
+           &lt;property name=&quot;enabled&quot;&gt;
+            &lt;bool&gt;false&lt;/bool&gt;
+           &lt;/property&gt;
+           &lt;property name=&quot;text&quot;&gt;
+            &lt;string&gt;&amp;amp;Edit&lt;/string&gt;
+           &lt;/property&gt;
+           &lt;property name=&quot;icon&quot;&gt;
+            &lt;iconset resource=&quot;../resources/resources.qrc&quot;&gt;
+             &lt;normaloff&gt;:/icons/edit_icon.png&lt;/normaloff&gt;:/icons/edit_icon.png&lt;/iconset&gt;
+           &lt;/property&gt;
+           &lt;property name=&quot;iconSize&quot;&gt;
+            &lt;size&gt;
+             &lt;width&gt;20&lt;/width&gt;
+             &lt;height&gt;20&lt;/height&gt;
+            &lt;/size&gt;
+           &lt;/property&gt;
+          &lt;/widget&gt;
+         &lt;/item&gt;
+        &lt;/layout&gt;
+       &lt;/item&gt;
+      &lt;/layout&gt;
+     &lt;/item&gt;
+    &lt;/layout&gt;
+   &lt;/item&gt;
+   &lt;item&gt;
+    &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_3&quot;&gt;
+     &lt;item&gt;
+      &lt;spacer name=&quot;horizontalSpacer&quot;&gt;
+       &lt;property name=&quot;orientation&quot;&gt;
+        &lt;enum&gt;Qt::Horizontal&lt;/enum&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;sizeHint&quot; stdset=&quot;0&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;40&lt;/width&gt;
+         &lt;height&gt;20&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+      &lt;/spacer&gt;
+     &lt;/item&gt;
+     &lt;item&gt;
+      &lt;widget class=&quot;QPushButton&quot; name=&quot;pushButton_5&quot;&gt;
+       &lt;property name=&quot;maximumSize&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;85&lt;/width&gt;
+         &lt;height&gt;28&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;text&quot;&gt;
+        &lt;string&gt;Cancel&lt;/string&gt;
+       &lt;/property&gt;
+      &lt;/widget&gt;
+     &lt;/item&gt;
+     &lt;item&gt;
+      &lt;widget class=&quot;QPushButton&quot; name=&quot;btnConnect&quot;&gt;
+       &lt;property name=&quot;enabled&quot;&gt;
+        &lt;bool&gt;false&lt;/bool&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;maximumSize&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;85&lt;/width&gt;
+         &lt;height&gt;28&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;text&quot;&gt;
+        &lt;string&gt;&amp;amp;Connect&lt;/string&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;icon&quot;&gt;
+        &lt;iconset resource=&quot;../resources/resources.qrc&quot;&gt;
+         &lt;normaloff&gt;:/icons/connect_icon.png&lt;/normaloff&gt;:/icons/connect_icon.png&lt;/iconset&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;iconSize&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;20&lt;/width&gt;
+         &lt;height&gt;20&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;shortcut&quot;&gt;
+        &lt;string&gt;Return&lt;/string&gt;
+       &lt;/property&gt;
+      &lt;/widget&gt;
+     &lt;/item&gt;
+    &lt;/layout&gt;
+   &lt;/item&gt;
+  &lt;/layout&gt;
+  &lt;zorder&gt;&lt;/zorder&gt;
+ &lt;/widget&gt;
+ &lt;resources&gt;
+  &lt;include location=&quot;../resources/resources.qrc&quot;/&gt;
+  &lt;include location=&quot;../resources/resources.qrc&quot;/&gt;
+  &lt;include location=&quot;../resources/resources.qrc&quot;/&gt;
+ &lt;/resources&gt;
+ &lt;connections&gt;
+  &lt;connection&gt;
+   &lt;sender&gt;pushButton_5&lt;/sender&gt;
+   &lt;signal&gt;clicked()&lt;/signal&gt;
+   &lt;receiver&gt;ServerManager&lt;/receiver&gt;
+   &lt;slot&gt;reject()&lt;/slot&gt;
+   &lt;hints&gt;
+    &lt;hint type=&quot;sourcelabel&quot;&gt;
+     &lt;x&gt;438&lt;/x&gt;
+     &lt;y&gt;346&lt;/y&gt;
+    &lt;/hint&gt;
+    &lt;hint type=&quot;destinationlabel&quot;&gt;
+     &lt;x&gt;171&lt;/x&gt;
+     &lt;y&gt;257&lt;/y&gt;
+    &lt;/hint&gt;
+   &lt;/hints&gt;
+  &lt;/connection&gt;
+  &lt;connection&gt;
+   &lt;sender&gt;btnConnect&lt;/sender&gt;
+   &lt;signal&gt;clicked()&lt;/signal&gt;
+   &lt;receiver&gt;ServerManager&lt;/receiver&gt;
+   &lt;slot&gt;accept()&lt;/slot&gt;
+   &lt;hints&gt;
+    &lt;hint type=&quot;sourcelabel&quot;&gt;
+     &lt;x&gt;564&lt;/x&gt;
+     &lt;y&gt;365&lt;/y&gt;
+    &lt;/hint&gt;
+    &lt;hint type=&quot;destinationlabel&quot;&gt;
+     &lt;x&gt;617&lt;/x&gt;
+     &lt;y&gt;351&lt;/y&gt;
+    &lt;/hint&gt;
+   &lt;/hints&gt;
+  &lt;/connection&gt;
+ &lt;/connections&gt;
+&lt;/ui&gt;
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfacessettingsdialogcpp"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.cpp (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.cpp                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.cpp        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+#include &lt;QtGui&gt;
+#include &quot;settingsdialog.h&quot;
+#include &quot;ui_settingsdialog.h&quot;
+
+SettingsDialog::SettingsDialog(QWidget *parent) :
+    QDialog(parent),
+    m_ui(new Ui::SettingsDialog)
+{
+    m_ui-&gt;setupUi(this);
+    settings = new QSettings;
+    QObject::connect(m_ui-&gt;listConfig, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
+                     this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*)));
+}
+
+SettingsDialog::~SettingsDialog()
+{
+    delete m_ui;
+}
+
+void SettingsDialog::changeEvent(QEvent *e)
+{
+    QDialog::changeEvent(e);
+    switch (e-&gt;type()) {
+    case QEvent::LanguageChange:
+        m_ui-&gt;retranslateUi(this);
+        break;
+    default:
+        break;
+    }
+}
+
+void SettingsDialog::addConfigItem(QString item, QWidget *page)
+{
+    QListWidgetItem *item_widget = new QListWidgetItem(item);
+    addConfigItem(item_widget, page);
+}
+
+void SettingsDialog::addConfigItem(QListWidgetItem *item, QWidget *page)
+{
+    m_ui-&gt;listConfig-&gt;addItem(item);
+    m_ui-&gt;configPages-&gt;insertWidget(m_ui-&gt;listConfig-&gt;row(item),page);
+}
+
+void SettingsDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous)
+{
+    if (!current)
+        current = previous;
+
+    m_ui-&gt;configPages-&gt;setCurrentIndex(m_ui-&gt;listConfig-&gt;row(current));
+}
+
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfacessettingsdialogh"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.h (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.h                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.h        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+#ifndef SETTINGSDIALOG_H
+#define SETTINGSDIALOG_H
+
+#include &lt;QtGui/QDialog&gt;
+
+namespace Ui {
+    class SettingsDialog;
+}
+class QListWidgetItem;
+class QSettings;
+
+class SettingsDialog : public QDialog {
+    Q_OBJECT
+public:
+    SettingsDialog(QWidget *parent = 0);
+    ~SettingsDialog();
+    void addConfigItem(QListWidgetItem *item, QWidget *page);
+    void addConfigItem(QString item, QWidget *page);
+
+protected:
+    void changeEvent(QEvent *e);
+
+private slots:
+    void changePage(QListWidgetItem*, QListWidgetItem*);
+
+private:
+    Ui::SettingsDialog *m_ui;
+    QSettings *settings;
+};
+
+#endif // SETTINGSDIALOG_H
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfacessettingsdialogui"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.ui (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.ui                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/settingsdialog.ui        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,120 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;ui version=&quot;4.0&quot;&gt;
+ &lt;class&gt;SettingsDialog&lt;/class&gt;
+ &lt;widget class=&quot;QDialog&quot; name=&quot;SettingsDialog&quot;&gt;
+  &lt;property name=&quot;geometry&quot;&gt;
+   &lt;rect&gt;
+    &lt;x&gt;0&lt;/x&gt;
+    &lt;y&gt;0&lt;/y&gt;
+    &lt;width&gt;333&lt;/width&gt;
+    &lt;height&gt;248&lt;/height&gt;
+   &lt;/rect&gt;
+  &lt;/property&gt;
+  &lt;property name=&quot;windowTitle&quot;&gt;
+   &lt;string&gt;General Settings&lt;/string&gt;
+  &lt;/property&gt;
+  &lt;property name=&quot;windowIcon&quot;&gt;
+   &lt;iconset resource=&quot;resources.qrc&quot;&gt;
+    &lt;normaloff&gt;:/icons/fsgui_logo.png&lt;/normaloff&gt;:/icons/fsgui_logo.png&lt;/iconset&gt;
+  &lt;/property&gt;
+  &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout&quot;&gt;
+   &lt;item&gt;
+    &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout&quot;&gt;
+     &lt;item&gt;
+      &lt;widget class=&quot;QListWidget&quot; name=&quot;listConfig&quot;&gt;
+       &lt;property name=&quot;maximumSize&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;128&lt;/width&gt;
+         &lt;height&gt;16777215&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;iconSize&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;96&lt;/width&gt;
+         &lt;height&gt;84&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;movement&quot;&gt;
+        &lt;enum&gt;QListView::Static&lt;/enum&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;spacing&quot;&gt;
+        &lt;number&gt;12&lt;/number&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;viewMode&quot;&gt;
+        &lt;enum&gt;QListView::IconMode&lt;/enum&gt;
+       &lt;/property&gt;
+      &lt;/widget&gt;
+     &lt;/item&gt;
+     &lt;item&gt;
+      &lt;widget class=&quot;QStackedWidget&quot; name=&quot;configPages&quot;&gt;
+       &lt;property name=&quot;currentIndex&quot;&gt;
+        &lt;number&gt;1&lt;/number&gt;
+       &lt;/property&gt;
+       &lt;widget class=&quot;QWidget&quot; name=&quot;page&quot;/&gt;
+       &lt;widget class=&quot;QWidget&quot; name=&quot;page_2&quot;/&gt;
+      &lt;/widget&gt;
+     &lt;/item&gt;
+    &lt;/layout&gt;
+   &lt;/item&gt;
+   &lt;item&gt;
+    &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_2&quot;&gt;
+     &lt;item&gt;
+      &lt;spacer name=&quot;horizontalSpacer&quot;&gt;
+       &lt;property name=&quot;orientation&quot;&gt;
+        &lt;enum&gt;Qt::Horizontal&lt;/enum&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;sizeHint&quot; stdset=&quot;0&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;40&lt;/width&gt;
+         &lt;height&gt;20&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+      &lt;/spacer&gt;
+     &lt;/item&gt;
+     &lt;item&gt;
+      &lt;widget class=&quot;QPushButton&quot; name=&quot;btnApply&quot;&gt;
+       &lt;property name=&quot;text&quot;&gt;
+        &lt;string&gt;&amp;amp;Apply&lt;/string&gt;
+       &lt;/property&gt;
+      &lt;/widget&gt;
+     &lt;/item&gt;
+     &lt;item&gt;
+      &lt;widget class=&quot;QPushButton&quot; name=&quot;btnOk&quot;&gt;
+       &lt;property name=&quot;text&quot;&gt;
+        &lt;string&gt;&amp;amp;OK&lt;/string&gt;
+       &lt;/property&gt;
+      &lt;/widget&gt;
+     &lt;/item&gt;
+     &lt;item&gt;
+      &lt;widget class=&quot;QPushButton&quot; name=&quot;btnCancel&quot;&gt;
+       &lt;property name=&quot;text&quot;&gt;
+        &lt;string&gt;&amp;amp;Cancel&lt;/string&gt;
+       &lt;/property&gt;
+      &lt;/widget&gt;
+     &lt;/item&gt;
+    &lt;/layout&gt;
+   &lt;/item&gt;
+  &lt;/layout&gt;
+ &lt;/widget&gt;
+ &lt;resources&gt;
+  &lt;include location=&quot;resources.qrc&quot;/&gt;
+ &lt;/resources&gt;
+ &lt;connections&gt;
+  &lt;connection&gt;
+   &lt;sender&gt;btnCancel&lt;/sender&gt;
+   &lt;signal&gt;clicked()&lt;/signal&gt;
+   &lt;receiver&gt;SettingsDialog&lt;/receiver&gt;
+   &lt;slot&gt;reject()&lt;/slot&gt;
+   &lt;hints&gt;
+    &lt;hint type=&quot;sourcelabel&quot;&gt;
+     &lt;x&gt;279&lt;/x&gt;
+     &lt;y&gt;226&lt;/y&gt;
+    &lt;/hint&gt;
+    &lt;hint type=&quot;destinationlabel&quot;&gt;
+     &lt;x&gt;330&lt;/x&gt;
+     &lt;y&gt;213&lt;/y&gt;
+    &lt;/hint&gt;
+   &lt;/hints&gt;
+  &lt;/connection&gt;
+ &lt;/connections&gt;
+&lt;/ui&gt;
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcinterfacesui_settingsh"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/ui_settings.h (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/ui_settings.h                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/interfaces/ui_settings.h        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,132 @@
</span><ins>+/********************************************************************************
+** Form generated from reading ui file 'settings.ui'
+**
+** Created: Thu Aug 6 02:01:13 2009
+**      by: Qt User Interface Compiler version 4.5.0
+**
+** WARNING! All changes made in this file will be lost when recompiling ui file!
+********************************************************************************/
+
+#ifndef UI_SETTINGS_H
+#define UI_SETTINGS_H
+
+#include &lt;QtCore/QVariant&gt;
+#include &lt;QtGui/QAction&gt;
+#include &lt;QtGui/QApplication&gt;
+#include &lt;QtGui/QButtonGroup&gt;
+#include &lt;QtGui/QDialog&gt;
+#include &lt;QtGui/QHBoxLayout&gt;
+#include &lt;QtGui/QHeaderView&gt;
+#include &lt;QtGui/QListWidget&gt;
+#include &lt;QtGui/QPushButton&gt;
+#include &lt;QtGui/QSpacerItem&gt;
+#include &lt;QtGui/QStackedWidget&gt;
+#include &lt;QtGui/QVBoxLayout&gt;
+#include &lt;QtGui/QWidget&gt;
+
+QT_BEGIN_NAMESPACE
+
+class Ui_SettingsDialog
+{
+public:
+    QVBoxLayout *verticalLayout;
+    QHBoxLayout *horizontalLayout;
+    QListWidget *listConfig;
+    QStackedWidget *configPages;
+    QWidget *page;
+    QWidget *page_2;
+    QHBoxLayout *horizontalLayout_2;
+    QSpacerItem *horizontalSpacer;
+    QPushButton *btnApply;
+    QPushButton *btnOk;
+    QPushButton *btnCancel;
+
+    void setupUi(QDialog *SettingsDialog)
+    {
+        if (SettingsDialog-&gt;objectName().isEmpty())
+            SettingsDialog-&gt;setObjectName(QString::fromUtf8(&quot;SettingsDialog&quot;));
+        SettingsDialog-&gt;resize(400, 300);
+        QIcon icon;
+        icon.addPixmap(QPixmap(QString::fromUtf8(&quot;:/icons/fsgui_logo.png&quot;)), QIcon::Normal, QIcon::Off);
+        SettingsDialog-&gt;setWindowIcon(icon);
+        verticalLayout = new QVBoxLayout(SettingsDialog);
+        verticalLayout-&gt;setObjectName(QString::fromUtf8(&quot;verticalLayout&quot;));
+        horizontalLayout = new QHBoxLayout();
+        horizontalLayout-&gt;setObjectName(QString::fromUtf8(&quot;horizontalLayout&quot;));
+        listConfig = new QListWidget(SettingsDialog);
+        listConfig-&gt;setObjectName(QString::fromUtf8(&quot;listConfig&quot;));
+        listConfig-&gt;setMaximumSize(QSize(128, 16777215));
+        listConfig-&gt;setIconSize(QSize(96, 84));
+        listConfig-&gt;setMovement(QListView::Static);
+        listConfig-&gt;setSpacing(12);
+        listConfig-&gt;setViewMode(QListView::IconMode);
+
+        horizontalLayout-&gt;addWidget(listConfig);
+
+        configPages = new QStackedWidget(SettingsDialog);
+        configPages-&gt;setObjectName(QString::fromUtf8(&quot;configPages&quot;));
+        page = new QWidget();
+        page-&gt;setObjectName(QString::fromUtf8(&quot;page&quot;));
+        configPages-&gt;addWidget(page);
+        page_2 = new QWidget();
+        page_2-&gt;setObjectName(QString::fromUtf8(&quot;page_2&quot;));
+        configPages-&gt;addWidget(page_2);
+
+        horizontalLayout-&gt;addWidget(configPages);
+
+
+        verticalLayout-&gt;addLayout(horizontalLayout);
+
+        horizontalLayout_2 = new QHBoxLayout();
+        horizontalLayout_2-&gt;setObjectName(QString::fromUtf8(&quot;horizontalLayout_2&quot;));
+        horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+        horizontalLayout_2-&gt;addItem(horizontalSpacer);
+
+        btnApply = new QPushButton(SettingsDialog);
+        btnApply-&gt;setObjectName(QString::fromUtf8(&quot;btnApply&quot;));
+
+        horizontalLayout_2-&gt;addWidget(btnApply);
+
+        btnOk = new QPushButton(SettingsDialog);
+        btnOk-&gt;setObjectName(QString::fromUtf8(&quot;btnOk&quot;));
+
+        horizontalLayout_2-&gt;addWidget(btnOk);
+
+        btnCancel = new QPushButton(SettingsDialog);
+        btnCancel-&gt;setObjectName(QString::fromUtf8(&quot;btnCancel&quot;));
+
+        horizontalLayout_2-&gt;addWidget(btnCancel);
+
+
+        verticalLayout-&gt;addLayout(horizontalLayout_2);
+
+
+        retranslateUi(SettingsDialog);
+        QObject::connect(btnOk, SIGNAL(clicked()), SettingsDialog, SLOT(accept()));
+        QObject::connect(btnCancel, SIGNAL(clicked()), SettingsDialog, SLOT(reject()));
+
+        configPages-&gt;setCurrentIndex(1);
+
+
+        QMetaObject::connectSlotsByName(SettingsDialog);
+    } // setupUi
+
+    void retranslateUi(QDialog *SettingsDialog)
+    {
+        SettingsDialog-&gt;setWindowTitle(QApplication::translate(&quot;SettingsDialog&quot;, &quot;FsGui&quot;, 0, QApplication::UnicodeUTF8));
+        btnApply-&gt;setText(QApplication::translate(&quot;SettingsDialog&quot;, &quot;&amp;Apply&quot;, 0, QApplication::UnicodeUTF8));
+        btnOk-&gt;setText(QApplication::translate(&quot;SettingsDialog&quot;, &quot;&amp;OK&quot;, 0, QApplication::UnicodeUTF8));
+        btnCancel-&gt;setText(QApplication::translate(&quot;SettingsDialog&quot;, &quot;&amp;Cancel&quot;, 0, QApplication::UnicodeUTF8));
+        Q_UNUSED(SettingsDialog);
+    } // retranslateUi
+
+};
+
+namespace Ui {
+    class SettingsDialog: public Ui_SettingsDialog {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_SETTINGS_H
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcpluginsconsoleplugincentralWidgetui"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/centralWidget.ui        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,119 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;ui version=&quot;4.0&quot;&gt;
+ &lt;class&gt;consoleWindow&lt;/class&gt;
+ &lt;widget class=&quot;QMainWindow&quot; name=&quot;consoleWindow&quot;&gt;
+  &lt;property name=&quot;geometry&quot;&gt;
+   &lt;rect&gt;
+    &lt;x&gt;0&lt;/x&gt;
+    &lt;y&gt;0&lt;/y&gt;
+    &lt;width&gt;673&lt;/width&gt;
+    &lt;height&gt;536&lt;/height&gt;
+   &lt;/rect&gt;
+  &lt;/property&gt;
+  &lt;property name=&quot;windowTitle&quot;&gt;
+   &lt;string&gt;Console for human beings&lt;/string&gt;
+  &lt;/property&gt;
+  &lt;property name=&quot;windowIcon&quot;&gt;
+   &lt;iconset resource=&quot;../../resources/resources.qrc&quot;&gt;
+    &lt;normaloff&gt;:/icons/fsgui_logo.png&lt;/normaloff&gt;:/icons/fsgui_logo.png&lt;/iconset&gt;
+  &lt;/property&gt;
+  &lt;widget class=&quot;QWidget&quot; name=&quot;centralwidget&quot;&gt;
+   &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout_3&quot;&gt;
+    &lt;item&gt;
+     &lt;widget class=&quot;QTabWidget&quot; name=&quot;tabConsole&quot;&gt;
+      &lt;property name=&quot;tabsClosable&quot;&gt;
+       &lt;bool&gt;true&lt;/bool&gt;
+      &lt;/property&gt;
+      &lt;property name=&quot;movable&quot;&gt;
+       &lt;bool&gt;true&lt;/bool&gt;
+      &lt;/property&gt;
+      &lt;widget class=&quot;QWidget&quot; name=&quot;tab&quot;&gt;
+       &lt;attribute name=&quot;title&quot;&gt;
+        &lt;string&gt;Tab 1&lt;/string&gt;
+       &lt;/attribute&gt;
+      &lt;/widget&gt;
+      &lt;widget class=&quot;QWidget&quot; name=&quot;tab_2&quot;&gt;
+       &lt;attribute name=&quot;title&quot;&gt;
+        &lt;string&gt;Tab 2&lt;/string&gt;
+       &lt;/attribute&gt;
+      &lt;/widget&gt;
+     &lt;/widget&gt;
+    &lt;/item&gt;
+   &lt;/layout&gt;
+  &lt;/widget&gt;
+  &lt;widget class=&quot;QMenuBar&quot; name=&quot;menubar&quot;&gt;
+   &lt;property name=&quot;geometry&quot;&gt;
+    &lt;rect&gt;
+     &lt;x&gt;0&lt;/x&gt;
+     &lt;y&gt;0&lt;/y&gt;
+     &lt;width&gt;673&lt;/width&gt;
+     &lt;height&gt;25&lt;/height&gt;
+    &lt;/rect&gt;
+   &lt;/property&gt;
+   &lt;widget class=&quot;QMenu&quot; name=&quot;menu_Server&quot;&gt;
+    &lt;property name=&quot;title&quot;&gt;
+     &lt;string&gt;&amp;amp;Server&lt;/string&gt;
+    &lt;/property&gt;
+    &lt;addaction name=&quot;action_Server_Manager&quot;/&gt;
+    &lt;addaction name=&quot;separator&quot;/&gt;
+    &lt;addaction name=&quot;action_Connect&quot;/&gt;
+    &lt;addaction name=&quot;action_Disconnect&quot;/&gt;
+   &lt;/widget&gt;
+   &lt;widget class=&quot;QMenu&quot; name=&quot;menu_File&quot;&gt;
+    &lt;property name=&quot;title&quot;&gt;
+     &lt;string&gt;&amp;amp;File&lt;/string&gt;
+    &lt;/property&gt;
+    &lt;addaction name=&quot;action_Close&quot;/&gt;
+   &lt;/widget&gt;
+   &lt;addaction name=&quot;menu_File&quot;/&gt;
+   &lt;addaction name=&quot;menu_Server&quot;/&gt;
+  &lt;/widget&gt;
+  &lt;widget class=&quot;QStatusBar&quot; name=&quot;statusbar&quot;/&gt;
+  &lt;action name=&quot;action_Connect&quot;&gt;
+   &lt;property name=&quot;text&quot;&gt;
+    &lt;string&gt;&amp;amp;Connect&lt;/string&gt;
+   &lt;/property&gt;
+  &lt;/action&gt;
+  &lt;action name=&quot;action_Disconnect&quot;&gt;
+   &lt;property name=&quot;text&quot;&gt;
+    &lt;string&gt;&amp;amp;Disconnect&lt;/string&gt;
+   &lt;/property&gt;
+  &lt;/action&gt;
+  &lt;action name=&quot;action_Close&quot;&gt;
+   &lt;property name=&quot;text&quot;&gt;
+    &lt;string&gt;&amp;amp;Close&lt;/string&gt;
+   &lt;/property&gt;
+   &lt;property name=&quot;shortcut&quot;&gt;
+    &lt;string&gt;Ctrl+W&lt;/string&gt;
+   &lt;/property&gt;
+  &lt;/action&gt;
+  &lt;action name=&quot;action_Server_Manager&quot;&gt;
+   &lt;property name=&quot;text&quot;&gt;
+    &lt;string&gt;&amp;amp;Server Manager&lt;/string&gt;
+   &lt;/property&gt;
+  &lt;/action&gt;
+ &lt;/widget&gt;
+ &lt;resources&gt;
+  &lt;include location=&quot;../../resources/resources.qrc&quot;/&gt;
+  &lt;include location=&quot;../../resources/resources.qrc&quot;/&gt;
+  &lt;include location=&quot;../../resources/resources.qrc&quot;/&gt;
+ &lt;/resources&gt;
+ &lt;connections&gt;
+  &lt;connection&gt;
+   &lt;sender&gt;action_Close&lt;/sender&gt;
+   &lt;signal&gt;triggered(bool)&lt;/signal&gt;
+   &lt;receiver&gt;consoleWindow&lt;/receiver&gt;
+   &lt;slot&gt;close()&lt;/slot&gt;
+   &lt;hints&gt;
+    &lt;hint type=&quot;sourcelabel&quot;&gt;
+     &lt;x&gt;-1&lt;/x&gt;
+     &lt;y&gt;-1&lt;/y&gt;
+    &lt;/hint&gt;
+    &lt;hint type=&quot;destinationlabel&quot;&gt;
+     &lt;x&gt;197&lt;/x&gt;
+     &lt;y&gt;169&lt;/y&gt;
+    &lt;/hint&gt;
+   &lt;/hints&gt;
+  &lt;/connection&gt;
+ &lt;/connections&gt;
+&lt;/ui&gt;
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsole_settingsui"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/console_settings.ui (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/console_settings.ui                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/console_settings.ui        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,656 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;ui version=&quot;4.0&quot;&gt;
+ &lt;class&gt;configPage&lt;/class&gt;
+ &lt;widget class=&quot;QWidget&quot; name=&quot;configPage&quot;&gt;
+  &lt;property name=&quot;geometry&quot;&gt;
+   &lt;rect&gt;
+    &lt;x&gt;0&lt;/x&gt;
+    &lt;y&gt;0&lt;/y&gt;
+    &lt;width&gt;438&lt;/width&gt;
+    &lt;height&gt;387&lt;/height&gt;
+   &lt;/rect&gt;
+  &lt;/property&gt;
+  &lt;property name=&quot;windowTitle&quot;&gt;
+   &lt;string&gt;Form&lt;/string&gt;
+  &lt;/property&gt;
+  &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout&quot;&gt;
+   &lt;item&gt;
+    &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_9&quot;&gt;
+     &lt;item&gt;
+      &lt;widget class=&quot;QGroupBox&quot; name=&quot;groupBox&quot;&gt;
+       &lt;property name=&quot;minimumSize&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;372&lt;/width&gt;
+         &lt;height&gt;318&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;maximumSize&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;372&lt;/width&gt;
+         &lt;height&gt;318&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;title&quot;&gt;
+        &lt;string&gt;Colors&lt;/string&gt;
+       &lt;/property&gt;
+       &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout_2&quot;&gt;
+        &lt;item&gt;
+         &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout&quot;&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QLineEdit&quot; name=&quot;lineConsole&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;autoFillBackground&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Console message&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;frame&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;alignment&quot;&gt;
+             &lt;set&gt;Qt::AlignCenter&lt;/set&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;readOnly&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnBackgroundConsole&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Background&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnForegroundConsole&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Foreground&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+         &lt;/layout&gt;
+        &lt;/item&gt;
+        &lt;item&gt;
+         &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_2&quot;&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QLineEdit&quot; name=&quot;lineAlert&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;autoFillBackground&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Alert message&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;frame&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;alignment&quot;&gt;
+             &lt;set&gt;Qt::AlignCenter&lt;/set&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;readOnly&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnBackgroundAlert&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Background&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnForegroundAlert&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Foreground&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+         &lt;/layout&gt;
+        &lt;/item&gt;
+        &lt;item&gt;
+         &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_3&quot;&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QLineEdit&quot; name=&quot;lineCritical&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;autoFillBackground&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Critical message&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;frame&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;alignment&quot;&gt;
+             &lt;set&gt;Qt::AlignCenter&lt;/set&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;readOnly&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnBackgroundCritical&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Background&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnForegroundCritical&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Foreground&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+         &lt;/layout&gt;
+        &lt;/item&gt;
+        &lt;item&gt;
+         &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_4&quot;&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QLineEdit&quot; name=&quot;lineError&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;autoFillBackground&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Error message&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;frame&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;alignment&quot;&gt;
+             &lt;set&gt;Qt::AlignCenter&lt;/set&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;readOnly&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnBackgroundError&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Background&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnForegroundError&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Foreground&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+         &lt;/layout&gt;
+        &lt;/item&gt;
+        &lt;item&gt;
+         &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_5&quot;&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QLineEdit&quot; name=&quot;lineWarning&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;autoFillBackground&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Warning message&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;frame&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;alignment&quot;&gt;
+             &lt;set&gt;Qt::AlignCenter&lt;/set&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;readOnly&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnBackgroundWarning&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Background&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnForegroundWarning&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Foreground&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+         &lt;/layout&gt;
+        &lt;/item&gt;
+        &lt;item&gt;
+         &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_6&quot;&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QLineEdit&quot; name=&quot;lineNotice&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;autoFillBackground&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Notice message&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;frame&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;alignment&quot;&gt;
+             &lt;set&gt;Qt::AlignCenter&lt;/set&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;readOnly&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnBackgroundNotice&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Background&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnForegroundNotice&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Foreground&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+         &lt;/layout&gt;
+        &lt;/item&gt;
+        &lt;item&gt;
+         &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_7&quot;&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QLineEdit&quot; name=&quot;lineInfo&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;autoFillBackground&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Info message&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;frame&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;alignment&quot;&gt;
+             &lt;set&gt;Qt::AlignCenter&lt;/set&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;readOnly&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnBackgroundInfo&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Background&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnForegroundInfo&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Foreground&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+         &lt;/layout&gt;
+        &lt;/item&gt;
+        &lt;item&gt;
+         &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_8&quot;&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QLineEdit&quot; name=&quot;lineDebug&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;146&lt;/width&gt;
+              &lt;height&gt;26&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;autoFillBackground&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Debug message&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;frame&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;alignment&quot;&gt;
+             &lt;set&gt;Qt::AlignCenter&lt;/set&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;readOnly&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnBackgroundDebug&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;95&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Background&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QPushButton&quot; name=&quot;btnForegroundDebug&quot;&gt;
+            &lt;property name=&quot;minimumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;maximumSize&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;91&lt;/width&gt;
+              &lt;height&gt;28&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Foreground&lt;/string&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+         &lt;/layout&gt;
+        &lt;/item&gt;
+       &lt;/layout&gt;
+      &lt;/widget&gt;
+     &lt;/item&gt;
+     &lt;item&gt;
+      &lt;spacer name=&quot;horizontalSpacer&quot;&gt;
+       &lt;property name=&quot;orientation&quot;&gt;
+        &lt;enum&gt;Qt::Horizontal&lt;/enum&gt;
+       &lt;/property&gt;
+       &lt;property name=&quot;sizeHint&quot; stdset=&quot;0&quot;&gt;
+        &lt;size&gt;
+         &lt;width&gt;40&lt;/width&gt;
+         &lt;height&gt;20&lt;/height&gt;
+        &lt;/size&gt;
+       &lt;/property&gt;
+      &lt;/spacer&gt;
+     &lt;/item&gt;
+    &lt;/layout&gt;
+   &lt;/item&gt;
+   &lt;item&gt;
+    &lt;spacer name=&quot;verticalSpacer&quot;&gt;
+     &lt;property name=&quot;orientation&quot;&gt;
+      &lt;enum&gt;Qt::Vertical&lt;/enum&gt;
+     &lt;/property&gt;
+     &lt;property name=&quot;sizeHint&quot; stdset=&quot;0&quot;&gt;
+      &lt;size&gt;
+       &lt;width&gt;20&lt;/width&gt;
+       &lt;height&gt;40&lt;/height&gt;
+      &lt;/size&gt;
+     &lt;/property&gt;
+    &lt;/spacer&gt;
+   &lt;/item&gt;
+  &lt;/layout&gt;
+ &lt;/widget&gt;
+ &lt;resources/&gt;
+ &lt;connections/&gt;
+&lt;/ui&gt;
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsoleplugincpp"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.cpp        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,348 @@
</span><ins>+#include &lt;QtGui&gt;
+#include &lt;QtPlugin&gt;
+#include &quot;consoleplugin.h&quot;
+#include &quot;eslconnection.h&quot;
+#include &quot;settingsdialog.h&quot;
+#include &quot;servermanager.h&quot;
+#include &quot;consoletabwidget.h&quot;
+#include &quot;ui_console_settings.h&quot;
+
+
+ConsolePlugin::ConsolePlugin(QWidget *parent)
+        : QMainWindow(parent),
+        consoleWindow(new Ui::consoleWindow),
+        serverManager(NULL)
+{
+    consoleWindow-&gt;setupUi(this);
+    consoleWindow-&gt;tabConsole-&gt;clear();
+}
+
+ConsolePlugin::~ConsolePlugin(){}
+
+QObject * ConsolePlugin::getMonitorInterfaceObject()
+{
+    return this;
+}
+
+QString ConsolePlugin::appName()
+{
+    return &quot;Console&quot;;
+}
+
+QString ConsolePlugin::appDescription()
+{
+    return tr(&quot;This application will do the same as fs_cli does.&quot;);
+}
+
+void ConsolePlugin::addConfigItens(SettingsDialog *settings)
+{
+    consoleConfigPage = new Ui::configPage;
+    QWidget *base = new QWidget;
+    consoleConfigPage-&gt;setupUi(base);
+    settings-&gt;addConfigItem(&quot;Console&quot;, base);
+
+    QObject::connect(consoleConfigPage-&gt;btnBackgroundConsole, SIGNAL(clicked()),
+                     this, SLOT(changeConsoleBackgroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnBackgroundAlert, SIGNAL(clicked()),
+                     this, SLOT(changeAlertBackgroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnBackgroundCritical, SIGNAL(clicked()),
+                     this, SLOT(changeCriticalBackgroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnBackgroundError, SIGNAL(clicked()),
+                     this, SLOT(changeErrorBackgroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnBackgroundWarning, SIGNAL(clicked()),
+                     this, SLOT(changeWarningBackgroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnBackgroundNotice, SIGNAL(clicked()),
+                     this, SLOT(changeNoticeBackgroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnBackgroundInfo, SIGNAL(clicked()),
+                     this, SLOT(changeInfoBackgroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnBackgroundDebug, SIGNAL(clicked()),
+                     this, SLOT(changeDebugBackgroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnForegroundConsole, SIGNAL(clicked()),
+                     this, SLOT(changeConsoleForegroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnForegroundAlert, SIGNAL(clicked()),
+                     this, SLOT(changeAlertForegroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnForegroundCritical, SIGNAL(clicked()),
+                     this, SLOT(changeCriticalForegroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnForegroundError, SIGNAL(clicked()),
+                     this, SLOT(changeErrorForegroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnForegroundWarning, SIGNAL(clicked()),
+                     this, SLOT(changeWarningForegroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnForegroundNotice, SIGNAL(clicked()),
+                     this, SLOT(changeNoticeForegroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnForegroundInfo, SIGNAL(clicked()),
+                     this, SLOT(changeInfoForegroundColor()));
+    QObject::connect(consoleConfigPage-&gt;btnForegroundDebug, SIGNAL(clicked()),
+                     this, SLOT(changeDebugForegroundColor()));
+    readSettings();
+    QObject::connect(settings, SIGNAL(accepted()),
+                     this, SLOT(writeSettings()));
+}
+
+void ConsolePlugin::newInstance()
+{
+    this-&gt;show();
+    newConnection();
+}
+
+void ConsolePlugin::setServerManager(ServerManager *manager)
+{
+    serverManager = manager;
+    QObject::connect(consoleWindow-&gt;action_Server_Manager, SIGNAL(triggered()),
+                     this, SLOT(newConnection()));
+}
+
+void ConsolePlugin::connected()
+{
+    consoleWindow-&gt;action_Connect-&gt;setEnabled(false);
+    consoleWindow-&gt;action_Disconnect-&gt;setEnabled(true);
+}
+
+void ConsolePlugin::disconnected()
+{
+    consoleWindow-&gt;action_Connect-&gt;setEnabled(true);
+    consoleWindow-&gt;action_Disconnect-&gt;setEnabled(false);
+}
+
+void ConsolePlugin::connectionFailed(QString /*reason*/)
+{
+}
+
+void ConsolePlugin::newConnection()
+{
+    if (serverManager-&gt;exec())
+    {
+        ESLconnection *esl = serverManager-&gt;getESLconnection();
+        consoleWindow-&gt;tabConsole-&gt;addTab(new ConsoleTabWidget(this, esl), esl-&gt;getName());
+        if (hashESL.contains(esl-&gt;getName()))
+        {
+            esl-&gt;disconnect();
+            esl-&gt;wait();
+            hashESL.remove(esl-&gt;getName());
+            delete esl;
+        }
+        hashESL.insert(esl-&gt;getName(), esl);
+        QObject::connect(esl, SIGNAL(connected()),
+                         this, SLOT(connected()));
+        QObject::connect(esl, SIGNAL(connectionFailed(QString)),
+                         this, SLOT(connectionFailed(QString)));
+        QObject::connect(esl, SIGNAL(disconnected()),
+                         this, SLOT(disconnected()));
+    }
+}
+
+void ConsolePlugin::readSettings()
+{
+    QSettings settings;
+    settings.beginGroup(&quot;Console&quot;);
+    consoleConfigPage-&gt;lineConsole-&gt;setPalette(settings.value(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_EMERG)).value&lt;QPalette&gt;());
+    consoleConfigPage-&gt;lineAlert-&gt;setPalette(settings.value(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_ALERT)).value&lt;QPalette&gt;());
+    consoleConfigPage-&gt;lineCritical-&gt;setPalette(settings.value(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_CRIT)).value&lt;QPalette&gt;());
+    consoleConfigPage-&gt;lineError-&gt;setPalette(settings.value(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_ERROR)).value&lt;QPalette&gt;());
+    consoleConfigPage-&gt;lineWarning-&gt;setPalette(settings.value(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_WARNING)).value&lt;QPalette&gt;());
+    consoleConfigPage-&gt;lineNotice-&gt;setPalette(settings.value(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_NOTICE)).value&lt;QPalette&gt;());
+    consoleConfigPage-&gt;lineInfo-&gt;setPalette(settings.value(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_INFO)).value&lt;QPalette&gt;());
+    consoleConfigPage-&gt;lineDebug-&gt;setPalette(settings.value(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_DEBUG)).value&lt;QPalette&gt;());
+    settings.endGroup();
+}
+
+void ConsolePlugin::writeSettings()
+{
+    QSettings settings;
+    settings.beginGroup(&quot;Console&quot;);
+    settings.setValue(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_EMERG), consoleConfigPage-&gt;lineConsole-&gt;palette());
+    settings.setValue(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_ALERT), consoleConfigPage-&gt;lineAlert-&gt;palette());
+    settings.setValue(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_CRIT), consoleConfigPage-&gt;lineCritical-&gt;palette());
+    settings.setValue(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_ERROR), consoleConfigPage-&gt;lineError-&gt;palette());
+    settings.setValue(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_WARNING), consoleConfigPage-&gt;lineWarning-&gt;palette());
+    settings.setValue(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_NOTICE), consoleConfigPage-&gt;lineNotice-&gt;palette());
+    settings.setValue(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_INFO), consoleConfigPage-&gt;lineInfo-&gt;palette());
+    settings.setValue(QString(&quot;log-level-%1-palette&quot;).arg(ESL_LOG_LEVEL_DEBUG), consoleConfigPage-&gt;lineDebug-&gt;palette());
+    settings.endGroup();
+}
+
+void ConsolePlugin::changeConsoleBackgroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineConsole-&gt;palette().color(QPalette::Base), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineConsole-&gt;palette();
+        palette.setColor(QPalette::Base, color);
+        consoleConfigPage-&gt;lineConsole-&gt;setPalette(palette);
+        consoleConfigPage-&gt;lineConsole-&gt;setAutoFillBackground(true);
+    }
+}
+
+void ConsolePlugin::changeAlertBackgroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineAlert-&gt;palette().color(QPalette::Base), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineAlert-&gt;palette();
+        palette.setColor(QPalette::Base, color);
+        consoleConfigPage-&gt;lineAlert-&gt;setPalette(palette);
+        consoleConfigPage-&gt;lineAlert-&gt;setAutoFillBackground(true);
+    }
+}
+
+
+void ConsolePlugin::changeCriticalBackgroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineCritical-&gt;palette().color(QPalette::Base), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineCritical-&gt;palette();
+        palette.setColor(QPalette::Base, color);
+        consoleConfigPage-&gt;lineCritical-&gt;setPalette(palette);
+        consoleConfigPage-&gt;lineCritical-&gt;setAutoFillBackground(true);
+    }
+}
+
+void ConsolePlugin::changeErrorBackgroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineError-&gt;palette().color(QPalette::Base), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineError-&gt;palette();
+        palette.setColor(QPalette::Base, color);
+        consoleConfigPage-&gt;lineError-&gt;setPalette(palette);
+        consoleConfigPage-&gt;lineError-&gt;setAutoFillBackground(true);
+    }
+}
+
+void ConsolePlugin::changeWarningBackgroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineWarning-&gt;palette().color(QPalette::Base), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineWarning-&gt;palette();
+        palette.setColor(QPalette::Base, color);
+        consoleConfigPage-&gt;lineWarning-&gt;setPalette(palette);
+        consoleConfigPage-&gt;lineWarning-&gt;setAutoFillBackground(true);
+    }
+}
+
+void ConsolePlugin::changeNoticeBackgroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineNotice-&gt;palette().color(QPalette::Base), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineNotice-&gt;palette();
+        palette.setColor(QPalette::Base, color);
+        consoleConfigPage-&gt;lineNotice-&gt;setPalette(palette);
+        consoleConfigPage-&gt;lineNotice-&gt;setAutoFillBackground(true);
+    }
+}
+
+void ConsolePlugin::changeInfoBackgroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineInfo-&gt;palette().color(QPalette::Base), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineInfo-&gt;palette();
+        palette.setColor(QPalette::Base, color);
+        consoleConfigPage-&gt;lineInfo-&gt;setPalette(palette);
+        consoleConfigPage-&gt;lineInfo-&gt;setAutoFillBackground(true);
+    }
+}
+
+void ConsolePlugin::changeDebugBackgroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineDebug-&gt;palette().color(QPalette::Base), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineDebug-&gt;palette();
+        palette.setColor(QPalette::Base, color);
+        consoleConfigPage-&gt;lineDebug-&gt;setPalette(palette);
+        consoleConfigPage-&gt;lineDebug-&gt;setAutoFillBackground(true);
+    }
+}
+
+void ConsolePlugin::changeConsoleForegroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineConsole-&gt;palette().color(QPalette::Text), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineConsole-&gt;palette();
+        palette.setColor(QPalette::Text, color);
+        consoleConfigPage-&gt;lineConsole-&gt;setPalette(palette);
+    }
+}
+
+void ConsolePlugin::changeAlertForegroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineAlert-&gt;palette().color(QPalette::Text), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineAlert-&gt;palette();
+        palette.setColor(QPalette::Text, color);
+        consoleConfigPage-&gt;lineAlert-&gt;setPalette(palette);
+    }
+}
+
+void ConsolePlugin::changeCriticalForegroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineCritical-&gt;palette().color(QPalette::Text), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineCritical-&gt;palette();
+        palette.setColor(QPalette::Text, color);
+        consoleConfigPage-&gt;lineCritical-&gt;setPalette(palette);
+    }
+}
+
+void ConsolePlugin::changeErrorForegroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineError-&gt;palette().color(QPalette::Text), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineError-&gt;palette();
+        palette.setColor(QPalette::Text, color);
+        consoleConfigPage-&gt;lineError-&gt;setPalette(palette);
+    }
+}
+
+void ConsolePlugin::changeWarningForegroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineWarning-&gt;palette().color(QPalette::Text), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineWarning-&gt;palette();
+        palette.setColor(QPalette::Text, color);
+        consoleConfigPage-&gt;lineWarning-&gt;setPalette(palette);
+    }
+}
+
+void ConsolePlugin::changeNoticeForegroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineNotice-&gt;palette().color(QPalette::Text), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineNotice-&gt;palette();
+        palette.setColor(QPalette::Text, color);
+        consoleConfigPage-&gt;lineNotice-&gt;setPalette(palette);
+    }
+}
+
+void ConsolePlugin::changeInfoForegroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineInfo-&gt;palette().color(QPalette::Text), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineInfo-&gt;palette();
+        palette.setColor(QPalette::Text, color);
+        consoleConfigPage-&gt;lineInfo-&gt;setPalette(palette);
+    }
+}
+
+void ConsolePlugin::changeDebugForegroundColor()
+{
+    QColor color = QColorDialog::getColor(consoleConfigPage-&gt;lineDebug-&gt;palette().color(QPalette::Text), this);
+    if (color.isValid())
+    {
+        QPalette palette = consoleConfigPage-&gt;lineDebug-&gt;palette();
+        palette.setColor(QPalette::Text, color);
+        consoleConfigPage-&gt;lineDebug-&gt;setPalette(palette);
+    }
+}
+
+Q_EXPORT_PLUGIN2(consoleplugin, ConsolePlugin)
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsolepluginh"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.h        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,61 @@
</span><ins>+#ifndef CONSOLEPLUGIN_H
+#define CONSOLEPLUGIN_H
+
+#include &lt;QtGui/QMainWindow&gt;
+#include &lt;QtPlugin&gt;
+#include &lt;QtCore/QHash&gt;
+#include &quot;interfaces.h&quot;
+#include &quot;ui_centralWidget.h&quot;
+
+namespace Ui
+{
+    class configPage;
+}
+class ESLconnection;
+
+class ConsolePlugin : public QMainWindow, public MonitorInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(MonitorInterface)
+public:
+    ConsolePlugin(QWidget *parent = 0);
+    ~ConsolePlugin();
+    QObject *getMonitorInterfaceObject();
+    QString appName();
+    QString appDescription();
+    void addConfigItens(SettingsDialog *);
+    void newInstance();
+    void setServerManager(ServerManager *manager);
+
+private slots:
+    void connected();
+    void disconnected();
+    void connectionFailed(QString);
+    void newConnection();
+    void changeConsoleBackgroundColor();
+    void changeAlertBackgroundColor();
+    void changeCriticalBackgroundColor();
+    void changeErrorBackgroundColor();
+    void changeWarningBackgroundColor();
+    void changeNoticeBackgroundColor();
+    void changeInfoBackgroundColor();
+    void changeDebugBackgroundColor();
+    void changeConsoleForegroundColor();
+    void changeAlertForegroundColor();
+    void changeCriticalForegroundColor();
+    void changeErrorForegroundColor();
+    void changeWarningForegroundColor();
+    void changeNoticeForegroundColor();
+    void changeInfoForegroundColor();
+    void changeDebugForegroundColor();
+    void readSettings();
+    void writeSettings();
+
+private:
+    Ui::consoleWindow *consoleWindow;
+    Ui::configPage *consoleConfigPage;
+    ServerManager *serverManager;
+    QHash&lt;QString, ESLconnection *&gt; hashESL;
+};
+
+#endif // CONSOLEPLUGIN_H
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsolepluginpro"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoleplugin.pro        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+TEMPLATE = lib
+TARGET = ../../../bin/plugins/consoleplugin
+CONFIG += plugin
+INCLUDEPATH = ../../fsgui/ \
+    ../../interfaces \
+    ../../../../../../libs/esl/src/include/
+HEADERS = consoleplugin.h \
+    sortfilterproxymodel.h \
+    consoletabwidget.h
+SOURCES = consoleplugin.cpp \
+    sortfilterproxymodel.cpp \
+    consoletabwidget.cpp
+FORMS += centralWidget.ui \
+    console_settings.ui \
+    consoletabwidget.ui
+LIBS += -L \
+    ../../interfaces \
+    -linterfaces \
+    -L../../../../../../libs/esl/ \
+    -lesl
+RESOURCES += ../../resources/resources.qrc
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsoletabwidgetcpp"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.cpp        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,182 @@
</span><ins>+#include &quot;consoletabwidget.h&quot;
+#include &quot;ui_consoletabwidget.h&quot;
+#include &quot;eslconnection.h&quot;
+
+ConsoleTabWidget::ConsoleTabWidget(QWidget *parent, ESLconnection *eslconnection) :
+    QWidget(parent),
+    m_ui(new Ui::ConsoleTabWidget),
+    esl(eslconnection)
+{
+    m_ui-&gt;setupUi(this);
+    sourceModel = new QStandardItemModel(this);
+    model = new SortFilterProxyModel(this);
+    model-&gt;setSourceModel(sourceModel);
+    model-&gt;setFilterKeyColumn(0);
+    m_ui-&gt;consoleListView-&gt;setModel(model);
+
+    QObject::connect(m_ui-&gt;btnSend, SIGNAL(clicked()),
+                     this, SLOT(cmdSendClicked()));
+    QObject::connect(m_ui-&gt;lineCmd, SIGNAL(textChanged(QString)),
+                     this, SLOT(lineCmdChanged(QString)));
+    QObject::connect(m_ui-&gt;checkEmerg, SIGNAL(clicked(bool)),
+                     this, SLOT(checkEmerg(bool)));
+    QObject::connect(m_ui-&gt;checkAlert, SIGNAL(clicked(bool)),
+                     this, SLOT(checkAlert(bool)));
+    QObject::connect(m_ui-&gt;checkCrit, SIGNAL(clicked(bool)),
+                     this, SLOT(checkCrit(bool)));
+    QObject::connect(m_ui-&gt;checkError, SIGNAL(clicked(bool)),
+                     this, SLOT(checkError(bool)));
+    QObject::connect(m_ui-&gt;checkNotice, SIGNAL(clicked(bool)),
+                     this, SLOT(checkNotice(bool)));
+    QObject::connect(m_ui-&gt;checkInfo, SIGNAL(clicked(bool)),
+                     this, SLOT(checkInfo(bool)));
+    QObject::connect(m_ui-&gt;checkDebug, SIGNAL(clicked(bool)),
+                     this, SLOT(checkDebug(bool)));
+
+    QObject::connect(esl, SIGNAL(connected()),
+                     this, SLOT(connected()));
+    QObject::connect(esl, SIGNAL(connectionFailed(QString)),
+                     this, SLOT(connectionFailed(QString)));
+    QObject::connect(esl, SIGNAL(disconnected()),
+                     this, SLOT(disconnected()));
+    QObject::connect(esl, SIGNAL(gotEvent(ESLevent*)),
+                     this, SLOT(gotEvent(ESLevent*)));
+
+    esl-&gt;connect();
+}
+
+ConsoleTabWidget::~ConsoleTabWidget()
+{
+    delete m_ui;
+}
+
+void ConsoleTabWidget::changeEvent(QEvent *e)
+{
+    QWidget::changeEvent(e);
+    switch (e-&gt;type()) {
+    case QEvent::LanguageChange:
+        m_ui-&gt;retranslateUi(this);
+        break;
+    default:
+        break;
+    }
+}
+
+void ConsoleTabWidget::connected()
+{
+    m_ui-&gt;btnSend-&gt;setEnabled(true);
+    m_ui-&gt;lineCmd-&gt;setEnabled(true);
+    QStandardItem *item = new QStandardItem(tr(&quot;Connected!&quot;));
+    item-&gt;setData(ESL_LOG_LEVEL_EMERG, Qt::UserRole);
+    addNewConsoleItem(item);
+}
+
+void ConsoleTabWidget::disconnected()
+{
+    m_ui-&gt;btnSend-&gt;setEnabled(false);
+    m_ui-&gt;lineCmd-&gt;setEnabled(false);
+    QStandardItem *item = new QStandardItem(tr(&quot;Disconnected!&quot;));
+    item-&gt;setData(ESL_LOG_LEVEL_EMERG, Qt::UserRole);
+    addNewConsoleItem(item);
+}
+
+void ConsoleTabWidget::connectionFailed(QString reason)
+{
+    m_ui-&gt;btnSend-&gt;setEnabled(false);
+    m_ui-&gt;lineCmd-&gt;setEnabled(false);
+    QStandardItem *item = new QStandardItem(tr(&quot;Connection Failed! Reason: %1&quot;).arg(reason));
+    item-&gt;setData(ESL_LOG_LEVEL_EMERG, Qt::UserRole);
+    addNewConsoleItem(item);
+}
+
+void ConsoleTabWidget::gotEvent(ESLevent * event)
+{
+    if (event-&gt;getBody())
+    {
+        QString text(event-&gt;getBody());
+
+        /* Remove \r\n */
+        QStringList textList = text.split(QRegExp(&quot;(\r+)&quot;), QString::SkipEmptyParts);
+        QString final_str;
+        for (int line = 0; line&lt;textList.size(); line++)
+        {
+            final_str += textList[line];
+            if (line == textList.size()-1)
+            {
+                final_str.chop(1);
+            }
+        }
+        QStringList lines = final_str.split('\n', QString::SkipEmptyParts);
+        for (int line = 0; line &lt; lines.size(); ++line)
+        {
+            QStandardItem *item = new QStandardItem(lines[line]);
+            item-&gt;setData(QString(event-&gt;getHeader(&quot;Log-Level&quot;)).toInt(), Qt::UserRole);
+            addNewConsoleItem(item);
+        }
+    }
+    delete event;
+}
+
+void ConsoleTabWidget::addNewConsoleItem(QStandardItem *item)
+{
+    QSettings settings;
+    settings.beginGroup(&quot;Console&quot;);
+    QPalette palette = settings.value(QString(&quot;log-level-%1-palette&quot;).arg(item-&gt;data(Qt::UserRole).toInt())).value&lt;QPalette&gt;();
+    item-&gt;setBackground(palette.base());
+    item-&gt;setForeground(palette.text());
+    if (m_ui-&gt;consoleListView-&gt;verticalScrollBar()-&gt;value() == m_ui-&gt;consoleListView-&gt;verticalScrollBar()-&gt;maximum())
+    {
+        sourceModel-&gt;appendRow(item);
+        m_ui-&gt;consoleListView-&gt;scrollToBottom();
+    }
+    else
+    {
+        sourceModel-&gt;appendRow(item);
+    }
+}
+
+void ConsoleTabWidget::cmdSendClicked()
+{
+    esl-&gt;bgapi(m_ui-&gt;lineCmd-&gt;text());
+    m_ui-&gt;lineCmd-&gt;clear();
+}
+
+void ConsoleTabWidget::lineCmdChanged(QString text)
+{
+    m_ui-&gt;btnSend-&gt;setDisabled(text.isEmpty());
+}
+
+void ConsoleTabWidget::checkEmerg(bool state)
+{
+    model-&gt;setLogLevelFilter(ESL_LOG_LEVEL_EMERG, state);
+}
+
+void ConsoleTabWidget::checkAlert(bool state)
+{
+    model-&gt;setLogLevelFilter(ESL_LOG_LEVEL_ALERT, state);
+}
+
+void ConsoleTabWidget::checkCrit(bool state)
+{
+    model-&gt;setLogLevelFilter(ESL_LOG_LEVEL_CRIT, state);
+}
+
+void ConsoleTabWidget::checkError(bool state)
+{
+    model-&gt;setLogLevelFilter(ESL_LOG_LEVEL_ERROR, state);
+}
+
+void ConsoleTabWidget::checkNotice(bool state)
+{
+    model-&gt;setLogLevelFilter(ESL_LOG_LEVEL_NOTICE, state);
+}
+
+void ConsoleTabWidget::checkInfo(bool state)
+{
+    model-&gt;setLogLevelFilter(ESL_LOG_LEVEL_INFO, state);
+}
+
+void ConsoleTabWidget::checkDebug(bool state)
+{
+    model-&gt;setLogLevelFilter(ESL_LOG_LEVEL_DEBUG, state);
+}
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsoletabwidgeth"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.h        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+#ifndef CONSOLETABWIDGET_H
+#define CONSOLETABWIDGET_H
+
+#include &lt;QtGui/QWidget&gt;
+#include &quot;sortfilterproxymodel.h&quot;
+
+namespace Ui {
+    class ConsoleTabWidget;
+}
+
+class QStandardItem;
+class QStandardItemModel;
+class ESLconnection;
+class ESLevent;
+
+class ConsoleTabWidget : public QWidget {
+    Q_OBJECT
+public:
+    ConsoleTabWidget(QWidget *parent, ESLconnection *eslconnection);
+    ~ConsoleTabWidget();
+
+protected:
+    void changeEvent(QEvent *e);
+
+private slots:
+    void connected();
+    void disconnected();
+    void connectionFailed(QString);
+    void gotEvent(ESLevent *);
+    void addNewConsoleItem(QStandardItem *item);
+    void cmdSendClicked();
+    void lineCmdChanged(QString);
+    void checkEmerg(bool);
+    void checkAlert(bool);
+    void checkCrit(bool);
+    void checkError(bool);
+    void checkNotice(bool);
+    void checkInfo(bool);
+    void checkDebug(bool);
+
+private:
+    Ui::ConsoleTabWidget *m_ui;
+    QStandardItemModel *sourceModel;
+    SortFilterProxyModel *model;
+    ESLconnection *esl;
+};
+
+#endif // CONSOLETABWIDGET_H
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginconsoletabwidgetui"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.ui (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.ui                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/consoletabwidget.ui        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,188 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;ui version=&quot;4.0&quot;&gt;
+ &lt;class&gt;ConsoleTabWidget&lt;/class&gt;
+ &lt;widget class=&quot;QWidget&quot; name=&quot;ConsoleTabWidget&quot;&gt;
+  &lt;property name=&quot;geometry&quot;&gt;
+   &lt;rect&gt;
+    &lt;x&gt;0&lt;/x&gt;
+    &lt;y&gt;0&lt;/y&gt;
+    &lt;width&gt;391&lt;/width&gt;
+    &lt;height&gt;344&lt;/height&gt;
+   &lt;/rect&gt;
+  &lt;/property&gt;
+  &lt;property name=&quot;windowTitle&quot;&gt;
+   &lt;string&gt;Form&lt;/string&gt;
+  &lt;/property&gt;
+  &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout_3&quot;&gt;
+   &lt;item&gt;
+    &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout_2&quot;&gt;
+     &lt;item&gt;
+      &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout_2&quot;&gt;
+       &lt;item&gt;
+        &lt;widget class=&quot;QListView&quot; name=&quot;consoleListView&quot;/&gt;
+       &lt;/item&gt;
+       &lt;item&gt;
+        &lt;widget class=&quot;QGroupBox&quot; name=&quot;groupBox&quot;&gt;
+         &lt;property name=&quot;maximumSize&quot;&gt;
+          &lt;size&gt;
+           &lt;width&gt;120&lt;/width&gt;
+           &lt;height&gt;16777215&lt;/height&gt;
+          &lt;/size&gt;
+         &lt;/property&gt;
+         &lt;property name=&quot;title&quot;&gt;
+          &lt;string&gt;Log Level&lt;/string&gt;
+         &lt;/property&gt;
+         &lt;layout class=&quot;QVBoxLayout&quot; name=&quot;verticalLayout&quot;&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QCheckBox&quot; name=&quot;checkEmerg&quot;&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Console&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;checked&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QCheckBox&quot; name=&quot;checkAlert&quot;&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Alert&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;checked&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QCheckBox&quot; name=&quot;checkCrit&quot;&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Critical&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;checked&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QCheckBox&quot; name=&quot;checkError&quot;&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Error&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;checked&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QCheckBox&quot; name=&quot;checkWarn&quot;&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Warning&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;checked&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QCheckBox&quot; name=&quot;checkNotice&quot;&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Notice&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;checked&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QCheckBox&quot; name=&quot;checkInfo&quot;&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Info&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;checked&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;widget class=&quot;QCheckBox&quot; name=&quot;checkDebug&quot;&gt;
+            &lt;property name=&quot;text&quot;&gt;
+             &lt;string&gt;Debug&lt;/string&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;checked&quot;&gt;
+             &lt;bool&gt;true&lt;/bool&gt;
+            &lt;/property&gt;
+           &lt;/widget&gt;
+          &lt;/item&gt;
+          &lt;item&gt;
+           &lt;spacer name=&quot;verticalSpacer&quot;&gt;
+            &lt;property name=&quot;orientation&quot;&gt;
+             &lt;enum&gt;Qt::Vertical&lt;/enum&gt;
+            &lt;/property&gt;
+            &lt;property name=&quot;sizeHint&quot; stdset=&quot;0&quot;&gt;
+             &lt;size&gt;
+              &lt;width&gt;20&lt;/width&gt;
+              &lt;height&gt;18&lt;/height&gt;
+             &lt;/size&gt;
+            &lt;/property&gt;
+           &lt;/spacer&gt;
+          &lt;/item&gt;
+         &lt;/layout&gt;
+        &lt;/widget&gt;
+       &lt;/item&gt;
+      &lt;/layout&gt;
+     &lt;/item&gt;
+     &lt;item&gt;
+      &lt;layout class=&quot;QHBoxLayout&quot; name=&quot;horizontalLayout&quot;&gt;
+       &lt;item&gt;
+        &lt;widget class=&quot;QLineEdit&quot; name=&quot;lineCmd&quot;&gt;
+         &lt;property name=&quot;enabled&quot;&gt;
+          &lt;bool&gt;false&lt;/bool&gt;
+         &lt;/property&gt;
+         &lt;property name=&quot;maximumSize&quot;&gt;
+          &lt;size&gt;
+           &lt;width&gt;16777215&lt;/width&gt;
+           &lt;height&gt;26&lt;/height&gt;
+          &lt;/size&gt;
+         &lt;/property&gt;
+        &lt;/widget&gt;
+       &lt;/item&gt;
+       &lt;item&gt;
+        &lt;widget class=&quot;QPushButton&quot; name=&quot;btnSend&quot;&gt;
+         &lt;property name=&quot;enabled&quot;&gt;
+          &lt;bool&gt;false&lt;/bool&gt;
+         &lt;/property&gt;
+         &lt;property name=&quot;minimumSize&quot;&gt;
+          &lt;size&gt;
+           &lt;width&gt;0&lt;/width&gt;
+           &lt;height&gt;28&lt;/height&gt;
+          &lt;/size&gt;
+         &lt;/property&gt;
+         &lt;property name=&quot;maximumSize&quot;&gt;
+          &lt;size&gt;
+           &lt;width&gt;85&lt;/width&gt;
+           &lt;height&gt;28&lt;/height&gt;
+          &lt;/size&gt;
+         &lt;/property&gt;
+         &lt;property name=&quot;text&quot;&gt;
+          &lt;string&gt;Send&lt;/string&gt;
+         &lt;/property&gt;
+         &lt;property name=&quot;shortcut&quot;&gt;
+          &lt;string&gt;Return&lt;/string&gt;
+         &lt;/property&gt;
+         &lt;property name=&quot;autoDefault&quot;&gt;
+          &lt;bool&gt;true&lt;/bool&gt;
+         &lt;/property&gt;
+         &lt;property name=&quot;default&quot;&gt;
+          &lt;bool&gt;true&lt;/bool&gt;
+         &lt;/property&gt;
+        &lt;/widget&gt;
+       &lt;/item&gt;
+      &lt;/layout&gt;
+     &lt;/item&gt;
+    &lt;/layout&gt;
+   &lt;/item&gt;
+  &lt;/layout&gt;
+ &lt;/widget&gt;
+ &lt;resources/&gt;
+ &lt;connections/&gt;
+&lt;/ui&gt;
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginsortfilterproxymodelcpp"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.cpp (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.cpp                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.cpp        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,24 @@
</span><ins>+#include &lt;QtGui&gt;
+#include &quot;sortfilterproxymodel.h&quot;
+
+SortFilterProxyModel::SortFilterProxyModel(QObject *parent)
+        : QSortFilterProxyModel(parent)
+{
+    // Get from config?
+    for(int i = 0; i &lt; 8; i++)
+        loglevels.insert(i, true);
+}
+
+void SortFilterProxyModel::setLogLevelFilter(int level, bool state)
+{
+    loglevels.replace(level, state);
+    // Let us filter
+    invalidateFilter();
+}
+
+bool SortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &amp;source_parent) const
+{
+    QModelIndex index0 = sourceModel()-&gt;index(source_row, 0, source_parent);
+
+    return loglevels.value(sourceModel()-&gt;data(index0, Qt::UserRole).toInt()) == true;
+}
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcpluginsconsolepluginsortfilterproxymodelh"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.h (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.h                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/plugins/consoleplugin/sortfilterproxymodel.h        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+#ifndef SORTFILTERPROXYMODEL_H
+#define SORTFILTERPROXYMODEL_H
+
+#include &lt;QSortFilterProxyModel&gt;
+#include &lt;QVector&gt;
+
+class SortFilterProxyModel : public QSortFilterProxyModel
+{
+    Q_OBJECT
+
+public:
+    SortFilterProxyModel(QObject *parent = 0);
+    void setLogLevelFilter(int level, bool state);
+
+protected:
+    bool filterAcceptsRow(int source_row, const QModelIndex &amp;source_parent) const;
+
+private:
+    QVector&lt;bool&gt; loglevels;
+};
+
+#endif // SORTFILTERPROXYMODEL_H
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcresourcesconnect_iconpng"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/connect_icon.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/connect_icon.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + application/octet-stream
</span><a id="freeswitchtrunkcontribjmesquitafsguisrcresourcesedit_iconpng"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/edit_icon.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/edit_icon.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + application/octet-stream
</span><a id="freeswitchtrunkcontribjmesquitafsguisrcresourcesfsgui_logopng"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/fsgui_logo.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/fsgui_logo.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + application/octet-stream
</span><a id="freeswitchtrunkcontribjmesquitafsguisrcresourcesnew_server_iconpng"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/new_server_icon.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/new_server_icon.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + application/octet-stream
</span><a id="freeswitchtrunkcontribjmesquitafsguisrcresourcesremove_server_iconpng"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/remove_server_icon.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/remove_server_icon.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + application/octet-stream
</span><a id="freeswitchtrunkcontribjmesquitafsguisrcresourcesresourcesqrc"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/resources.qrc (0 => 14463)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/resources.qrc                                (rev 0)
+++ freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/resources.qrc        2009-08-08 23:33:24 UTC (rev 14463)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+&lt;RCC&gt;
+    &lt;qresource prefix=&quot;/icons&quot; &gt;
+        &lt;file&gt;fsgui_logo.png&lt;/file&gt;
+        &lt;file&gt;new_server_icon.png&lt;/file&gt;
+        &lt;file&gt;remove_server_icon.png&lt;/file&gt;
+        &lt;file&gt;connect_icon.png&lt;/file&gt;
+        &lt;file&gt;save.png&lt;/file&gt;
+        &lt;file&gt;server_icon.png&lt;/file&gt;
+        &lt;file&gt;edit_icon.png&lt;/file&gt;
+    &lt;/qresource&gt;
+&lt;/RCC&gt;
</ins></span></pre></div>
<a id="freeswitchtrunkcontribjmesquitafsguisrcresourcessavepng"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/save.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/save.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + application/octet-stream
</span><a id="freeswitchtrunkcontribjmesquitafsguisrcresourcesserver_iconpng"></a>
<div class="binary"><h4>Added: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/server_icon.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: freeswitch/trunk/contrib/jmesquita/fsgui/src/resources/server_icon.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + application/octet-stream
</span></div>
<div id="footer">See you at ClueCon</div>

</body>
</html>