UI improvements (linux)

Change-Id: Id1a03f6bc500d6ecc78cd04cf4250a177120f1a8
diff --git a/linux/Resources/status.xslt b/linux/Resources/status.xslt
index bf33e49..8192628 100644
--- a/linux/Resources/status.xslt
+++ b/linux/Resources/status.xslt
@@ -1,28 +1,20 @@
 <xsl:stylesheet version = '2.0'
                 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
 
-<xsl:template match="/ndnd">
-<html><body>
-<xsl:apply-templates select="forwarding/fentry" />
-</body></html>
+<xsl:template match="/">
+<stats>
+  <data>
+    <in><xsl:value-of select="sum(/ndnd/faces/face/meters/datain/total)" /></in>
+    <out><xsl:value-of select="sum(/ndnd/faces/face/meters/dataout/total)" /></out>
+    <!-- <in><xsl:value-of select="sum(/ndnd/faces/face/meters/datain/persec)" /></in> -->
+    <!-- <out><xsl:value-of select="sum(/ndnd/faces/face/meters/dataout/persec)" /></out> -->
+  </data>
+  <interests>
+    <in><xsl:value-of select="sum(/ndnd/faces/face/meters/intrin/total)" /></in>
+    <out><xsl:value-of select="sum(/ndnd/faces/face/meters/introut/total)" /></out>
+    <!-- <in><xsl:value-of select="sum(/ndnd/faces/face/meters/intrin/persec)" /></in> -->
+    <!-- <out><xsl:value-of select="sum(/ndnd/faces/face/meters/introut/persec)" /></out> -->
+  </interests>
+</stats>
 </xsl:template>
-
-<xsl:template match="fentry">
-<xsl:apply-templates select="dest/faceid" />
-<xsl:text> </xsl:text>
-<xsl:value-of select="prefix"/>
-<br/>
-</xsl:template>
-
-<xsl:template match="faceid">
-<xsl:variable name="id"><xsl:value-of select="." /></xsl:variable>
-<b>face: <xsl:copy-of select="$id" />
-
-<xsl:choose>
-  <xsl:when test="count(//face/ip[../faceid=$id]) &gt; 0"> (<xsl:value-of select="//face/ip[../faceid=$id]" />)
-  </xsl:when>
-  <xsl:otherwise> (app)</xsl:otherwise>
-</xsl:choose></b>
-</xsl:template>
-
 </xsl:stylesheet>
diff --git a/linux/resource.qrc b/linux/resource.qrc
index 77511fa..e39ebb1 100644
--- a/linux/resource.qrc
+++ b/linux/resource.qrc
@@ -1,7 +1,5 @@
 <RCC>
     <qresource prefix="/resource">
-        <file>Resources/icon1.png</file>
-        <file>Resources/FlatConnected.png</file>
         <file>Resources/emblem-dropbox-unsyncable.png</file>
         <file>Resources/emblem-system.png</file>
         <file>Resources/emblem-web.png</file>
@@ -9,9 +7,9 @@
         <file>Resources/mail-send-receive.png</file>
         <file>Resources/preferences-desktop.png</file>
         <file>Resources/system-run.png</file>
-        <file>Resources/status.xslt</file>
         <file>Resources/icon-connected-white.png</file>
         <file>Resources/icon-disconnected-white.png</file>
         <file>Resources/status-to-fib.xslt</file>
+        <file>Resources/status.xslt</file>
     </qresource>
 </RCC>
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
diff --git a/linux/tray-menu.h b/linux/tray-menu.h
index a40faca..0badef0 100644
--- a/linux/tray-menu.h
+++ b/linux/tray-menu.h
@@ -82,6 +82,9 @@
     int selectedRow;
 
     QAction *statusIndicator;
+    QAction *displayStatus;
+    QAction *interestSentRecv;
+    QAction *dataSentRecv;
     QAction *open;
     QAction *close;
     QAction *openGeneralSettings;