blob: 1d47216c1757f66fb79a4203524286e757f2bcb4 [file] [log] [blame]
taylorchuc27dd482014-05-17 20:06:49 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2013-2014, Regents of the University of California,
4 *
5 * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
6 * authors and contributors.
7 *
8 * NFD Control Center is free software: you can redistribute it and/or modify it under the
9 * terms of the GNU General Public License as published by the Free Software Foundation,
10 * either version 3 of the License, or (at your option) any later version.
11 *
12 * NFD Control Center is distributed in the hope that it will be useful, but WITHOUT ANY
13 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14 * PARTICULAR PURPOSE. See the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along with NFD
17 * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include "config.hpp"
21#include "tray-menu.hpp"
22
23#include <ndn-cxx/face.hpp>
24#include <ndn-cxx/interest.hpp>
25
26
27#ifdef OSX_BUILD
28#define CONNECT_ICON ":/resources/icon-connected-black.png"
29#define DISCONNECT_ICON ":/resources/icon-disconnected-black.png"
30#else
31#define CONNECT_ICON ":/resources/icon-connected-white.png"
32#define DISCONNECT_ICON ":/resources/icon-disconnected-white.png"
33#endif
34
35#ifdef WAF
36#include "tray-menu.moc"
37// #include "tray-menu.cpp.moc"
38#endif
39
40namespace ndn {
41
Alexander Afanasyev4086d512014-07-11 15:56:33 -070042TrayMenu::TrayMenu(QQmlContext* context)
43 : m_context(context)
44 , m_isNfdRunning(false)
Yingdi Yu53c11c12016-03-20 12:56:49 -070045 , m_menu(new QMenu(this))
46 , m_entryPref(new QAction("Preferences...", m_menu))
47 , m_entrySec(new QAction("Security", m_menu))
48 , m_entryQuit(new QAction("Quit", m_menu))
Yingdi Yu1f824642016-03-20 17:07:22 -070049 , m_keyViewerDialog(new ncc::KeyViewerDialog)
taylorchuc27dd482014-05-17 20:06:49 -070050
Yingdi Yu53c11c12016-03-20 12:56:49 -070051{
52 connect(m_entryPref, SIGNAL(triggered()), this, SIGNAL(showApp()));
Yingdi Yu1f824642016-03-20 17:07:22 -070053 connect(m_entrySec, SIGNAL(triggered()), m_keyViewerDialog, SLOT(present()));
Yingdi Yu53c11c12016-03-20 12:56:49 -070054 connect(m_entryQuit, SIGNAL(triggered()), this, SLOT(quitApp()));
taylorchuc27dd482014-05-17 20:06:49 -070055
Yingdi Yu1f824642016-03-20 17:07:22 -070056
Alexander Afanasyev4086d512014-07-11 15:56:33 -070057 connect(this, SIGNAL(nfdActivityUpdate(bool)), this, SLOT(updateNfdActivityIcon(bool)),
58 Qt::QueuedConnection);
59
60 m_context->setContextProperty("startStopButtonText", QVariant::fromValue(QString("Start NFD")));
taylorchuc27dd482014-05-17 20:06:49 -070061
Yingdi Yu53c11c12016-03-20 12:56:49 -070062 // m_menu->addAction(start);
63 // m_menu->addAction(stop);
64 m_menu->addAction(m_entryPref);
65 m_menu->addAction(m_entrySec);
66 m_menu->addAction(m_entryQuit);
67 m_tray = new QSystemTrayIcon(this);
68 m_tray->setContextMenu(m_menu);
69 connect(m_tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
taylorchuc27dd482014-05-17 20:06:49 -070070 this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
Yingdi Yu53c11c12016-03-20 12:56:49 -070071 m_tray->setIcon(QIcon(DISCONNECT_ICON));
72 m_tray->show();
taylorchuc27dd482014-05-17 20:06:49 -070073}
74
75TrayMenu::~TrayMenu()
76{
77}
78
79Q_INVOKABLE void
taylorchuc27dd482014-05-17 20:06:49 -070080TrayMenu::autoConfig()
81{
Alexander Afanasyev4086d512014-07-11 15:56:33 -070082 std::cout << "auto config" << std::endl;
taylorchuc27dd482014-05-17 20:06:49 -070083 QProcess* proc = new QProcess();
Alexander Afanasyev4086d512014-07-11 15:56:33 -070084 connect(proc, SIGNAL(finished(int)), proc, SLOT(deleteLater()));
Alexander Afanasyev5f14bee2016-03-20 11:38:07 -070085 // proc->start(NFD_AUTOCONFIG_COMMAND);
taylorchuc27dd482014-05-17 20:06:49 -070086}
87
88void
89TrayMenu::quitApp()
90{
91 QCoreApplication::exit(0);
92}
93
94void
95TrayMenu::iconActivated(QSystemTrayIcon::ActivationReason reason)
96{
97 switch (reason) {
98 // case QSystemTrayIcon::Trigger:
99 // emit showApp();
100 // break;
101 case QSystemTrayIcon::Context:
102 break;
103 default:
104 break;
105 }
106}
107
Alexander Afanasyev4086d512014-07-11 15:56:33 -0700108Q_INVOKABLE void
109TrayMenu::startStopNfd()
110{
111 if (!m_isNfdRunning) {
112 startNfd();
113 }
114 else {
115 stopNfd();
116 }
117}
118
taylorchuc27dd482014-05-17 20:06:49 -0700119void
120TrayMenu::startNfd()
121{
Alexander Afanasyev5f14bee2016-03-20 11:38:07 -0700122// QProcess * proc = new QProcess();
123// connect(proc,SIGNAL(finished(int)), proc, SLOT(deleteLater()));
124// #ifdef __linux__
125// proc->start("gksudo", QStringList() << NFD_START_COMMAND);
126// #else
127// proc->start("osascript", QStringList()
128// << "-e"
129// << "do shell script \"" NFD_START_COMMAND "\" with administrator privileges");
130// #endif
taylorchuc27dd482014-05-17 20:06:49 -0700131}
132
133void
134TrayMenu::stopNfd()
135{
Alexander Afanasyev5f14bee2016-03-20 11:38:07 -0700136// QProcess * proc = new QProcess();
137// connect(proc,SIGNAL(finished(int)), proc, SLOT(deleteLater()));
138// #ifdef __linux__
139// proc->start("gksudo", QStringList() << NFD_STOP_COMMAND);
140// #else
141// proc->start("osascript", QStringList()
142// << "-e"
143// << "do shell script \"" NFD_STOP_COMMAND "\" with administrator privileges");
144// #endif
taylorchuc27dd482014-05-17 20:06:49 -0700145}
146
susmit4fe3cb92016-03-20 17:08:41 -0700147Q_INVOKABLE void
148TrayMenu::addDeleteRoute()
149{
150 addRoute();
151}
152
153Q_INVOKABLE void
154TrayMenu::addRoute()
155{
156 std::cout << "Adding route" << std::endl;
157 QString cmd = "nfdc register /test tcp4://localhost";
158 QProcess *addNewRoute = new QProcess();
159 connect(addNewRoute,SIGNAL(finished(int)), addNewRoute, SLOT(deleteLater()));
160 addNewRoute->start("bash", QStringList() << "-c" << cmd);
161 std::cout << "Done" << std::endl;
162
163
164// QProcess * proc = new QProcess();
165}
166
167void
168TrayMenu::deleteRoute()
169{
170 std::cout << "Deleting route" << std::endl;
171 QString cmd = "nfdc unregister /test tcp4://localhost";
172 QProcess *addNewRoute = new QProcess();
173 connect(addNewRoute,SIGNAL(finished(int)), addNewRoute, SLOT(deleteLater()));
174 addNewRoute->start("bash", QStringList() << "-c" << cmd);
175 std::cout << "Done" << std::endl;
176
177}
178
179
taylorchuc27dd482014-05-17 20:06:49 -0700180void
181TrayMenu::updateNfdActivityIcon(bool isActive)
182{
Alexander Afanasyev4086d512014-07-11 15:56:33 -0700183 m_isNfdRunning = isActive;
184
taylorchuc27dd482014-05-17 20:06:49 -0700185 if (isActive) {
Yingdi Yu53c11c12016-03-20 12:56:49 -0700186 m_tray->setIcon(QIcon(CONNECT_ICON));
Alexander Afanasyev4086d512014-07-11 15:56:33 -0700187 m_context->setContextProperty("startStopButtonText", QVariant::fromValue(QString("Stop NFD")));
taylorchuc27dd482014-05-17 20:06:49 -0700188 }
189 else {
Yingdi Yu53c11c12016-03-20 12:56:49 -0700190 m_tray->setIcon(QIcon(DISCONNECT_ICON));
Alexander Afanasyev4086d512014-07-11 15:56:33 -0700191 m_context->setContextProperty("startStopButtonText", QVariant::fromValue(QString("Start NFD")));
taylorchuc27dd482014-05-17 20:06:49 -0700192 }
193}
194
195} // namespace ndn