]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/MimeTypesManager.py
1 #----------------------------------------------------------------------
2 # Name: wxMimeTypesManager
3 # Purpose: Demonstrate use of wx.MimeTypesManager, wx.FileType
5 # Author: Jeff Grimmett (grimmtoo@softhome.net), adapted from original
11 # Licence: wxWindows license
12 #----------------------------------------------------------------------
20 #----------------------------------------------------------------------------
22 class MimeTypesDemoPanel(wx
.Panel
):
23 def __init__(self
, parent
, log
):
27 wx
.Panel
.__init
__(self
, parent
, -1)
29 # This will be used for all of the labels that follow (bold label)
31 self
.GetFont().GetPointSize(),
32 self
.GetFont().GetFamily(),
33 self
.GetFont().GetStyle(),
38 tsizer
= wx
.BoxSizer(wx
.VERTICAL
)
40 # Contains upper controls
41 usizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
43 # Text control for ext / type entry plus label.
44 t
= wx
.StaticText(self
, -1, 'Extension / MIME type: ', style
= wx
.ALIGN_RIGHT
)
46 usizer
.Add(t
, 0, wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER | wx
.ALIGN_CENTER_VERTICAL
, 2)
48 self
.ext
= wx
.TextCtrl(self
, -1, value
="wav", style
= wx
.TE_PROCESS_ENTER
)
49 usizer
.Add(self
.ext
, 0, wx
.ALL | wx
.ALIGN_TOP
, 4)
50 self
.Bind(wx
.EVT_TEXT_ENTER
, self
.OnLookup
, self
.ext
)
52 # Select how to look it up
53 self
.useExt
= wx
.RadioButton(self
, -1, "By extension", style
= wx
.RB_GROUP
)
54 self
.useMime
= wx
.RadioButton(self
, -1, "By MIME type")
56 usizer
.Add(self
.useExt
, 0, wx
.ALL | wx
.ALIGN_CENTER | wx
.ALIGN_CENTER_VERTICAL
, 4)
57 usizer
.Add(self
.useMime
, 0, wx
.ALL | wx
.ALIGN_CENTER | wx
.ALIGN_CENTER_VERTICAL
, 4)
58 self
.useExt
.SetValue(1)
60 # Trigger a lookup (hitting ENTER in the text ctrl will do the same thing)
61 self
.go
= wx
.Button(self
, -1, "Go get it!")
62 usizer
.Add(self
.go
, 0, wx
.ALL | wx
.ALIGN_CENTER | wx
.ALIGN_CENTER_VERTICAL
, 4)
63 self
.Bind(wx
.EVT_BUTTON
, self
.OnLookup
, self
.go
)
65 # StaticBox with larger label than usual
66 lbox
= wx
.StaticBox(self
, -1, 'wx.FileType')
69 self
.GetFont().GetPointSize() * 2,
70 self
.GetFont().GetFamily(),
71 self
.GetFont().GetStyle(),
75 lsizer
= wx
.StaticBoxSizer(lbox
, wx
.HORIZONTAL
)
77 # Contains the wx.FileType info
78 llsizer
= wx
.GridBagSizer(2, 2)
79 llsizer
.AddGrowableCol(2)
83 t
= wx
.StaticText(self
, -1, 'GetIconInfo: ', style
= wx
.ALIGN_RIGHT
)
85 llsizer
.Add(t
, (0, 0), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
87 self
.icon
= wx
.StaticBitmap(self
, -1, images
.getNoIconBitmap())
88 llsizer
.Add(self
.icon
, (0, 1), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
90 self
.iconsource
= wx
.TextCtrl(self
, -1, value
="", style
= wx
.TE_READONLY
)
91 llsizer
.Add(self
.iconsource
, (0, 2), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
93 self
.iconoffset
= wx
.TextCtrl(self
, -1, value
="", style
= wx
.TE_READONLY
)
94 llsizer
.Add(self
.iconoffset
, (0, 3), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
98 t
= wx
.StaticText(self
, -1, 'GetMimeType: ', style
= wx
.ALIGN_RIGHT
)
100 llsizer
.Add(t
, (1, 0), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
102 self
.mimetype
= wx
.TextCtrl(self
, -1, value
="", style
= wx
.TE_READONLY
)
103 llsizer
.Add(self
.mimetype
, (1, 1), (1, 3), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
107 t
= wx
.StaticText(self
, -1, 'GetMimeTypes: ', style
= wx
.ALIGN_RIGHT
)
109 llsizer
.Add(t
, (2, 0), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
111 self
.mimetypes
= wx
.TextCtrl(self
, -1, value
="", style
= wx
.TE_READONLY
)
112 llsizer
.Add(self
.mimetypes
, (2, 1), (1, 3), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
116 t
= wx
.StaticText(self
, -1, 'GetExtensions: ', style
= wx
.ALIGN_RIGHT
)
118 llsizer
.Add(t
, (3, 0), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
120 self
.extensions
= wx
.TextCtrl(self
, -1, value
="", style
= wx
.TE_READONLY
)
121 llsizer
.Add(self
.extensions
, (3, 1), (1, 3), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
125 t
= wx
.StaticText(self
, -1, 'GetDescription: ', style
= wx
.ALIGN_RIGHT
)
127 llsizer
.Add(t
, (4, 0), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
129 self
.description
= wx
.TextCtrl(self
, -1, value
="", style
= wx
.TE_READONLY
)
130 llsizer
.Add(self
.description
, (4, 1), (1, 3), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
132 #------- Open command
134 t
= wx
.StaticText(self
, -1, 'GetOpenCommand: ', style
= wx
.ALIGN_RIGHT
)
136 llsizer
.Add(t
, (5, 0), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
138 self
.opencommand
= wx
.TextCtrl(self
, -1, value
="", style
= wx
.TE_READONLY
)
139 llsizer
.Add(self
.opencommand
, (5, 1), (1, 3), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
141 #------- Print command
143 t
= wx
.StaticText(self
, -1, 'GetPrintCommand: ', style
= wx
.ALIGN_RIGHT
)
145 llsizer
.Add(t
, (6, 0), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
147 self
.printcommand
= wx
.TextCtrl(self
, -1, value
="", style
= wx
.TE_READONLY
)
148 llsizer
.Add(self
.printcommand
, (6, 1), (1, 3), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
150 #------- All commands
152 t
= wx
.StaticText(self
, -1, 'GetAllCommands: ', style
= wx
.ALIGN_RIGHT
)
154 llsizer
.Add(t
, (7, 0), (1, 1), wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 2)
156 self
.allcommands
= wx
.TextCtrl(self
, -1, value
="", style
= wx
.TE_READONLY | wx
.TE_DONTWRAP | wx
.TE_MULTILINE
)
158 # Set the default height to be smaller than normal (for
159 # multi-line) so the sizer can then expand it to whatever
161 self
.allcommands
.SetSize((-1, 20))
163 llsizer
.Add(self
.allcommands
, (7, 1), (1, 3), wx
.ALL | wx
.GROW | wx
.ALIGN_CENTER
, 2)
165 # Tell the sizer to expand this row as needed
166 llsizer
.AddGrowableRow(7)
168 #----------------------------------------------------------------------------
170 lrsizer
= wx
.BoxSizer(wx
.VERTICAL
)
172 #------- List box with known MIME types
174 t
= wx
.StaticText(self
, -1, 'Known MIME types')
176 lrsizer
.Add(t
, 0, wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 4)
178 self
.mimelist
= wx
.ListBox(self
, -1, choices
=[], style
= wx
.LB_SINGLE | wx
.LB_SORT
)
179 lrsizer
.Add(self
.mimelist
, 1, wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 4)
180 self
.Bind(wx
.EVT_LISTBOX
, self
.OnListbox
, self
.mimelist
)
182 #----------------------------------------------------------------------------
184 lsizer
.Add(llsizer
, 1, wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 4)
185 lsizer
.Add(lrsizer
, 0, wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 4)
187 #----------------------------------------------------------------------------
189 tsizer
.Add(usizer
, 0, wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 4)
190 tsizer
.Add(lsizer
, 1, wx
.ALL | wx
.EXPAND | wx
.ALIGN_CENTER
, 4)
192 #----------------------------------------------------------------------------
194 self
.SetSizer(tsizer
)
197 # Populate the Known MIME types list with what is in the database
198 mtypes
= wx
.TheMimeTypesManager
.EnumAllFileTypes()
200 self
.mimelist
.Append(mt
)
202 # Do a lookup of *.wav for a starting position
205 # Grab the selection from the listbox, push that into
206 # the text box at top, select 'MIME', and then look it up.
207 def OnListbox(self
, event
):
208 mimetype
= event
.GetString()
209 self
.ext
.SetValue(mimetype
)
210 self
.useMime
.SetValue(1)
213 # Look up a given file extension or MIME type.
214 def OnLookup(self
, event
=None):
215 txt
= self
.ext
.GetValue()
218 if self
.useMime
.GetValue() == 1:
219 fileType
= wx
.TheMimeTypesManager
.GetFileTypeFromMimeType(txt
)
222 # Select the entered value in the list
224 if self
.mimelist
.FindString(txt
) != -1:
225 self
.mimelist
.SetSelection(self
.mimelist
.FindString(txt
))
227 # Must be an extension lookup
229 fileType
= wx
.TheMimeTypesManager
.GetFileTypeFromExtension(txt
)
230 msg
= "File extension"
232 # Select the entered value in the list
234 if self
.mimelist
.FindString(str(fileType
.GetMimeType())) != -1:
235 # Using CallAfter to ensure that GUI is ready before trying to
236 # select it (otherwise, it's selected but not visible)
237 wx
.CallAfter(self
.mimelist
.SetSelection
, self
.mimelist
.FindString(str(fileType
.GetMimeType())))
241 wx
.MessageBox(msg
+ " not found.", "Oops!")
243 self
.Update(fileType
)
245 # Populate the wx.FileType fields with actual values.
246 def Update(self
, ft
):
249 info
= ft
.GetIconInfo()
252 bmp
= images
.getNoIconBitmap()
253 self
.icon
.SetBitmap(bmp
)
254 self
.iconsource
.SetValue("")
255 self
.iconoffset
.SetValue("")
257 icon
, file, idx
= info
259 self
.icon
.SetIcon(icon
)
261 bmp
= images
.getNoIconBitmap()
262 self
.icon
.SetBitmap(bmp
)
263 self
.iconsource
.SetValue(file)
264 self
.iconoffset
.SetValue(str(idx
))
267 self
.mimetype
.SetValue(str(ft
.GetMimeType()))
269 self
.mimetypes
.SetValue(str(ft
.GetMimeTypes()))
270 #------- Associated extensions
271 self
.extensions
.SetValue(str(ft
.GetExtensions()))
272 #------- Description of file type
273 self
.description
.SetValue(str(ft
.GetDescription()))
275 #------- Prep a fake command line command
276 extList
= ft
.GetExtensions()
280 if ext
[0] == ".": ext
= ext
[1:]
284 filename
= "SPAM" + "." + ext
285 mime
= ft
.GetMimeType() or ""
287 #------- OPEN command
288 cmd
= ft
.GetOpenCommand(filename
, mime
)
289 self
.opencommand
.SetValue(str(cmd
))
291 #------- PRINT command
292 cmd
= ft
.GetPrintCommand(filename
, mime
)
293 self
.printcommand
.SetValue(str(cmd
))
295 #------- All commands
296 all
= ft
.GetAllCommands(filename
, mime
)
299 self
.allcommands
.SetValue("")
301 verbs
, commands
= all
302 text
= pprint
.pformat(map(None, verbs
, commands
))
303 self
.allcommands
.SetValue(text
)
306 #----------------------------------------------------------------------
308 def runTest(frame
, nb
, log
):
309 win
= MimeTypesDemoPanel(nb
, log
)
312 #----------------------------------------------------------------------
316 The <b>wx.MimeTypesManager</b> class allows the application to retrieve the
317 information about all known MIME types from a system-specific location and the
318 filename extensions to the MIME types and vice versa. After initialization the
319 methods <b>GetFileTypeFromMimeType()</b> and <b>GetFileTypeFromExtension()</b>
320 may be called: they will return a <b>wx.FileType</b> object which may be further
321 queried for file description, icon and other attributes.
323 A global instance of <b>wx.MimeTypesManager</b> is always available as
324 <b>wx.TheMimeTypesManager</b>. It is recommended to use this instance instead
325 of creating your own because gathering MIME information may take quite a long
328 This demo shows how to use wx.TheMimeTypesManager to list all known MIME types
329 and retrieve that information as a wx.FileType from either an extension or
332 For further information please consult the wxWindows documentation for
333 <b>wx.MimeTypesManager</b> and <b>wx.FileType</b>.
337 #----------------------------------------------------------------------
339 if __name__
== '__main__':
342 run
.main(['', os
.path
.basename(sys
.argv
[0])])