Sfoglia il codice sorgente

add bluetooth info page

cuu 5 anni fa
parent
commit
da2d61366f

+ 258 - 4
Menu/GameShell/10_Settings/Bluetooth/__init__.py

@@ -4,7 +4,7 @@ import pygame
 #import math
 import  commands
 import dbus
-#from beeprint import pp
+from beeprint import pp
 from libs.roundrects import aa_round_rect
 
 from libs.DBUS import  bus, adapter,devices
@@ -23,17 +23,258 @@ from UI.icon_pool  import MyIconPool
 from UI.icon_item  import IconItem
 from UI.multi_icon_item import MultiIconItem
 from UI.skin_manager import SkinManager
+from UI.confirm_page import ConfirmPage
+from UI.info_page_list_item import InfoPageListItem
 
 from UI.multilabel import MultiLabel
 
 from net_item import NetItem
 
+class BleForgetConfirmPage(ConfirmPage):
+
+    _ConfirmText = "Confirm Forget?"
+    
+    def KeyDown(self,event):
+        if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
+            self.ReturnToUpLevelPage()
+            self._Screen.Draw()
+            self._Screen.SwapAndShow()
+            
+        if event.key == CurKeys["B"]:
+            self.SnapMsg("Deleteing...")
+            self._Screen.Draw()
+            self._Screen.SwapAndShow()
+            
+            try:
+                #self._Parent._Adapter.RemoveDevice()
+                print("try to RemoveDevice")
+            except Exception,e:
+                print(str(e))
+            
+            pygame.time.delay(400)
+            
+            self.ReturnToUpLevelPage()
+            self._Screen.Draw()
+            self._Screen.SwapAndShow()
+            
+                    
+    def Draw(self):
+        #self.ClearCanvas()
+        self.DrawBG()
+        for i in self._MyList:
+            i.Draw()
+        
+        self.Reset()
+
+
+class BleInfoPageSelector(PageSelector):
+    _BackgroundColor = SkinManager().GiveColor('Front')
+
+    def __init__(self):
+        self._PosX = 0
+        self._PosY = 0
+        self._Height = 0
+        
+    def AnimateDraw(self,x2,y2):
+        pass 
+
+    def Draw(self):
+        idx = self._Parent._PsIndex
+        if idx < len( self._Parent._MyList):
+            x = self._PosX+2
+            y = self._Parent._MyList[idx]._PosY+1
+            h = self._Parent._MyList[idx]._Height -3
+        
+            self._PosX = x
+            self._PosY = y
+            self._Height = h
+
+            aa_round_rect(self._Parent._CanvasHWND,  
+                          (x,y,self._Width-4,h),self._BackgroundColor,4,0,self._BackgroundColor)
 
 class BleInfoPage(Page):
     _FootMsg =  ["Nav.","Disconnect","Forget","Back",""]
     _MyList = []
