# Copyright: (c) 2000 by Total Control Software
# Licence: wxWindows license
#----------------------------------------------------------------------
+# 12/02/2003 - Jeff Grimmett (grimmtooth@softhome.net)
+#
+# o 2.5 Compatability changes
+#
+
+import os
+import types
-from wxPython.wx import *
-import os, types
+import wx
#----------------------------------------------------------------------
-class FileBrowseButton(wxPanel):
- """ A control to allow the user to type in a filename
- or browse with the standard file dialog to select file
-
- __init__ (
- parent, id, pos, size -- passed directly to wxPanel initialisation
- style = wxTAB_TRAVERSAL -- passed directly to wxPanel initialisation
- labelText -- Text for label to left of text field
- buttonText -- Text for button which launches the file dialog
- toolTip -- Help text
- dialogTitle -- Title used in file dialog
- startDirectory -- Default directory for file dialog startup
- fileMask -- File mask (glob pattern, such as *.*) to use in file dialog
- fileMode -- wxOPEN or wxSAVE, indicates type of file dialog to use
- changeCallback -- callback receives all > > changes in value of control
- )
- GetValue() -- retrieve current value of text control
- SetValue(string) -- set current value of text control
- label -- pointer to internal label widget
- textControl -- pointer to internal text control
- browseButton -- pointer to button
+class FileBrowseButton(wx.Panel):
+ """
+ A control to allow the user to type in a filename or browse with
+ the standard file dialog to select file
"""
def __init__ (self, parent, id= -1,
- pos = wxDefaultPosition, size = wxDefaultSize,
- style = wxTAB_TRAVERSAL,
- labelText= "File Entry:",
- buttonText= "Browse",
- toolTip= "Type filename or click browse to choose file",
- # following are the values for a file dialog box
- dialogTitle = "Choose a file",
- startDirectory = ".",
- initialValue = "",
- fileMask = "*.*",
- fileMode = wxOPEN,
- # callback for when value changes (optional)
- changeCallback= lambda x:x
+ pos = wx.DefaultPosition,
+ size = wx.DefaultSize,
+ style = wx.TAB_TRAVERSAL,
+ labelText= "File Entry:",
+ buttonText= "Browse",
+ toolTip= "Type filename or click browse to choose file",
+ # following are the values for a file dialog box
+ dialogTitle = "Choose a file",
+ startDirectory = ".",
+ initialValue = "",
+ fileMask = "*.*",
+ fileMode = wx.OPEN,
+ # callback for when value changes (optional)
+ changeCallback= lambda x:x
):
+ """
+ :param labelText: Text for label to left of text field
+ :param buttonText: Text for button which launches the file dialog
+ :param toolTip: Help text
+ :param dialogTitle: Title used in file dialog
+ :param startDirectory: Default directory for file dialog startup
+ :param fileMask: File mask (glob pattern, such as *.*) to use in file dialog
+ :param fileMode: wx.OPEN or wx.SAVE, indicates type of file dialog to use
+ :param changeCallback: Optional callback called for all changes in value of the control
+ """
+
# store variables
self.labelText = labelText
self.buttonText = buttonText
self.callCallback = True
- # get background to match it
- try:
- self._bc = parent.GetBackgroundColour()
- except:
- pass
-
# create the dialog
self.createDialog(parent, id, pos, size, style )
# Setting a value causes the changeCallback to be called.
def createDialog( self, parent, id, pos, size, style ):
"""Setup the graphic representation of the dialog"""
- wxPanel.__init__ (self, parent, id, pos, size, style)
- # try to set the background colour
- try:
- self.SetBackgroundColour(self._bc)
- except:
- pass
- box = wxBoxSizer(wxHORIZONTAL)
+ wx.Panel.__init__ (self, parent, id, pos, size, style)
+ self.SetMinSize(size) # play nice with sizers
+
+ box = wx.BoxSizer(wx.HORIZONTAL)
self.label = self.createLabel( )
- box.Add( self.label, 0, wxCENTER )
+ box.Add( self.label, 0, wx.CENTER )
self.textControl = self.createTextControl()
- box.Add( self.textControl, 1, wxLEFT|wxCENTER, 5)
+ box.Add( self.textControl, 1, wx.LEFT|wx.CENTER, 5)
self.browseButton = self.createBrowseButton()
- box.Add( self.browseButton, 0, wxLEFT|wxCENTER, 5)
+ box.Add( self.browseButton, 0, wx.LEFT|wx.CENTER, 5)
# add a border around the whole thing and resize the panel to fit
- outsidebox = wxBoxSizer(wxVERTICAL)
- outsidebox.Add(box, 1, wxEXPAND|wxALL, 3)
+ outsidebox = wx.BoxSizer(wx.VERTICAL)
+ outsidebox.Add(box, 1, wx.EXPAND|wx.ALL, 3)
outsidebox.Fit(self)
self.SetAutoLayout(True)
self.SetSizer( outsidebox )
self.Layout()
if type( size ) == types.TupleType:
- size = apply( wxSize, size)
- self.SetDimensions(-1, -1, size.width, size.height, wxSIZE_USE_EXISTING)
+ size = apply( wx.Size, size)
+ self.SetDimensions(-1, -1, size.width, size.height, wx.SIZE_USE_EXISTING)
# if size.width != -1 or size.height != -1:
# self.SetSize(size)
def SetBackgroundColour(self,color):
- wxPanel.SetBackgroundColour(self,color)
+ wx.Panel.SetBackgroundColour(self,color)
self.label.SetBackgroundColour(color)
def createLabel( self ):
"""Create the label/caption"""
- label = wxStaticText(self, -1, self.labelText, style =wxALIGN_RIGHT )
+ label = wx.StaticText(self, -1, self.labelText, style =wx.ALIGN_RIGHT )
font = label.GetFont()
w, h, d, e = self.GetFullTextExtent(self.labelText, font)
- label.SetSize(wxSize(w+5, h))
+ label.SetSize((w+5, h))
return label
def createTextControl( self):
"""Create the text control"""
- ID = wxNewId()
- textControl = wxTextCtrl(self, ID)
+ textControl = wx.TextCtrl(self, -1)
textControl.SetToolTipString( self.toolTip )
if self.changeCallback:
- EVT_TEXT(textControl, ID, self.OnChanged)
- EVT_COMBOBOX(textControl, ID, self.OnChanged)
+ textControl.Bind(wx.EVT_TEXT, self.OnChanged)
+ textControl.Bind(wx.EVT_COMBOBOX, self.OnChanged)
return textControl
def OnChanged(self, evt):
def createBrowseButton( self):
"""Create the browse-button control"""
- ID = wxNewId()
- button =wxButton(self, ID, self.buttonText)
+ button =wx.Button(self, -1, self.buttonText)
button.SetToolTipString( self.toolTip )
- EVT_BUTTON(button, ID, self.OnBrowse)
+ button.Bind(wx.EVT_BUTTON, self.OnBrowse)
return button
directory = directory [0]
else:
directory = self.startDirectory
- dlg = wxFileDialog(self, self.dialogTitle, directory, current, self.fileMask, self.fileMode)
+ dlg = wx.FileDialog(self, self.dialogTitle, directory, current,
+ self.fileMask, self.fileMode)
- if dlg.ShowModal() == wxID_OK:
+ if dlg.ShowModal() == wx.ID_OK:
self.SetValue(dlg.GetPath())
dlg.Destroy()
def GetValue (self):
- """ Convenient access to text control value """
+ """
+ retrieve current value of text control
+ """
return self.textControl.GetValue()
def SetValue (self, value, callBack=1):
- """ Convenient setting of text control value """
+ """set current value of text control"""
save = self.callCallback
self.callCallback = callBack
self.textControl.SetValue(value)
class FileBrowseButtonWithHistory( FileBrowseButton ):
- """ with following additions:
+ """
+ with following additions:
__init__(..., history=None)
history -- optional list of paths for initial history drop-down
(must be passed by name, not a positional argument)
If history is callable it will must return a list used
for the history drop-down
+
changeCallback -- as for FileBrowseButton, but with a work-around
- for win32 systems which don't appear to create EVT_COMBOBOX
+ for win32 systems which don't appear to create wx.EVT_COMBOBOX
events properly. There is a (slight) chance that this work-around
will cause some systems to create two events for each Combobox
selection. If you discover this condition, please report it!
+
As for a FileBrowseButton.__init__ otherwise.
+
GetHistoryControl()
Return reference to the control which implements interfaces
required for manipulating the history list. See GetHistoryControl
documentation for description of what that interface is.
+
GetHistory()
Return current history list
+
SetHistory( value=(), selectionIndex = None )
Set current history list, if selectionIndex is not None, select that index
+
"""
def __init__( self, *arguments, **namedarguments):
self.history = namedarguments.get( "history" )
def createTextControl( self):
"""Create the text control"""
- ID = wxNewId()
- textControl = wxComboBox(self, ID, style = wxCB_DROPDOWN )
+ textControl = wx.ComboBox(self, -1, style = wx.CB_DROPDOWN )
textControl.SetToolTipString( self.toolTip )
- EVT_SET_FOCUS(textControl, self.OnSetFocus)
+ textControl.Bind(wx.EVT_SET_FOCUS, self.OnSetFocus)
if self.changeCallback:
- EVT_TEXT(textControl, ID, self.changeCallback)
- EVT_COMBOBOX(textControl, ID, self.changeCallback)
+ textControl.Bind(wx.EVT_TEXT, self.changeCallback)
+ textControl.Bind(wx.EVT_COMBOBOX, self.changeCallback)
if self.history:
history=self.history
self.history=None
def GetHistoryControl( self ):
- """Return a pointer to the control which provides (at least)
- the following methods for manipulating the history list.:
+ """
+ Return a pointer to the control which provides (at least)
+ the following methods for manipulating the history list:
+
Append( item ) -- add item
Clear() -- clear all items
Delete( index ) -- 0-based index to delete from list
SetSelection( index ) -- 0-based index to select in list
+
Semantics of the methods follow those for the wxComboBox control
"""
return self.textControl
"""Return the current history list"""
if self.historyCallBack != None:
return self.historyCallBack()
- else:
+ elif self.history:
return list( self.history )
+ else:
+ return []
def OnSetFocus(self, event):
event.Skip()
- if wxPlatform == "__WXMSW__":
+ if wx.Platform == "__WXMSW__":
def SetValue (self, value, callBack=1):
""" Convenient setting of text control value, works
- around limitation of wxComboBox """
+ around limitation of wx.ComboBox """
save = self.callCallback
self.callCallback = callBack
self.textControl.SetValue(value)
class DirBrowseButton(FileBrowseButton):
def __init__(self, parent, id = -1,
- pos = wxDefaultPosition, size = wxDefaultSize,
- style = wxTAB_TRAVERSAL,
+ pos = wx.DefaultPosition, size = wx.DefaultSize,
+ style = wx.TAB_TRAVERSAL,
labelText = 'Select a directory:',
buttonText = 'Browse',
toolTip = 'Type directory name or browse to select',
dialogTitle = '',
startDirectory = '.',
changeCallback = None,
- dialogClass = wxDirDialog):
+ dialogClass = wx.DirDialog,
+ newDirectory = False):
FileBrowseButton.__init__(self, parent, id, pos, size, style,
labelText, buttonText, toolTip,
dialogTitle, startDirectory,
changeCallback = changeCallback)
- #
- self._dirDialog = dialogClass(self,
- message = dialogTitle,
- defaultPath = startDirectory)
+ self.dialogClass = dialogClass
+ self.newDirectory = newDirectory
#
+
def OnBrowse(self, ev = None):
- dialog = self._dirDialog
- if dialog.ShowModal() == wxID_OK:
+ style=0
+
+ if self.newDirectory:
+ style|=wx.DD_NEW_DIR_BUTTON
+
+ dialog = self.dialogClass(self,
+ message = self.dialogTitle,
+ defaultPath = self.startDirectory,
+ style = style)
+
+ if dialog.ShowModal() == wx.ID_OK:
self.SetValue(dialog.GetPath())
+ dialog.Destroy()
#
- def __del__(self):
- if self.__dict__.has_key('_dirDialog'):
- self._dirDialog.Destroy()
#----------------------------------------------------------------------
self.tag = tag
def __call__( self, event ):
print self.tag, event.GetString()
- class DemoFrame( wxFrame ):
+ class DemoFrame( wx.Frame ):
def __init__(self, parent):
- wxFrame.__init__(self, parent, 2400, "File entry with browse", size=(500,260) )
- EVT_CLOSE(self, self.OnCloseWindow)
- panel = wxPanel (self,-1)
- innerbox = wxBoxSizer(wxVERTICAL)
+ wx.Frame.__init__(self, parent, -1, "File entry with browse", size=(500,260))
+ self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
+ panel = wx.Panel (self,-1)
+ innerbox = wx.BoxSizer(wx.VERTICAL)
control = FileBrowseButton(
panel,
initialValue = "z:\\temp",
)
- innerbox.Add( control, 0, wxEXPAND )
+ innerbox.Add( control, 0, wx.EXPAND )
middlecontrol = FileBrowseButtonWithHistory(
panel,
labelText = "With History",
history = ["c:\\temp", "c:\\tmp", "r:\\temp","z:\\temp"],
changeCallback= SimpleCallback( "With History" ),
)
- innerbox.Add( middlecontrol, 0, wxEXPAND )
+ innerbox.Add( middlecontrol, 0, wx.EXPAND )
middlecontrol = FileBrowseButtonWithHistory(
panel,
labelText = "History callback",
history = self.historyCallBack,
changeCallback= SimpleCallback( "History callback" ),
)
- innerbox.Add( middlecontrol, 0, wxEXPAND )
+ innerbox.Add( middlecontrol, 0, wx.EXPAND )
self.bottomcontrol = control = FileBrowseButton(
panel,
labelText = "With Callback",
- style = wxSUNKEN_BORDER|wxCLIP_CHILDREN ,
+ style = wx.SUNKEN_BORDER|wx.CLIP_CHILDREN ,
changeCallback= SimpleCallback( "With Callback" ),
)
- innerbox.Add( control, 0, wxEXPAND)
+ innerbox.Add( control, 0, wx.EXPAND)
self.bottommostcontrol = control = DirBrowseButton(
panel,
labelText = "Simple dir browse button",
- style = wxSUNKEN_BORDER|wxCLIP_CHILDREN)
- innerbox.Add( control, 0, wxEXPAND)
- ID = wxNewId()
- innerbox.Add( wxButton( panel, ID,"Change Label", ), 1, wxEXPAND)
- EVT_BUTTON( self, ID, self.OnChangeLabel )
- ID = wxNewId()
- innerbox.Add( wxButton( panel, ID,"Change Value", ), 1, wxEXPAND)
- EVT_BUTTON( self, ID, self.OnChangeValue )
+ style = wx.SUNKEN_BORDER|wx.CLIP_CHILDREN)
+ innerbox.Add( control, 0, wx.EXPAND)
+ ID = wx.NewId()
+ innerbox.Add( wx.Button( panel, ID,"Change Label", ), 1, wx.EXPAND)
+ self.Bind(wx.EVT_BUTTON, self.OnChangeLabel , id=ID)
+ ID = wx.NewId()
+ innerbox.Add( wx.Button( panel, ID,"Change Value", ), 1, wx.EXPAND)
+ self.Bind(wx.EVT_BUTTON, self.OnChangeValue, id=ID )
panel.SetAutoLayout(True)
panel.SetSizer( innerbox )
self.history={"c:\\temp":1, "c:\\tmp":1, "r:\\temp":1,"z:\\temp":1}
def OnCloseWindow(self, event):
self.Destroy()
- class DemoApp(wxApp):
+ class DemoApp(wx.App):
def OnInit(self):
- wxImage_AddHandler(wxJPEGHandler())
- wxImage_AddHandler(wxPNGHandler())
- wxImage_AddHandler(wxGIFHandler())
- frame = DemoFrame(NULL)
- #frame = RulesPanel(NULL )
+ wx.InitAllImageHandlers()
+ frame = DemoFrame(None)
frame.Show(True)
self.SetTopWindow(frame)
return True