def Init(self): self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width self._Height = self._Screen._Height self._CanvasHWND = self._Screen._CanvasHWND bgpng = IconItem() bgpng._ImgSurf = MyIconPool.GiveIconSurface("rom_download") bgpng._MyType = ICON_TYPES["STAT"] bgpng._Parent = self bgpng.Adjust(0, 0, self._PngSize["bg"][0], self._PngSize["bg"][1], 0) self._Icons["bg"] = bgpng self._FileNameLabel = Label() self._FileNameLabel.SetCanvasHWND(self._CanvasHWND) self._FileNameLabel.Init("", MyLangManager.TrFont("varela12")) self._SizeLabel = Label() self._SizeLabel.SetCanvasHWND(self._CanvasHWND) self._SizeLabel.Init("0/0Kb", MyLangManager.TrFont("varela12")) self._SizeLabel.SetColor(self._URLColor)
class PowerOffConfirmPage(ConfirmPage): _ConfirmText = MyLangManager.Tr("Confirm Power OFF?") def CheckBattery(self): try: f = open(config.Battery) except IOError: print("PowerOFF open %s failed" % config.Battery) return 0 else: with f: bat_uevent = {} content = f.readlines() content = [x.strip() for x in content] for i in content: pis = i.split("=") if len(pis) > 1: bat_uevent[pis[0]] = pis[1] if "POWER_SUPPLY_CAPACITY" in bat_uevent: cur_cap = int(bat_uevent["POWER_SUPPLY_CAPACITY"]) else: cur_cap = 0 return cur_cap return 0 def KeyDown(self, event): if IsKeyMenuOrB(event.key): self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() if IsKeyStartOrA(event.key): if self.CheckBattery() < 20: cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper( "gameover.png") else: cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper( "seeyou.png") cmdpath += "sleep 3;" #cmdpath += "echo 'halt -p' > /tmp/halt_cmd" cmdpath += "sudo halt -p" pygame.event.post(pygame.event.Event(RUNSYS, message=cmdpath))
def Init(self): self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width self._Height = self._Screen._Height self._CanvasHWND = self._Screen._CanvasHWND ps = ListPageSelector() ps._Parent = self self._Ps = ps self._PsIndex = 0 self.SyncList("/") icon_for_list = MultiIconItem() icon_for_list._ImgSurf = MyIconPool._Icons["sys"] icon_for_list._MyType = ICON_TYPES["STAT"] icon_for_list._Parent = self icon_for_list.Adjust(0, 0, 18, 18, 0) self._Icons["sys"] = icon_for_list self._BGpng = IconItem() self._BGpng._ImgSurf = MyIconPool._Icons["empty"] self._BGpng._MyType = ICON_TYPES["STAT"] self._BGpng._Parent = self self._BGpng.AddLabel(MyLangManager.Tr("Please upload data over Wi-Fi"), MyLangManager.TrFont("varela22")) self._BGpng.SetLableColor(MySkinManager.GiveColor('Disabled')) self._BGpng.Adjust(0, 0, self._BGwidth, self._BGheight, 0) self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init()
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(MyLangManager.Tr("Disconnecting")) self._Screen.Draw() self._Screen.SwapAndShow() self._Parent._Daemon.Disconnect() pygame.time.delay(400) self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow()
def KeyDown(self,event): if IsKeyMenuOrB(event.key): self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() if IsKeyStartOrA(event.key): self.SnapMsg(MyLangManager.Tr("Disconnecting")) self._Screen.Draw() self._Screen.SwapAndShow() self._Parent._Daemon.Disconnect() pygame.time.delay(400) self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow()
def GenList(self): self._MyList = [] if self._NetworkId != -1: self._AList["ip"]["value"] = "Not Connected" if self._Wireless.GetCurrentNetworkID( self._Wireless.GetIwconfig()) == self._NetworkId: ip = self._Wireless.GetWirelessIP('') if ip is not None: self._AList["ip"]["value"] = ip self._AList["bssid"]["value"] = self._Wireless.GetWirelessProperty( self._NetworkId, "bssid") if FileExists("/sys/class/net/wlan0/address"): self._AList["mac_addr"]["value"] = ReadTheFileContent( "/sys/class/net/wlan0/address").strip().upper() else: self._AList["mac_addr"]["value"] = "" start_x = 0 start_y = 0 for i, v in enumerate(self._AList): li = InfoPageListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + i * InfoPageListItem._Height li._Width = Width li._Fonts["normal"] = self._ListFontObj li._Fonts["small"] = MyLangManager.TrFont("varela12") if self._AList[v]["label"] != "": li.Init(self._AList[v]["label"]) else: li.Init(self._AList[v]["key"]) li._Flag = self._AList[v]["key"] li.SetSmallText(self._AList[v]["value"]) self._MyList.append(li)
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(MyLangManager.Tr("Deleting")) 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 KeyDown(self, event): if IsKeyMenuOrB(event.key): self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() if IsKeyStartOrA(event.key): self.SnapMsg(MyLangManager.Tr("Deleting")) 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 Init(self): self._ListFontObj = MyLangManager.TrFont("varela15") self._ListSmFontObj = MySkinManager.GiveFont("varela12") if self._Screen != None: if self._Screen._CanvasHWND != None and self._CanvasHWND == None: self._HWND = self._Screen._CanvasHWND 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 = GamePageSelector() ps._Parent = self self._Ps = ps self._PsIndex = 0 self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = 2 self._Scroller._PosY = 2 self._Scroller.Init()
def KeyDown(self, event): if event.key == CurKeys["A"] or event.key == CurKeys["Menu"]: if self._Adapter != None: try: self._Adapter.StopDiscovery() except Exception, e: print(str(e)) _connecting = self.CheckIfBluetoothConnecting() if _connecting: self.ShutDownConnecting() self.ShowBox(MyLangManager.Tr("ShutDownConnecting")) self.AbortedAndReturnToUpLevel() else: self.AbortedAndReturnToUpLevel() else: self.HideBox() self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() self._Screen._FootBar.ResetNavText()
def TryConnect(self): global bus if self._PsIndex >= len(self._WirelessList): return cur_li = self._WirelessList[self._PsIndex] print(cur_li._Path) if "Connected" in cur_li._Atts: if cur_li._Atts["Connected"] == 1: return proxy_obj = bus.get_object("org.bluez", cur_li._Path) dev = dbus.Interface(proxy_obj, "org.bluez.Device1") self._Screen._FootBar.UpdateNavText("Connecting") self.ShowBox(MyLangManager.Tr("Connecting")) try: dev.Connect() except Exception, e: print(str(e))
def ConfigWireless(self,password): netid = self._PsIndex for i,v in enumerate(self._MyList): if v._Bssid == self._CurBssid: netid = i break print(netid," ", password) """ self._Wireless.SetWirelessProperty(netid,"dhcphostname","GameShell") self._Wireless.SetWirelessProperty(netid,"ip","None") self._Wireless.SetWirelessProperty(netid,"dns_domain","None") self._Wireless.SetWirelessProperty(netid,"gateway","None") self._Wireless.SetWirelessProperty(netid,"use_global_dns",0) self._Wireless.SetWirelessProperty(netid,"netmask","None") self._Wireless.SetWirelessProperty(netid,"usedhcphostname",0) ## set 1 to use hostname above self._Wireless.SetWirelessProperty(netid,"bitrate","auto") self._Wireless.SetWirelessProperty(netid,"allow_lower_bitrates",0) self._Wireless.SetWirelessProperty(netid,"dns3","None") self._Wireless.SetWirelessProperty(netid,"dns2","None") self._Wireless.SetWirelessProperty(netid,"dns1","None") self._Wireless.SetWirelessProperty(netid,"use_settings_globally",0) self._Wireless.SetWirelessProperty(netid,"use_static_dns",0) self._Wireless.SetWirelessProperty(netid,"search_domain","None") """ self._Wireless.SetWirelessProperty(netid,"enctype","wpa-psk") self._Wireless.SetWirelessProperty(netid,"apsk",password) self._Wireless.SetWirelessProperty(netid,"automatic",1) self.ShowBox(MyLangManager.Tr("Connecting")) self._MyList[netid].Connect() print("after Connect") self.UpdateStatus()
def Init(self): self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width self._Height = self._Screen._Height self._CanvasHWND = self._Screen._CanvasHWND ps = ListPageSelector() ps._Parent = self self._Ps = ps self._PsIndex = 0 self.SyncList("/usr/share/zoneinfo/posix") icon_for_list = MultiIconItem() icon_for_list._ImgSurf = MyIconPool.GiveIconSurface("sys") icon_for_list._MyType = ICON_TYPES["STAT"] icon_for_list._Parent = self icon_for_list.Adjust(0, 0, 18, 18, 0) self._Icons["sys"] = icon_for_list self._BGpng = IconItem() self._BGpng._ImgSurf = MyIconPool.GiveIconSurface("empty") self._BGpng._MyType = ICON_TYPES["STAT"] self._BGpng._Parent = self self._BGpng.AddLabel("No timezones found on system!", MyLangManager.TrFont("varela22")) self._BGpng.SetLableColor(MySkinManager.GiveColor('Disabled')) self._BGpng.Adjust(0, 0, self._BGwidth, self._BGheight, 0) self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init()
class AboutPage(Page): _FootMsg = ["Nav.", "", "", "Back", ""] _MyList = [] _ListFontObj = MyLangManager.TrFont("varela13") _AList = {} _Scrolled = 0 _BGwidth = 320 _BGheight = 300 _DrawOnce = False _Scroller = None def __init__(self): Page.__init__(self) self._Icons = {} def Uname(self): out = {} out["key"] = "uname" out["label"] = "Kernel:" st = subprocess.check_output(["uname", "-srmo"]) st = st.strip("\n") st = st.strip("\t") out["value"] = st self._AList["uname"] = out return def CpuMhz(self): try: with open("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" ) as f: content = f.readlines() content = [x.strip() for x in content] except: print("open %s failed" % "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq") content = ["0"] mhz = int(content[0]) / 1000.0 cpuscalemhz = {} cpuscalemhz["key"] = "cpuscalemhz" cpuscalemhz["label"] = "CPU Mhz:" cpuscalemhz["value"] = str(mhz) self._AList["cpuscalemhz"] = cpuscalemhz return def CpuInfo(self): last_processor = 0 with open("/proc/cpuinfo") as f: for line in f: if line.startswith("processor"): parts = line.split(":") cur_processor_number = int(parts[1].strip()) if cur_processor_number > last_processor: last_processor = cur_processor_number if line.startswith("model name"): parts = line.split(":") # print( parts[1].strip() ) processor = {} processor["key"] = "processor" processor["label"] = "Processor:" processor["value"] = parts[1].strip() self._AList["processor"] = processor if line.startswith("cpu MHz"): parts = line.split(":") # print(parts[1].strip() ) cpumhz = {} cpumhz["key"] = "cpumhz" cpumhz["label"] = "CPU MHz:" cpumhz["value"] = parts[1].strip() self._AList["cpumhz"] = cpumhz if line.startswith("cpu cores"): parts = line.split(":") # print(parts[1].strip() ) cpucores = {} cpucores["key"] = "cpucores" cpucores["label"] = "CPU cores:" cpucores["value"] = parts[1].strip() self._AList["cpucores"] = cpucores if line.startswith("Features"): parts = line.split(":") # print(parts[1].strip() ) f_ = {} f_["key"] = "features" f_["label"] = "Features:" f_["value"] = parts[1].strip() self._AList["features"] = f_ if line.startswith("flags"): parts = line.split(":") # print(parts[1].strip() ) flags = {} flags["key"] = "flags" flags["label"] = "Flags:" flags["value"] = parts[1].strip() self._AList["flags"] = flags if last_processor > 0: arm_cores = {} arm_cores["key"] = "armcores" arm_cores["label"] = "CPU cores:" arm_cores["value"] = str(last_processor + 1) self._AList["armcores"] = arm_cores def MemInfo(self): with open("/proc/meminfo") as f: for line in f: if line.startswith("MemTotal"): parts = line.split(":") parts[1] = parts[1].replace("kB", "") print(parts[1].strip()) memory = {} memory["key"] = "memory" memory["label"] = "Memory:" memory["value"] = str( int(parts[1].strip()) / 1000.0) + " MB" self._AList["memory"] = memory break def LauncherVersion(self): launcher_version = {} launcher_version["key"] = "launcher_ver" launcher_version["label"] = "Launcher:" launcher_version["value"] = VERSION self._AList["launcher_ver"] = launcher_version def OsImageVersion(self): if FileExists("/etc/clockworkpi_os_image_version"): try: with open("/etc/clockworkpi_os_image_version") as f: content = f.readlines() content = [x.strip() for x in content] except: print("open %s failed" % "/etc/clockworkpi_os_image_version") content = None if content != None and len(content) > 0: os_image_ver = {} os_image_ver["key"] = "os_image_ver" os_image_ver["label"] = "OS Image:" os_image_ver["value"] = content[0][:12] self._AList["os_image_ver"] = os_image_ver def GenList(self): self._MyList = [] start_x = 0 start_y = 10 last_height = 0 for i, u in enumerate([ "processor", "armcores", "cpuscalemhz", "features", "memory", "uname", "launcher_ver", "os_image_ver" ]): #for i,u in enumerate( ["processor","cpucores","cpumhz","flags","memory","uname"] ): if u not in self._AList: continue v = self._AList[u] li = InfoPageListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + last_height li._Width = Width li._Fonts["normal"] = self._ListFontObj li._Fonts["small"] = MySkinManager.GiveFont("varela12") if self._AList[u]["label"] != "": li.Init(self._AList[u]["label"]) else: li.Init(self._AList[u]["key"]) li._Flag = self._AList[u]["key"] li.SetSmallText(self._AList[u]["value"]) last_height += li._Height self._MyList.append(li) def Init(self): if self._Screen != None: if self._Screen._CanvasHWND != None and self._CanvasHWND == None: self._HWND = self._Screen._CanvasHWND self._CanvasHWND = pygame.Surface( (self._Screen._Width, self._BGheight + 50)) self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width ## equal to screen width self._Height = self._Screen._Height bgpng = MultiIconItem() bgpng._ImgSurf = MyIconPool.GiveIconSurface("about_bg") bgpng._MyType = ICON_TYPES["STAT"] bgpng._Parent = self bgpng.Adjust(0, 0, self._BGwidth, self._BGheight, 0) self._Icons["bg"] = bgpng self.CpuInfo() self.MemInfo() self.CpuMhz() self.Uname() self.LauncherVersion() self.OsImageVersion() self.GenList() self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init() self._Scroller.SetCanvasHWND(self._HWND) def ScrollDown(self): dis = 10 if abs(self._Scrolled) < (self._BGheight - self._Height) / 2 + 100: self._PosY -= dis self._Scrolled -= dis def ScrollUp(self): dis = 10 if self._PosY < 0: self._PosY += dis self._Scrolled += dis def OnLoadCb(self): self._Scrolled = 0 self._PosY = 0 self._DrawOnce = False def OnReturnBackCb(self): self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() def KeyDown(self, event): if IsKeyMenuOrB(event.key): 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() def Draw(self): if self._DrawOnce == False: self.ClearCanvas() #self._Ps.Draw() for i in self._MyList: i.Draw() self._DrawOnce = True self._Icons["bg"].DrawRect((230, 0, 82, 184), (228, 0, 82, 184)) y = self._MyList[len(self._MyList) - 1]._PosY + 30 self._Icons["bg"].DrawRect(((self._Width - 191) / 2, y, 191, 68), (65, 232, 191, 68)) if self._HWND != None: self._HWND.fill(MySkinManager.GiveColor("White")) self._HWND.blit( self._CanvasHWND, (self._PosX, self._PosY, self._Width, self._Height)) self._Scroller.UpdateSize(self._BGheight, abs(self._Scrolled) * 3) self._Scroller.Draw()
class BluetoothPage(Page): _MyList = [] #Wicd dbus part _Adapter = None _Dbus = None _Devices = None _BlePassword = "" _Connecting = False _Scanning = False _PrevState = None _Selector = None _ShowingMessageBox = False _MsgBox = None _ConnectTry = 0 _BlockCb = None _LastStatusMsg = "" _FootMsg = ["Nav", "Info", "Scan", "Back", "TryConnect"] _Scroller = None _ListFontObj = MyLangManager.TrFont("notosanscjk15") _InfoPage = None _ADAPTER_DEV = "hci0" _Offline = False _Leader = None def __init__(self): Page.__init__(self) self._MyList = [] self._CanvasHWND = None def ShowBox(self, msg): self._MsgBox._Text = msg self._ShowingMessageBox = True self._Screen.Draw() self._MsgBox.Draw() self._Screen.SwapAndShow() def HideBox(self): self.Draw() self._ShowingMessageBox = False self._Screen.SwapAndShow() def Init(self): self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width self._Height = self._Screen._Height #self._CanvasHWND = pygame.Surface((self._Width,self._Height)) self._CanvasHWND = self._Screen._CanvasHWND ps = BleListSelector() ps._Parent = self ps._Width = Width - 12 self._Ps = ps self._PsIndex = 0 msgbox = BleListMessageBox() msgbox._CanvasHWND = self._CanvasHWND msgbox.Init(" ", MyLangManager.TrFont("veramono15")) msgbox._Parent = self self._MsgBox = msgbox self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = 2 self._Scroller._PosY = 2 self._Scroller.Init() self.GenNetworkList() self._InfoPage = BleInfoPage() self._InfoPage._Screen = self._Screen self._InfoPage._Name = "BluetoothInfo" self._InfoPage.Init() def print_normal(self, address, properties): print("[ " + address + " ]") for key in properties.keys(): value = properties[key] if type(value) is dbus.String: value = unicode(value).encode('ascii', 'replace') if (key == "Class"): print(" %s = 0x%06x" % (key, value)) else: print(" %s = %s" % (key, value)) print() properties["Logged"] = True def skip_dev(self, old_dev, new_dev): if not "Logged" in old_dev: return False if "Name" in old_dev: return True if not "Name" in new_dev: return True return False def DbusPropertiesChanged(self, interface, changed, invalidated, path): global devices print("DbusPropertiesChanged") if interface != "org.bluez.Device1": return if path in devices: dev = devices[path] if self.skip_dev(dev, changed): return devices[path] = dict(devices[path].items() + changed.items()) else: devices[path] = changed if "Address" in devices[path]: address = devices[path]["Address"] else: address = "<unknown>" self._Devices = devices self.print_normal(address, devices[path]) self.RefreshDevices() self.GenNetworkList() self._Screen.Draw() self._Screen.SwapAndShow() def ShutDownConnecting(self): print("Bluetooth Shutdown connecting...") def AbortedAndReturnToUpLevel(self): self.HideBox() self._Screen._FootBar.ResetNavText() self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() def CheckIfBluetoothConnecting(self): return True def TryConnect(self): global bus if self._PsIndex >= len(self._MyList): return cur_li = self._MyList[self._PsIndex] print(cur_li._Path) if "Connected" in cur_li._Atts: if cur_li._Atts["Connected"] == 1: return proxy_obj = bus.get_object("org.bluez", cur_li._Path) dev = dbus.Interface(proxy_obj, "org.bluez.Device1") self._Screen._FootBar.UpdateNavText("Connecting") self.ShowBox(MyLangManager.Tr("Connecting")) self._Leader._MyAgent.device_obj = dev self._Leader._MyAgent.dev_path = cur_li._Path try: dev.Pair(reply_handler=self._Leader._MyAgent.pair_reply, error_handler=self._Leader._MyAgent.pair_error, timeout=60000) except Exception, e: print(str(e))
class InfoPage(Page): _FootMsg = ["Nav", "", "", "Back", ""] _MyList = [] _ListFontObj = MyLangManager.TrFont("varela15") _AList = {} _Time1 = 40 _Time2 = 120 _Time3 = 300 def ConvertSecToMin(self, secs): sec_str = "" min_str = "" if secs > 60: m = int(secs / 60) s = secs % 60 if m > 1: min_str = ("%d " + MyLangManager.Tr("minutes") + " ") % m else: min_str = ("%d " + MyLangManager.Tr("minute") + " ") % m if s == 1: sec_str = ("%d " + MyLangManager.Tr("second")) % s elif s > 1: sec_str = ("%d " + MyLangManager.Tr("seconds")) % s elif secs > 0: if secs > 1: sec_str = ("%d " + MyLangManager.Tr("seconds")) % secs else: sec_str = ("%d " + MyLangManager.Tr("second")) % secs elif secs == 0: sec_str = MyLangManager.Tr("Never") return min_str + sec_str def RefreshList(self): ## after GenList ,reuse self._AList["time1"]["value"] = self.ConvertSecToMin(self._Time1) self._AList["time2"]["value"] = self.ConvertSecToMin(self._Time2) self._AList["time3"]["value"] = self.ConvertSecToMin(self._Time3) for i, v in enumerate(self._AList): self._MyList[i].SetSmallText(self._AList[v]["value"]) def GenList(self): time1 = {} time1["key"] = "time1" if self._Time1 == 0: time1["value"] = MyLangManager.Tr("Never") else: time1["value"] = "%d secs" % self._Time1 time1["label"] = "Screen dimming" time2 = {} time2["key"] = "time2" if self._Time2 == 0: time2["value"] = MyLangManager.Tr("Never") else: time2["value"] = "%d secs" % self._Time2 time2["label"] = "Screen OFF" time3 = {} time3["key"] = "time3" if self._Time3 == 0: time3["value"] = MyLangManager.Tr("Never") else: time3["value"] = "%d secs" % self._Time3 time3["label"] = "Power OFF" self._AList["time1"] = time1 self._AList["time2"] = time2 self._AList["time3"] = time3 self._MyList = [] start_x = 0 start_y = 0 for i, v in enumerate(self._AList): #print(v) li = PageListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + i * PageListItem._Height li._Width = Width li._Fonts["normal"] = self._ListFontObj li._Fonts["small"] = MyLangManager.TrFont("varela12") if self._AList[v]["label"] != "": li.Init(self._AList[v]["label"]) else: li.Init(self._AList[v]["key"]) li._Flag = self._AList[v]["key"] li.SetSmallText(self._AList[v]["value"]) self._MyList.append(li) 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 = ListPageSelector() ps._Parent = self self._Ps = ps self._PsIndex = 0 self.GenList() 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 Click(self): cur_li = self._MyList[self._PsIndex] print(cur_li._Flag) def OnLoadCb(self): self.RefreshList() def OnReturnBackCb(self): pass """ self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() """ def KeyDown(self, event): if IsKeyMenuOrB(event.key): 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() def Draw(self): self.ClearCanvas() self._Ps.Draw() for i in self._MyList: i.Draw()
class PowerOptionsPage(Page): _FootMsg = ["Nav", "Detail", "", "Back", "Select"] _MyList = [] _ListFont = MyLangManager.TrFont("notosanscjk15") _AList = {} _Scrolled = 0 _BGwidth = 320 _BGheight = 240 - 24 - 20 _DrawOnce = False _Scroller = None _InfoPage = None def __init__(self): Page.__init__(self) self._Icons = {} def GenList(self): self._MyList = [] start_x = 0 start_y = 0 last_height = 0 supersaving = {} supersaving["key"] = "super" supersaving["label"] = "Power saving" supersaving["value"] = "supersaving" powersaving = {} powersaving["key"] = "saving" powersaving["label"] = "Balanced" powersaving["value"] = "powersaving" balance_saving = {} balance_saving["key"] = "balance" balance_saving["label"] = "Performance" balance_saving["value"] = "balance_saving" server_saving = {} server_saving["key"] = "server" server_saving["label"] = "Server" server_saving["value"] = "server" self._AList["supersaving"] = supersaving self._AList["powersaving"] = powersaving self._AList["server"] = server_saving self._AList["balance_saving"] = balance_saving for i, u in enumerate( ["supersaving", "powersaving", "server", "balance_saving"]): if u not in self._AList: continue v = self._AList[u] li = PageListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + last_height li._Width = Width li._Fonts["normal"] = self._ListFont li._Active = False li._Value = self._AList[u]["value"] if self._AList[u]["label"] != "": li.Init(self._AList[u]["label"]) else: li.Init(self._AList[u]["key"]) last_height += li._Height self._MyList.append(li) def Init(self): if self._Screen != None: if self._Screen._CanvasHWND != None and self._CanvasHWND == None: self._HWND = self._Screen._CanvasHWND self._CanvasHWND = pygame.Surface( (self._Screen._Width, self._BGheight)) self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width ## equal to screen width self._Height = self._Screen._Height done = IconItem() done._ImgSurf = MyIconPool.GiveIconSurface("done") done._MyType = ICON_TYPES["STAT"] done._Parent = self self._Icons["done"] = done ps = ListPageSelector() ps._Parent = self self._Ps = ps self._PsIndex = 0 self.GenList() self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init() self._Scroller.SetCanvasHWND(self._HWND) self._InfoPage = InfoPage() self._InfoPage._Screen = self._Screen self._InfoPage._Name = "Power option detail" self._InfoPage.Init() def Click(self): if len(self._MyList) == 0: return cur_li = self._MyList[self._PsIndex] if cur_li._Active == True: return for i in self._MyList: i._Active = False cur_li._Active = True print(cur_li._Value) with open(".powerlevel", "w") as f: f.write(cur_li._Value) config.PowerLevel = cur_li._Value if config.PowerLevel != "supersaving": os.system("sudo iw wlan0 set power_save off > /dev/null") else: os.system("sudo iw wlan0 set power_save on > /dev/null") self._Screen._MsgBox.SetText("Applying") self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() pygame.event.post(pygame.event.Event(POWEROPT, message="")) pygame.time.delay(1000) self._Screen.Draw() self._Screen.SwapAndShow() def OnLoadCb(self): self._Scrolled = 0 self._PosY = 0 self._DrawOnce = False with open(".powerlevel", "r") as f: powerlevel = f.read() powerlevel = powerlevel.strip() if powerlevel == "": powerlevel = "balance_saving" for i in self._MyList: if i._Value == powerlevel: i._Active = True def OnReturnBackCb(self): pass """ self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() """ def KeyDown(self, event): if IsKeyMenuOrB(event.key): self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() if IsKeyStartOrA(event.key): self.Click() 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["Y"]: cur_li = self._MyList[self._PsIndex] time1 = config.PowerLevels[cur_li._Value][0] time2 = config.PowerLevels[cur_li._Value][1] time3 = config.PowerLevels[cur_li._Value][2] self._InfoPage._Time1 = time1 self._InfoPage._Time2 = time2 self._InfoPage._Time3 = time3 self._Screen.PushPage(self._InfoPage) self._Screen.Draw() self._Screen.SwapAndShow() def Draw(self): self.ClearCanvas() if len(self._MyList) == 0: return else: if len(self._MyList) * PageListItem._Height > self._Height: self._Ps._Width = self._Width - 11 self._Ps.Draw() for i in self._MyList: if i._PosY > self._Height + self._Height / 2: break if i._PosY < 0: continue i.Draw() self._Scroller.UpdateSize( len(self._MyList) * PageListItem._Height, self._PsIndex * PageListItem._Height) self._Scroller.Draw() else: self._Ps._Width = self._Width self._Ps.Draw() for i in self._MyList: if i._PosY > self._Height + self._Height / 2: break if i._PosY < 0: continue i.Draw() if self._HWND != None: self._HWND.fill(MySkinManager.GiveColor("White")) self._HWND.blit( self._CanvasHWND, (self._PosX, self._PosY, self._Width, self._Height))
class WifiInfoPage(Page): _FootMsg = ["Nav","","","Back",""] _MyList = [] _ListFontObj = MyLangManager.TrFont("varela15") _Wireless = None _Daemon = None _AList = {} _NetworkId = -1 def GenList(self): self._MyList = [] if self._NetworkId != -1: self._AList["ip"]["value"] = "Not Connected" if self._Wireless.GetCurrentNetworkID(self._Wireless.GetIwconfig()) == self._NetworkId: ip = self._Wireless.GetWirelessIP('') if ip is not None: self._AList["ip"]["value"] = ip self._AList["bssid"]["value"] = self._Wireless.GetWirelessProperty(self._NetworkId,"bssid") start_x = 0 start_y = 0 for i,v in enumerate( self._AList): li = InfoPageListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + i*InfoPageListItem._Height li._Width = Width li._Fonts["normal"] = self._ListFontObj li._Fonts["small"] = MyLangManager.TrFont("varela12") if self._AList[v]["label"] != "": li.Init( self._AList[v]["label"] ) else: li.Init( self._AList[v]["key"] ) li._Flag = self._AList[v]["key"] li.SetSmallText( self._AList[v]["value"] ) self._MyList.append(li) 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 = InfoPageSelector() ps._Parent = self ps._PosX = 2 self._Ps = ps self._PsIndex = 0 ip = {} ip["key"] = "ip" ip["label"] = "IP" ip["value"] = "Not Connected" bssid = {} bssid["key"] = "bssid" bssid["label"] = "BSSID" bssid["value"] = "" self._AList["ip"] = ip self._AList["bssid"] = bssid self.GenList() self._DisconnectConfirmPage = WifiDisconnectConfirmPage() self._DisconnectConfirmPage._Screen = self._Screen self._DisconnectConfirmPage._Name = "Confirm Disconnect" self._DisconnectConfirmPage._Parent = self self._DisconnectConfirmPage.Init() def Click(self): cur_li = self._MyList[self._PsIndex] print(cur_li._Flag) def TryDisconnect(self): if self._Wireless.GetCurrentNetworkID(self._Wireless.GetIwconfig()) == self._NetworkId \ and self._Wireless.GetWirelessIP('') is not None: self._Screen.PushPage(self._DisconnectConfirmPage) self._Screen.Draw() self._Screen.SwapAndShow() else: return def OnLoadCb(self): if self._Wireless.GetCurrentNetworkID(self._Wireless.GetIwconfig()) == self._NetworkId \ and self._Wireless.GetWirelessIP('') is not None: self._FootMsg[2] = "Disconnect" else: self._FootMsg[2] = "" self.GenList() def OnReturnBackCb(self): self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() def KeyDown(self,event): if IsKeyMenuOrB(event.key): 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 IsKeyStartOrA(event.key): self.Click() if event.key == CurKeys["X"]: self.TryDisconnect() def Draw(self): self.ClearCanvas() self._Ps.Draw() for i in self._MyList: i.Draw()
def Init(self): self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width self._Height = self._Screen._Height self._CanvasHWND = self._Screen._CanvasHWND self._BGpng = IconItem() self._BGpng._ImgSurf = MyIconPool.GiveIconSurface(self._BG) self._BGpng._MyType = ICON_TYPES["STAT"] self._BGpng._Parent = self #print( MyIconPool.Width(self._BG),MyIconPool.Height(self._BG) ) self._BGpng.Adjust(0, 0, MyIconPool.Width(self._BG), MyIconPool.Height(self._BG), 0) self._Board = Textbulletinboard() self._Board._PosX = 4 self._Board._PosY = 100 self._Board._Width = self._Width - 4 * 2 self._Board._Height = 200 self._Board._CanvasHWND = self._CanvasHWND self._Board._Align = "Center" self._Board._RowPitch = 28 self._Board.Init() if self._Leader != None and self._Leader._ComPkgInfo != None: if "NotFoundMsg" in self._Leader._ComPkgInfo: d = [] for i, v in enumerate(self._Leader._ComPkgInfo["NotFoundMsg"]): Color = None Font = None Bold = False Und = False Txt = "" parts = v.split("|") if len(parts) > 0: Txt = parts[0] if len(parts) == 2: if parts[1] != "None": Color = MySkinManager.GiveColor(parts[1]) elif len(parts) == 3: if parts[1] != "None": Color = MySkinManager.GiveColor(parts[1]) if parts[2] != "None": Font = MyLangManager.TrFont(parts[2]) elif len(parts) == 4: if parts[1] != "None": Color = MySkinManager.GiveColor(parts[1]) if parts[2] != "None": Font = MyLangManager.TrFont(parts[2]) if parts[3] == "True": Bold = True elif len(parts) == 5: if parts[1] != "None": Color = MySkinManager.GiveColor(parts[1]) if parts[2] != "None": Font = MyLangManager.TrFont(parts[2]) if parts[3] == "True": Bold = True if parts[4] == "True": Und = True a = Text(Txt, Color, Font, Bold, Und) d = d + a.Words() self._Board.SetAndBlitText(d)
class AboutPage(Page): _FootMsg = ["Nav.","","","Back",""] _MyList = [] _ListFontObj = MyLangManager.TrFont("varela13") _AList = {} _Scrolled = 0 _BGwidth = 480 _BGheight = 272 _DrawOnce = False _Scroller = None def __init__(self): Page.__init__(self) self._Icons = {} def Uname(self): out = {} out["key"]="uname" out["label"]= "Kernel:" st = subprocess.check_output(["uname","-srmo"]) st = st.strip("\n") st = st.strip("\t") out["value"] = st self._AList["uname"] = out return def CpuMhz(self): try: with open("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq") as f: content = f.readlines() content = [x.strip() for x in content] except: print("open %s failed" % "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq") content = ["0"] mhz = int(content[0]) / 1000.0 cpuscalemhz = {} cpuscalemhz["key"] = "cpuscalemhz" cpuscalemhz["label"] = "CPU Mhz:" cpuscalemhz["value"] = str(mhz) self._AList["cpuscalemhz"] = cpuscalemhz return def CpuInfo(self): last_processor = 0 with open("/proc/cpuinfo") as f: for line in f: if line.startswith("processor"): parts = line.split(":") cur_processor_number = int( parts[1].strip()) if cur_processor_number > last_processor: last_processor = cur_processor_number if line.startswith("model name"): parts = line.split(":") # print( parts[1].strip() ) processor = {} processor["key"]="processor" processor["label"] = "Processor:" processor["value"] = parts[1].strip() self._AList["processor"] = processor if line.startswith("cpu MHz"): parts = line.split(":") # print(parts[1].strip() ) cpumhz = {} cpumhz["key"] = "cpumhz" cpumhz["label"] = "CPU MHz:" cpumhz["value"] = parts[1].strip() self._AList["cpumhz"] = cpumhz if line.startswith("cpu cores"): parts = line.split(":") # print(parts[1].strip() ) cpucores = {} cpucores["key"] = "cpucores" cpucores["label"] = "CPU cores:" cpucores["value"] = parts[1].strip() self._AList["cpucores"] = cpucores if line.startswith("Features"): parts = line.split(":") # print(parts[1].strip() ) f_ = {} f_["key"] = "features" f_["label"] = "Features:" f_["value"] = parts[1].strip() self._AList["features"] = f_ if line.startswith("flags"): parts = line.split(":") # print(parts[1].strip() ) flags = {} flags["key"] = "flags" flags["label"] = "Flags:" flags["value"] = parts[1].strip() self._AList["flags"] = flags if last_processor > 0: arm_cores = {} arm_cores["key"]= "armcores" arm_cores["label"] = "CPU cores:" arm_cores["value"] = str(last_processor + 1) self._AList["armcores"] = arm_cores def MemInfo(self): with open("/proc/meminfo") as f: for line in f: if line.startswith("MemTotal"): parts = line.split(":") parts[1] = parts[1].replace("kB","") print( parts[1].strip() ) memory = {} memory["key"] = "memory" memory["label"] = "Memory:" memory["value"] = str( int(parts[1].strip())/1000.0) +" MB" self._AList["memory"] = memory break def BatteryInfo(self): batteryinfo = {} batteryinfo["key"] = "batteryinfo" batteryinfo["label"] = "Battery:" charging_string = "Discharging" if BatteryAbstraction.IsCharging(): charging_string = "Charging" batteryinfo["value"] = "{}/{} mAh, {}%, {}".format( BatteryAbstraction.CurrentVoltage(), BatteryAbstraction.MaxVoltage(), BatteryAbstraction.AsPercentage(), charging_string ) self._AList["batteryinfo"] = batteryinfo def PortInfo1(self): portinfo = {} portinfo["key"] = "portinfo1" portinfo["label"] = "Originally created for ClockworkPi Gameshell." portinfo["value"] = "" self._AList["portinfo1"] = portinfo def PortInfo2(self): portinfo = {} portinfo["key"] = "portinfo2" portinfo["label"] = "Ported to Pocket CHIP by omgmog." portinfo["value"] = "" self._AList["portinfo2"] = portinfo def ThanksTimTam(self): thanks = {} thanks["key"] = "thankstimtam" thanks["label"] = "PocketCHIP Graphic created by TimTam" thanks["value"] = "" self._AList["thankstimtam"] = thanks def GenList(self): self._MyList = [] start_x = 0 start_y = 10 last_height = 0 for i,u in enumerate( ["cpuscalemhz","memory","uname", "batteryinfo", "portinfo1","portinfo2","thankstimtam"] ): if u not in self._AList: continue v = self._AList[u] li = InfoPageListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + last_height li._Width = Width li._Fonts["normal"] = self._ListFontObj li._Fonts["small"] = MySkinManager.GiveFont("varela12") if self._AList[u]["label"] != "": li.Init( self._AList[u]["label"] ) else: # li.Init( self._AList[u]["key"] ) li.Init("") li._Flag = self._AList[u]["key"] if self._AList[u]["value"] != "": li.SetSmallText( self._AList[u]["value"] ) else: li.SetSmallText("") last_height += li._Height self._MyList.append(li) def Init(self): if self._Screen != None: if self._Screen._CanvasHWND != None and self._CanvasHWND == None: self._HWND = self._Screen._CanvasHWND self._CanvasHWND = pygame.Surface( (self._Screen._Width,self._BGheight) ) self._PosX = self._Index*self._Screen._Width self._Width = self._Screen._Width ## equal to screen width self._Height = self._Screen._Height bgpng = IconItem() bgpng._ImgSurf = MyIconPool._Icons["about_bg"] bgpng._MyType = ICON_TYPES["STAT"] bgpng._Parent = self bgpng.Adjust(0,0,self._BGwidth,self._BGheight,0) self._Icons["bg"] = bgpng self.CpuInfo() self.MemInfo() self.CpuMhz() self.Uname() self.BatteryInfo() self.PortInfo1() self.PortInfo2() self.ThanksTimTam() self.GenList() self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init() self._Scroller.SetCanvasHWND(self._HWND) def ScrollDown(self): dis = 10 if abs(self._Scrolled) < (self._BGheight - self._Height)/2 + 50: self._PosY -= dis self._Scrolled -= dis def ScrollUp(self): dis = 10 if self._PosY < 0: self._PosY += dis self._Scrolled += dis def OnLoadCb(self): self._Scrolled = 0 self._PosY = 0 self._DrawOnce = False def OnReturnBackCb(self): self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() def KeyDown(self,event): if IsKeyMenuOrB(event.key): self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() # We don't need this page to be scrolly # 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() def Draw(self): if self._DrawOnce == False: self.ClearCanvas() #self._Ps.Draw() self._Icons["bg"].NewCoord(self._Width/2,self._Height/2 + (self._BGheight - Height)/2 + self._Screen._TitleBar._Height) self._Icons["bg"].Draw() for i in self._MyList: i.Draw() self._DrawOnce = True if self._HWND != None: # self._HWND.fill((255,255,255)) self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) )
class ListPage(Page): _Icons = {} _Selector=None _FootMsg = ["Nav","","","Back","Enter"] _MyList = [] _ListFontObj = MyLangManager.TrFont("varela15") _Scroller = None def __init__(self): Page.__init__(self) self._Icons = {} self._CanvasHWND = None self._MyList = [] def Init(self): self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width self._Height = self._Screen._Height self._CanvasHWND = self._Screen._CanvasHWND ps = InfoPageSelector() ps._Parent = self ps._PosX = 2 self._Ps = ps self._PsIndex = 0 # "" pkgname, label alist = [["","Airplane","Airplane Mode"], ["","PowerOptions","Power Options"], ["","Wifi","Wi-Fi"], ["","Bluetooth","Bluetooth"], ["","Sound","Sound Volume"], ["","Brightness","BackLight Brightness"], ["","Storage",""], ["","Time","Timezone"], ["","Languages","Languages"], ["","Notification","Notification"], ["","Update", ""], ["","About", "About"], ["","PowerOFF","Power OFF"], ["","ButtonsLayout","Buttons Layout"], ["","LauncherGo","Switch to LauncherGo"], ["","Lima","GPU driver switch"], ["","GateWay","Network gateway switch"]] start_x = 0 start_y = 0 sys.path.append(myvars.basepath)# add self as import path for i,v in enumerate(alist): li = ListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + i*ListItem._Height li._Width = Width li._Fonts["normal"] = self._ListFontObj if v[2] != "": li.Init(v[2]) else: li.Init(v[1]) #if v[1] == "Wifi" or v[1] == "Sound" or v[1] == "Brightness" or v[1] == "Storage" or v[1] == "Update" or v[1] == "About" or v[1] == "PowerOFF" or v[1] == "HelloWorld": if FileExists(myvars.basepath+"/"+ v[1]): li._LinkObj = __import__(v[1]) init_cb = getattr(li._LinkObj,"Init",None) if init_cb != None: if callable(init_cb): li._LinkObj.Init(self._Screen) self._MyList.append(li) self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init() def Click(self): cur_li = self._MyList[self._PsIndex] if cur_li._LinkObj != None: api_cb = getattr(cur_li._LinkObj,"API",None) if api_cb != None: if callable(api_cb): cur_li._LinkObj.API(self._Screen) def KeyDown(self,event): if IsKeyMenuOrB(event.key): 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 IsKeyStartOrA(event.key): self.Click() def Draw(self): self.ClearCanvas() if len(self._MyList) * ListItem._Height > self._Height: self._Ps._Width = self._Width - 11 self._Ps.Draw() for i in self._MyList: i.Draw() self._Scroller.UpdateSize( len(self._MyList)*ListItem._Height, self._PsIndex*ListItem._Height) self._Scroller.Draw() else: self._Ps._Width = self._Width self._Ps.Draw() for i in self._MyList: i.Draw()
class PowerOffConfirmPage(ConfirmPage): _ConfirmText = MyLangManager.Tr("Awaiting Input") #_FootMsg = ["Nav","Suspend","Reboot","Cancel","Shutdown"] _FootMsg = ["Nav","","Reboot","Cancel","Shutdown"] # uname -r st = subprocess.check_output(["uname","-r"]) st = st.strip("\n") st = st.strip("\t") if "5.7" in st: _FootMsg[1] = "Sleep" def CheckBattery(self): try: f = open(config.Battery) except IOError: print( "PowerOFF open %s failed" % config.Battery) return 0 else: with f: bat_uevent = {} content = f.readlines() content = [x.strip() for x in content] for i in content: pis = i.split("=") if len(pis) > 1: bat_uevent[pis[0]] = pis[1] if "POWER_SUPPLY_CAPACITY" in bat_uevent: cur_cap = int(bat_uevent["POWER_SUPPLY_CAPACITY"]) else: cur_cap = 0 return cur_cap return 0 def KeyDown(self,event): if IsKeyMenuOrB(event.key): self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() if IsKeyStartOrA(event.key): if self.CheckBattery() < 20: cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("gameover.png") else: cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("seeyou.png") cmdpath += "sleep 3;" #cmdpath += "echo 'halt -p' > /tmp/halt_cmd" cmdpath += "sudo halt -p" pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath)) if event.key == CurKeys["X"]: cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("seeyou.png") cmdpath += "sleep 3;" cmdpath += "sudo reboot" pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath)) if event.key == CurKeys["Y"]: if self._FootMsg[1] != "": cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("seeyou.png") cmdpath += "sleep 3;" cmdpath += "sudo pm-suspend" pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath))
class MusicLibListPage(Page): _Icons = {} _Selector = None _FootMsg = ["Nav", "", "Scan", "Back", "Add to Playlist"] _MyList = [] _SwapMyList = [] _ListFont = MyLangManager.TrFont("notosanscjk15") _MyStack = None _Scroller = None _BGpng = None _BGwidth = 56 _BGheight = 70 def __init__(self): Page.__init__(self) self._Icons = {} self._CanvasHWND = None self._MyList = [] self._SwapMyList = [] self._MyStack = MusicLibStack() def SyncList(self, path): if myvars.Poller == None: return alist = myvars.Poller.listfiles(path) if alist == False: print("listfiles return false") return self._MyList = [] self._SwapMyList = [] start_x = 0 start_y = 0 hasparent = 0 if self._MyStack.Length() > 0: hasparent = 1 li = ListItem() li._Parent = self li._PosX = start_x li._PosY = start_y li._Width = Width li._Fonts["normal"] = self._ListFont li._MyType = ICON_TYPES["DIR"] li._Parent = self li.Init("[..]") self._MyList.append(li) for i, v in enumerate(sorted(alist)): li = ListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + (i + hasparent) * ListItem._Height li._Width = Width li._Fonts["normal"] = self._ListFont li._MyType = ICON_TYPES["FILE"] li._Parent = self if "directory" in v: li._MyType = ICON_TYPES["DIR"] dir_base_name = os.path.basename(v["directory"]) li.Init(dir_base_name) li._Path = v["directory"] elif "file" in v: bname = os.path.basename(v["file"]) li.Init(bname) li._Path = v["file"] else: li.Init("NoName") self._MyList.append(li) for i in self._MyList: self._SwapMyList.append(i) def Init(self): self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width self._Height = self._Screen._Height self._CanvasHWND = self._Screen._CanvasHWND ps = ListPageSelector() ps._Parent = self self._Ps = ps self._PsIndex = 0 self.SyncList("/") icon_for_list = MultiIconItem() icon_for_list._ImgSurf = MyIconPool._Icons["sys"] icon_for_list._MyType = ICON_TYPES["STAT"] icon_for_list._Parent = self icon_for_list.Adjust(0, 0, 18, 18, 0) self._Icons["sys"] = icon_for_list self._BGpng = IconItem() self._BGpng._ImgSurf = MyIconPool._Icons["empty"] self._BGpng._MyType = ICON_TYPES["STAT"] self._BGpng._Parent = self self._BGpng.AddLabel(MyLangManager.Tr("Please upload data over Wi-Fi"), MyLangManager.TrFont("varela22")) self._BGpng.SetLableColor(MySkinManager.GiveColor('Disabled')) self._BGpng.Adjust(0, 0, self._BGwidth, self._BGheight, 0) self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init() def Click(self): if len(self._MyList) == 0: return cur_li = self._MyList[self._PsIndex] if cur_li._MyType == ICON_TYPES["DIR"]: if cur_li._Path == "[..]": self._MyStack.Pop() self.SyncList(self._MyStack.Last()) self._PsIndex = 0 else: self._MyStack.Push(self._MyList[self._PsIndex]._Path) self.SyncList(self._MyStack.Last()) self._PsIndex = 0 if cur_li._MyType == ICON_TYPES["FILE"]: ## add to playlist only myvars.Poller.addfile(cur_li._Path) myvars.PlayListPage.SyncList() print("add", cur_li._Path) self._Screen.Draw() self._Screen.SwapAndShow() def Rescan(self): self.SyncList("/") self._PsIndex = 0 def KeyDown(self, event): if IsKeyMenuOrB(event.key) or event.key == CurKeys["Left"]: 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["Right"]: self.FScrollDown(Step=5) self._Screen.Draw() self._Screen.SwapAndShow() if event.key == CurKeys["Left"]: self.FScrollUp(Step=5) self._Screen.Draw() self._Screen.SwapAndShow() """ if event.key == CurKeys["X"]: self.Rescan() self._Screen.Draw() self._Screen.SwapAndShow() if IsKeyStartOrA(event.key): self.Click() def Draw(self): self.ClearCanvas() """ start_x = 0 start_y = 0 counter = 0 self._MyList = [] for i,v in enumerate(self._SwapMyList): if myvars.PlayListPage.InPlayList(v._Path): v._Active = True else: v._Active = False if v._Active == False: v.NewCoord(start_x, start_y+counter* ListItem._Height) counter+=1 self._MyList.append(v) """ if len(self._MyList) == 0: self._BGpng.NewCoord(self._Width / 2, self._Height / 2) self._BGpng.Draw() return else: if len(self._MyList) * ListItem._Height > self._Height: self._Ps._Width = self._Width - 11 self._Ps.Draw() for i in self._MyList: if myvars.PlayListPage.InPlayList(i._Path): i._Active = True else: i._Active = False if i._PosY > self._Height + self._Height / 2: break if i._PosY < 0: continue i.Draw() self._Scroller.UpdateSize( len(self._MyList) * ListItem._Height, self._PsIndex * ListItem._Height) self._Scroller.Draw() else: self._Ps._Width = self._Width self._Ps.Draw() for i in self._MyList: if myvars.PlayListPage.InPlayList(i._Path): i._Active = True else: i._Active = False if i._PosY > self._Height + self._Height / 2: break if i._PosY < 0: continue i.Draw()
class UpdatePage(Page): _Icons = {} _FootMsg = ["Nav","","Check Update","Back",""] _ListFontObj = MyLangManager.TrFont("varela15") _ConfirmPage = None _AList = {} _MyList = [] def __init__(self): Page.__init__(self) self._Icons = {} def GenList(self): start_x = 0 start_y = 0 for i,v in enumerate( self._AList): li = InfoPageListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + i*InfoPageListItem._Height li._Width = Width li._Fonts["normal"] = self._ListFontObj li._Fonts["small"] = MySkinManager.GiveFont("varela12") if self._AList[v]["label"] != "": li.Init( self._AList[v]["label"] ) else: li.Init( self._AList[v]["key"] ) li._Flag = self._AList[v]["key"] li.SetSmallText( self._AList[v]["value"] ) self._MyList.append(li) def Init(self): self._CanvasHWND = self._Screen._CanvasHWND self._Width = self._Screen._Width self._Height = self._Screen._Height self._ConfirmPage = UpdateConfirmPage() self._ConfirmPage._Screen = self._Screen self._ConfirmPage._Name = "Update Confirm" self._ConfirmPage._Parent = self self._ConfirmPage.Init() it = {} it["key"] = "version" it["label"] = "Version" it["value"] = config.VERSION self._AList["version"] = it self.GenList() def CheckUpdate(self): global LauncherLoc self._Screen._MsgBox.SetText("CheckingUpdate") self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() try: r = requests.get(config.UPDATE_URL, verify=False, timeout=8) except: print("requests get error") return else: if r.status_code == requests.codes.ok: try: json_ = r.json() if "version" in json_ and "updatepath" in json_ and "md5sum" in json_: if config.VERSION != json_["version"]: self._ConfirmPage._URL = json_["updatepath"] self._ConfirmPage._MD5 = json_["md5sum"] self._ConfirmPage._GIT = False self._Screen.PushPage(self._ConfirmPage) self._Screen.Draw() self._ConfirmPage.SnapMsg(MyLangManager.Tr("ConfirmUpdateToFQ") % json_["version"] ) self._Screen.SwapAndShow() elif "gitversion" in json_: ### just use git to run update cur_dir = os.getcwd() os.chdir(LauncherLoc) current_git_version = get_git_revision_short_hash() current_git_version = current_git_version.strip("\n") current_git_version = current_git_version.strip("\t") os.chdir(cur_dir) if current_git_version != json_["gitversion"]: self._ConfirmPage._URL = None self._ConfirmPage._MD5 = None self._ConfirmPage._GIT = True self._ConfirmPage._Version = json_["gitversion"] self._Screen.PushPage(self._ConfirmPage) self._Screen.Draw() self._ConfirmPage.SnapMsg(MyLangManager.Tr("UpdateToFQ") % json_["gitversion"] ) self._Screen.SwapAndShow() else: self._Screen.Draw() self._Screen._MsgBox.SetText("LauncherIsUpToDate") self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() pygame.time.delay(765) return True except Exception, e: print("r.json() error %s" % str(e)) else:
class BleInfoPage(Page): _FootMsg = ["Nav", "Forget", "Disconnect", "Back", ""] _MyList = [] _ListFontObj = MyLangManager.TrFont("varela15") _ListSmFontObj = MySkinManager.GiveFont("varela12") # small font _ListSm2FontObj = MySkinManager.GiveFont("varela11") _AList = {} _Path = "" 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 = "ConfirmForget" self._ConfirmPage1._Parent = self self._ConfirmPage1.Init() def GenList(self): if self._AList == None: return self._MyList = [] self._PsIndex = 0 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": if len(self._AList[v]) > 1: pp(self._AList[v][0]) sm_text = str(self._AList[v][0]) else: sm_text = "<empty>" else: sm_text = str(self._AList[v]) if sm_text == "0": sm_text = "No" elif sm_text == "1": sm_text = "Yes" sm_text = sm_text[:20] li.SetSmallText(sm_text) li._PosX = 2 self._MyList.append(li) def TryToForget(self): global adapter proxy_obj = bus.get_object("org.bluez", self._Path) dev = dbus.Interface(proxy_obj, "org.bluez.Device1") self._Screen._MsgBox.SetText("Forgeting") self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() try: adapter.RemoveDevice(dev) except Exception, e: err_name = e.get_dbus_name() if err_name == "org.freedesktop.DBus.Error.NoReply": self._Screen._MsgBox.SetText("DBus noreply") else: self._Screen._MsgBox.SetText("Forget failed") self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() pygame.time.delay(500) self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow()
class AirplanePage(Page): _FootMsg = ["Nav","Rescue","","Back","Toggle"] _MyList = [] _ListFontObj = MyLangManager.TrFont("varela13") _AList = {} _Scrolled = 0 _BGwidth = 320 _BGheight = 240-24-20 _DrawOnce = False _Scroller = None _EasingDur = 30 _airwire_y = 0 _dialog_index = 0 def __init__(self): Page.__init__(self) self._Icons = {} def GenList(self): self._MyList = [] def Init(self): if self._Screen != None: if self._Screen._CanvasHWND != None and self._CanvasHWND == None: self._HWND = self._Screen._CanvasHWND self._CanvasHWND = pygame.Surface( (self._Screen._Width,self._BGheight) ) self._PosX = self._Index*self._Screen._Width self._Width = self._Screen._Width ## equal to screen width self._Height = self._Screen._Height airwire = IconItem() airwire._ImgSurf = MyIconPool._Icons["airwire"] airwire._MyType = ICON_TYPES["STAT"] airwire._Parent = self airwire.Adjust(0,0,5,43,0) self._Icons["airwire"] = airwire GS = IconItem() GS._ImgSurf = MyIconPool._Icons["GS"] GS._MyType = ICON_TYPES["STAT"] GS._Parent = self GS.Adjust(0,0,72,95,0) self._Icons["GS"] = GS DialogBoxs = MultiIconItem() DialogBoxs._ImgSurf = MyIconPool._Icons["DialogBoxs"] DialogBoxs._MyType = ICON_TYPES["STAT"] DialogBoxs._Parent = self DialogBoxs._IconWidth = 134 DialogBoxs._IconHeight = 93 DialogBoxs.Adjust(0,0,134,372,0) self._Icons["DialogBoxs"] = DialogBoxs """ bgpng = MultiIconItem() bgpng._ImgSurf = MyIconPool._Icons["about_bg"] bgpng._MyType = ICON_TYPES["STAT"] bgpng._Parent = self bgpng.Adjust(0,0,self._BGwidth,self._BGheight,0) self._Icons["bg"] = bgpng """ self.GenList() self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init() self._Scroller.SetCanvasHWND(self._HWND) self.OnLoadCb() def ScrollDown(self): dis = 10 if abs(self._Scrolled) < (self._BGheight - self._Height)/2 + 0: self._PosY -= dis self._Scrolled -= dis def ScrollUp(self): dis = 10 if self._PosY < 0: self._PosY += dis self._Scrolled += dis def ToggleModeAni(self): ## with animation out = commands.getstatusoutput('sudo rfkill list | grep yes | cut -d " " -f3') if "yes" in out[1]: data = self.EasingData(0,43) for _,v in enumerate(data): self._airwire_y -= v self._dialog_index = 2 pygame.time.delay(40) self._Screen.Draw() self._Screen.SwapAndShow() commands.getstatusoutput("sudo rfkill unblock all") self._Screen._TitleBar._InAirPlaneMode = False else: data = self.EasingData(0,43) data.reverse() for _,v in enumerate(data): self._airwire_y += v self._dialog_index = 3 pygame.time.delay(40) self._Screen.Draw() self._Screen.SwapAndShow() commands.getstatusoutput("sudo rfkill block all") self._Screen._TitleBar._InAirPlaneMode = True def ToggleMode(self): out = commands.getstatusoutput('sudo rfkill list | grep yes | cut -d " " -f3') print out if "yes" in out[1]: self._Screen._MsgBox.SetText("TurningOn") self._Screen._MsgBox.Draw() commands.getstatusoutput("sudo rfkill unblock all") self._Screen._TitleBar._InAirPlaneMode = False else: self._Screen._MsgBox.SetText("TurningOff") self._Screen._MsgBox.Draw() commands.getstatusoutput("sudo rfkill block all") self._Screen._TitleBar._InAirPlaneMode = True def UnBlockAll(self): self._Screen._MsgBox.SetText("TurningOn") self._Screen._MsgBox.Draw() commands.getstatusoutput("sudo rfkill unblock all") self._Screen._TitleBar._InAirPlaneMode = False def OnLoadCb(self): self._Scrolled = 0 self._PosY = 0 self._DrawOnce = False out = commands.getstatusoutput('sudo rfkill list | grep yes | cut -d " " -f3') if "yes" in out[1]: self._Screen._TitleBar._InAirPlaneMode = True self._airwire_y = 50+43 self._dialog_index = 1 else: self._airwire_y = 50 self._dialog_index = 0 self._Screen._TitleBar._InAirPlaneMode = False 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["B"]: self.ToggleModeAni() """ self.ToggleMode() self._Screen.SwapAndShow() pygame.time.delay(1000) 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["X"]: self.UnBlockAll() self._Screen.SwapAndShow() pygame.time.delay(1000) self._Screen.Draw() self._Screen.SwapAndShow() def Draw(self): self.ClearCanvas() self._Icons["DialogBoxs"].NewCoord(145,23) self._Icons["airwire"].NewCoord(80,self._airwire_y) self._Icons["DialogBoxs"]._IconIndex = self._dialog_index self._Icons["DialogBoxs"].DrawTopLeft() self._Icons["airwire"].Draw() self._Icons["GS"].NewCoord(98,118) self._Icons["GS"].Draw() if self._HWND != None: self._HWND.fill((255,255,255)) self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) )
class GPUDriverPage(Page): _FootMsg = ["Nav", "", "", "Back", "Select"] _MyList = [] _ListFont = MyLangManager.TrFont("notosanscjk12") _AList = {} _Scrolled = 0 _BGwidth = 320 _BGheight = 240 - 24 - 20 _DrawOnce = False _Scroller = None _InfoPage = None def __init__(self): Page.__init__(self) self._Icons = {} def GenList(self): self._MyList = [] start_x = 0 start_y = 0 last_height = 0 drivers = [["fbturbo", "FBTURBO driver (Software Rendering)"], [ "modesetting", "LIMA driver (Experimental Hardware Rendering)" ]] for i, u in enumerate(drivers): #print(i,u) li = PageListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + last_height li._Width = Width li._Fonts["normal"] = self._ListFont li._Active = False li._Value = u[0] li.Init(u[1]) last_height += li._Height self._MyList.append(li) def Init(self): if self._Screen != None: if self._Screen._CanvasHWND != None and self._CanvasHWND == None: self._HWND = self._Screen._CanvasHWND self._CanvasHWND = pygame.Surface( (self._Screen._Width, self._BGheight)) self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width ## equal to screen width self._Height = self._Screen._Height done = IconItem() done._ImgSurf = MyIconPool.GiveIconSurface("done") done._MyType = ICON_TYPES["STAT"] done._Parent = self self._Icons["done"] = done ps = ListPageSelector() ps._Parent = self self._Ps = ps self._PsIndex = 0 self.GenList() self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init() self._Scroller.SetCanvasHWND(self._HWND) def Click(self): if len(self._MyList) == 0: return cur_li = self._MyList[self._PsIndex] if cur_li._Active == True: return print(cur_li._Value) if "arm" in platform.machine(): for i in self._MyList: i._Active = False cur_li._Active = True self._Screen._MsgBox.SetText("Applying") self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() if "modesetting" in cur_li._Value: ## enable lima os.system("touch %s/.lima" % os.path.expanduser('~')) ArmSystem( "sudo mv /usr/lib/xorg/modules/drivers/modesetting_drv.so.lima /usr/lib/xorg/modules/drivers/modesetting_drv.so" ) ArmSystem( "sudo sed -i '/^#.*lima/s/^#//' /etc/ld.so.conf.d/00-arm-linux-gnueabihf.conf" ) ArmSystem("sudo ldconfig") else: #disable lima os.system("rm %s/.lima" % os.path.expanduser('~')) ArmSystem( "sudo mv /usr/lib/xorg/modules/drivers/modesetting_drv.so /usr/lib/xorg/modules/drivers/modesetting_drv.so.lima" ) ArmSystem( "sudo sed -i 's/^[^#]*lima/#&/' /etc/ld.so.conf.d/00-arm-linux-gnueabihf.conf" ) ArmSystem("sudo ldconfig") pygame.time.delay(800) os.system("sudo reboot") else: self._Screen._MsgBox.SetText("Do it in GameShell") self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() def OnLoadCb(self): self._Scrolled = 0 self._PosY = 0 self._DrawOnce = False ## grep Driver /etc/xorg.conf | tr -s " " | cut -d " " -f3 ## "fbturbo" ## "modesetting" thedrv = "" if "arm" in platform.machine(): if FileExists("%s/.lima" % os.path.expanduser('~')): thedrv = "modesetting" else: thedrv = "fbturbo" if thedrv == "": thedrv = "fbturbo" for i in self._MyList: i._Active = False for i in self._MyList: if thedrv in i._Value: i._Active = True def OnReturnBackCb(self): pass """ self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() """ def KeyDown(self, event): if IsKeyMenuOrB(event.key): self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() if IsKeyStartOrA(event.key): self.Click() 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() def Draw(self): self.ClearCanvas() if len(self._MyList) == 0: return else: if len(self._MyList) * PageListItem._Height > self._Height: self._Ps._Width = self._Width - 11 self._Ps.Draw() for i in self._MyList: if i._PosY > self._Height + self._Height / 2: break if i._PosY < 0: continue i.Draw() self._Scroller.UpdateSize( len(self._MyList) * PageListItem._Height, self._PsIndex * PageListItem._Height) self._Scroller.Draw() else: self._Ps._Width = self._Width self._Ps.Draw() for i in self._MyList: if i._PosY > self._Height + self._Height / 2: break if i._PosY < 0: continue i.Draw() if self._HWND != None: self._HWND.fill(MySkinManager.GiveColor("White")) self._HWND.blit( self._CanvasHWND, (self._PosX, self._PosY, self._Width, self._Height))
class PlayListPage(Page): _Icons = {} _Selector = None _FootMsg = ["Nav", "Remove", "RTA", "Back", "Play/Pause"] _MyList = [] _ListFont = MyLangManager.TrFont("notosanscjk15") _Scroller = None _CurSongTime = "0:0" _BGpng = None _BGwidth = 75 _BGheight = 70 _Scrolled = 0 _CurSongName = "" def __init__(self): self._Icons = {} Page.__init__(self) self._CanvasHWND = None self._MyList = [] def SyncList(self): self._MyList = [] start_x = 0 start_y = 0 if myvars.Poller == None: return play_list = myvars.Poller.playlist() for i, v in enumerate(play_list): li = ListItem() li._Parent = self li._PosX = start_x li._PosY = start_y + i * ListItem._Height li._Width = Width li._Fonts["normal"] = self._ListFont if "title" in v: if isinstance(v["title"], (list, )): li.Init(" | ".join(v["title"])) else: li.Init(v["title"]) if "file" in v: li._Path = v["file"] elif "file" in v: li.Init(os.path.basename(v["file"])) li._Path = v["file"] else: li.Init("NoName") li._Labels["Text"]._PosX = 7 self._MyList.append(li) self.SyncPlaying() def GObjectInterval(self): ## 250 ms self.SyncPlaying() if self._Screen.CurPage() == self: self._Screen.Draw() self._Screen.SwapAndShow() return True def SyncPlaying(self): if myvars.Poller == None: return current_song = myvars.Poller.poll() for i, v in enumerate(self._MyList): self._MyList[i]._Playing = False self._MyList[i]._PlayingProcess = 0 if current_song != None: if "song" in current_song: posid = int(current_song["song"]) if posid < len(self._MyList): # out of index self._CurSongName = self._MyList[posid]._Text if "state" in current_song: if current_song["state"] == "stop": self._MyList[posid]._Playing = False else: self._MyList[posid]._Playing = True if "time" in current_song: self._CurSongTime = current_song["time"] times_ = current_song["time"].split(":") if len(times_) > 1: cur = float(times_[0]) end = float(times_[1]) pros = int((cur / end) * 100.0) self._MyList[posid]._PlayingProcess = pros def InPlayList(self, path): for i, v in enumerate(self._MyList): if v._Path == path: return True def Init(self): self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width self._Height = self._Screen._Height self._CanvasHWND = self._Screen._CanvasHWND ps = ListPageSelector() ps._Parent = self self._Ps = ps self._PsIndex = 0 self.SyncList() gobject.timeout_add(850, self.GObjectInterval) self._BGpng = IconItem() self._BGpng._ImgSurf = MyIconPool._Icons["heart"] self._BGpng._MyType = ICON_TYPES["STAT"] self._BGpng._Parent = self self._BGpng.AddLabel(MyLangManager.Tr("my favorite music"), MyLangManager.TrFont("varela18")) self._BGpng.SetLableColor(MySkinManager.GiveColor('Disabled')) self._BGpng.Adjust(0, 0, self._BGwidth, self._BGheight, 0) self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init() 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 self._Scrolled += 1 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 self._Scrolled -= 1 def SyncScroll(self): # show where it left if self._Scrolled == 0: return if self._PsIndex < len(self._MyList): cur_li = self._MyList[self._PsIndex] if self._Scrolled > 0: if cur_li._PosY < 0: for i in range(0, len(self._MyList)): self._MyList[i]._PosY += self._Scrolled * self._MyList[ i]._Height elif self._Scrolled < 0: if cur_li._PosY + cur_li._Height > self._Height: for i in range(0, len(self._MyList)): self._MyList[i]._PosY += self._Scrolled * self._MyList[ i]._Height def Click(self): if len(self._MyList) == 0: return cur_li = self._MyList[self._PsIndex] play_pos_id = myvars.Poller.play(self._PsIndex) self.SyncPlaying() self._Screen.Draw() self._Screen.SwapAndShow() def OnReturnBackCb(self): # return from music_lib_list_page self.SyncList() self.SyncScroll() def KeyDown(self, event): if IsKeyMenuOrB(event.key): if myvars.Poller != None: myvars.Poller.stop() self._CurSongTime = "" self._CurSongName = "" 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["Right"]: #add self._Screen.PushCurPage() self._Screen.SetCurPage(myvars.MusicLibListPage) self._Screen.Draw() self._Screen.SwapAndShow() if event.key == CurKeys["Y"]: # del selected songs myvars.Poller.delete(self._PsIndex) self.SyncList() self._Screen.Draw() self._Screen.SwapAndShow() if IsKeyStartOrA(event.key): self.Click() if event.key == CurKeys["X"]: # start spectrum myvars.SpectrumPage._Neighbor = self self._Screen.PushPage(myvars.SpectrumPage) self._Screen.Draw() self._Screen.SwapAndShow() def Draw(self): self.ClearCanvas() if len(self._MyList) == 0: self._BGpng.NewCoord(self._Width / 2, self._Height / 2) self._BGpng.Draw() return else: if len(self._MyList) * ListItem._Height > self._Height: self._Ps._Width = self._Width - 11 self._Ps.Draw() for i in self._MyList: if i._PosY > self._Height + self._Height / 2: break if i._PosY < 0: continue i.Draw() self._Scroller.UpdateSize( len(self._MyList) * ListItem._Height, self._PsIndex * ListItem._Height) self._Scroller.Draw() else: self._Ps._Width = self._Width self._Ps.Draw() for i in self._MyList: if i._PosY > self._Height + self._Height / 2: break if i._PosY < 0: continue i.Draw()
def Init(self): self._PosX = self._Index * self._Screen._Width self._Width = self._Screen._Width self._Height = self._Screen._Height self._CanvasHWND = self._Screen._CanvasHWND ps = ListPageSelector() ps._Parent = self self._Ps = ps self._PsIndex = 0 self.SyncList(self._Emulator["ROM"]) ### will also mkdir of the ***ROM self try: os.makedirs(self._Emulator["ROM"] + "/.Trash") except OSError: if not os.path.isdir(self._Emulator["ROM"] + "/.Trash"): raise try: os.makedirs(self._Emulator["ROM"] + "/.Fav") except OSError: if not os.path.isdir(self._Emulator["ROM"] + "/.Fav"): raise self._MyStack._Emulator = self._Emulator icon_for_list = MultiIconItem() icon_for_list._ImgSurf = self._Parent._Icons["sys"] icon_for_list._MyType = ICON_TYPES["STAT"] icon_for_list._Parent = self icon_for_list.Adjust(0, 0, 18, 18, 0) self._Icons["sys"] = icon_for_list bgpng = IconItem() bgpng._ImgSurf = MyIconPool._Icons["empty"] bgpng._MyType = ICON_TYPES["STAT"] bgpng._Parent = self bgpng.AddLabel(MyLangManager.Tr("Please upload data over Wi-Fi"), MyLangManager.TrFont("varela22")) bgpng.SetLableColor(MySkinManager.GiveColor('Disabled')) bgpng.Adjust(0, 0, self._BGwidth, self._BGheight, 0) self._Icons["bg"] = bgpng self._Scroller = ListScroller() self._Scroller._Parent = self self._Scroller._PosX = self._Width - 10 self._Scroller._PosY = 2 self._Scroller.Init() rom_so_confirm_page = RomSoConfirmPage() rom_so_confirm_page._Screen = self._Screen rom_so_confirm_page._Name = "Download Confirm" rom_so_confirm_page._Parent = self rom_so_confirm_page.Init() self._RomSoConfirmDownloadPage = rom_so_confirm_page
def Init(self): self._FontObj = MyLangManager.TrFont("veramono24")