1/* 2 * Copyright 2010, Axel D��rfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include "WirelessNetworkMenuItem.h" 8 9#include <string.h> 10 11#include <Catalog.h> 12#include <String.h> 13 14#include "RadioView.h" 15 16 17#undef B_TRANSLATION_CONTEXT 18#define B_TRANSLATION_CONTEXT "WirelessNetworkMenuItem" 19 20 21WirelessNetworkMenuItem::WirelessNetworkMenuItem(wireless_network network, 22 BMessage* message) 23 : 24 BMenuItem(network.name, message), 25 fNetwork(network) 26{ 27 // Append authentication mode to label 28 BString label = B_TRANSLATE("%name% (%authenticationMode%)"); 29 label.Replace("%name%", network.name, 1); 30 label.Replace("%authenticationMode%", 31 AuthenticationName(network.authentication_mode), 1); 32 33 SetLabel(label.String()); 34} 35 36 37WirelessNetworkMenuItem::~WirelessNetworkMenuItem() 38{ 39} 40 41 42BString 43WirelessNetworkMenuItem::AuthenticationName(int32 mode) 44{ 45 switch (mode) { 46 default: 47 case B_NETWORK_AUTHENTICATION_NONE: 48 return B_TRANSLATE_CONTEXT("open", "Open network"); 49 break; 50 case B_NETWORK_AUTHENTICATION_WEP: 51 return B_TRANSLATE_CONTEXT("WEP", "WEP protected network"); 52 break; 53 case B_NETWORK_AUTHENTICATION_WPA: 54 return B_TRANSLATE_CONTEXT("WPA", "WPA protected network"); 55 break; 56 case B_NETWORK_AUTHENTICATION_WPA2: 57 return B_TRANSLATE_CONTEXT("WPA2", "WPA2 protected network"); 58 break; 59 case B_NETWORK_AUTHENTICATION_EAP: 60 return B_TRANSLATE_CONTEXT("EAP", "EAP protected network"); 61 break; 62 } 63} 64 65 66void 67WirelessNetworkMenuItem::DrawContent() 68{ 69 DrawRadioIcon(); 70 BMenuItem::DrawContent(); 71} 72 73 74void 75WirelessNetworkMenuItem::Highlight(bool isHighlighted) 76{ 77 BMenuItem::Highlight(isHighlighted); 78} 79 80 81void 82WirelessNetworkMenuItem::GetContentSize(float* width, float* height) 83{ 84 BMenuItem::GetContentSize(width, height); 85 *width += *height + 4; 86} 87 88 89void 90WirelessNetworkMenuItem::DrawRadioIcon() 91{ 92 BRect bounds = Frame(); 93 bounds.left = bounds.right - 4 - bounds.Height(); 94 bounds.right -= 4; 95 bounds.bottom -= 2; 96 97 RadioView::Draw(Menu(), bounds, fNetwork.signal_strength, 98 RadioView::DefaultMax()); 99} 100 101 102/*static*/ int 103WirelessNetworkMenuItem::CompareSignalStrength(const BMenuItem* a, 104 const BMenuItem* b) 105{ 106 WirelessNetworkMenuItem* aItem = (WirelessNetworkMenuItem*)a; 107 WirelessNetworkMenuItem* bItem = (WirelessNetworkMenuItem*)b; 108 109 wireless_network aNetwork = aItem->Network(); 110 wireless_network bNetwork = bItem->Network(); 111 112 if (aNetwork.signal_strength == bNetwork.signal_strength) 113 return strncasecmp(aNetwork.name, bNetwork.name, 32); 114 115 return bNetwork.signal_strength - aNetwork.signal_strength; 116} 117