]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/MediaCtrl.py
   6 #---------------------------------------------------------------------- 
   8 class StaticText(wx
.StaticText
): 
  10     A StaticText that only updates the label if it has changed, to 
  11     help reduce potential flicker since these controls would be 
  12     updated very frequently otherwise. 
  14     def SetLabel(self
, label
): 
  15         if label 
<> self
.GetLabel(): 
  16             wx
.StaticText
.SetLabel(self
, label
) 
  18 #---------------------------------------------------------------------- 
  20 class TestPanel(wx
.Panel
): 
  21     def __init__(self
, parent
, log
): 
  23         wx
.Panel
.__init
__(self
, parent
, -1, 
  24                           style
=wx
.TAB_TRAVERSAL|wx
.CLIP_CHILDREN
) 
  26         # Create some controls 
  28             self
.mc 
= wx
.media
.MediaCtrl(self
, style
=wx
.SIMPLE_BORDER
) 
  29         except NotImplementedError: 
  33         self
.Bind(wx
.media
.EVT_MEDIA_LOADED
, self
.OnMediaLoaded
) 
  35         btn1 
= wx
.Button(self
, -1, "Load File") 
  36         self
.Bind(wx
.EVT_BUTTON
, self
.OnLoadFile
, btn1
) 
  38         btn2 
= wx
.Button(self
, -1, "Play") 
  39         self
.Bind(wx
.EVT_BUTTON
, self
.OnPlay
, btn2
) 
  42         btn3 
= wx
.Button(self
, -1, "Pause") 
  43         self
.Bind(wx
.EVT_BUTTON
, self
.OnPause
, btn3
) 
  45         btn4 
= wx
.Button(self
, -1, "Stop") 
  46         self
.Bind(wx
.EVT_BUTTON
, self
.OnStop
, btn4
) 
  48         slider 
= wx
.Slider(self
, -1, 0, 0, 0) 
  50         slider
.SetMinSize((150, -1)) 
  51         self
.Bind(wx
.EVT_SLIDER
, self
.OnSeek
, slider
) 
  53         self
.st_size 
= StaticText(self
, -1, size
=(100,-1)) 
  54         self
.st_len  
= StaticText(self
, -1, size
=(100,-1)) 
  55         self
.st_pos  
= StaticText(self
, -1, size
=(100,-1)) 
  59         sizer 
= wx
.GridBagSizer(5,5) 
  60         sizer
.Add(self
.mc
, (1,1), span
=(5,1))#, flag=wx.EXPAND) 
  61         sizer
.Add(btn1
, (1,3)) 
  62         sizer
.Add(btn2
, (2,3)) 
  63         sizer
.Add(btn3
, (3,3)) 
  64         sizer
.Add(btn4
, (4,3)) 
  65         sizer
.Add(slider
, (6,1), flag
=wx
.EXPAND
) 
  66         sizer
.Add(self
.st_size
, (1, 5)) 
  67         sizer
.Add(self
.st_len
,  (2, 5)) 
  68         sizer
.Add(self
.st_pos
,  (3, 5)) 
  71         #self.DoLoadFile(os.path.abspath("data/testmovie.mpg")) 
  72         wx
.CallAfter(self
.DoLoadFile
, os
.path
.abspath("data/testmovie.mpg")) 
  74         self
.timer 
= wx
.Timer(self
) 
  75         self
.Bind(wx
.EVT_TIMER
, self
.OnTimer
) 
  80     def OnLoadFile(self
, evt
): 
  81         dlg 
= wx
.FileDialog(self
, message
="Choose a media file", 
  82                             defaultDir
=os
.getcwd(), defaultFile
="", 
  83                             style
=wx
.OPEN | wx
.CHANGE_DIR 
) 
  84         if dlg
.ShowModal() == wx
.ID_OK
: 
  90     def DoLoadFile(self
, path
): 
  91         self
.playBtn
.Disable() 
  93         if not self
.mc
.Load(path
): 
  94             wx
.MessageBox("Unable to load %s: Unsupported format?" % path
, 
  96                           wx
.ICON_ERROR | wx
.OK
) 
  98             self
.mc
.SetBestFittingSize() 
  99             self
.GetSizer().Layout() 
 100             self
.slider
.SetRange(0, self
.mc
.Length()) 
 102     def OnMediaLoaded(self
, evt
): 
 103         self
.playBtn
.Enable() 
 105     def OnPlay(self
, evt
): 
 106         if not self
.mc
.Play(): 
 107             wx
.MessageBox("Unable to Play media : Unsupported format?", 
 109                           wx
.ICON_ERROR | wx
.OK
) 
 111             self
.mc
.SetBestFittingSize() 
 112             self
.GetSizer().Layout() 
 113             self
.slider
.SetRange(0, self
.mc
.Length()) 
 115     def OnPause(self
, evt
): 
 118     def OnStop(self
, evt
): 
 122     def OnSeek(self
, evt
): 
 123         offset 
= self
.slider
.GetValue() 
 126     def OnTimer(self
, evt
): 
 127         offset 
= self
.mc
.Tell() 
 128         self
.slider
.SetValue(offset
) 
 129         self
.st_size
.SetLabel('size: %s' % self
.mc
.GetBestSize()) 
 130         self
.st_len
.SetLabel('length: %d seconds' % (self
.mc
.Length()/1000)) 
 131         self
.st_pos
.SetLabel('position: %d' % offset
) 
 133     def ShutdownDemo(self
): 
 137 #---------------------------------------------------------------------- 
 139 def runTest(frame
, nb
, log
): 
 141         win 
= TestPanel(nb
, log
) 
 143     except NotImplementedError: 
 144         from Main 
import MessagePanel
 
 145         win 
= MessagePanel(nb
, 'wx.MediaCtrl is not available on this platform.', 
 146                            'Sorry', wx
.ICON_WARNING
) 
 150 #---------------------------------------------------------------------- 
 154 overview 
= """<html><body> 
 155 <h2><center>wx.MediaCtrl</center></h2> 
 157 wx.MediaCtrl is a class that allows a way to convieniently display 
 158 various types of media, such as videos, audio files, natively through 
 159 native codecs.  Several different formats of audio and video files are 
 160 supported, but some formats may not be playable on all platforms or 
 161 may require specific codecs to be installed. 
 164 wx.MediaCtrl uses native backends to render media, for example on Windows 
 165 there is a ActiveMovie/DirectShow backend, and on Macintosh there is a  
 168 wx.MediaCtrl is not currently available on unix systems.  
 175 if __name__ 
== '__main__': 
 178     run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])