UI improvements (linux)

Change-Id: Id1a03f6bc500d6ecc78cd04cf4250a177120f1a8
diff --git a/linux/tray-menu.cpp b/linux/tray-menu.cpp
index daf28d5..f345828 100644
--- a/linux/tray-menu.cpp
+++ b/linux/tray-menu.cpp
@@ -27,6 +27,8 @@
 #include <QtXml>
 #include <QStandardItemModel>
 #include <QDir>
+#include <QWidgetAction>
+#include <QTextStream>
 
 TrayMenu::TrayMenu(QWidget *parent) :
     QMainWindow(parent),
@@ -232,9 +234,14 @@
 
     trayIconMenu->addSeparator();
 
-    QAction *displayStatus = new QAction(tr("Status"), this);
-    connect(displayStatus, SIGNAL(triggered()), this, SLOT(displayPopup()));
+    displayStatus = new QAction("                           Sent / Recv   ", this);
+    //connect(displayStatus, SIGNAL(triggered()), this, SLOT(displayPopup()));
     trayIconMenu->addAction(displayStatus);
+    interestSentRecv = new QAction("Interests      0 / 0", this);
+    trayIconMenu->addAction(interestSentRecv);
+    dataSentRecv = new QAction("Data               0 / 0", this);
+    trayIconMenu->addAction(dataSentRecv);
+
 
     trayIconMenu->addSeparator();
 
@@ -246,6 +253,22 @@
     connect(close, SIGNAL(triggered()), this, SLOT(confirmQuit()));
     trayIconMenu->addAction(close);
 
+
+
+
+    /*QWidgetAction * wa = new QWidgetAction(this);
+    wa->setDefaultWidget(new QPushButton("Default"));
+
+    trayIconMenu->setDefaultAction(wa);
+*/
+    //trayIconMenu->addAction();
+    /*QVBoxLayout *layout = new QVBoxLayout(wa->defaultWidget());
+
+    QLineEdit *edit = new QLineEdit("", wa->defaultWidget());
+    layout->addWidget(edit);
+
+    trayIconMenu->addAction(wa);*/
+
     trayIcon = new QSystemTrayIcon(this);
     trayIcon->setContextMenu(trayIconMenu);
 
@@ -398,6 +421,62 @@
         daemonStarted = true;
         setIcon(true);
         statusIndicator->setText(tr("Active"));
+        //qDebug() << statusXml;
+        QString interestIn = statusXml.mid(statusXml.indexOf("<in>")+4, statusXml.indexOf("</in>") - (statusXml.indexOf("<in>")+4));
+        QString interestOut = statusXml.mid(statusXml.indexOf("<out>")+5, statusXml.indexOf("</out>") - (statusXml.indexOf("<out>")+5));
+        QString dataIn = statusXml.mid(statusXml.lastIndexOf("<in>")+4, statusXml.lastIndexOf("</in>") - (statusXml.lastIndexOf("<in>")+4));
+        QString dataOut = statusXml.mid(statusXml.lastIndexOf("<out>")+5, statusXml.lastIndexOf("</out>") - (statusXml.lastIndexOf("<out>")+5));
+
+        int i = 0;
+        int k = 0;
+        if((dataOut.length() - interestOut.length()) > 0)
+        {
+            i = dataOut.length() - interestOut.length();
+            i*=2; //because space takes less space than a letter
+        }
+
+        if((interestOut.length() - dataOut.length()) > 0)
+        {
+            k = interestOut.length() - dataOut.length();
+            k*=2; //because space takes less space than a letter
+        }
+
+        QString interestStats = QString("%1%2%3%4").arg("Interests",-16,' ').arg(interestOut,6+i,' ').arg(" / ",3).arg(interestIn,-6,' ');
+        QString dataStats = QString("%1%2%3%4").arg("Data",-20,' ').arg(dataOut,6+k,' ').arg(" / ",3).arg(dataIn,-6,' ');
+
+        //Now I try to align header "Sent / Recv" centrally with the upper line
+        QString padding;
+        for(int j = 0; j < interestStats.indexOf(interestOut); j++)
+        {
+            if(interestStats.at(j)==' ')
+                padding +=" ";
+            else
+                padding += "  "; //because space takes less space than a letter
+        }
+
+        QString header;
+        int m = 0;
+        if(interestOut.length() - QString("Sent").length() > 0)
+        {
+            m = interestOut.length() - QString("Sent").length();
+            m *=3;
+            //qDebug() << "m=" << m;
+            header = QString("%1%2").arg(padding).arg("  Sent / Recv",QString("  Sent / Recv").length() + m,' ');
+        }
+        else if(interestOut.length() - QString("Sent").length() < 0)
+        {
+            //qDebug() << "truncating";
+            padding.truncate(padding.length()-(QString("Sent").length() - interestOut.length()));
+            header = padding + "Sent / Recv";
+        }
+        else
+        {
+            header = padding + "  Sent / Recv";
+        }
+
+        interestSentRecv->setText(interestStats);
+        dataSentRecv->setText(dataStats);
+        displayStatus->setText(header);
     }
 
     query.setQuery(QUrl("qrc:/resource/Resources/status-to-fib.xslt"));  // TODO: I suspect it's being read from HDD each time