18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_gui - WpaGui class
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2005-2006, Jouni Malinen <j@w1.fi>
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license.
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details.
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef WPAGUI_H
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPAGUI_H
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <QSystemTrayIcon>
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <QObject>
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "ui_wpagui.h"
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "addinterface.h"
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass UserDataRequest;
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
197a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidtclass WpaGuiApp : public QApplication
207a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt{
217a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	Q_OBJECT
227a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidtpublic:
237a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	WpaGuiApp(int &argc, char **argv);
247a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt
257a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt#if !defined(QT_NO_SESSIONMANAGER) && QT_VERSION < 0x050000
267a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	virtual void saveState(QSessionManager &manager);
277a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt#endif
287a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt
297a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	WpaGui *w;
307a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	int argc;
317a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	char **argv;
327a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt};
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass WpaGui : public QMainWindow, public Ui::WpaGui
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Q_OBJECT
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpublic:
39912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt
40912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt	enum TrayIconType {
41912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt		TrayIconOffline = 0,
42912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt		TrayIconAcquiring,
43912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt		TrayIconConnected,
44912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt		TrayIconSignalNone,
45912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt		TrayIconSignalWeak,
46912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt		TrayIconSignalOk,
47912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt		TrayIconSignalGood,
48912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt		TrayIconSignalExcellent,
49912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt	};
50912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	WpaGui(QApplication *app, QWidget *parent = 0, const char *name = 0,
527a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	       Qt::WindowFlags fl = 0);
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	~WpaGui();
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual int ctrlRequest(const char *cmd, char *buf, size_t *buflen);
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void triggerUpdate();
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void editNetwork(const QString &sel);
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void removeNetwork(const QString &sel);
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void enableNetwork(const QString &sel);
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void disableNetwork(const QString &sel);
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual int getNetworkDisabled(const QString &sel);
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	void setBssFromScan(const QString &bssid);
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef QT_NO_SESSIONMANAGER
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	void saveState();
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpublic slots:
688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void parse_argv();
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void updateStatus();
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void updateNetworks();
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void helpIndex();
728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void helpContents();
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void helpAbout();
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void disconnect();
758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void scan();
768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void eventHistory();
778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void ping();
78912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt	virtual void signalMeterUpdate();
798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void processMsg(char *msg);
808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void processCtrlReq(const char *req);
818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void receiveMsgs();
828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void connectB();
838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void selectNetwork(const QString &sel);
848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void editSelectedNetwork();
858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void editListedNetwork();
868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void removeSelectedNetwork();
878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void removeListedNetwork();
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void addNetwork();
898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void enableAllNetworks();
908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void disableAllNetworks();
918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void removeAllNetworks();
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void saveConfig();
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void selectAdapter(const QString &sel);
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void updateNetworkDisabledStatus();
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void enableListedNetwork(bool);
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void disableListedNetwork(bool);
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void showTrayMessage(QSystemTrayIcon::MessageIcon type,
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				     int sec, const QString &msg);
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void showTrayStatus();
100912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt	virtual void updateTrayIcon(TrayIconType type);
1016c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	virtual void updateTrayToolTip(const QString &msg);
1021d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidt	virtual QIcon loadThemedIcon(const QStringList &names,
1031d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidt				     const QIcon &fallback);
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void wpsDialog();
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void peersDialog();
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void tabChanged(int index);
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void wpsPbc();
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void wpsGeneratePin();
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void wpsApPinChanged(const QString &text);
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void wpsApPin();
1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_NATIVE_WINDOWS
1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void startService();
1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void stopService();
1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_NATIVE_WINDOWS */
1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void addInterface();
1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtprotected slots:
1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void languageChange();
1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void trayActivated(QSystemTrayIcon::ActivationReason how);
1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	virtual void closeEvent(QCloseEvent *event);
1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtprivate:
1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	ScanResults *scanres;
1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Peers *peers;
1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	bool networkMayHaveChanged;
1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	char *ctrl_iface;
1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	EventHistory *eh;
1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_ctrl *ctrl_conn;
1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QSocketNotifier *msgNotifier;
1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QTimer *timer;
1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int pingsToStatusUpdate;
1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	WpaMsgList msgs;
1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	char *ctrl_iface_dir;
1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_ctrl *monitor_conn;
1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	UserDataRequest *udr;
1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *disconnectAction;
1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *reconnectAction;
1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *eventAction;
1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *scanAction;
1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *statAction;
1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *showAction;
1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *hideAction;
1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *quitAction;
1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QMenu *tray_menu;
1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QSystemTrayIcon *tray_icon;
146912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt	TrayIconType currentIconType;
1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QString wpaStateTranslate(char *state);
1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	void createTrayIcon(bool);
1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	bool ackTrayIcon;
1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	bool startInTray;
1516c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	bool quietMode;
1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int openCtrlConnection(const char *ifname);
1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	bool wpsRunning;
1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QString bssFromScan;
1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	void stopWpsRun(bool success);
1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
161912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt	QTimer *signalMeterTimer;
162912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt	int signalMeterInterval;
163912c6ecf72fb2c84fbf17dbd0666492778dbd9fcDmitry Shmidt
1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_NATIVE_WINDOWS
1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *fileStartServiceAction;
1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *fileStopServiceAction;
1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	bool serviceRunning();
1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_NATIVE_WINDOWS */
1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QAction *addInterfaceAction;
1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	AddInterface *add_iface;
1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	bool connectedToService;
1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	QApplication *app;
1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	bool inTray;
1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPAGUI_H */
181