class PlayerUI: def __init__(self, sizer, mainSizer, panel, btn): self.sizer = sizer self.mainSizer = mainSizer self.panel = panel self.player = Player([]) self.toggleButton = btn def toggle(self): if self.player.isOn(): self.stop() else: self.play() def play(self): self.toggleButton.SetLabel(config.stopSign) self.player.play() def stop(self): self.toggleButton.SetLabel(config.playSign) self.player.stop() def next(self): self.unHighlightTrack() self.player.next() self.highlightTrack() def prev(self): self.unHighlightTrack() self.player.prev() self.highlightTrack() def goTo(self, n): self.unHighlightTrack() self.player.goTo(n) self.highlightTrack() def quit(self): self.player.quit() def loadFiles(self, wnd, directory): files = readFiles(directory) self.player.stop() self.player = Player(files) def onItemClick(i): def res(e): if not (i == self.player.currentTrack and self.isOn()): self.unHighlightTrack() self.player.goTo(i) self.highlightTrack() return res def onItemDoubleClick(i): n = i def res(e): if i == self.player.currentTrack and self.isOn(): self.stop() else: onItemClick(n)(e) self.play() return res self.sizer.Clear(deleteWindows=True) font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT) font.SetPointSize(config.fontSize) for ind, x in enumerate(files): item = wx.StaticText(self.panel, label=x.basename()) item.Bind(wx.EVT_LEFT_DOWN, onItemClick(ind)) item.Bind(wx.EVT_LEFT_DCLICK, onItemDoubleClick(ind)) item.SetSize(wx.Size(200, 80)) item.SetFont(font) self.sizer.Add(item, 0, wx.ALL | wx.EXPAND, 5) self.highlightTrack() self.updateLayout(wnd) def updateLayout(self, wnd): self.sizer.Layout() self.mainSizer.Layout() self.mainSizer.Fit(wnd) def unHighlightTrack(self): color = config.offColor n = self.player.getCurrentTrack() item = self.sizer.GetItem(n) if not (item is None) and item.IsWindow(): item.GetWindow().SetForegroundColour(color) rmStar(item.GetWindow()) item.GetWindow().SetWindowStyle(wx.ALIGN_LEFT) def highlightTrack(self): color = config.onColor n = self.player.getCurrentTrack() item = self.sizer.GetItem(n) if not (item is None) and item.IsWindow(): item.GetWindow().SetForegroundColour(color) addStar(item.GetWindow()) item.GetWindow().SetWindowStyle(wx.ALIGN_RIGHT) def isOn(self): return self.player.isOn() def isOff(self): return self.player.isOff()