wpa_gui: Move peer tooltip into Properties dialog
authorJouni Malinen <j@w1.fi>
Sat, 21 Nov 2009 13:01:23 +0000 (15:01 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 21 Nov 2009 13:01:23 +0000 (15:01 +0200)
Clean up the peer dialog information to be more user friendly. Only
show the device type in the tooltip and move the verbose details into
a separate area in a new Properties dialog. The new dialog will also
show some of the standard fields with titles to make them easier to
read.

wpa_supplicant/wpa_gui-qt4/peers.cpp
wpa_supplicant/wpa_gui-qt4/peers.h

index c91079c..996cdfa 100644 (file)
 #include "peers.h"
 
 
-static const int peer_role_address = Qt::UserRole + 1;
-static const int peer_role_type = Qt::UserRole + 2;
-static const int peer_role_uuid = Qt::UserRole + 3;
+enum {
+       peer_role_address = Qt::UserRole + 1,
+       peer_role_type,
+       peer_role_uuid,
+       peer_role_details,
+       peer_role_pri_dev_type,
+       peer_role_ssid
+};
 
 /*
  * TODO:
  * - add current AP info (e.g., from WPS) in station mode
- * - different icons to indicate peer type
  */
 
 enum peer_type {
@@ -91,6 +95,36 @@ void Peers::languageChange()
 }
 
 
+QString Peers::ItemType(int type)
+{
+       QString title;
+       switch (type) {
+       case PEER_TYPE_ASSOCIATED_STATION:
+               title = tr("Associated station");
+               break;
+       case PEER_TYPE_AP:
+               title = tr("AP");
+               break;
+       case PEER_TYPE_AP_WPS:
+               title = tr("WPS AP");
+               break;
+       case PEER_TYPE_WPS_PIN_NEEDED:
+               title = tr("WPS PIN needed");
+               break;
+       case PEER_TYPE_WPS_ER_AP:
+               title = tr("ER: WPS AP");
+               break;
+       case PEER_TYPE_WPS_ER_AP_UNCONFIGURED:
+               title = tr("ER: WPS AP (Unconfigured)");
+               break;
+       case PEER_TYPE_WPS_ER_ENROLLEE:
+               title = tr("ER: WPS Enrollee");
+               break;
+       }
+       return title;
+}
+
+
 void Peers::context_menu(const QPoint &pos)
 {
        QMenu *menu = new QMenu;
@@ -101,31 +135,7 @@ void Peers::context_menu(const QPoint &pos)
        if (idx.isValid()) {
                ctx_item = model.itemFromIndex(idx);
                int type = ctx_item->data(peer_role_type).toInt();
-               QString title;
-               switch (type) {
-               case PEER_TYPE_ASSOCIATED_STATION:
-                       title = tr("Associated station");
-                       break;
-               case PEER_TYPE_AP:
-                       title = tr("AP");
-                       break;
-               case PEER_TYPE_AP_WPS:
-                       title = tr("WPS AP");
-                       break;
-               case PEER_TYPE_WPS_PIN_NEEDED:
-                       title = tr("WPS PIN needed");
-                       break;
-               case PEER_TYPE_WPS_ER_AP:
-                       title = tr("ER: WPS AP");
-                       break;
-               case PEER_TYPE_WPS_ER_AP_UNCONFIGURED:
-                       title = tr("ER: WPS AP (Unconfigured)");
-                       break;
-               case PEER_TYPE_WPS_ER_ENROLLEE:
-                       title = tr("ER: WPS Enrollee");
-                       break;
-               }
-               menu->addAction(title)->setEnabled(false);
+               menu->addAction(Peers::ItemType(type))->setEnabled(false);
                menu->addSeparator();
 
                if (type == PEER_TYPE_ASSOCIATED_STATION ||
@@ -134,9 +144,11 @@ void Peers::context_menu(const QPoint &pos)
                    type == PEER_TYPE_WPS_ER_ENROLLEE) {
                        /* TODO: only for peers that are requesting WPS PIN
                         * method */
-                       menu->addAction(QString("Enter WPS PIN"), this,
+                       menu->addAction(tr("Enter WPS PIN"), this,
                                        SLOT(enter_pin()));
                }
+
+               menu->addAction(tr("Properties"), this, SLOT(properties()));
        } else {
                ctx_item = NULL;
                menu->addAction(QString("Refresh"), this, SLOT(ctx_refresh()));
@@ -216,7 +228,8 @@ void Peers::add_station(QString info)
                item->setData(lines[0], peer_role_address);
                item->setData(PEER_TYPE_ASSOCIATED_STATION,
                              peer_role_type);
-               item->setToolTip(info);
+               item->setData(info, peer_role_details);
+               item->setToolTip(ItemType(PEER_TYPE_ASSOCIATED_STATION));
                model.appendRow(item);
        }
 }
@@ -300,7 +313,7 @@ void Peers::add_scan_results()
                if (bss.isEmpty() || bss.startsWith("FAIL"))
                        break;
 
-               QString ssid, bssid, flags, wps_name;
+               QString ssid, bssid, flags, wps_name, pri_dev_type;
 
                QStringList lines = bss.split(QRegExp("\\n"));
                for (QStringList::Iterator it = lines.begin();
@@ -317,6 +330,8 @@ void Peers::add_scan_results()
                                ssid = (*it).mid(pos);
                        else if ((*it).startsWith("wps_device_name="))
                                wps_name = (*it).mid(pos);
+                       else if ((*it).startsWith("wps_primary_device_type="))
+                               pri_dev_type = (*it).mid(pos);
                }
 
                QString name = wps_name;
@@ -326,11 +341,12 @@ void Peers::add_scan_results()
                QStandardItem *item = new QStandardItem(*ap_icon, name);
                if (item) {
                        item->setData(bssid, peer_role_address);
+                       int type;
                        if (flags.contains("[WPS"))
-                               item->setData(PEER_TYPE_AP_WPS,
-                                             peer_role_type);
+                               type = PEER_TYPE_AP_WPS;
                        else
-                               item->setData(PEER_TYPE_AP, peer_role_type);
+                               type = PEER_TYPE_AP;
+                       item->setData(type, peer_role_type);
 
                        for (int i = 0; i < lines.size(); i++) {
                                if (lines[i].length() > 60) {
@@ -339,7 +355,13 @@ void Peers::add_scan_results()
                                        lines[i] += "..";
                                }
                        }
-                       item->setToolTip(lines.join("\n"));
+                       item->setToolTip(ItemType(type));
+                       item->setData(lines.join("\n"), peer_role_details);
+                       if (!pri_dev_type.isEmpty())
+                               item->setData(pri_dev_type,
+                                             peer_role_pri_dev_type);
+                       if (!ssid.isEmpty())
+                               item->setData(ssid, peer_role_ssid);
                        model.appendRow(item);
                }
        }
@@ -422,7 +444,9 @@ void Peers::event_notify(WpaMsg msg)
                        item->setData(addr, peer_role_address);
                        item->setData(PEER_TYPE_WPS_PIN_NEEDED,
                                      peer_role_type);
-                       item->setToolTip(items.join(QString("\n")));
+                       item->setToolTip(ItemType(PEER_TYPE_WPS_PIN_NEEDED));
+                       item->setData(items.join("\n"), peer_role_details);
+                       item->setData(items[5], peer_role_pri_dev_type);
                        model.appendRow(item);
                }
                return;
