X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/299647acac7960652aadb008775429c1f8ea9b8d..f5766910b6731eb03e82371416e9778203396ce7:/wxPython/demo/MimeTypesManager.py diff --git a/wxPython/demo/MimeTypesManager.py b/wxPython/demo/MimeTypesManager.py index b3c6b970a6..7d3f1e9520 100644 --- a/wxPython/demo/MimeTypesManager.py +++ b/wxPython/demo/MimeTypesManager.py @@ -17,30 +17,15 @@ import pprint 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): @@ -48,28 +33,40 @@ class MimeTypesDemoPanel(wx.Panel): 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 @@ -88,14 +85,6 @@ class MimeTypesDemoPanel(wx.Panel): 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 ) @@ -103,13 +92,13 @@ class MimeTypesDemoPanel(wx.Panel): 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 @@ -185,11 +174,16 @@ class MimeTypesDemoPanel(wx.Panel): #---------------------------------------------------------------------------- - 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) #---------------------------------------------------------------------------- @@ -208,9 +202,20 @@ class MimeTypesDemoPanel(wx.Panel): 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() @@ -220,7 +225,7 @@ class MimeTypesDemoPanel(wx.Panel): 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. @@ -228,7 +233,7 @@ class MimeTypesDemoPanel(wx.Panel): 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" @@ -244,10 +249,10 @@ class MimeTypesDemoPanel(wx.Panel): # 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: @@ -274,23 +279,23 @@ class MimeTypesDemoPanel(wx.Panel): 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 = "" @@ -299,11 +304,11 @@ class MimeTypesDemoPanel(wx.Panel): #------- 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) @@ -352,4 +357,4 @@ For further information please consult the wxWindows documentation for 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:])