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 = Qt::Widget);
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