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