diff --git a/Menu/GameShell/10_Settings/Bluetooth/__init__.py b/Menu/GameShell/10_Settings/Bluetooth/__init__.py index 729699b..18e439a 100644 --- a/Menu/GameShell/10_Settings/Bluetooth/__init__.py +++ b/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 = "" - + + 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() diff --git a/Menu/GameShell/10_Settings/Bluetooth/net_item.py b/Menu/GameShell/10_Settings/Bluetooth/net_item.py index aab2347..e9fbbe4 100644 --- a/Menu/GameShell/10_Settings/Bluetooth/net_item.py +++ b/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) diff --git a/Menu/GameShell/10_Settings/Wifi/wifi_list.py b/Menu/GameShell/10_Settings/Wifi/wifi_list.py index f1b9b08..c8272ab 100644 --- a/Menu/GameShell/10_Settings/Wifi/wifi_list.py +++ b/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?" diff --git a/sys.py/UI/fonts.py b/sys.py/UI/fonts.py index 5fc2555..64d2bd4 100644 --- a/sys.py/UI/fonts.py +++ b/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) diff --git a/sys.py/UI/info_page_list_item.py b/sys.py/UI/info_page_list_item.py new file mode 100644 index 0000000..2d33a74 --- /dev/null +++ b/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)