+++ /dev/null
-from wxPython.wx import *
-import os
-
-#----------------------------------------------------------------------
-
-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
- '''
- def __init__ (self, parent, id= -1,
- pos = wxDefaultPosition, size = wxDefaultSize,
- style = wxTAB_TRAVERSAL,
- labelText= "File Entry:",
- buttonText= "Browse",
- toolTip= "Type filename or browse computer 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= None
- ):
- wxPanel.__init__ (self, parent, id, pos, size, style)
- # store variables
- self.dialogTitle = dialogTitle
- self.startDirectory = startDirectory
- self.fileMask = fileMask
- self.fileMode = fileMode
- self.changeCallback = changeCallback
-
- box = wxBoxSizer(wxHORIZONTAL)
- self.label = wxStaticText(self, -1, labelText, style =wxALIGN_RIGHT )
- font = self.label.GetFont()
- w, h, d, e = self.GetFullTextExtent(labelText, font)
- self.label.SetSize(wxSize(w+5, h))
- box.Add( self.label, 0, wxCENTER )
-
- ID = wxNewId()
- self.textControl = wxTextCtrl(self, ID)
- self.textControl.SetToolTipString( toolTip )
- box.Add( self.textControl, 1, wxLEFT|wxCENTER, 5)
- if changeCallback:
- EVT_TEXT(self.textControl, ID, changeCallback)
-
- ID = wxNewId()
- self.browseButton = button =wxButton(self, ID, buttonText)
- box.Add( button, 0, wxCENTER)
- button.SetToolTipString( toolTip )
- EVT_BUTTON(button, ID, self.OnBrowse)
-
- # add a border around the whole thing and resize the panel to fit
- outsidebox = wxBoxSizer(wxVERTICAL)
- outsidebox.Add(box, 1, wxEXPAND|wxALL, 3)
- outsidebox.Fit(self)
-
- self.SetAutoLayout(true)
- self.SetSizer( outsidebox )
- self.Layout()
- if size.width != -1 or size.height != -1:
- self.SetSize(size)
-
-
-
- def OnBrowse (self, event = None):
- ''' Going to browse for file... '''
- current = self.GetValue ()
- directory = os.path.split(current)
- if os.path.isdir( current):
- directory =current
- elif directory and os.path.isdir( directory[0] ):
- directory = directory [0]
- else:
- directory = self.startDirectory
- dlg = wxFileDialog(self, self.dialogTitle, directory, current, self.fileMask, self.fileMode)
- if dlg.ShowModal() == wxID_OK:
- self.SetValue (dlg.GetPath())
- dlg.Destroy()
- self.textControl.SetFocus()
-
-
- def GetValue (self):
- ''' Convenient access to text control value '''
- return self.textControl.GetValue ()
-
-
- def SetValue (self, value):
- ''' Convenient setting of text control value '''
- return self.textControl.SetValue (value)
-
- def Enable (self, value):
- ''' Convenient enabling/disabling of entire control '''
- self.label.Enable (value)
- self.textControl.Enable (value)
- return self.browseButton.Enable (value)
-
- def GetLabel( self ):
- ''' Retrieve the label's current text '''
- return self.label.GetLabel()
-
- def SetLabel( self, value ):
- ''' Set the label's current text '''
- return self.label.SetLabel( value )
-
-
-
-#----------------------------------------------------------------------
-
-
-if __name__ == "__main__":
- #from skeletonbuilder import rulesfile
- class DemoFrame( wxFrame ):
- def __init__(self, parent):
- wxFrame.__init__(self, parent, 2400, "File entry with browse", size=(500,100) )
- panel = wxPanel (self,-1)
- innerbox = wxBoxSizer(wxVERTICAL)
- control = FileBrowseButton(panel)
- innerbox.Add( control, 0, wxEXPAND )
- control = FileBrowseButton(panel, labelText = "With Callback", style = wxSUNKEN_BORDER ,changeCallback= self.OnFileNameChanged)
- innerbox.Add( control, 0, wxEXPAND|wxALIGN_BOTTOM )
- panel.SetAutoLayout(true)
- panel.SetSizer( innerbox )
-
- def OnFileNameChanged (self, event):
- print "Filename changed", event.GetString ()
-
- def OnCloseMe(self, event):
- self.Close(true)
-
- def OnCloseWindow(self, event):
- self.Destroy()
-
- class DemoApp(wxApp):
- def OnInit(self):
- wxImage_AddHandler(wxJPEGHandler())
- wxImage_AddHandler(wxPNGHandler())
- wxImage_AddHandler(wxGIFHandler())
- frame = DemoFrame(NULL)
- #frame = RulesPanel(NULL )
- frame.Show(true)
- self.SetTopWindow(frame)
- return true
-
- def test( ):
- app = DemoApp(0)
- app.MainLoop()
- print 'Creating dialogue'
- test( )
-
-
-