-    _ListFontObj = fonts["varela15"]    
+    _ListFontObj = fonts["varela15"]
+    _ListSmFontObj = fonts["varela12"]  # small font
+    _ListSm2FontObj= fonts["varela11"]
+    
+    _AList = {}
+    
+    def Init(self):
+        if self._Screen != None:
+            if self._Screen._CanvasHWND != None and self._CanvasHWND == None:
+                self._CanvasHWND = self._Screen._CanvasHWND
+
+        self._PosX = self._Index*self._Screen._Width 
+        self._Width = self._Screen._Width ## equal to screen width
+        self._Height = self._Screen._Height
+        
+        ps = BleInfoPageSelector()
+        ps._Parent = self
+        self._Ps = ps
+        self._PsIndex = 0
+         
+        #_AList is an object 
+        self.GenList()
+
+        self._Scroller = ListScroller()
+        self._Scroller._Parent = self
+        self._Scroller._PosX = 2
+        self._Scroller._PosY = 2
+        self._Scroller.Init()
+        
+        self._ConfirmPage1 = BleForgetConfirmPage()
+        self._ConfirmPage1._Screen = self._Screen
+        self._ConfirmPage1._Name   = "Confirm Forget"
+        self._ConfirmPage1._Parent = self
+        self._ConfirmPage1.Init() 
+        
+    def GenList(self):
+        if self._AList== None:
+            return
+        self._MyList = []
+        
+        start_x  = 0
+        start_y  = 0        
+        for i,v in enumerate( self._AList):
+            #print(i,v) # (0, dbus.String(u'AddressType'))
+            
+            li = InfoPageListItem()
+            li._Parent = self
+            li._PosX   = start_x
+            li._PosY   = start_y + i*InfoPageListItem._Height
+            li._Width  = Width
+            li._Fonts["normal"] = self._ListFontObj
+            
+            if v == "UUIDs":
+                li._Fonts["small"] = self._ListSm2FontObj
+            else:
+                li._Fonts["small"] = self._ListSmFontObj
+            
+            li.Init( str(v) )
+            li._Flag = v
+            
+            if v =="UUIDs":
+                pp(self._AList[v][0]) 
+                sm_text = str(self._AList[v][0])
+            else:
+                sm_text = str(self._AList[v]) 
+            
+            if sm_text == "0":
+                sm_text="No"
+            elif sm_text == "1":
+                sm_text="Yes"
+            
+            li.SetSmallText(sm_text)
+            
+            li._PosX = 2
+            self._MyList.append(li)                      
+    
+
+    def ScrollUp(self):
+        if len(self._MyList) == 0:
+            return
+        self._PsIndex -= 1
+        if self._PsIndex < 0:
+            self._PsIndex = 0
+        cur_li = self._MyList[self._PsIndex]
+        if cur_li._PosY < 0:
+            for i in range(0, len(self._MyList)):
+                self._MyList[i]._PosY += self._MyList[i]._Height
+        
+
+    def ScrollDown(self):
+        if len(self._MyList) == 0:
+            return
+        self._PsIndex +=1
+        if self._PsIndex >= len(self._MyList):
+            self._PsIndex = len(self._MyList) -1
+
+        cur_li = self._MyList[self._PsIndex]
+        if cur_li._PosY +cur_li._Height > self._Height:
+            for i in range(0,len(self._MyList)):
+                self._MyList[i]._PosY -= self._MyList[i]._Height
+
+    def TryToForget(self):
+        print("try to forget this")
+        pass
+    
+    def TryToDisconnect(self):
+        print("try to Disconnect")
+        pass
+    
+    def Click(self):
+        if self._PsIndex >= len(self._MyList):
+            return
+        
+        cur_li = self._MyList[self._PsIndex]
+        print(cur_li._Flag)
+        
+    def OnLoadCb(self):
+        if self._AList != None:
+            if "Connected" in self._AList:
+                if self._AList["Connected"] == 1:
+                    self._FootMsg[1] = "Disconnect"
+                else:
+                    self._FootMsg[1] = ""
+        
+        self.GenList()
 
+    def OnReturnBackCb(self):
+        self.ReturnToUpLevelPage()
+        self._Screen.Draw()
+        self._Screen.SwapAndShow()
+
+    def KeyDown(self,event):
+        if event.key == CurKeys["A"] or event.key == CurKeys["Menu"]:
+            self.ReturnToUpLevelPage()
+            self._Screen.Draw()
+            self._Screen.SwapAndShow()
+        
+        if event.key == CurKeys["Up"]:
+            self.ScrollUp()
+            self._Screen.Draw()
+            self._Screen.SwapAndShow()
+        if event.key == CurKeys["Down"]:
+            self.ScrollDown()
+            self._Screen.Draw()
+            self._Screen.SwapAndShow()
+        
+        if event.key == CurKeys["Enter"]:
+            self.Click()
+            
+        if event.key == CurKeys["X"]:
+            self.TryToDisconnect()
+        
+        if event.key == CurKeys["Y"]:
+            self.TryToForget()
+        
+        
+    def Draw(self):
+        if len(self._MyList) == 0:
+            return
+        
+        self.ClearCanvas()
+
+        if len(self._MyList) * InfoPageListItem._Height > self._Height:
+            self._Ps._Width = self._Width - 10
+            self._Ps._PosX  = 9
+            self._Ps.Draw()        
+            for i in self._MyList:
+                i.Draw()
+            
+            self._Scroller.UpdateSize(len(self._MyList)*InfoPageListItem._Height, self._PsIndex*InfoPageListItem._Height)
+            self._Scroller.Draw()
+        
+        else:
+            self._Ps._Width = self._Width
+            self._Ps.Draw()
+            for i in self._MyList:
+                i.Draw() 
+        
+
+            
 
 class BleListSelector(PageSelector):
     _BackgroundColor = SkinManager().GiveColor('Front')