@@ -470,7 +494,7 @@ void Peers::event_notify(WpaMsg msg)
                        return;
                QString uuid = items[1];
                QString addr = items[2];
-               QString pri_dev_type = items[3];
+               QString pri_dev_type = items[3].mid(13);
                int wps_state = items[4].mid(10).toInt();
 
                int pos = text.indexOf('|');
@@ -488,12 +512,13 @@ void Peers::event_notify(WpaMsg msg)
                if (item) {
                        item->setData(uuid, peer_role_uuid);
                        item->setData(addr, peer_role_address);
-                       item->setData(wps_state == 2 ? PEER_TYPE_WPS_ER_AP:
-                                     PEER_TYPE_WPS_ER_AP_UNCONFIGURED,
-                                     peer_role_type);
-                       item->setToolTip(addr + QString("\n") +
-                                        pri_dev_type + QString("\n") +
-                                        items.join(QString("\n")));
+                       int type = wps_state == 2 ? PEER_TYPE_WPS_ER_AP:
+                               PEER_TYPE_WPS_ER_AP_UNCONFIGURED;
+                       item->setData(type, peer_role_type);
+                       item->setToolTip(ItemType(type));
+                       item->setData(pri_dev_type, peer_role_pri_dev_type);
+                       item->setData(items.join(QString("\n")),
+                                     peer_role_details);
                        model.appendRow(item);
                }
 
