net_item.py 6.8 KB

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