@@ -155,6 +396,10 @@ class BluetoothPage(Page):
         
         self.GenNetworkList()
         
+        self._InfoPage = BleInfoPage()
+        self._InfoPage._Screen = self._Screen
+        self._InfoPage._Name   = "Bluetooth info"
+        self._InfoPage.Init()        
 
     def print_normal(self,address, properties):
         print("[ " + address + " ]")
@@ -200,7 +445,8 @@ class BluetoothPage(Page):
             address = devices[path]["Address"]
         else:
             address = "<unknown>"
-
+        
+        self._Devices = devices
         self.print_normal(address, devices[path])
 
     def ShutDownConnecting(self):
@@ -216,7 +462,6 @@ class BluetoothPage(Page):
     def CheckIfBluetoothConnecting(self):
         return True
     
-    
     def GenNetworkList(self):
         self._WirelessList = []
         start_x = 0
@@ -306,6 +551,15 @@ class BluetoothPage(Page):
         
         if event.key == CurKeys["X"]:
             self.Rescan()   
+
+        if event.key == CurKeys["Y"]:
+            if len(self._WirelessList) == 0:
+                return
+
+            self._InfoPage._AList = self._WirelessList[self._PsIndex]._Atts
+            self._Screen.PushPage(self._InfoPage)
+            self._Screen.Draw()
+            self._Screen.SwapAndShow()
     
     def Draw(self):
         self.ClearCanvas()

+ 1 - 22
Menu/GameShell/10_Settings/Bluetooth/net_item.py

@@ -80,7 +80,7 @@ class NetItem(object):
         
 
         name_label = Label()
-        name_label._PosX = 16
+        name_label._PosX = 12
         name_label._CanvasHWND = self._Parent._CanvasHWND
 
         mac_addr = self._MacAddr
@@ -103,15 +103,7 @@ class NetItem(object):
         done_icon._Parent = self
         
         self._Icons["done"] = done_icon
-
-
         ## reuse the resource from TitleBar
-        nimt = NetItemMultiIcon()
-        nimt._ImgSurf = self._Parent._Screen._TitleBar._Icons["wifistatus"]._ImgSurf
-        nimt._CanvasHWND = self._Parent._CanvasHWND
-        nimt._Parent = self
-        self._Icons["wifistatus"] = nimt
-
         #pp(theString)
     
     
@@ -132,18 +124,5 @@ class NetItem(object):
             self._Icons["done"].NewCoord(320-14,self._PosY)
             self._Icons["done"].Draw()
         
-        """
-        ge = 0
-        if ge > 0:
-            self._Icons["wifistatus"]._IconIndex = ge
-            self._Icons["wifistatus"].NewCoord(self._Width-23,self._PosY)
-            self._Icons["wifistatus"].Draw()
-            
-        else:
-            self._Icons["wifistatus"]._IconIndex = 0
-            self._Icons["wifistatus"].NewCoord(self._Width-23,self._PosY)
-            self._Icons["wifistatus"].Draw()
-        
-        """
         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)

+ 2 - 52
Menu/GameShell/10_Settings/Wifi/wifi_list.py

@@ -17,62 +17,12 @@ from UI.scroller   import ListScroller
 from UI.confirm_page import ConfirmPage
 from UI.skin_manager import SkinManager
 
+from UI.info_page_list_item import InfoPageListItem
+
 from net_item import NetItem
 
 import myvars
 
