blob: fd05650e7c9211b7de8f7439da318107ae27e58d [file] [log] [blame]
Ilya Moiseenko18c8a132013-10-24 01:52:52 -07001/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
2/*
3 * @copyright See LICENCE for copyright and license information.
4 *
5 * @author Ilya Moiseenko <iliamo@ucla.edu>
6 */
7
8#ifndef TRAYMENU_H
9#define TRAYMENU_H
10
11#include <QMainWindow>
12#include <QWidget>
13#include <QSystemTrayIcon>
14#include <QMenu>
15#include <QTimer>
16#include <QProcess>
17#include <QThread>
Ilya Moiseenko18c8a132013-10-24 01:52:52 -070018#include <QStandardItemModel>
19#include <QtXml>
Ilya Moiseenko393cbdc2013-10-29 00:45:40 -070020#include <QThread>
21#include <QSettings>
Ilya Moiseenko69abb972013-11-04 16:02:20 -080022#include <QNetworkAccessManager>
23#include <QNetworkRequest>
24#include <QNetworkReply>
Ilya Moiseenko18c8a132013-10-24 01:52:52 -070025
Ilya Moiseenko656d52d2013-10-25 14:19:10 -070026#include "fib-input-dialog.h"
27#include "quit-dialog.h"
28#include "network-manager.h"
Ilya Moiseenko18c8a132013-10-24 01:52:52 -070029
30#define NDND_START_COMMAND "/usr/local/bin/ndndstart"
31#define NDND_STOP_COMMAND "/usr/local/bin/ndndstop"
32#define NDND_STATUS_COMMAND "/usr/local/bin/ndndsmoketest"
33#define NDND_FIB_COMMAND "/usr/local/bin/ndndc"
Ilya Moiseenko69abb972013-11-04 16:02:20 -080034#define XSLT_PROC "xsltproc"
Ilya Moiseenko18c8a132013-10-24 01:52:52 -070035
Ilya Moiseenko393cbdc2013-10-29 00:45:40 -070036#define ALLOW_SOFTWARE_UPDATES "AllowAutomaticUpdates"
37#define ENABLE_HUB_DISCOVERY "EnableHubDiscovery"
38#define ENABLE_START_ON_LOGIN "enableStartOnLogin"
39#define SHUTDOWN_ON_EXIT "ShutdownOnExit"
40
41#define AUTOSTART_DIRECTORY "/.config/autostart/"
42#define SHORTCUT_FILE "ndnxcontrolcenter.desktop"
Ilya Moiseenko69abb972013-11-04 16:02:20 -080043#define STATUS_XSLT_FILE "status.xslt"
44#define FIB_XSLT_FILE "status-to-fib.xslt"
Ilya Moiseenko393cbdc2013-10-29 00:45:40 -070045
Ilya Moiseenko18c8a132013-10-24 01:52:52 -070046namespace Ui
47{
48 class TrayMenu;
49}
50
51class TrayMenu : public QMainWindow
52{
53 Q_OBJECT
54
55public:
56 explicit TrayMenu(QWidget *parent = 0);
57 ~TrayMenu();
58
59private:
60 Ui::TrayMenu *ui;
61
62 void createTrayIcon();
63 void setIcon(bool isConnected);
64 void createToolbar();
65 void createTableView();
66 void closeEvent(QCloseEvent *); // Overriding the window's close event
67 void showEvent(QShowEvent * event); //Overriding the window's show event
68
Ilya Moiseenko393cbdc2013-10-29 00:45:40 -070069 void loadSettings();
70 void makeAutostartDirectory();
71
72 bool daemonStarted;
73
74 QSettings *persistentSettings;
Ilya Moiseenko18c8a132013-10-24 01:52:52 -070075
76 QSystemTrayIcon *trayIcon;
77 QMenu *trayIconMenu;
78 QToolBar *toolBar;
79
80 QTimer *daemonStatusTimer;
81 QThread *statusUpdateThread;
82
Ilya Moiseenko69abb972013-11-04 16:02:20 -080083 QProcess *applyStatusXslt;
84 QProcess *applyFibXslt;
85
Ilya Moiseenko18c8a132013-10-24 01:52:52 -070086 QString statusXml;
87 QString fibContentsXml;
88
89 QStandardItemModel *model;
90 int selectedRow;
Ilya Moiseenko69abb972013-11-04 16:02:20 -080091 int scrollPosition;
Ilya Moiseenko18c8a132013-10-24 01:52:52 -070092
93 QAction *statusIndicator;
Ilya Moiseenko3adef432013-11-01 03:42:40 -070094 QAction *displayStatus;
95 QAction *interestSentRecv;
96 QAction *dataSentRecv;
Ilya Moiseenko18c8a132013-10-24 01:52:52 -070097 QAction *open;
98 QAction *close;
99 QAction *openGeneralSettings;
100 QAction *openForwardingSettings;
101 QAction *openSecuritySettings;
102
103 FibInputDialog *dialog;
104
105 bool allowAutomaticUpdates;
106 bool enableHubDiscovery;
107 bool enableStartOnLogin;
108 bool shutdownOnExit;
109
Ilya Moiseenko656d52d2013-10-25 14:19:10 -0700110 NetworkManager *networkManager;
Ilya Moiseenko69abb972013-11-04 16:02:20 -0800111 QNetworkAccessManager *urlManager;
Ilya Moiseenko656d52d2013-10-25 14:19:10 -0700112
Ilya Moiseenko18c8a132013-10-24 01:52:52 -0700113private slots:
114 void trayIconClicked(QSystemTrayIcon::ActivationReason);
115 void generalSettingsClicked();
116 void forwardingSettingsClicked();
117 void securitySettingsClicked();
118 void openTrafficMap();
119 void openRoutingStatus();
Ilya Moiseenko393cbdc2013-10-29 00:45:40 -0700120 void openCertificationPage();
Ilya Moiseenko18c8a132013-10-24 01:52:52 -0700121 void displayPopup();
122 void confirmQuit();
123 void showFibInputDialog();
124 void terminateDaemonAndClose();
125 void addFibEntry();
126 void daemonStatusUpdate();
127 void selectTableRow();
128 void deleteFibEntry();
129 void changeSoftwareUpdate();
130 void changeHubDiscovery();
131 void changeLoginStart();
132 void changeShutdownExit();
Ilya Moiseenko393cbdc2013-10-29 00:45:40 -0700133 void copyFile();
Ilya Moiseenko69abb972013-11-04 16:02:20 -0800134 void runXmlProc(QNetworkReply *reply);
135 void parseStatusXml();
136 void parseFibXml();
Ilya Moiseenko18c8a132013-10-24 01:52:52 -0700137};
138
139#endif // TRAYMENU_H