net_item.py 6.8 KB

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