]> git.saurik.com Git - wxWidgets.git/blame_incremental - wxPython/demo/MediaCtrl.py
Warning fixes and source cleaning.
[wxWidgets.git] / wxPython / demo / MediaCtrl.py
... / ...
CommitLineData
1
2import wx
3import wx.media
4import os
5
6#----------------------------------------------------------------------
7
8class StaticText(wx.StaticText):
9 """
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.
13 """
14 def SetLabel(self, label):
15 if label <> self.GetLabel():
16 wx.StaticText.SetLabel(self, label)
17
18#----------------------------------------------------------------------
19
20class TestPanel(wx.Panel):
21 def __init__(self, parent, log):
22 self.log = log
23 wx.Panel.__init__(self, parent, -1,
24 style=wx.TAB_TRAVERSAL|wx.CLIP_CHILDREN)
25
26 # Create some controls
27 try:
28 self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER,
29 #szBackend=wx.media.MEDIABACKEND_DIRECTSHOW
30 #szBackend=wx.media.MEDIABACKEND_QUICKTIME
31 #szBackend=wx.media.MEDIABACKEND_WMP10
32 )
33 except NotImplementedError:
34 self.Destroy()
35 raise
36
37 self.Bind(wx.media.EVT_MEDIA_LOADED, self.OnMediaLoaded)
38
39 btn1 = wx.Button(self, -1, "Load File")
40 self.Bind(wx.EVT_BUTTON, self.OnLoadFile, btn1)
41
42 btn2 = wx.Button(self, -1, "Play")
43 self.Bind(wx.EVT_BUTTON, self.OnPlay, btn2)
44 self.playBtn = btn2
45
46 btn3 = wx.Button(self, -1, "Pause")
47 self.Bind(wx.EVT_BUTTON, self.OnPause, btn3)
48
49 btn4 = wx.Button(self, -1, "Stop")
50 self.Bind(wx.EVT_BUTTON, self.OnStop, btn4)
51
52 slider = wx.Slider(self, -1, 0, 0, 0)
53 self.slider = slider
54 slider.SetMinSize((150, -1))
55 self.Bind(wx.EVT_SLIDER, self.OnSeek, slider)
56
57 self.st_size = StaticText(self, -1, size=(100,-1))
58 self.st_len = StaticText(self, -1, size=(100,-1))
59 self.st_pos = StaticText(self, -1, size=(100,-1))
60
61
62 # setup the layout
63 sizer = wx.GridBagSizer(5,5)
64 sizer.Add(self.mc, (1,1), span=(5,1))#, flag=wx.EXPAND)
65 sizer.Add(btn1, (1,3))
66 sizer.Add(btn2, (2,3))
67 sizer.Add(btn3, (3,3))
68 sizer.Add(btn4, (4,3))
69 sizer.Add(slider, (6,1), flag=wx.EXPAND)
70 sizer.Add(self.st_size, (1, 5))
71 sizer.Add(self.st_len, (2, 5))
72 sizer.Add(self.st_pos, (3, 5))
73 self.SetSizer(sizer)
74
75 #self.DoLoadFile(os.path.abspath("data/testmovie.mpg"))
76 wx.CallAfter(self.DoLoadFile, os.path.abspath("data/testmovie.mpg"))
77
78 self.timer = wx.Timer(self)
79 self.Bind(wx.EVT_TIMER, self.OnTimer)
80 self.timer.Start(100)
81
82
83
84 def OnLoadFile(self, evt):
85 dlg = wx.FileDialog(self, message="Choose a media file",
86 defaultDir=os.getcwd(), defaultFile="",
87 style=wx.OPEN | wx.CHANGE_DIR )
88 if dlg.ShowModal() == wx.ID_OK:
89 path = dlg.GetPath()
90 self.DoLoadFile(path)
91 dlg.Destroy()
92
93
94 def DoLoadFile(self, path):
95 self.playBtn.Disable()
96 #noLog = wx.LogNull()
97 if not self.mc.Load(path):
98 wx.MessageBox("Unable to load %s: Unsupported format?" % path,
99 "ERROR",
100 wx.ICON_ERROR | wx.OK)
101 else:
102 self.mc.SetInitialSize()
103 self.GetSizer().Layout()
104 self.slider.SetRange(0, self.mc.Length())
105
106 def OnMediaLoaded(self, evt):
107 self.playBtn.Enable()
108
109 def OnPlay(self, evt):
110 if not self.mc.Play():
111 wx.MessageBox("Unable to Play media : Unsupported format?",
112 "ERROR",
113 wx.ICON_ERROR | wx.OK)
114 else:
115 self.mc.SetInitialSize()
116 self.GetSizer().Layout()
117 self.slider.SetRange(0, self.mc.Length())
118
119 def OnPause(self, evt):
120 self.mc.Pause()
121
122 def OnStop(self, evt):
123 self.mc.Stop()
124
125
126 def OnSeek(self, evt):
127 offset = self.slider.GetValue()
128 self.mc.Seek(offset)
129
130 def OnTimer(self, evt):
131 offset = self.mc.Tell()
132 self.slider.SetValue(offset)
133 self.st_size.SetLabel('size: %s' % self.mc.GetBestSize())
134 self.st_len.SetLabel('length: %d seconds' % (self.mc.Length()/1000))
135 self.st_pos.SetLabel('position: %d' % offset)
136
137 def ShutdownDemo(self):
138 self.timer.Stop()
139 del self.timer
140
141#----------------------------------------------------------------------
142
143def runTest(frame, nb, log):
144 try:
145 win = TestPanel(nb, log)
146 return win
147 except NotImplementedError:
148 from Main import MessagePanel
149 win = MessagePanel(nb, 'wx.MediaCtrl is not available on this platform.',
150 'Sorry', wx.ICON_WARNING)
151 return win
152
153
154#----------------------------------------------------------------------
155
156
157
158overview = """<html><body>
159<h2><center>wx.MediaCtrl</center></h2>
160
161wx.MediaCtrl is a class that allows a way to convieniently display
162various types of media, such as videos, audio files, natively through
163native codecs. Several different formats of audio and video files are
164supported, but some formats may not be playable on all platforms or
165may require specific codecs to be installed.
166
167<p>
168wx.MediaCtrl uses native backends to render media, for example on Windows
169there is a ActiveMovie/DirectShow backend, and on Macintosh there is a
170QuickTime backend.
171<p>
172wx.MediaCtrl is not currently available on unix systems.
173
174</body></html>
175"""
176
177
178
179if __name__ == '__main__':
180 import sys,os
181 import run
182 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])