bluetooth_page.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832
  1. package Bluetooth
  2. import (
  3. "fmt"
  4. "os"
  5. "log"
  6. "strings"
  7. "github.com/fatih/structs"
  8. "github.com/veandco/go-sdl2/ttf"
  9. "github.com/cuu/gogame/draw"
  10. "github.com/cuu/gogame/surface"
  11. "github.com/cuu/gogame/rect"
  12. "github.com/cuu/gogame/event"
  13. "github.com/cuu/gogame/time"
  14. "github.com/cuu/gogame/color"
  15. "github.com/cuu/gogame/font"
  16. bleapi "github.com/muka/go-bluetooth/api"
  17. "github.com/muka/go-bluetooth/bluez/profile"
  18. "github.com/clockworkpi/LauncherGoDev/sysgo/UI"
  19. )
  20. func showDeviceInfo(dev *bleapi.Device) {
  21. if dev == nil {
  22. return
  23. }
  24. props, err := dev.GetProperties()
  25. if err != nil {
  26. fmt.Printf("%s: Failed to get properties: %s\n", dev.Path, err.Error())
  27. return
  28. }
  29. fmt.Printf("name=%s addr=%s rssi=%d\n", props.Name, props.Address, props.RSSI)
  30. }
  31. type BleForgetConfirmPage struct {
  32. UI.ConfirmPage
  33. }
  34. func NewBleForgetConfirmPage() *BleForgetConfirmPage {
  35. p := &BleForgetConfirmPage{}
  36. p.ListFont = UI.Fonts["veramono20"]
  37. p.FootMsg = [5]string{"Nav","","","Cancel","Yes"}
  38. p.ConfirmText = "Confirm Forget?"
  39. p.ConfirmPage.ConfirmText = p.ConfirmText
  40. return p
  41. }
  42. func (self *BleForgetConfirmPage) KeyDown(ev *event.Event) {
  43. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  44. self.ReturnToUpLevelPage()
  45. self.Screen.Draw()
  46. self.Screen.SwapAndShow()
  47. }
  48. if ev.Data["Key"] == UI.CurKeys["B"] {
  49. self.SnapMsg("Deleting")
  50. self.Screen.Draw()
  51. self.Screen.SwapAndShow()
  52. time.BlockDelay(400)
  53. self.ReturnToUpLevelPage()
  54. self.Screen.Draw()
  55. self.Screen.SwapAndShow()
  56. }
  57. }
  58. func (self *BleForgetConfirmPage) Draw() {
  59. self.DrawBG()
  60. for _,v := range self.MyList{
  61. v.Draw()
  62. }
  63. }
  64. type BleInfoPageSelector struct {
  65. UI.InfoPageSelector
  66. }
  67. func NewBleInfoPageSelector() *BleInfoPageSelector{
  68. p := &BleInfoPageSelector{}
  69. p.Width = UI.Width
  70. p.BackgroundColor = &color.Color{131,199,219,255} //SkinManager().GiveColor('Front')
  71. return p
  72. }
  73. func (self *BleInfoPageSelector) Draw() {
  74. idx := self.Parent.GetPsIndex()
  75. mylist := self.Parent.GetMyList()
  76. if idx < len(mylist) {
  77. _,y := mylist[idx].Coord()
  78. _,h := mylist[idx].Size()
  79. x := self.PosX+2
  80. self.PosY = y+1
  81. self.Height = h-3
  82. canvas_ := self.Parent.GetCanvasHWND()
  83. rect_ := rect.Rect(x,self.PosY,self.Width-4, self.Height)
  84. draw.AARoundRect(canvas_,&rect_,self.BackgroundColor,4,0,self.BackgroundColor)
  85. }
  86. }
  87. type BleInfoPage struct {
  88. UI.Page
  89. ListFontObj *ttf.Font
  90. ListSmFontObj *ttf.Font
  91. ListSm2FontObj *ttf.Font
  92. AList map[string]interface{}
  93. Scroller *UI.ListScroller
  94. ConfirmPage1 *BleForgetConfirmPage
  95. MyDevice *bleapi.Device // from NetItem-> from BluetoothPage
  96. Props *profile.Device1Properties
  97. Path string
  98. }
  99. func NewBleInfoPage() *BleInfoPage {
  100. p :=&BleInfoPage{}
  101. p.FootMsg = [5]string{"Nav","Disconnect","Forget","Back","" }
  102. p.ListFontObj = UI.Fonts["varela15"]
  103. p.ListSmFontObj = UI.Fonts["varela12"]
  104. p.ListSm2FontObj = UI.Fonts["varela11"]
  105. return p
  106. }
  107. func (self *BleInfoPage) Init() {
  108. if self.Screen != nil {
  109. if self.Screen.CanvasHWND != nil && self.CanvasHWND == nil {
  110. self.CanvasHWND = self.Screen.CanvasHWND
  111. }
  112. }
  113. self.PosX = self.Index*self.Screen.Width
  114. self.Width = self.Screen.Width // equals to screen width
  115. self.Height = self.Screen.Height
  116. ps := NewBleInfoPageSelector()
  117. ps.Parent = self
  118. self.Ps = ps
  119. self.PsIndex = 0
  120. //self.GenList()
  121. self.Scroller = UI.NewListScroller()
  122. self.Scroller.Parent = self
  123. self.Scroller.PosX = 2
  124. self.Scroller.PosY = 2
  125. self.Scroller.Init()
  126. self.ConfirmPage1 = NewBleForgetConfirmPage()
  127. self.ConfirmPage1.Screen = self.Screen
  128. self.ConfirmPage1.Name = "Confirm Forget"
  129. self.ConfirmPage1.Init()
  130. }
  131. func (self *BleInfoPage) GenList() {
  132. self.AList = structs.Map(self.Props) //map[string]interface{}
  133. self.MyList = nil
  134. self.PsIndex = 0
  135. start_x := 0
  136. start_y := 0
  137. i := 0
  138. skip_arrays := []string{"ManufacturerData","AdvertisingFlags","ServiceData"}
  139. for k,v := range self.AList {
  140. skip2 := false
  141. for _,u := range skip_arrays {
  142. if strings.HasPrefix(k,u) {
  143. skip2 = true
  144. break
  145. }
  146. }
  147. if skip2 {
  148. continue
  149. }
  150. li := UI.NewInfoPageListItem()
  151. li.Parent = self
  152. li.PosX = start_x
  153. li.PosY = start_y +i*NetItemDefaultHeight
  154. li.Width = UI.Width
  155. li.Fonts["normal"] = self.ListFontObj
  156. if k =="UUIDs" {
  157. li.Fonts["small"] = self.ListSm2FontObj
  158. }else{
  159. li.Fonts["small"] = self.ListSmFontObj
  160. }
  161. li.Init(k)
  162. li.Flag = k
  163. sm_text := ""
  164. if k == "UUIDs" {
  165. if len(v.([]string))> 1 {
  166. sm_text = v.([]string)[0]
  167. }else{
  168. sm_text = "<empty>"
  169. }
  170. }else {
  171. sm_text = fmt.Sprintf("%v",v)
  172. }
  173. if len(sm_text) > 20 {
  174. sm_text = sm_text[:20]
  175. }
  176. li.SetSmallText(sm_text)
  177. li.PosX = 2
  178. self.MyList = append(self.MyList,li)
  179. i+=1
  180. }
  181. }
  182. func (self *BleInfoPage) ScrollUp() {
  183. if len(self.MyList) == 0 {
  184. return
  185. }
  186. self.PsIndex -= 1
  187. if self.PsIndex < 0 {
  188. self.PsIndex = 0
  189. }
  190. cur_li := self.MyList[self.PsIndex]
  191. x,y := cur_li.Coord()
  192. if y < 0 {
  193. for i,v := range self.MyList {
  194. x,y = v.Coord()
  195. _,h := v.Size()
  196. self.MyList[i].NewCoord(x,y+h)
  197. }
  198. }
  199. }
  200. func (self *BleInfoPage) ScrollDown() {
  201. if len(self.MyList) == 0 {
  202. return
  203. }
  204. self.PsIndex += 1
  205. if self.PsIndex >= len(self.MyList) {
  206. self.PsIndex = len(self.MyList)-1
  207. }
  208. cur_li := self.MyList[self.PsIndex]
  209. x,y := cur_li.Coord()
  210. _,h := cur_li.Size()
  211. if y + h > self.Height {
  212. for i,v := range self.MyList {
  213. x,y = v.Coord()
  214. _,h = v.Size()
  215. self.MyList[i].NewCoord(x,y-h)
  216. }
  217. }
  218. }
  219. func (self *BleInfoPage) TryToForget() {
  220. //muka Adapter1 RemoveDevice Path
  221. adapter,err := bleapi.GetAdapter(adapterID)
  222. if err == nil {
  223. self.Screen.MsgBox.SetText("Forgeting")
  224. self.Screen.MsgBox.Draw()
  225. self.Screen.SwapAndShow()
  226. err = adapter.RemoveDevice(self.Path)
  227. if err != nil {
  228. fmt.Println("BleInfoPage TryToForget: ",err)
  229. }
  230. time.BlockDelay(400)
  231. self.ReturnToUpLevelPage()
  232. self.Screen.Draw()
  233. self.Screen.SwapAndShow()
  234. }else {
  235. fmt.Println("BleInfoPage TryToForget GetAdapter: ",err)
  236. }
  237. }
  238. func (self *BleInfoPage) TryToDisconnect() {
  239. if self.MyDevice.IsConnected() {
  240. self.Screen.FootBar.UpdateNavText("Disconnecting")
  241. self.Screen.MsgBox.SetText("Disconnecting")
  242. self.Screen.MsgBox.Draw()
  243. self.Screen.SwapAndShow()
  244. self.MyDevice.Disconnect()
  245. time.BlockDelay(350)
  246. self.ReturnToUpLevelPage()
  247. self.Screen.Draw()
  248. self.Screen.SwapAndShow()
  249. self.Screen.FootBar.ResetNavText()
  250. }
  251. }
  252. func (self *BleInfoPage) Click() {
  253. if self.PsIndex >= len(self.MyList) {
  254. return
  255. }
  256. cur_li := self.MyList[self.PsIndex]
  257. fmt.Println(cur_li.(*UI.InfoPageListItem).Flag)
  258. }
  259. func (self *BleInfoPage) OnLoadCb() {
  260. if self.Props.Connected == true {
  261. self.FootMsg[1] = "Disconnect"
  262. }else {
  263. self.FootMsg[1] = ""
  264. }
  265. self.GenList()
  266. }
  267. func (self *BleInfoPage) KeyDown(ev *event.Event) {
  268. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  269. self.ReturnToUpLevelPage()
  270. self.Screen.Draw()
  271. self.Screen.SwapAndShow()
  272. }
  273. if ev.Data["Key"] == UI.CurKeys["Up"] {
  274. self.ScrollUp()
  275. self.Screen.Draw()
  276. self.Screen.SwapAndShow()
  277. }
  278. if ev.Data["Key"] == UI.CurKeys["Down"] {
  279. self.ScrollDown()
  280. self.Screen.Draw()
  281. self.Screen.SwapAndShow()
  282. }
  283. if ev.Data["Key"] == UI.CurKeys["Enter"]{
  284. self.Click()
  285. }
  286. if ev.Data["Key"] == UI.CurKeys["X"] {
  287. self.TryToDisconnect()
  288. }
  289. if ev.Data["Key"] == UI.CurKeys["Y"] {
  290. self.TryToForget()
  291. }
  292. }
  293. func (self *BleInfoPage) Draw() {
  294. if len(self.MyList) == 0 {
  295. return
  296. }
  297. self.ClearCanvas()
  298. if len(self.MyList) * UI.DefaultInfoPageListItemHeight > self.Height {
  299. self.Ps.(*BleInfoPageSelector).Width = self.Width - 10
  300. self.Ps.(*BleInfoPageSelector).PosX = 9
  301. self.Ps.Draw()
  302. for _,v := range self.MyList {
  303. v.Draw()
  304. }
  305. self.Scroller.UpdateSize(len(self.MyList)*UI.DefaultInfoPageListItemHeight,
  306. self.PsIndex*UI.DefaultInfoPageListItemHeight)
  307. self.Scroller.Draw()
  308. }else {
  309. self.Ps.(*BleInfoPageSelector).Width = self.Width
  310. self.Ps.Draw()
  311. for _,v := range self.MyList {
  312. v.Draw()
  313. }
  314. }
  315. }
  316. type BleListMessageBox struct {
  317. UI.Label
  318. Parent UI.PageInterface
  319. }
  320. func NewBleListMessageBox() *BleListMessageBox {
  321. p := &BleListMessageBox{}
  322. p.Color = &color.Color{83,83,83,255}
  323. return p
  324. }
  325. func (self *BleListMessageBox) Draw() {
  326. my_text := font.Render(self.FontObj,self.Text, true, self.Color, nil)
  327. w := surface.GetWidth(my_text)
  328. h := surface.GetHeight(my_text)
  329. pw,ph := self.Parent.Size()
  330. x := (pw-w)/2
  331. y := (ph-h)/2
  332. padding := 10
  333. rect_ := rect.Rect(x-padding,y-padding,w+padding*2,h+padding*2)
  334. draw.Rect(self.CanvasHWND,&color.Color{255,255,255,255}, &rect_,0)
  335. draw.Rect(self.CanvasHWND,&color.Color{0, 0, 0, 255}, &rect_,1)
  336. rect2_ := rect.Rect(x,y,w,h)
  337. surface.Blit(self.CanvasHWND,my_text,&rect2_,nil)
  338. }
  339. type BluetoothPage struct{
  340. UI.Page
  341. Devices []bleapi.Device
  342. BlePassword string
  343. Connecting bool
  344. Scanning bool
  345. ListFontObj *ttf.Font
  346. Scroller *UI.ListScroller
  347. InfoPage *BleInfoPage
  348. PrevState int
  349. ShowingMessageBox bool
  350. MsgBox *BleListMessageBox
  351. ConnectTry int
  352. //BlockCb ??
  353. LastStatusMsg string
  354. ADAPTER_DEV string // == adapterID
  355. Offline bool
  356. }
  357. func NewBluetoothPage() *BluetoothPage {
  358. p := &BluetoothPage{}
  359. p.PageIconMargin = 20
  360. p.SelectedIconTopOffset = 20
  361. p.EasingDur = 10
  362. p.Align = UI.ALIGN["SLeft"]
  363. p.ADAPTER_DEV = adapterID
  364. p.FootMsg = [5]string { "Nav","Scan","Info","Back","TryConnect" }
  365. p.ListFontObj = UI.Fonts["notosanscjk15"]
  366. return p
  367. }
  368. func (self *BluetoothPage) ShowBox(msg string) {
  369. self.MsgBox.Text = msg
  370. self.ShowingMessageBox = true
  371. self.Screen.Draw()
  372. self.MsgBox.Draw()
  373. self.Screen.SwapAndShow()
  374. }
  375. func (self *BluetoothPage) HideBox() {
  376. self.Draw()
  377. self.ShowingMessageBox = false
  378. self.Screen.SwapAndShow()
  379. }
  380. func (self *BluetoothPage) Init() {
  381. self.PosX = self.Index * self.Screen.Width
  382. self.Width = self.Screen.Width
  383. self.Height = self.Screen.Height
  384. self.CanvasHWND = self.Screen.CanvasHWND
  385. ps := NewBleInfoPageSelector()
  386. ps.Parent = self
  387. ps.Width = UI.Width - 12
  388. self.Ps = ps
  389. self.PsIndex = 0
  390. msgbox := NewBleListMessageBox()
  391. msgbox.CanvasHWND = self.CanvasHWND
  392. msgbox.Init(" ",UI.Fonts["veramono12"],nil)
  393. msgbox.Parent = self
  394. self.MsgBox = msgbox
  395. self.Scroller = UI.NewListScroller()
  396. self.Scroller.Parent = self
  397. self.Scroller.PosX = 2
  398. self.Scroller.PosY = 2
  399. self.Scroller.Init()
  400. self.GenNetworkList()
  401. self.InfoPage = NewBleInfoPage()
  402. self.InfoPage.Screen = self.Screen
  403. self.InfoPage.Name = "BluetoothInfo"
  404. self.InfoPage.Init()
  405. }
  406. func (self *BluetoothPage) AbortedAndReturnToUpLevel() {
  407. self.HideBox()
  408. self.Screen.FootBar.ResetNavText()
  409. self.ReturnToUpLevelPage()
  410. self.Screen.Draw()
  411. self.Screen.SwapAndShow()
  412. }
  413. func (self *BluetoothPage) TryConnect() {
  414. if self.PsIndex >= len(self.MyList) {
  415. return
  416. }
  417. cur_li := self.MyList[self.PsIndex]
  418. if cur_li.(*NetItem).Props.Connected {
  419. return
  420. }
  421. self.Screen.FootBar.UpdateNavText("Connecting")
  422. self.ShowBox("Connecting")
  423. cur_li.(*NetItem).Device.Connect()
  424. self.HideBox()
  425. self.Screen.FootBar.ResetNavText()
  426. }
  427. func (self *BluetoothPage) RefreshDevices() {
  428. // sync the cached devices
  429. self.Devices = nil
  430. devices, err := bleapi.GetDevices()
  431. if err != nil {
  432. panic(err)
  433. os.Exit(1)
  434. }
  435. self.Devices = devices
  436. }
  437. func (self *BluetoothPage) GenNetworkList() {
  438. self.MyList = nil
  439. start_x := 0
  440. start_y := 0
  441. for i, v := range self.Devices { // v == bleapi.Device
  442. props, err := v.GetProperties()
  443. if err != nil {
  444. log.Fatalf("%s: Failed to get properties: %s", v.Path, err.Error())
  445. return
  446. }
  447. ni := NewNetItem()
  448. ni.Parent = self
  449. ni.PosX = start_x
  450. ni.PosY = start_y + i*NetItemDefaultHeight
  451. ni.Width = UI.Width
  452. ni.FontObj = self.ListFontObj
  453. ni.Path = v.Path
  454. ni.Props = props
  455. ni.Parent = self
  456. ni.Device = &v
  457. if props.Name != "" {
  458. ni.Init(props.Name)
  459. }else {
  460. ni.Init(props.Address)
  461. }
  462. self.MyList = append(self.MyList,ni)
  463. }
  464. self.PsIndex = 0
  465. }
  466. func (self *BluetoothPage) Rescan() {
  467. self.Scanning = true
  468. self.ShowBox("Bluetooth scanning")
  469. self.Screen.FootBar.UpdateNavText("Scanning")
  470. err := bleapi.StopDiscovery()
  471. if err != nil {
  472. fmt.Println(err)
  473. }
  474. err = bleapi.StartDiscovery()
  475. if err != nil {
  476. fmt.Println(err)
  477. }
  478. fmt.Println("Started discovery")
  479. }
  480. func (self *BluetoothPage) OnLoadCb() {
  481. self.Offline = false
  482. if self.Screen.TitleBar.InAirPlaneMode == false {
  483. out := UI.System("hcitool dev | grep hci0 |cut -f3")
  484. if len(out) < 17 {
  485. self.Offline = true
  486. fmt.Println("Bluetooth OnLoadCb ,can not find hci0 alive,try to reboot")
  487. }else {
  488. self.RefreshDevices()
  489. self.GenNetworkList()
  490. }
  491. }else {
  492. self.Offline = true
  493. }
  494. }
  495. func (self *BluetoothPage) ScrollUp() {
  496. if len(self.MyList) == 0 {
  497. return
  498. }
  499. self.PsIndex -= 1
  500. if self.PsIndex < 0 {
  501. self.PsIndex=0
  502. }
  503. cur_ni := self.MyList[self.PsIndex]//*NetItem
  504. if cur_ni.(*NetItem).PosY < 0 {
  505. for i:=0;i<len(self.MyList);i++ {
  506. self.MyList[i].(*NetItem).PosY += self.MyList[i].(*NetItem).Height
  507. }
  508. }
  509. }
  510. func (self *BluetoothPage) ScrollDown() {
  511. if len(self.MyList) == 0 {
  512. return
  513. }
  514. self.PsIndex += 1
  515. if self.PsIndex >= len(self.MyList) {
  516. self.PsIndex = len(self.MyList) - 1
  517. }
  518. cur_ni := self.MyList[self.PsIndex]
  519. if cur_ni.(*NetItem).PosY + cur_ni.(*NetItem).Height > self.Height {
  520. for i:=0;i<len(self.MyList);i++ {
  521. self.MyList[i].(*NetItem).PosY -= self.MyList[i].(*NetItem).Height
  522. }
  523. }
  524. }
  525. func (self *BluetoothPage) KeyDown(ev *event.Event) {
  526. if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
  527. if self.Offline == true {
  528. self.AbortedAndReturnToUpLevel()
  529. return
  530. }
  531. err := bleapi.StopDiscovery()
  532. if err != nil {
  533. fmt.Println(err)
  534. }
  535. self.HideBox()
  536. self.ReturnToUpLevelPage()
  537. self.Screen.Draw()
  538. self.Screen.SwapAndShow()
  539. self.Screen.FootBar.ResetNavText()
  540. }
  541. if ev.Data["Key"] == UI.CurKeys["Up"] {
  542. self.ScrollUp()
  543. self.Screen.Draw()
  544. self.Screen.SwapAndShow()
  545. }
  546. if ev.Data["Key"] == UI.CurKeys["Down"] {
  547. self.ScrollDown()
  548. self.Screen.Draw()
  549. self.Screen.SwapAndShow()
  550. }
  551. if ev.Data["Key"] == UI.CurKeys["X"] {
  552. if self.Offline == false{
  553. self.Rescan()
  554. }
  555. }
  556. if ev.Data["Key"] == UI.CurKeys["Y"] {
  557. if len(self.MyList) == 0 {
  558. return
  559. }
  560. if self.Offline == true {
  561. return
  562. }
  563. self.InfoPage.Props = self.MyList[self.PsIndex].(*NetItem).Props
  564. self.InfoPage.Path = self.MyList[self.PsIndex].(*NetItem).Path
  565. self.InfoPage.MyDevice = self.MyList[self.PsIndex].(*NetItem).Device
  566. self.Screen.PushPage(self.InfoPage)
  567. self.Screen.Draw()
  568. self.Screen.SwapAndShow()
  569. }
  570. if ev.Data["Key"] == UI.CurKeys["B"] {
  571. if self.Offline == false {
  572. self.TryConnect()
  573. }
  574. }
  575. }
  576. func (self *BluetoothPage) Draw() {
  577. self.ClearCanvas()
  578. if len(self.MyList) == 0 {
  579. return
  580. }
  581. if len(self.MyList) * NetItemDefaultHeight > self.Height {
  582. self.Ps.(*BleInfoPageSelector).Width = self.Width - 11
  583. self.Ps.Draw()
  584. for _,v := range self.MyList {
  585. v.Draw()
  586. }
  587. self.Scroller.UpdateSize(len(self.MyList)*NetItemDefaultHeight,self.PsIndex*NetItemDefaultHeight)
  588. self.Scroller.Draw()
  589. }else {
  590. self.Ps.(*BleInfoPageSelector).Width = self.Width
  591. self.Ps.Draw()
  592. for _,v := range self.MyList {
  593. v.Draw()
  594. }
  595. }
  596. }