@@ -534,6 +559,7 @@ void Peers::event_notify(WpaMsg msg)
                        return;
                QString uuid = items[1];
                QString addr = items[2];
+               QString pri_dev_type = items[6].mid(13);
 
                int pos = text.indexOf('|');
                if (pos < 0)
@@ -554,7 +580,10 @@ void Peers::event_notify(WpaMsg msg)
                        item->setData(addr, peer_role_address);
                        item->setData(PEER_TYPE_WPS_ER_ENROLLEE,
                                      peer_role_type);
-                       item->setToolTip(items.join(QString("\n")));
+                       item->setToolTip(ItemType(PEER_TYPE_WPS_ER_ENROLLEE));
+                       item->setData(items.join(QString("\n")),
+                                     peer_role_details);
+                       item->setData(pri_dev_type, peer_role_pri_dev_type);
                        model.appendRow(item);
                }
 
@@ -606,3 +635,49 @@ void Peers::remove_enrollee_uuid(QString uuid)
                        model.removeRow(lst[i].row());
        }
 }
+
+
+void Peers::properties()
+{
+       if (ctx_item == NULL)
+               return;
+
+       QMessageBox msg(this);
+       msg.setStandardButtons(QMessageBox::Ok);
+       msg.setDefaultButton(QMessageBox::Ok);
+       msg.setEscapeButton(QMessageBox::Ok);
+       msg.setWindowTitle(tr("Peer Properties"));
+
+       int type = ctx_item->data(peer_role_type).toInt();
+       QString title = Peers::ItemType(type);
+
+       msg.setText(title + QString("\n") + tr("Name: ") + ctx_item->text());
+
+       QVariant var;
+       QString info;
+
+       var = ctx_item->data(peer_role_address);
+       if (var.isValid())
+               info += tr("Address: ") + var.toString() + QString("\n");
+
+       var = ctx_item->data(peer_role_uuid);
+       if (var.isValid())
+               info += tr("UUID: ") + var.toString() + QString("\n");
+
+       var = ctx_item->data(peer_role_pri_dev_type);
+       if (var.isValid())
+               info += tr("Primary Device Type: ") + var.toString() +
+                       QString("\n");
+
+       var = ctx_item->data(peer_role_ssid);
+       if (var.isValid())
+               info += tr("SSID: ") + var.toString() + QString("\n");
+
+       msg.setInformativeText(info);
+
+       var = ctx_item->data(peer_role_details);
+       if (var.isValid())
+               msg.setDetailedText(var.toString());
+
+       msg.exec();
+}
index b36987e..12e22ac 100644 (file)
@@ -37,6 +37,7 @@ public slots:
        virtual void context_menu(const QPoint &pos);
        virtual void enter_pin();
        virtual void ctx_refresh();
+       virtual void properties();
 
 protected slots:
        virtual void languageChange();
@@ -52,6 +53,7 @@ private:
        QStandardItem * find_uuid(QString uuid);
        void done(int r);
        void remove_enrollee_uuid(QString uuid);
+       QString ItemType(int type);
 
        WpaGui *wpagui;
        QStandardItemModel model;