net_item.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. # -*- coding: utf-8 -*-
  2. import pygame
  3. ## local UI import
  4. from UI.page import Page
  5. from UI.label import Label
  6. from UI.fonts import fonts
  7. from UI.icon_item import IconItem
  8. from UI.multi_icon_item import MultiIconItem
  9. from UI.icon_pool import MyIconPool
  10. class NetItemMultiIcon(MultiIconItem):
  11. _CanvasHWND = None
  12. _Parent = None
  13. _Width = 18
  14. _Height = 18
  15. def Draw(self):
  16. self._CanvasHWND.blit(self._ImgSurf,(self._PosX,self._PosY+(self._Parent._Height-self._Height)/2,self._Width,self._Height),
  17. (0,self._IconIndex*self._IconHeight,self._IconWidth,self._IconHeight))
  18. class NetItemIcon(IconItem):
  19. _CanvasHWND = None
  20. _Parent = None
  21. _Width = 18
  22. _Height = 18
  23. def Draw(self):
  24. self._CanvasHWND.blit(self._ImgSurf,(self._PosX,self._PosY+(self._Parent._Height-self._Height)/2,self._Width,self._Height))
  25. class NetItem(object):
  26. _PosX = 0
  27. _PosY = 0
  28. _Width = 0
  29. _Height = 30
  30. _Bssid="" # 50:3A:A0:51:18:3C
  31. _Essid="" # MERCURY_EB88
  32. ## extra infomations
  33. _dhcphostname = "GameShell"
  34. _ip = None #eg 192.168.31.141
  35. _dns_domain = None
  36. _gateway = None #eg 192.168.31.1
  37. _use_global_dns = 0 ## eg 0 == False, 1 == True
  38. _netmask = None ##eg 255.255.255.0
  39. _usedhcphostname= 0
  40. _bitrate = "auto"
  41. _allow_lower_bitrates = 0
  42. _dns3 = None
  43. _dns2 = None ## eg 1.1.1.1
  44. _dns1 = None ## eg 8.8.8.8
  45. _use_settings_globally = 0
  46. _use_static_dns = 0 # eg: 1 == True
  47. _search_domain = None
  48. _Encrypt="" # WPA2
  49. _Channel="" # '10'
  50. _Stren = "" ## 19%
  51. _NetId = 0 ## 0-n
  52. _Mode = "" ## Master or AdHoc
  53. _Parent = None
  54. _IsActive = False
  55. _Icons = {} ## wifi strength and security icons
  56. _Labels = {}
  57. _FontObj = None
  58. def __init__(self):
  59. self._Labels = {}
  60. self._Icons = {}
  61. def SetActive(self,act):
  62. self._IsActive = act
  63. def UpdateStrenLabel(self, strenstr): ## strenstr should be 'number',eg:'90'
  64. self._Stren = self._Parent._Daemon.FormatSignalForPrinting(strenstr)
  65. self._Labels["stren"]._Text = self._Stren
  66. def Init(self, i, is_active):
  67. # Pick which strength measure to use based on what the daemon says
  68. # gap allocates more space to the first module
  69. if self._Parent._Daemon.GetSignalDisplayType() == 0:
  70. strenstr = 'quality'
  71. gap = 4 # Allow for 100%
  72. else:
  73. strenstr = 'strength'
  74. gap = 7 # -XX dbm = 7
  75. self._NetId = i
  76. # All of that network property stuff
  77. self._Stren = self._Parent._Daemon.FormatSignalForPrinting(
  78. str(self._Parent._Wireless.GetWirelessProperty(self._NetId, strenstr)))
  79. self._Essid = self._Parent._Wireless.GetWirelessProperty(self._NetId, 'essid')
  80. self._Bssid = self._Parent._Wireless.GetWirelessProperty(self._NetId, 'bssid')
  81. if self._Parent._Wireless.GetWirelessProperty(self._NetId, 'encryption'):
  82. self._Encrypt = \
  83. self._Parent._Wireless.GetWirelessProperty(self._NetId, 'encryption_method')
  84. else:
  85. self._Encrypt = 'Unsecured'
  86. self._Mode = \
  87. self._Parent._Wireless.GetWirelessProperty(self._NetId, 'mode') # Master, Ad-Hoc
  88. self._Channel = self._Parent._Wireless.GetWirelessProperty(self._NetId, 'channel')
  89. theString = ' %-*s %25s %9s %17s %6s %4s' % \
  90. (gap, self._Stren, self._Essid, self._Encrypt, self._Bssid, self._Mode,
  91. self._Channel)
  92. if is_active:
  93. theString = ">> "+theString[1:]
  94. self.SetActive(is_active)
  95. essid_label = Label()
  96. essid_label._PosX = 36
  97. #essid_label._PosY = self._PosY + (self._Height - self._FontObj.render(self._Essid,True,(83,83,83)).get_height())/2
  98. essid_label._CanvasHWND = self._Parent._CanvasHWND
  99. if len(self._Essid) > 19:
  100. essid_ = self._Essid[:20]
  101. else:
  102. essid_ = self._Essid
  103. essid_label.Init(essid_,self._FontObj)
  104. self._Labels["essid"] = essid_label
  105. stren_label = Label()
  106. #stren_label._PosY = self._PosY + (self._Height - self._FontObj.render(self._Stren,True,(83,83,83)).get_height())/2
  107. stren_label._CanvasHWND = self._Parent._CanvasHWND
  108. stren_label.Init(self._Stren,self._FontObj)
  109. stren_label._PosX = self._Width - 23 - stren_label.Width() - 2
  110. self._Labels["stren"] = stren_label
  111. lock_icon = NetItemIcon()
  112. lock_icon._ImgSurf = MyIconPool._Icons["lock"]
  113. lock_icon._CanvasHWND = self._Parent._CanvasHWND
  114. lock_icon._Parent = self
  115. self._Icons["lock"] = lock_icon
  116. done_icon = NetItemIcon()
  117. done_icon._ImgSurf = MyIconPool._Icons["done"]
  118. done_icon._CanvasHWND = self._Parent._CanvasHWND
  119. done_icon._Parent = self
  120. self._Icons["done"] = done_icon
  121. ## reuse the resource from TitleBar
  122. nimt = NetItemMultiIcon()
  123. nimt._ImgSurf = self._Parent._Screen._TitleBar._Icons["wifistatus"]._ImgSurf
  124. nimt._CanvasHWND = self._Parent._CanvasHWND
  125. nimt._Parent = self
  126. self._Icons["wifistatus"] = nimt
  127. #pp(theString)
  128. def Connect(self,notworkentry=None):
  129. """ Execute connection. """
  130. self._Parent._Wireless.ConnectWireless(self._NetId)
  131. def Draw(self):
  132. #pygame.draw.line(self._Parent._CanvasHWND,(169,169,169),(self._PosX,self._PosY),(self._PosX+self._Width,self._PosY),1)
  133. for i in self._Labels:
  134. self._Labels[i]._PosY = self._PosY + (self._Height - self._Labels[i]._Height)/2
  135. self._Labels[i].Draw()
  136. if self._IsActive:
  137. self._Icons["done"].NewCoord(14,self._PosY)
  138. self._Icons["done"].Draw()
  139. if self._Encrypt != "Unsecured":
  140. self._Icons["lock"].NewCoord( self._Width -23 - self._Labels["stren"].Width() - 2 - 18, self._PosY)
  141. self._Icons["lock"].Draw()
  142. ge = self._Parent._Screen._TitleBar.GetWifiStrength( self._Stren.replace('%',''))
  143. if ge > 0:
  144. self._Icons["wifistatus"]._IconIndex = ge
  145. self._Icons["wifistatus"].NewCoord(self._Width-23,self._PosY)
  146. self._Icons["wifistatus"].Draw()
  147. else:
  148. self._Icons["wifistatus"]._IconIndex = 0
  149. self._Icons["wifistatus"].NewCoord(self._Width-23,self._PosY)
  150. self._Icons["wifistatus"].Draw()
  151. pygame.draw.line(self._Parent._CanvasHWND,(169,169,169),(self._PosX,self._PosY+self._Height-1),(self._PosX+self._Width,self._PosY+self._Height-1),1)