X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e8d1587803d2129ab7b30d794d37f51e411e022e..68fc5c8025e38b9d827383fbfe7ce509ae331c1f:/wxPython/demo/MediaCtrl.py diff --git a/wxPython/demo/MediaCtrl.py b/wxPython/demo/MediaCtrl.py index 3c0f6c39b0..1a774ed81c 100644 --- a/wxPython/demo/MediaCtrl.py +++ b/wxPython/demo/MediaCtrl.py @@ -3,7 +3,17 @@ import wx import wx.media import os -from Main import opj +#---------------------------------------------------------------------- + +class StaticText(wx.StaticText): + """ + A StaticText that only updates the label if it has changed, to + help reduce potential flicker since these controls would be + updated very frequently otherwise. + """ + def SetLabel(self, label): + if label <> self.GetLabel(): + wx.StaticText.SetLabel(self, label) #---------------------------------------------------------------------- @@ -15,16 +25,23 @@ class TestPanel(wx.Panel): # Create some controls try: - self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER) + self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER, + #szBackend=wx.media.MEDIABACKEND_DIRECTSHOW + #szBackend=wx.media.MEDIABACKEND_QUICKTIME + #szBackend=wx.media.MEDIABACKEND_WMP10 + ) except NotImplementedError: self.Destroy() raise + self.Bind(wx.media.EVT_MEDIA_LOADED, self.OnMediaLoaded) + btn1 = wx.Button(self, -1, "Load File") self.Bind(wx.EVT_BUTTON, self.OnLoadFile, btn1) btn2 = wx.Button(self, -1, "Play") self.Bind(wx.EVT_BUTTON, self.OnPlay, btn2) + self.playBtn = btn2 btn3 = wx.Button(self, -1, "Pause") self.Bind(wx.EVT_BUTTON, self.OnPause, btn3) @@ -34,11 +51,12 @@ class TestPanel(wx.Panel): slider = wx.Slider(self, -1, 0, 0, 0) self.slider = slider + slider.SetMinSize((150, -1)) self.Bind(wx.EVT_SLIDER, self.OnSeek, slider) - self.st_size = wx.StaticText(self, -1, size=(100,-1)) - self.st_len = wx.StaticText(self, -1, size=(100,-1)) - self.st_pos = wx.StaticText(self, -1, size=(100,-1)) + self.st_size = StaticText(self, -1, size=(100,-1)) + self.st_len = StaticText(self, -1, size=(100,-1)) + self.st_pos = StaticText(self, -1, size=(100,-1)) # setup the layout @@ -54,8 +72,8 @@ class TestPanel(wx.Panel): sizer.Add(self.st_pos, (3, 5)) self.SetSizer(sizer) - self.DoLoadFile(opj("data/testmovie.mpg")) - self.mc.Stop() + #self.DoLoadFile(os.path.abspath("data/testmovie.mpg")) + wx.CallAfter(self.DoLoadFile, os.path.abspath("data/testmovie.mpg")) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.OnTimer) @@ -74,20 +92,30 @@ class TestPanel(wx.Panel): def DoLoadFile(self, path): + self.playBtn.Disable() + #noLog = wx.LogNull() if not self.mc.Load(path): wx.MessageBox("Unable to load %s: Unsupported format?" % path, "ERROR", wx.ICON_ERROR | wx.OK) else: - self.mc.SetBestFittingSize() + self.mc.SetInitialSize() self.GetSizer().Layout() self.slider.SetRange(0, self.mc.Length()) - self.mc.Play() - + + def OnMediaLoaded(self, evt): + self.playBtn.Enable() def OnPlay(self, evt): - self.mc.Play() - + if not self.mc.Play(): + wx.MessageBox("Unable to Play media : Unsupported format?", + "ERROR", + wx.ICON_ERROR | wx.OK) + else: + self.mc.SetInitialSize() + self.GetSizer().Layout() + self.slider.SetRange(0, self.mc.Length()) + def OnPause(self, evt): self.mc.Pause() @@ -106,6 +134,9 @@ class TestPanel(wx.Panel): self.st_len.SetLabel('length: %d seconds' % (self.mc.Length()/1000)) self.st_pos.SetLabel('position: %d' % offset) + def ShutdownDemo(self): + self.timer.Stop() + del self.timer #---------------------------------------------------------------------- @@ -149,4 +180,3 @@ if __name__ == '__main__': import sys,os import run run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) -