import wx
import images
-#----------------------------------------------------------------------------
-# A convenient wrapper around wx.TextCtrl to give it a spiffy label.
-class ExtStr(wx.Panel):
- def __init__(self, parent):
- wx.Panel.__init__(self, parent, -1)
- sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Extension'), wx.HORIZONTAL)
- self.ctl = wx.TextCtrl(self, -1, value="wav", style = wx.TE_PROCESS_ENTER )
- sizer.Add(self.ctl, 0, wx.ALL | wx.EXPAND | wx.ALIGN_CENTER, 3)
- self.Enable(True)
+# helper function to make sure we don't convert unicode objects to strings
+# or vice versa when converting lists and None values to text.
+convert = str
+if 'unicode' in wx.PlatformInfo:
+ convert = unicode
- self.SetSizer(sizer)
- sizer.Fit(self)
+#----------------------------------------------------------------------------
- def Enable(self, value):
- self.ctl.Enable(value)
-
- def SetValue(self, value):
- self.ctl.SetValue(value)
-
- def GetValue(self):
- return(self.ctl.GetValue())
-
-
class MimeTypesDemoPanel(wx.Panel):
def __init__(self, parent, log):
wx.Panel.__init__(self, parent, -1)
+ # This will be used for all of the labels that follow (bold label)
+ bfont = wx.Font(
+ self.GetFont().GetPointSize(),
+ self.GetFont().GetFamily(),
+ self.GetFont().GetStyle(),
+ wx.BOLD
+ )
+
# Contains everything
tsizer = wx.BoxSizer(wx.VERTICAL)
# Contains upper controls
usizer = wx.BoxSizer(wx.HORIZONTAL)
- # A little fancy stuff to make things align right.
- self.ext = ExtStr(self)
+ # Text control for ext / type entry plus label.
+ t = wx.StaticText(self, -1, 'Extension / MIME type: ', style = wx.ALIGN_RIGHT )
+ t.SetFont(bfont)
+ usizer.Add(t, 0, wx.ALL | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL, 2)
+
+ self.ext = wx.TextCtrl(self, -1, value="wav", style = wx.TE_PROCESS_ENTER )
usizer.Add(self.ext, 0, wx.ALL | wx.ALIGN_TOP, 4)
- self.ext.Bind(wx.EVT_TEXT_ENTER, self.OnLookup)
+ self.Bind(wx.EVT_TEXT_ENTER, self.OnLookup, self.ext)
# Select how to look it up
- self.how = wx.RadioBox(
- self, -1, "Lookup method", choices=['By extension', 'By MIME type'],
- majorDimension=2, style=wx.RA_SPECIFY_COLS
- )
- usizer.Add(self.how, 0, wx.ALL | wx.ALIGN_TOP, 4)
- self.how.SetSelection(0)
+ self.useExt = wx.RadioButton(self, -1, "By extension", style = wx.RB_GROUP)
+ self.useMime = wx.RadioButton(self, -1, "By MIME type")
+
+ usizer.Add(self.useExt, 0, wx.ALL | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL, 4)
+ usizer.Add(self.useMime, 0, wx.ALL | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL, 4)
+ self.useExt.SetValue(1)
# Trigger a lookup (hitting ENTER in the text ctrl will do the same thing)
self.go = wx.Button(self, -1, "Go get it!")
- usizer.Add(self.go, 0, wx.ALL | wx.ALIGN_CENTER, 4)
+ usizer.Add(self.go, 0, wx.ALL | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL, 4)
self.Bind(wx.EVT_BUTTON, self.OnLookup, self.go)
# StaticBox with larger label than usual
llsizer = wx.GridBagSizer(2, 2)
llsizer.AddGrowableCol(2)
- # This will be used for all of the labels that follow (bold label)
- bfont = wx.Font(
- self.GetFont().GetPointSize(),
- self.GetFont().GetFamily(),
- self.GetFont().GetStyle(),
- wx.BOLD
- )
-
#------- Icon info
t = wx.StaticText(self, -1, 'GetIconInfo: ', style = wx.ALIGN_RIGHT )
llsizer.Add(t, (0, 0), (1, 1), wx.ALL | wx.EXPAND | wx.ALIGN_CENTER, 2)
self.icon = wx.StaticBitmap(self, -1, images.getNoIconBitmap())
- llsizer.Add(self.icon, (0, 1), (1, 1), wx.ALL | wx.EXPAND | wx.ALIGN_CENTER, 2)
+ llsizer.Add(self.icon, (0, 1), (1, 1), wx.ALL | wx.ALIGN_CENTER, 2)
- self.iconsource = wx.TextCtrl(self, -1, value="", style = wx.TE_READONLY )
- llsizer.Add(self.iconsource, (0, 2), (1, 1), wx.ALL | wx.EXPAND | wx.ALIGN_CENTER, 2)
+ self.iconsource = wx.TextCtrl(self, -1, value="", size=(125, -1), style = wx.TE_READONLY )
+ llsizer.Add(self.iconsource, (0, 2), (1, 1), wx.ALL | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 2)
- self.iconoffset = wx.TextCtrl(self, -1, value="", style = wx.TE_READONLY )
- llsizer.Add(self.iconoffset, (0, 3), (1, 1), wx.ALL | wx.EXPAND | wx.ALIGN_CENTER, 2)
+ self.iconoffset = wx.TextCtrl(self, -1, value="", size=(25,-1), style = wx.TE_READONLY )
+ llsizer.Add(self.iconoffset, (0, 3), (1, 1), wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2)
#------- MIME Type
#----------------------------------------------------------------------------
- lrsizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Known MIME types'), wx.HORIZONTAL)
+ lrsizer = wx.BoxSizer(wx.VERTICAL)
#------- List box with known MIME types
+
+ t = wx.StaticText(self, -1, 'Known MIME types')
+ t.SetFont(bfont)
+ lrsizer.Add(t, 0, wx.ALL | wx.EXPAND | wx.ALIGN_CENTER, 4)
+
self.mimelist = wx.ListBox(self, -1, choices=[], style = wx.LB_SINGLE | wx.LB_SORT)
- lrsizer.Add(self.mimelist, 0, wx.ALL | wx.EXPAND | wx.ALIGN_CENTER, 4)
+ lrsizer.Add(self.mimelist, 1, wx.ALL | wx.EXPAND | wx.ALIGN_CENTER | wx.FIXED_MINSIZE, 4)
self.Bind(wx.EVT_LISTBOX, self.OnListbox, self.mimelist)
#----------------------------------------------------------------------------
tsizer.Fit(self)
# Populate the Known MIME types list with what is in the database
- mtypes = wx.TheMimeTypesManager.EnumAllFileTypes()
+ try:
+ mtypes = wx.TheMimeTypesManager.EnumAllFileTypes()
+ except wx.PyAssertionError:
+ mtypes = []
+
+ # TODO: On wxMac, EnumAllFileTypes produces tons of dupes, which
+ # causes quirky behavior because the list control doesn't expect
+ # dupes, and simply wastes space. So remove the dupes for now,
+ # then remove this hack when we fix EnumAllFileTypes on Mac.
+ mimes = []
for mt in mtypes:
- self.mimelist.Append(mt)
+ if mt not in mimes:
+ self.mimelist.Append(mt)
+ mimes.append(mt)
# Do a lookup of *.wav for a starting position
self.OnLookup()
def OnListbox(self, event):
mimetype = event.GetString()
self.ext.SetValue(mimetype)
- self.how.SetSelection(1)
+ self.useMime.SetValue(1)
self.OnLookup()
# Look up a given file extension or MIME type.
txt = self.ext.GetValue()
# For MIME lookups
- if self.how.GetSelection() == 1:
+ if self.useMime.GetValue() == 1:
fileType = wx.TheMimeTypesManager.GetFileTypeFromMimeType(txt)
msg = "Mime type"
# Select the entered value in the list
if fileType:
- if self.mimelist.FindString(str(fileType.GetMimeType())) != -1:
+ if self.mimelist.FindString(convert(fileType.GetMimeType())) != -1:
# Using CallAfter to ensure that GUI is ready before trying to
# select it (otherwise, it's selected but not visible)
- wx.CallAfter(self.mimelist.SetSelection, self.mimelist.FindString(str(fileType.GetMimeType())))
+ wx.CallAfter(self.mimelist.SetSelection, self.mimelist.FindString(convert(fileType.GetMimeType())))
if fileType is None:
bmp = images.getNoIconBitmap()
self.icon.SetBitmap(bmp)
self.iconsource.SetValue(file)
- self.iconoffset.SetValue(str(idx))
+ self.iconoffset.SetValue(convert(idx))
#------- MIME type
- self.mimetype.SetValue(str(ft.GetMimeType()))
+ self.mimetype.SetValue(convert(ft.GetMimeType()))
#------- MIME types
- self.mimetypes.SetValue(str(ft.GetMimeTypes()))
+ self.mimetypes.SetValue(convert(ft.GetMimeTypes()))
#------- Associated extensions
- self.extensions.SetValue(str(ft.GetExtensions()))
+ self.extensions.SetValue(convert(ft.GetExtensions()))
#------- Description of file type
- self.description.SetValue(str(ft.GetDescription()))
+ self.description.SetValue(convert(ft.GetDescription()))
#------- Prep a fake command line command
extList = ft.GetExtensions()
if extList:
ext = extList[0]
- if ext[0] == ".": ext = ext[1:]
+ if len(ext) > 0 and ext[0] == ".": ext = ext[1:]
else:
ext = ""
#------- OPEN command
cmd = ft.GetOpenCommand(filename, mime)
- self.opencommand.SetValue(str(cmd))
+ self.opencommand.SetValue(convert(cmd))
#------- PRINT command
cmd = ft.GetPrintCommand(filename, mime)
- self.printcommand.SetValue(str(cmd))
+ self.printcommand.SetValue(convert(cmd))
#------- All commands
all = ft.GetAllCommands(filename, mime)
if __name__ == '__main__':
import sys,os
import run
- run.main(['', os.path.basename(sys.argv[0])])
+ run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])