/uiComponents/SystemMenu/WiFiElement.qml

https://bitbucket.org/kasimling/luna-sysmgr · QML · 297 lines · 252 code · 40 blank · 5 comment · 52 complexity · 293332fb274dc438c7287a71caadd5d9 MD5 · raw file

  1. import Qt 4.7
  2. import SystemMenu 1.0
  3. Drawer {
  4. id: wifiMenu
  5. property int ident: 0
  6. property int internalIdent: 0
  7. property bool isWifiOn: false
  8. property bool coloseOnConnect: false
  9. // ------------------------------------------------------------
  10. // External interface to the WiFi Element is defined here:
  11. signal menuCloseRequest(int delayMs)
  12. signal menuOpened()
  13. signal menuClosed()
  14. signal onOffTriggered()
  15. signal prefsTriggered()
  16. signal itemSelected(int index, string name, int profileId, string securityType, string connState)
  17. function setWifiState(isOn, state) {
  18. if(!isWifiOn && isOn) {
  19. if(wifiMenu.state == "DRAWER_OPEN") {
  20. wifiSpinner.on = true;
  21. }
  22. }
  23. isWifiOn = isOn
  24. wifiTitleState.text = state
  25. if(!isWifiOn) {
  26. wifiSpinner.on = false;
  27. clearWifiList();
  28. }
  29. }
  30. function addWifiNetworkEntry(name, profId, sigBars, secType, connectionStatus, isConnected) {
  31. wifiList.append({"wifiName": name,
  32. "profId":profId,
  33. "sigBars": sigBars,
  34. "secType": secType,
  35. "connectionStatus": connectionStatus,
  36. "isConnected": isConnected,
  37. "listIndex": wifiList.count,
  38. "itemStatus": "",
  39. "boldStatus": false,
  40. "showSelected": false
  41. });
  42. wifiListView.height = (wifiOnOff.height+separator.height) * wifiList.count;
  43. }
  44. function clearWifiList() {
  45. wifiList.clear()
  46. wifiListView.height = 1
  47. }
  48. function wifiConnectStateUpdate(connected, ssid, state) {
  49. if(isWifiOn) {
  50. if(ssid != "") {
  51. for(var index = 0; index < wifiList.count; index++) {
  52. var entry = wifiList.get(index)
  53. entry.boldStatus = false;
  54. if(entry.wifiName == ssid) {
  55. if(state == "userSelected") {
  56. entry.connectionStatus = "connecting";
  57. entry.isConnected = false;
  58. entry.itemStatus = runtime.getLocalizedString("Connecting...");
  59. entry.showSelected = true;
  60. } else if((state == "associated") || (state == "associating")) {
  61. entry.connectionStatus = state;
  62. entry.isConnected = false;
  63. entry.itemStatus = runtime.getLocalizedString("Connecting...");
  64. } else if((state == "ipFailed") || (state == "associationFailed")) {
  65. entry.connectionStatus = state;
  66. entry.isConnected = false;
  67. if(state == "ipFailed") {
  68. entry.itemStatus = runtime.getLocalizedString("IP configuration failed");
  69. entry.boldStatus = true;
  70. } else {
  71. entry.itemStatus = runtime.getLocalizedString("Association failed");
  72. }
  73. } else if(state == "ipConfigured") {
  74. entry.connectionStatus = state;
  75. entry.isConnected = true;
  76. entry.itemStatus = "";
  77. if(index != 0) {
  78. // move the connected item to the top
  79. wifiList.move(index, 0, 1);
  80. }
  81. if(coloseOnConnect) {
  82. menuCloseRequest(1000);
  83. coloseOnConnect = false;
  84. }
  85. } else if(state == "notAssociated") {
  86. entry.connectionStatus = "";
  87. entry.isConnected = false;
  88. entry.itemStatus = "";
  89. }
  90. } else {
  91. entry.isConnected = false;
  92. entry.itemStatus = "";
  93. entry.connectionStatus = "";
  94. entry.showSelected = false;
  95. }
  96. }
  97. } else if (!connected){
  98. for(var index = 0; index < wifiList.count; index++) {
  99. var entry = wifiList.get(index)
  100. entry.isConnected = false;
  101. entry.boldStatus = false;
  102. }
  103. }
  104. }
  105. }
  106. Connections {
  107. target: NativeSystemMenuHandler
  108. onWifiListUpdated: {
  109. wifiSpinner.on = false;
  110. }
  111. }
  112. // ------------------------------------------------------------
  113. width: parent.width
  114. onDrawerOpened: menuOpened()
  115. onDrawerClosed: menuClosed()
  116. onDrawerFinishedClosingAnimation: {
  117. clearWifiList();
  118. }
  119. drawerHeader:
  120. MenuListEntry {
  121. selectable: wifiMenu.active
  122. content: Item {
  123. width: parent.width;
  124. Text{
  125. id: wifiTitle
  126. x: ident;
  127. anchors.verticalCenter: parent.verticalCenter
  128. text: runtime.getLocalizedString("Wi-Fi");
  129. color: wifiMenu.active ? "#FFF" : "#AAA";
  130. font.bold: false;
  131. font.pixelSize: 18
  132. font.family: "Prelude"
  133. }
  134. AnimatedSpinner {
  135. //Spinner {
  136. id: wifiSpinner
  137. x: wifiTitle.width + 18;
  138. y:-17
  139. on:false
  140. }
  141. Text {
  142. id: wifiTitleState
  143. x: wifiMenu.width - width - 14;
  144. anchors.verticalCenter: parent.verticalCenter
  145. text: runtime.getLocalizedString("init");
  146. width: wifiMenu.width - wifiTitle.width - 60
  147. horizontalAlignment: Text.AlignRight
  148. elide: Text.ElideRight;
  149. color: "#AAA";
  150. font.pixelSize: 13
  151. font.capitalization: Font.AllUppercase
  152. }
  153. }
  154. }
  155. drawerBody:
  156. Column {
  157. spacing: 0
  158. width: parent.width
  159. MenuDivider { id: separator }
  160. MenuListEntry {
  161. id: wifiOnOff
  162. selectable: true
  163. content: Text { id: wifiOnOffText;
  164. x: ident + internalIdent;
  165. text: isWifiOn ? runtime.getLocalizedString("Turn off WiFi") : runtime.getLocalizedString("Turn on WiFi");
  166. color: "#FFF";
  167. font.bold: false;
  168. font.pixelSize: 18
  169. font.family: "Prelude"
  170. }
  171. onAction: {
  172. onOffTriggered()
  173. wifiSpinner.on = !isWifiOn;
  174. if(isWifiOn) {
  175. menuCloseRequest(300);
  176. } else {
  177. coloseOnConnect = true;
  178. }
  179. }
  180. }
  181. MenuDivider {}
  182. ListView {
  183. id: wifiListView
  184. width: parent.width
  185. interactive: false
  186. spacing: 0
  187. height: 1
  188. model: wifiList
  189. delegate: wifiListDelegate
  190. }
  191. MenuListEntry {
  192. selectable: true
  193. content: Text { x: ident + internalIdent; text: runtime.getLocalizedString("Wi-Fi Preferences"); color: "#FFF"; font.bold: false; font.pixelSize: 18; font.family: "Prelude"}
  194. onAction: {
  195. clearWifiList()
  196. prefsTriggered()
  197. menuCloseRequest(300);
  198. }
  199. }
  200. }
  201. Component {
  202. id: wifiListDelegate
  203. Column {
  204. spacing: 0
  205. width: parent.width
  206. property int index: listIndex
  207. MenuListEntry {
  208. id: entry
  209. selectable: true
  210. forceSelected: showSelected
  211. content: WifiEntry {
  212. id: wifiNetworkData
  213. x: ident + internalIdent;
  214. width: wifiMenu.width-x;
  215. name: wifiName;
  216. profileId: profId;
  217. signalBars: sigBars;
  218. securityType: secType;
  219. connStatus: connectionStatus;
  220. status: itemStatus;
  221. statusInBold: boldStatus;
  222. connected: isConnected;
  223. }
  224. onAction: {
  225. itemSelected(index,
  226. wifiNetworkData.name,
  227. wifiNetworkData.profileId,
  228. wifiNetworkData.securityType,
  229. wifiNetworkData.connStatus)
  230. if((wifiNetworkData.connStatus == "ipConfigured") ||
  231. (wifiNetworkData.connStatus == "associated") ||
  232. (wifiNetworkData.connStatus == "ipFailed") ||
  233. (wifiNetworkData.connStatus == "associationFailed") ) {
  234. menuCloseRequest(300);
  235. } else if((wifiNetworkData.profileId == 0) && (wifiNetworkData.securityType != "")) {
  236. menuCloseRequest(300);
  237. }
  238. coloseOnConnect = true;
  239. }
  240. }
  241. MenuDivider {}
  242. }
  243. }
  244. ListModel {
  245. id: wifiList
  246. }
  247. onMenuOpened: {
  248. coloseOnConnect = false;
  249. if(isWifiOn) {
  250. wifiSpinner.on = true
  251. }
  252. }
  253. onMenuClosed: {
  254. coloseOnConnect = false;
  255. wifiSpinner.on = false
  256. }
  257. }