From aba4cb20854642299dea8789e2007bf5a4255f5f Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Fri, 5 Sep 2014 00:27:34 +0200 Subject: [PATCH] NetworkStatus: Sort wireless networks by signal strength. --- src/apps/networkstatus/NetworkStatusView.cpp | 32 ++++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/apps/networkstatus/NetworkStatusView.cpp b/src/apps/networkstatus/NetworkStatusView.cpp index 0bd8c2b46b..c678fd48b0 100644 --- a/src/apps/networkstatus/NetworkStatusView.cpp +++ b/src/apps/networkstatus/NetworkStatusView.cpp @@ -12,7 +12,9 @@ #include "NetworkStatusView.h" +#include #include +#include #include #include @@ -76,6 +78,19 @@ const uint32 kMinIconHeight = 16; // #pragma mark - +static bool +signal_strength_compare(const wireless_network &a, + const wireless_network &b) +{ + if (a.signal_strength == b.signal_strength) + return strcmp(a.name, b.name) > 0; + return a.signal_strength > b.signal_strength; +} + + +// #pragma mark - + + NetworkStatusView::NetworkStatusView(BRect frame, int32 resizingMode, bool inDeskbar) : BView(frame, kDeskbarItemName, resizingMode, @@ -404,10 +419,21 @@ NetworkStatusView::MouseDown(BPoint point) while (wifiDevice.GetNextAssociatedNetwork(cookie, address) == B_OK) associated.insert(address); - wireless_network network; - int32 count = 0; cookie = 0; - while (wifiDevice.GetNextNetwork(cookie, network) == B_OK) { + wireless_network network; + typedef std::vector WirelessNetworkVector; + WirelessNetworkVector wirelessNetworks; + while (wifiDevice.GetNextNetwork(cookie, network) == B_OK) + wirelessNetworks.push_back(network); + + std::sort(wirelessNetworks.begin(), wirelessNetworks.end(), + signal_strength_compare); + + int32 count = 0; + for (WirelessNetworkVector::iterator it = wirelessNetworks.begin(); + it != wirelessNetworks.end(); it++) { + wireless_network &network = *it; + BMessage* message = new BMessage(kMsgJoinNetwork); message->AddString("device", wifiInterface); message->AddString("name", network.name);