1 /*
2  * wpa_gui - WpaGui class
3  * Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi>
4  *
5  * This software may be distributed under the terms of the BSD license.
6  * See README for more details.
7  */
8 
9 #ifndef WPAGUI_H
10 #define WPAGUI_H
11 
12 #include <QSystemTrayIcon>
13 #include <QObject>
14 #include "ui_wpagui.h"
15 #include "addinterface.h"
16 
17 class UserDataRequest;
18 
19 class WpaGuiApp : public QApplication
20 {
21           Q_OBJECT
22 public:
23           WpaGuiApp(int &argc, char **argv);
24 
25 #if !defined(QT_NO_SESSIONMANAGER) && QT_VERSION < 0x050000
26           virtual void saveState(QSessionManager &manager);
27 #endif
28 
29           WpaGui *w;
30           int argc;
31           char **argv;
32 };
33 
34 class WpaGui : public QMainWindow, public Ui::WpaGui
35 {
36           Q_OBJECT
37 
38 public:
39 
40           enum TrayIconType {
41                     TrayIconOffline = 0,
42                     TrayIconAcquiring,
43                     TrayIconConnected,
44                     TrayIconSignalNone,
45                     TrayIconSignalWeak,
46                     TrayIconSignalOk,
47                     TrayIconSignalGood,
48                     TrayIconSignalExcellent,
49           };
50 
51           WpaGui(QApplication *app, QWidget *parent = 0, const char *name = 0,
52                  Qt::WindowFlags fl = 0);
53           ~WpaGui();
54 
55           virtual int ctrlRequest(const char *cmd, char *buf, size_t *buflen);
56           virtual void triggerUpdate();
57           virtual void editNetwork(const QString &sel);
58           virtual void removeNetwork(const QString &sel);
59           virtual void enableNetwork(const QString &sel);
60           virtual void disableNetwork(const QString &sel);
61           virtual int getNetworkDisabled(const QString &sel);
62           void setBssFromScan(const QString &bssid);
63 #ifndef QT_NO_SESSIONMANAGER
64           void saveState();
65 #endif
66 
67 public slots:
68           virtual void parse_argv();
69           virtual void updateStatus();
70           virtual void updateNetworks();
71           virtual void helpIndex();
72           virtual void helpContents();
73           virtual void helpAbout();
74           virtual void disconnect();
75           virtual void scan();
76           virtual void eventHistory();
77           virtual void ping();
78           virtual void signalMeterUpdate();
79           virtual void processMsg(char *msg);
80           virtual void processCtrlReq(const char *req);
81           virtual void receiveMsgs();
82           virtual void connectB();
83           virtual void selectNetwork(const QString &sel);
84           virtual void editSelectedNetwork();
85           virtual void editListedNetwork();
86           virtual void removeSelectedNetwork();
87           virtual void removeListedNetwork();
88           virtual void addNetwork();
89           virtual void enableAllNetworks();
90           virtual void disableAllNetworks();
91           virtual void removeAllNetworks();
92           virtual void saveConfig();
93           virtual void selectAdapter(const QString &sel);
94           virtual void updateNetworkDisabledStatus();
95           virtual void enableListedNetwork(bool);
96           virtual void disableListedNetwork(bool);
97           virtual void showTrayMessage(QSystemTrayIcon::MessageIcon type,
98                                              int sec, const QString &msg);
99           virtual void showTrayStatus();
100           virtual void updateTrayIcon(TrayIconType type);
101           virtual void updateTrayToolTip(const QString &msg);
102           virtual QIcon loadThemedIcon(const QStringList &names,
103                                              const QIcon &fallback);
104           virtual void wpsDialog();
105           virtual void peersDialog();
106           virtual void tabChanged(int index);
107           virtual void wpsPbc();
108           virtual void wpsGeneratePin();
109           virtual void wpsApPinChanged(const QString &text);
110           virtual void wpsApPin();
111 #ifdef CONFIG_NATIVE_WINDOWS
112           virtual void startService();
113           virtual void stopService();
114 #endif /* CONFIG_NATIVE_WINDOWS */
115           virtual void addInterface();
116 
117 protected slots:
118           virtual void languageChange();
119           virtual void trayActivated(QSystemTrayIcon::ActivationReason how);
120           virtual void closeEvent(QCloseEvent *event);
121 
122 private:
123           ScanResults *scanres;
124           Peers *peers;
125           bool networkMayHaveChanged;
126           char *ctrl_iface;
127           EventHistory *eh;
128           struct wpa_ctrl *ctrl_conn;
129           QSocketNotifier *msgNotifier;
130           QTimer *timer;
131           int pingsToStatusUpdate;
132           WpaMsgList msgs;
133           char *ctrl_iface_dir;
134           struct wpa_ctrl *monitor_conn;
135           UserDataRequest *udr;
136           QAction *disconnectAction;
137           QAction *reconnectAction;
138           QAction *eventAction;
139           QAction *scanAction;
140           QAction *statAction;
141           QAction *showAction;
142           QAction *hideAction;
143           QAction *quitAction;
144           QMenu *tray_menu;
145           QSystemTrayIcon *tray_icon;
146           TrayIconType currentIconType;
147           QString wpaStateTranslate(char *state);
148           void createTrayIcon(bool);
149           bool ackTrayIcon;
150           bool startInTray;
151           bool quietMode;
152 
153           int openCtrlConnection(const char *ifname);
154 
155           bool wpsRunning;
156 
157           QString bssFromScan;
158 
159           void stopWpsRun(bool success);
160 
161           QTimer *signalMeterTimer;
162           int signalMeterInterval;
163 
164 #ifdef CONFIG_NATIVE_WINDOWS
165           QAction *fileStartServiceAction;
166           QAction *fileStopServiceAction;
167 
168           bool serviceRunning();
169 #endif /* CONFIG_NATIVE_WINDOWS */
170 
171           QAction *addInterfaceAction;
172           AddInterface *add_iface;
173 
174           bool connectedToService;
175 
176           QApplication *app;
177           bool inTray;
178 };
179 
180 #endif /* WPAGUI_H */
181