-
-class InfoPageListItem(object):
-    _PosX = 0
-    _PosY = 0
-    _Width = 0
-    _Height = 30
-
-    _Labels = {}
-    _Icons  = {}
-    _Fonts  = {}
-
-    _LinkObj = None
-    
-    def __init__(self):
-        self._Labels = {}
-        self._Icons  = {}
-        self._Fonts  = {}
-
-    def SetSmallText(self,text):
-        
-        l = Label()
-        l._PosX = 40
-        l.SetCanvasHWND(self._Parent._CanvasHWND)
-        l.Init(text,self._Fonts["small"])
-        self._Labels["Small"] = l
-        
-    def Init(self,text):
-
-        #self._Fonts["normal"] = fonts["veramono12"]
-        
-        l = Label()
-        l._PosX = 10
-        l.SetCanvasHWND(self._Parent._CanvasHWND)
-
-        l.Init(text,self._Fonts["normal"])
-        self._Labels["Text"] = l
-
-    def Draw(self):
-        
-        self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2
-        self._Labels["Text"].Draw()
-
-        if "Small" in self._Labels:
-            self._Labels["Small"]._PosX = self._Width - self._Labels["Small"]._Width-5
-            
-            self._Labels["Small"]._PosY = self._PosY + (self._Height - self._Labels["Small"]._Height)/2
-            self._Labels["Small"].Draw()
-        
-        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)
-    
-
-
 class WifiDisconnectConfirmPage(ConfirmPage):
 
     _ConfirmText = "Confirm Disconnect?"

+ 2 - 0
sys.py/UI/fonts.py

@@ -21,6 +21,8 @@ fonts_path["noto"]     = "%s/NotoSansMono-Regular.ttf" % skinpath
 fonts_path["notocjk"]     = "%s/NotoSansCJK-Regular.ttf" % skinpath
 
 fonts = {}
+fonts["varela10"] = pygame.font.Font(fonts_path["varela"],10)
+fonts["varela11"] = pygame.font.Font(fonts_path["varela"],11)
 fonts["varela12"] = pygame.font.Font(fonts_path["varela"],12)
 fonts["varela13"] = pygame.font.Font(fonts_path["varela"],13)
 fonts["varela14"] = pygame.font.Font(fonts_path["varela"],14)

+ 55 - 0
sys.py/UI/info_page_list_item.py

@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*- 
+
+import pygame 
+from label  import Label
+from skin_manager import SkinManager
+
+class InfoPageListItem(object):
+    _PosX = 0
+    _PosY = 0
+    _Width = 0
+    _Height = 30
+
+    _Labels = {}
+    _Icons  = {}
+    _Fonts  = {}
+
+    _LinkObj = None
+    
+    def __init__(self):
+        self._Labels = {}
+        self._Icons  = {}
+        self._Fonts  = {}
+
+    def SetSmallText(self,text):
+        
+        l = Label()
+        l._PosX = 40
+        l.SetCanvasHWND(self._Parent._CanvasHWND)
+        l.Init(text,self._Fonts["small"])
+        self._Labels["Small"] = l
+        
+    def Init(self,text):
+
+        #self._Fonts["normal"] = fonts["veramono12"]
+        
+        l = Label()
+        l._PosX = 10
+        l.SetCanvasHWND(self._Parent._CanvasHWND)
+
+        l.Init(text,self._Fonts["normal"])
+        self._Labels["Text"] = l
+
+    def Draw(self):
+        self._Labels["Text"]._PosX = self._Labels["Text"]._PosX + self._PosX
+        self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2
+        self._Labels["Text"].Draw()
+        self._Labels["Text"]._PosX = self._Labels["Text"]._PosX - self._PosX
+
+        if "Small" in self._Labels:
+            self._Labels["Small"]._PosX = self._Width - self._Labels["Small"]._Width-5
+            
+            self._Labels["Small"]._PosY = self._PosY + (self._Height - self._Labels["Small"]._Height)/2
+            self._Labels["Small"].Draw()
+        
+        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)