net_item.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. package Wifi
  2. import (
  3. "fmt"
  4. //"strconv"
  5. //"strings"
  6. "github.com/clockworkpi/LauncherGoDev/sysgo/UI"
  7. "github.com/cuu/gogame/color"
  8. "github.com/cuu/gogame/draw"
  9. "github.com/cuu/gogame/rect"
  10. "github.com/cuu/gogame/surface"
  11. "github.com/veandco/go-sdl2/sdl"
  12. "github.com/veandco/go-sdl2/ttf"
  13. )
  14. var NetItemDefaultHeight = 30
  15. type NetItemMultiIcon struct {
  16. UI.MultiIconItem
  17. CanvasHWND *sdl.Surface // self._Parent._CanvasHWND
  18. Parent UI.WidgetInterface //
  19. }
  20. func NewNetItemMultiIcon() *NetItemMultiIcon {
  21. p := &NetItemMultiIcon{}
  22. p.IconIndex = 0
  23. p.IconWidth = 18
  24. p.IconHeight = 18
  25. p.Width = 18
  26. p.Height = 18
  27. return p
  28. }
  29. func (self *NetItemMultiIcon) Draw() {
  30. _, h_ := self.Parent.Size()
  31. dest_rect := rect.Rect(self.PosX, self.PosY+(h_-self.Height)/2, self.Width, self.Height)
  32. area_rect := rect.Rect(0, self.IconIndex*self.IconHeight, self.IconWidth, self.IconHeight)
  33. surface.Blit(self.CanvasHWND, self.ImgSurf, &dest_rect, &area_rect)
  34. }
  35. type NetItemIcon struct {
  36. UI.IconItem
  37. CanvasHWND *sdl.Surface
  38. Parent UI.WidgetInterface
  39. }
  40. func NewNetItemIcon() *NetItemIcon {
  41. p := &NetItemIcon{}
  42. p.Width = 18
  43. p.Height = 18
  44. return p
  45. }
  46. func (self *NetItemIcon) Draw() {
  47. _, h_ := self.Parent.Size()
  48. dest_rect := rect.Rect(self.PosX, self.PosY+(h_-self.Height)/2, self.Width, self.Height)
  49. surface.Blit(self.CanvasHWND, self.ImgSurf, &dest_rect, nil)
  50. }
  51. type NetItem struct {
  52. UI.Widget
  53. Bssid string //eg: 50:3A:A0:51:18:3C
  54. Essid string //eg: MERCURY_EB88
  55. ip string
  56. Encrypt string // WPA2
  57. Channel string //'10'
  58. Signal int16 // -67
  59. Mode string // Master or AdHoc
  60. Parent *WifiList
  61. IsActive bool
  62. Password string
  63. Labels map[string]UI.LabelInterface
  64. Icons map[string]UI.IconItemInterface
  65. Fonts map[string]*ttf.Font
  66. FontObj *ttf.Font
  67. }
  68. func NewNetItem() *NetItem {
  69. p := &NetItem{}
  70. p.Height = NetItemDefaultHeight
  71. p.Labels = make(map[string]UI.LabelInterface)
  72. p.Icons = make(map[string]UI.IconItemInterface)
  73. p.Fonts = make(map[string]*ttf.Font)
  74. return p
  75. }
  76. func (self *NetItem) SetActive(act bool) {
  77. self.IsActive = act
  78. }
  79. func (self *NetItem) UpdateStrenLabel() { // ## sig_str should be 'number',eg:'-70'
  80. if _, ok := self.Labels["stren"]; ok {
  81. self.Labels["stren"].SetText(fmt.Sprintf("%d", self.CalcWifiQuality()))
  82. }
  83. }
  84. func (self *NetItem) Init(is_active bool) {
  85. //strenstr := "quality"
  86. //gap := 7
  87. the_main_screen := self.Parent.GetScreen()
  88. if is_active {
  89. self.SetActive(is_active)
  90. }
  91. essid_label := UI.NewLabel()
  92. essid_label.PosX = 36
  93. essid_label.CanvasHWND = self.Parent.GetCanvasHWND()
  94. essid_ := ""
  95. if len(self.Essid) > 19 {
  96. essid_ = self.Essid[:20]
  97. } else {
  98. essid_ = self.Essid
  99. }
  100. if len(essid_) == 0 {
  101. essid_ = self.Bssid
  102. }
  103. if len(essid_) == 0 {
  104. essid_ = EMPTY_NETWORK
  105. }
  106. //fmt.Println("essid: ",essid_, len(essid_))
  107. essid_label.Init(essid_, self.FontObj, nil)
  108. self.Labels["essid"] = essid_label
  109. stren_label := UI.NewLabel()
  110. stren_label.CanvasHWND = self.Parent.GetCanvasHWND()
  111. stren_l := fmt.Sprintf("%%%d ", self.CalcWifiQuality())
  112. if len(stren_l) == 0 {
  113. stren_l = "%%0"
  114. }
  115. stren_label.Init(stren_l, self.FontObj, nil)
  116. stren_label.PosX = self.Width - 23 - stren_label.Width - 2
  117. self.Labels["stren"] = stren_label
  118. lock_icon := NewNetItemIcon()
  119. lock_icon.ImgSurf = UI.MyIconPool.GetImgSurf("lock")
  120. lock_icon.CanvasHWND = self.Parent.GetCanvasHWND()
  121. lock_icon.Parent = self // WidgetInterface
  122. self.Icons["lock"] = lock_icon
  123. done_icon := NewNetItemIcon()
  124. done_icon.ImgSurf = UI.MyIconPool.GetImgSurf("done")
  125. done_icon.CanvasHWND = self.Parent.GetCanvasHWND()
  126. done_icon.Parent = self
  127. self.Icons["done"] = done_icon
  128. nimt := NewNetItemMultiIcon()
  129. nimt.ImgSurf = the_main_screen.TitleBar.Icons["wifistatus"].GetImgSurf()
  130. nimt.CanvasHWND = self.Parent.GetCanvasHWND()
  131. nimt.Parent = self // WidgetInterface
  132. self.Icons["wifistatus"] = nimt
  133. }
  134. func (self *NetItem) Connect() {
  135. }
  136. func (self *NetItem) CalcWifiQuality() int {
  137. qua := 0
  138. qua = 2 * (int(self.Signal) + 100)
  139. return qua
  140. }
  141. func (self *NetItem) CalcWifiStrength() int {
  142. segs := [][]int{[]int{-2, -1}, []int{0, 25}, []int{25, 50}, []int{50, 75}, []int{75, 100}}
  143. stren_number := self.CalcWifiQuality()
  144. ge := 0
  145. if stren_number == 0 {
  146. return ge
  147. }
  148. for i, v := range segs {
  149. if stren_number >= v[0] && stren_number <= v[1] {
  150. ge = i
  151. break
  152. }
  153. }
  154. return ge
  155. }
  156. func (self *NetItem) Draw() {
  157. for i, v := range self.Labels {
  158. x_, _ := v.Coord()
  159. _, h_ := v.Size()
  160. self.Labels[i].NewCoord(x_, self.PosY+(self.Height-h_)/2)
  161. self.Labels[i].Draw()
  162. }
  163. if self.IsActive == true {
  164. self.Icons["done"].NewCoord(14, self.PosY)
  165. self.Icons["done"].Draw()
  166. }
  167. /*
  168. if self.Encrypt != "Unsecured" {
  169. w_,_ := self.Labels["stren"].Size()
  170. self.Icons["lock"].NewCoord(self.Width -23 - w_ -2 - 18, self.PosY)
  171. self.Icons["lock"].Draw()
  172. }
  173. */
  174. //the_main_screen := self.Parent.GetScreen()
  175. ge := self.CalcWifiStrength()
  176. if ge > 0 {
  177. self.Icons["wifistatus"].SetIconIndex(ge)
  178. self.Icons["wifistatus"].NewCoord(self.Width-23, self.PosY)
  179. self.Icons["wifistatus"].Draw()
  180. } else {
  181. self.Icons["wifistatus"].SetIconIndex(0)
  182. self.Icons["wifistatus"].NewCoord(self.Width-23, self.PosY)
  183. self.Icons["wifistatus"].Draw()
  184. }
  185. draw.Line(self.Parent.GetCanvasHWND(),
  186. &color.Color{169, 169, 169, 255},
  187. self.PosX, self.PosY+self.Height-1,
  188. self.PosX+self.Width, self.PosY+self.Height-1,
  189. 1)
  190. }