net_item.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. package Wifi
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. "github.com/veandco/go-sdl2/sdl"
  7. "github.com/veandco/go-sdl2/ttf"
  8. "github.com/cuu/gogame/color"
  9. "github.com/cuu/gogame/draw"
  10. "github.com/cuu/gogame/rect"
  11. "github.com/cuu/gogame/surface"
  12. "github.com/cuu/LauncherGoDev/sysgo/UI"
  13. "github.com/cuu/LauncherGoDev/sysgo/DBUS"
  14. )
  15. var NetItemDefaultHeight = 30
  16. type NetItemMultiIcon struct {
  17. UI.MultiIconItem
  18. CanvasHWND *sdl.Surface // self._Parent._CanvasHWND
  19. Parent UI.WidgetInterface //
  20. }
  21. func NewNetItemMultiIcon() *NetItemMultiIcon{
  22. p := &NetItemMultiIcon{}
  23. p.IconIndex = 0
  24. p.IconWidth = 18
  25. p.IconHeight = 18
  26. p.Width = 18
  27. p.Height = 18
  28. return p
  29. }
  30. func (self *NetItemMultiIcon) Draw() {
  31. _,h_ := self.Parent.Size()
  32. dest_rect := rect.Rect(self.PosX,self.PosY+(h_-self.Height)/2, self.Width,self.Height)
  33. area_rect := rect.Rect(0,self.IconIndex*self.IconHeight,self.IconWidth,self.IconHeight)
  34. surface.Blit(self.CanvasHWND,self.ImgSurf,&dest_rect,&area_rect)
  35. }
  36. type NetItemIcon struct {
  37. UI.IconItem
  38. CanvasHWND *sdl.Surface
  39. Parent UI.WidgetInterface
  40. }
  41. func NewNetItemIcon() *NetItemIcon {
  42. p := &NetItemIcon{}
  43. p.Width = 18
  44. p.Height = 18
  45. return p
  46. }
  47. func (self *NetItemIcon) Draw() {
  48. _,h_ := self.Parent.Size()
  49. dest_rect := rect.Rect(self.PosX,self.PosY+(h_-self.Height)/2,self.Width,self.Height)
  50. surface.Blit(self.CanvasHWND,self.ImgSurf,&dest_rect,nil)
  51. }
  52. type NetItem struct {
  53. UI.Widget
  54. Bssid string //eg: 50:3A:A0:51:18:3C
  55. Essid string //eg: MERCURY_EB88
  56. dhcphostname string //"GameShell"
  57. ip string
  58. dns_domain string
  59. gateway string
  60. use_global_dns int // eg 0==False,1 == True
  61. netmask string
  62. usedhcphostname int
  63. bitrate string //"auto"
  64. dns3 string
  65. dns2 string
  66. dns1 string
  67. use_settings_globally int // 0
  68. use_static_dns int //eg: 1== True
  69. search_domain string
  70. Encrypt string // WPA2
  71. Channel string //'10'
  72. Stren string // 19%
  73. NetId int
  74. Mode string // Master or AdHoc
  75. Parent *WifiList
  76. IsActive bool
  77. Labels map[string]UI.LabelInterface
  78. Icons map[string]UI.IconItemInterface
  79. Fonts map[string]*ttf.Font
  80. FontObj *ttf.Font
  81. Wireless *DBUS.DbusInterface
  82. Daemon *DBUS.DbusInterface
  83. }
  84. func NewNetItem() *NetItem {
  85. p := &NetItem{}
  86. p.NetId = 0
  87. p.bitrate = "auto"
  88. p.dhcphostname = "GameShell"
  89. p.Height = NetItemDefaultHeight
  90. p.Labels = make(map[string]UI.LabelInterface)
  91. p.Icons = make( map[string]UI.IconItemInterface)
  92. p.Fonts = make(map[string]*ttf.Font)
  93. return p
  94. }
  95. func (self *NetItem) SetActive( act bool) {
  96. self.IsActive = act
  97. }
  98. func (self *NetItem) UpdateStrenLabel( strenstr string) { // ## strenstr should be 'number',eg:'90'
  99. self.Stren = strenstr
  100. if _, ok := self.Labels["stren"]; ok {
  101. self.Labels["stren"].SetText(self.Stren)
  102. }
  103. }
  104. func (self *NetItem) Init(i int,is_active bool) {
  105. var sig_display_type int
  106. strenstr := "quality"
  107. gap := 4
  108. the_main_screen := self.Parent.GetScreen()
  109. self.Wireless = self.Parent.Wireless
  110. self.Daemon = self.Parent.Daemon
  111. self.Daemon.Get( self.Daemon.Method("GetSignalDisplayType"), &sig_display_type )
  112. if sig_display_type == 0 {
  113. strenstr = "quality"
  114. gap = 4 // Allow for 100%
  115. }else {
  116. strenstr = "strength"
  117. gap = 7 // -XX dbm = 7
  118. }
  119. self.NetId = i
  120. tmp := 0
  121. self.Wireless.Get(self.Wireless.Method("GetWirelessProperty",self.NetId, strenstr),&tmp)
  122. tmp2 := ""
  123. self.Daemon.Get( self.Daemon.Method("FormatSignalForPrinting",tmp), &tmp2)
  124. self.Stren = tmp2
  125. self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"essid"),&self.Essid)
  126. self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"bssid"),&self.Bssid)
  127. check_enc := false
  128. self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"encryption"),&check_enc)
  129. if check_enc == true {
  130. self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"encryption_method"),&self.Encrypt)
  131. }else {
  132. self.Encrypt = "Unsecured"
  133. }
  134. self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"mode"),&self.Mode)
  135. self.Wireless.Get( self.Wireless.Method("GetWirelessProperty",self.NetId,"channel"),&self.Channel)
  136. theString := fmt.Sprintf(" %-*s %25s %9s %17s %6s %4s",gap,self.Stren,self.Essid,self.Encrypt,self.Bssid,self.Mode,
  137. self.Channel)
  138. if is_active {
  139. theString = ">> " + theString[1:]
  140. self.SetActive(is_active)
  141. }
  142. //fmt.Println(theString)
  143. essid_label := UI.NewLabel()
  144. essid_label.PosX = 36
  145. essid_label.CanvasHWND = self.Parent.GetCanvasHWND()
  146. essid_ := ""
  147. if len(self.Essid) > 19 {
  148. essid_ = self.Essid[:20]
  149. }else {
  150. essid_ = self.Essid
  151. }
  152. essid_label.Init(essid_, self.FontObj,nil)
  153. self.Labels["essid"] = essid_label
  154. stren_label := UI.NewLabel()
  155. stren_label.CanvasHWND = self.Parent.GetCanvasHWND()
  156. stren_label.Init(self.Stren, self.FontObj,nil)
  157. stren_label.PosX = self.Width - 23 - stren_label.Width-2
  158. self.Labels["stren"] = stren_label
  159. lock_icon := NewNetItemIcon()
  160. lock_icon.ImgSurf = UI.MyIconPool.GetImgSurf("lock")
  161. lock_icon.CanvasHWND = self.Parent.GetCanvasHWND()
  162. lock_icon.Parent = self // WidgetInterface
  163. self.Icons["lock"] = lock_icon
  164. done_icon := NewNetItemIcon()
  165. done_icon.ImgSurf = UI.MyIconPool.GetImgSurf("done")
  166. done_icon.CanvasHWND = self.Parent.GetCanvasHWND()
  167. done_icon.Parent = self
  168. self.Icons["done"] = done_icon
  169. nimt := NewNetItemMultiIcon()
  170. nimt.ImgSurf = the_main_screen.TitleBar.Icons["wifistatus"].GetImgSurf()
  171. nimt.CanvasHWND = self.Parent.GetCanvasHWND()
  172. nimt.Parent = self // WidgetInterface
  173. self.Icons["wifistatus"] = nimt
  174. }
  175. func (self *NetItem) Connect() {
  176. self.Wireless.Method("ConnectWireless",self.NetId)
  177. }
  178. func (self *NetItem) Draw() {
  179. for i,v := range self.Labels {
  180. x_,_ := v.Coord()
  181. _,h_ := v.Size()
  182. self.Labels[i].NewCoord(x_,self.PosY+(self.Height - h_)/2)
  183. self.Labels[i].Draw()
  184. }
  185. if self.IsActive == true {
  186. self.Icons["done"].NewCoord(14,self.PosY)
  187. self.Icons["done"].Draw()
  188. }
  189. if self.Encrypt != "Unsecured" {
  190. w_,_ := self.Labels["stren"].Size()
  191. self.Icons["lock"].NewCoord(self.Width -23 - w_ -2 - 18, self.PosY)
  192. self.Icons["lock"].Draw()
  193. }
  194. stren_int,err := strconv.ParseInt(strings.Replace(self.Stren,"%","",-1),10,64)
  195. if err == nil {
  196. the_main_screen := self.Parent.GetScreen()
  197. ge := the_main_screen.TitleBar.GetWifiStrength(int(stren_int))
  198. if ge > 0 {
  199. self.Icons["wifistatus"].SetIconIndex(ge)
  200. self.Icons["wifistatus"].NewCoord(self.Width-23,self.PosY)
  201. self.Icons["wifistatus"].Draw()
  202. }else {
  203. self.Icons["wifistatus"].SetIconIndex(0)
  204. self.Icons["wifistatus"].NewCoord(self.Width-23,self.PosY)
  205. self.Icons["wifistatus"].Draw()
  206. }
  207. }
  208. draw.Line(self.Parent.GetCanvasHWND(),
  209. &color.Color{169,169,169,255},
  210. self.PosX,self.PosY+self.Height-1,
  211. self.PosX+self.Width,self.PosY+self.Height-1,
  212. 1)
  213. }