wpa_gui-qt4: Add context menu for peers dialog
Replace the clicked() event with more appropriate context menu and add a WPS PIN entry as an example command.
This commit is contained in:
parent
7598210b79
commit
6a88ae863f
5 changed files with 137 additions and 9 deletions
|
@ -14,10 +14,15 @@
|
|||
|
||||
#include <cstdio>
|
||||
#include <QImageReader>
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "wpagui.h"
|
||||
#include "stringquery.h"
|
||||
#include "peers.h"
|
||||
|
||||
|
||||
static const int peer_role_address = Qt::UserRole + 1;
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
* - add pending WPS queries (from M1/PIN, PBC?)
|
||||
|
@ -30,9 +35,6 @@ Peers::Peers(QWidget *parent, const char *, bool, Qt::WFlags)
|
|||
{
|
||||
setupUi(this);
|
||||
|
||||
connect(peers, SIGNAL(clicked(QModelIndex)), this,
|
||||
SLOT(clicked(QModelIndex)));
|
||||
|
||||
if (QImageReader::supportedImageFormats().contains(QByteArray("svg")))
|
||||
default_icon = new QIcon(":/icons/wpa_gui.svg");
|
||||
else
|
||||
|
@ -41,6 +43,10 @@ Peers::Peers(QWidget *parent, const char *, bool, Qt::WFlags)
|
|||
peers->setModel(&model);
|
||||
peers->setResizeMode(QListView::Adjust);
|
||||
|
||||
peers->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(peers, SIGNAL(customContextMenuRequested(const QPoint &)),
|
||||
this, SLOT(context_menu(const QPoint &)));
|
||||
|
||||
wpagui = NULL;
|
||||
}
|
||||
|
||||
|
@ -64,11 +70,56 @@ void Peers::languageChange()
|
|||
}
|
||||
|
||||
|
||||
void Peers::clicked(const QModelIndex & /*index*/)
|
||||
void Peers::context_menu(const QPoint &pos)
|
||||
{
|
||||
/* QStandardItem *item = model.itemFromIndex(index); */
|
||||
/* TODO: give an option to provide PIN for WPS, etc. */
|
||||
/* printf("Clicked: %s\n", item->text().toAscii().constData()); */
|
||||
QMenu *menu = new QMenu;
|
||||
if (menu == NULL)
|
||||
return;
|
||||
|
||||
QModelIndex idx = peers->indexAt(pos);
|
||||
if (idx.isValid()) {
|
||||
ctx_item = model.itemFromIndex(idx);
|
||||
/* TODO: only for peers that are requesting WPS PIN method */
|
||||
menu->addAction(QString("Enter WPS PIN"), this,
|
||||
SLOT(enter_pin()));
|
||||
} else {
|
||||
ctx_item = NULL;
|
||||
menu->addAction(QString("Refresh"), this, SLOT(ctx_refresh()));
|
||||
}
|
||||
|
||||
menu->exec(peers->mapToGlobal(pos));
|
||||
}
|
||||
|
||||
|
||||
void Peers::enter_pin()
|
||||
{
|
||||
if (ctx_item == NULL)
|
||||
return;
|
||||
QString addr = ctx_item->data(peer_role_address).toString();
|
||||
StringQuery input(tr("PIN:"));
|
||||
input.setWindowTitle(tr("PIN for ") + ctx_item->text());
|
||||
if (input.exec() != QDialog::Accepted)
|
||||
return;
|
||||
|
||||
char cmd[100];
|
||||
char reply[100];
|
||||
size_t reply_len;
|
||||
snprintf(cmd, sizeof(cmd), "WPS_PIN %s %s",
|
||||
addr.toAscii().constData(),
|
||||
input.get_string().toAscii().constData());
|
||||
reply_len = sizeof(reply) - 1;
|
||||
if (wpagui->ctrlRequest(cmd, reply, &reply_len) < 0) {
|
||||
QMessageBox msg;
|
||||
msg.setIcon(QMessageBox::Warning);
|
||||
msg.setText("Failed to set the WPS PIN.");
|
||||
msg.exec();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Peers::ctx_refresh()
|
||||
{
|
||||
update_peers();
|
||||
}
|
||||
|
||||
|
||||
|
@ -115,6 +166,7 @@ void Peers::update_peers()
|
|||
|
||||
QStandardItem *item = new QStandardItem(*default_icon, name);
|
||||
if (item) {
|
||||
item->setData(QString(reply), peer_role_address);
|
||||
item->setToolTip(info);
|
||||
model.appendRow(item);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,9 @@ public:
|
|||
void setWpaGui(WpaGui *_wpagui);
|
||||
|
||||
public slots:
|
||||
virtual void clicked(const QModelIndex &index);
|
||||
virtual void context_menu(const QPoint &pos);
|
||||
virtual void enter_pin();
|
||||
virtual void ctx_refresh();
|
||||
|
||||
protected slots:
|
||||
virtual void languageChange();
|
||||
|
@ -43,6 +45,7 @@ private:
|
|||
WpaGui *wpagui;
|
||||
QStandardItemModel model;
|
||||
QIcon *default_icon;
|
||||
QStandardItem *ctx_item;
|
||||
};
|
||||
|
||||
#endif /* PEERS_H */
|
||||
|
|
37
wpa_supplicant/wpa_gui-qt4/stringquery.cpp
Normal file
37
wpa_supplicant/wpa_gui-qt4/stringquery.cpp
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* wpa_gui - StringQuery class
|
||||
* Copyright (c) 2009, Atheros Communications
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Alternatively, this software may be distributed under the terms of BSD
|
||||
* license.
|
||||
*
|
||||
* See README and COPYING for more details.
|
||||
*/
|
||||
|
||||
#include <cstdio>
|
||||
#include <QLabel>
|
||||
|
||||
#include "stringquery.h"
|
||||
|
||||
|
||||
StringQuery::StringQuery(QString label)
|
||||
{
|
||||
edit = new QLineEdit;
|
||||
edit->setFocus();
|
||||
QGridLayout *layout = new QGridLayout;
|
||||
layout->addWidget(new QLabel(label), 0, 0);
|
||||
layout->addWidget(edit, 0, 1);
|
||||
setLayout(layout);
|
||||
|
||||
connect(edit, SIGNAL(returnPressed()), this, SLOT(accept()));
|
||||
}
|
||||
|
||||
|
||||
QString StringQuery::get_string()
|
||||
{
|
||||
return edit->text();
|
||||
}
|
34
wpa_supplicant/wpa_gui-qt4/stringquery.h
Normal file
34
wpa_supplicant/wpa_gui-qt4/stringquery.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* wpa_gui - StringQuery class
|
||||
* Copyright (c) 2009, Atheros Communications
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Alternatively, this software may be distributed under the terms of BSD
|
||||
* license.
|
||||
*
|
||||
* See README and COPYING for more details.
|
||||
*/
|
||||
|
||||
#ifndef STRINGQUERY_H
|
||||
#define STRINGQUERY_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QLineEdit>
|
||||
#include <QGridLayout>
|
||||
|
||||
class StringQuery : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
StringQuery(QString label);
|
||||
QString get_string();
|
||||
|
||||
private:
|
||||
QLineEdit *edit;
|
||||
};
|
||||
|
||||
#endif /* STRINGQUERY_H */
|
|
@ -36,7 +36,8 @@ HEADERS += wpamsg.h \
|
|||
userdatarequest.h \
|
||||
networkconfig.h \
|
||||
addinterface.h \
|
||||
peers.h
|
||||
peers.h \
|
||||
stringquery.h
|
||||
|
||||
SOURCES += main.cpp \
|
||||
wpagui.cpp \
|
||||
|
@ -46,6 +47,7 @@ SOURCES += main.cpp \
|
|||
networkconfig.cpp \
|
||||
addinterface.cpp \
|
||||
peers.cpp \
|
||||
stringquery.cpp \
|
||||
../../src/common/wpa_ctrl.c
|
||||
|
||||
RESOURCES += icons.qrc
|
||||
|
|
Loading…
Reference in a new issue