CVS: anygui/lib/anygui/dialogs OpenFileDialog.py,1.1,1.2

"Dallas T. Johnston" <[email protected]> Sat, 16 Nov 2002 08:45:01 -0800
Newsgroups gmane.comp.python.anygui.cvs
Message-ID <[email protected]>
Update of /cvsroot/anygui/anygui/lib/anygui/dialogs
In directory usw-pr-cvs1:/tmp/cvs-serv9861/lib/anygui/dialogs

Modified Files:
	OpenFileDialog.py 
Log Message:
things are looking pretty good now.
i decided to just make the file selection ('open') a callback
via link & send. the client has to specify the link, of course.
we still need to figure out a way to fix tkinter's focus deal.




Index: OpenFileDialog.py
===================================================================
RCS file: /cvsroot/anygui/anygui/lib/anygui/dialogs/OpenFileDialog.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** OpenFileDialog.py	16 Nov 2002 12:41:10 -0000	1.1
--- OpenFileDialog.py	16 Nov 2002 16:44:59 -0000	1.2
***************
*** 1,257 ****
! from __future__ import nested_scopes
! 
! from anygui import Window, Label, Button, TextArea, ListBox, Frame, TextField
! from anygui import application, link
! from anygui.Models import ListModel
! from anygui.LayoutManagers import SimpleGridManager
! 
! from UserList import UserList
! import re
! import sys, glob, os
! 
! PATH_SEPAR=''
! ROOT_PATH=''
! if sys.platform in ['win32', 'dos', 'ms-dos']:
!     PATH_SEPAR = '\\'
!     ROOT_PATH  = '[a-zA-Z]:\\\\(?!.)'
! else:
!     PATH_SEPAR = '/'
!     ROOT_PATH  = '/(?!.)'
! 
! # === SORT_RULES === #
! 
! ALPHABETICAL=0
! # uses cmp
! 
! DIRS_FIRST=1
! def sort_dirs_first(x, y):
!     if x.endswith(PATH_SEPAR) and y.endswith(PATH_SEPAR):
!         pass
!     elif x.endswith(PATH_SEPAR):
!         return -1
!     elif y.endswith(PATH_SEPAR):
!         return 1
!     return cmp(x, y)
! 
! FILES_FIRST=2
! def sort_files_first(x, y):
!     if x.endswith(PATH_SEPAR) and y.endswith(PATH_SEPAR):
!         pass
!     elif x.endswith(PATH_SEPAR):
!         return 1
!     elif y.endswith(PATH_SEPAR):
!         return -1
!     return cmp(x, y)
! 
  SORT_RULES={ALPHABETICAL: cmp, DIRS_FIRST: sort_dirs_first,\
!             FILES_FIRST: sort_files_first}
! 
! # == END SORT_RULES == #
! 
! class DirListModel(ListModel):
! 
!     def __init__(self, *arg, **kw):
!         try:
!             self.sortRule = kw['sort_rule']
!         except:
!             self.sortRule = DIRS_FIRST
!         assert kw.has_key('filter'), \
!                '!! cannot create a DirListModel without a filter.'
!         ListModel.__init__(self, **kw)
! 
!     def setValue(self, value):
!         value.sort(SORT_RULES[self.sortRule])
!         self.data = value
!         self.send()
! 
! class DirListNode:
! 
!     def __init__(self, dir_list):
!         self.dirList = dir_list
!         self.prev = None
!         self.next = None
! 
!     def __repr__(self):
!         return str(self)
! 
!     def __str__(self):
!         return str(self.dirList)
! 
! class TripanedDoublyLinkedList:
! 
!     def __init__(self, dirs):
!         assert isintance(dirs, list) and len(dirs)>=1, \
!                '!! must construct with at least one dir.'
!         tripane = self.tripane = [None,None,None]
!         self.head = tripane[0] = DirListNode(dirs[0])
!         try:
!             node = tripane[1] = DirListNode(dirs[1])
!             self.appendNode(node)
!         except:
!             return
!         try:
!             node = tripane[2] = DirListNode(dirs[2])
!             self.appendNode(node)
!         except:
!             return
! 
!     def __str__(self):
!         nlist = []
!         node = self.head
!         while node:
!             if node in self.tripane:
!                 nlist.append([node])
!             else:
!                 nlist.append(node)
!             node = node.next
!         return str(nlist)
! 
!     def prepend(self, dir):
!         node = DirListNode(dir)
!         self.prependNode(node)
! 
!     def prependNode(self, node):            
!         head = self.head
!         head.prev = node
!         node.next = head
!         self.head = node
!         if not hasattr(self, 'tail'):
!             self.tail = head
! 
!     def append(self, dir):
!         node = DirListNode(dir)
!         self.appendNode(node)
! 
!     def appendNode(self, node):
!         if hasattr(self, 'tail'):
!             tail = self.tail
!             tail.next = node
!             node.prev = tail
!             self.tail = node
!             if self.tripane[2] is None:
!                 self.tripane[2] = node
          else:
!             self.tripane[1] = self.tail = node
!             self.head.next = node
!             node.prev = self.head
! 
!     def pop(self):
!         assert hasattr(self, 'tail'), '!! cannot pop last node.'
!         if self.tail.prev == self.head:
!             tail = self.tail
!             del self.tail 
!             tail.prev = None
!             self.head.next = None
!             if tail in self.tripane:
!                 self.tripane[self.tripane.index(tail)] = None
!             return tail
!         tail = self.tail
!         self.tail = tail.prev
!         self.tail.next = None
!         tail.prev = None
!         if tail in self.tripane:
!             self.tripane[self.tripane.index(tail)] = None
!         return tail
! 
!     def count(self):
!         node = self.head
!         count = 0
!         while node:
!             count += 1
!             node = node.next
!         return count
! 
!     def shiftPaneBack(self, nbr):
!         for i in range(nbr):
!             try:
!                 self.tripane[0] = self.tripane[0].prev
!                 self.tripane[1] = self.tripane[1].prev
!                 self.tripane[2] = self.tripane[2].prev
!             except:
!                 break
! 
!     def shiftPaneFwd(self, nbr):
!         for i in range(nbr):
!             try:
!                 self.tripane[0] = self.tripane[0].next
!                 self.tripane[1] = self.tripane[1].next
!                 self.tripane[2] = self.tripane[2].next
!             except:
!                 break
! 
! class DirManager:
! 
!     def __init__(self, dir, filter, sort_rule=DIRS_FIRST):
!         print '>> dir    -> ', dir
!         print '>> filter -> ', filter
!         assert os.path.isdir(dir), '!! DirManager: ' + dir + ' is not a directory.'
!         if not dir.endswith(PATH_SEPAR):
!             dir += PATH_SEPAR
!         self.currDir = dir
!         self.filter = filter
!         self.sortRule = sort_rule
! 
!         self.currDirCache = []
!         self.oneDirUp = ''
!         self.oneDirUpCache = []
!         self.twoDirUp = ''
!         self.twoDirUpCache = []
!         self._genDirCaches()
! 
!     def update(self):
!         self._genDirCaches()
! 
!     def isRootDir(self, dir):
!         if dir == ROOT_PATH or re.match(ROOT_PATH, dir):
!             return 1
!         else:
!             return 0
! 
!     def currDirIsRoot(self):
!         return self.isRootDir(self.currDir)
! 
!     def dirUp(self, dir):
!         return dir[:dir[:-1].rfind(PATH_SEPAR)+1]
! 
!     def goDirUp():
!         self.currDir = self.oneDirUp
!         self._genDirCaches()
! 
!     def globDir(self, dir):
!         if self.filter == '':
!             self.filter = '*'
!         cache = glob.glob(dir + self.filter)
!         objCache = [ obj[obj.rfind(PATH_SEPAR)+1:] for obj in cache ]
!         for i in range(len(cache)):
!             if os.path.isdir(cache[i]):
!                 objCache[i] += PATH_SEPAR
!         objCache.sort(SORT_RULES[self.sortRule])
!         return objCache
! 
!     def _genDirCaches(self):
!         print '>> self.currDir -> ', self.currDir
!         self.currDirCache = self.globDir(self.currDir)
!         # now generate cache for self.dir/..
!         if not self.currDirIsRoot():
!             self.oneDirUp = self.dirUp(self.currDir)
!             print '>> self.oneDirUp -> ', self.oneDirUp
!             self.oneDirUpCache = self.globDir(self.oneDirUp)
!             # and the same for self.dir/../..
!             if not self.isRootDir(self.oneDirUp):
!                 self.twoUpDir = self.dirUp(self.oneDirUp)
!                 print '>> self.twoDirUp -> ', self.twoDirUp
!                 self.twoDirUpCache = self.globDir(self.twoDirUp)
! 
! class OpenFileDialog(Window):
! 
!     def __init__(self, dir, filter, sort_rule=DIRS_FIRST):
          Window.__init__(self, title='Open File - ' + \
!                         application().name + '-' + application().version, \
!                         geometry=(250, 200, 420, 350))
!         self._updating = 0
!         dirMngr = self.dirMngr = DirManager(dir, filter, sort_rule)
          self._priorSelections = []
!         #self.createTripaneDirList()
!         self.initWidgets()
  
      #def createTripaneDirList(self):
--- 1,127 ----
! from __future__ import nested_scopes
! 
! from anygui import Window, Label, Button, TextArea, ListBox, Frame, TextField, ComboBox
! from anygui import application, link, send
! from anygui.Models import ListModel
! from anygui.LayoutManagers import SimpleGridManager
! 
! from UserList import UserList
! import re
! import sys, glob, os
! import traceback
! 
! PATH_SEPAR=''
! ROOT_PATH=''
! if sys.platform in ['win32', 'dos', 'ms-dos']:
!     PATH_SEPAR = '\\'
!     ROOT_PATH  = '[a-zA-Z]:\\\\(?!.)'
! else:
!     PATH_SEPAR = '/'
!     ROOT_PATH  = '/(?!.)'
! 
! # === SORT_RULES === #
! 
! ALPHABETICAL=0
! # uses cmp
! 
! DIRS_FIRST=1
! def sort_dirs_first(x, y):
!     if x.endswith(PATH_SEPAR) and y.endswith(PATH_SEPAR):
!         pass
!     elif x.endswith(PATH_SEPAR):
!         return -1
!     elif y.endswith(PATH_SEPAR):
!         return 1
!     return cmp(x, y)
! 
! FILES_FIRST=2
! def sort_files_first(x, y):
!     if x.endswith(PATH_SEPAR) and y.endswith(PATH_SEPAR):
!         pass
!     elif x.endswith(PATH_SEPAR):
!         return 1
!     elif y.endswith(PATH_SEPAR):
!         return -1
!     return cmp(x, y)
! 
  SORT_RULES={ALPHABETICAL: cmp, DIRS_FIRST: sort_dirs_first,\
!             FILES_FIRST: sort_files_first}
! 
! # == END SORT_RULES == #
! 
! class DirManager:
! 
!     def __init__(self, dir, filter, sort_rule=DIRS_FIRST):
!         #print '>> dir    -> ', dir
!         #print '>> filter -> ', filter
!         assert os.path.isdir(dir), '!! DirManager: ' + dir + ' is not a directory.'
!         if not dir.endswith(PATH_SEPAR):
!             dir += PATH_SEPAR
!         self.currDir = dir
!         self.filter = filter
!         self.sortRule = sort_rule
! 
!         self.currDirCache = []
!         self.oneDirUp = ''
!         self.oneDirUpCache = []
!         self.twoDirUp = ''
!         self.twoDirUpCache = []
!         self._genDirCaches()
! 
!     def update(self):
!         self._genDirCaches()
! 
!     def isRootDir(self, dir):
!         if dir == ROOT_PATH or re.match(ROOT_PATH, dir):
!             return 1
          else:
!             return 0
! 
!     def currDirIsRoot(self):
!         return self.isRootDir(self.currDir)
! 
!     def dirUp(self, dir):
!         return dir[:dir[:-1].rfind(PATH_SEPAR)+1]
! 
!     def goDirUp():
!         self.currDir = self.oneDirUp
!         self._genDirCaches()
! 
!     def globDir(self, dir):
!         if self.filter == '':
!             self.filter = '*'
!         cache = glob.glob(dir + self.filter)
!         objCache = [ obj[obj.rfind(PATH_SEPAR)+1:] for obj in cache ]
!         for i in range(len(cache)):
!             if os.path.isdir(cache[i]):
!                 objCache[i] += PATH_SEPAR
!         objCache.sort(SORT_RULES[self.sortRule])
!         return objCache
! 
!     def _genDirCaches(self):
!         #print '>> self.currDir -> ', self.currDir
!         self.currDirCache = self.globDir(self.currDir)
!         # now generate cache for self.dir/..
!         if not self.currDirIsRoot():
!             self.oneDirUp = self.dirUp(self.currDir)
!             #print '>> self.oneDirUp -> ', self.oneDirUp
!             self.oneDirUpCache = self.globDir(self.oneDirUp)
!             # and the same for self.dir/../..
!             if not self.isRootDir(self.oneDirUp):
!                 self.twoUpDir = self.dirUp(self.oneDirUp)
!                 #print '>> self.twoDirUp -> ', self.twoDirUp
!                 self.twoDirUpCache = self.globDir(self.twoDirUp)
! 
! class OpenFileDialog(Window):
! 
!     def __init__(self, dir, filters, sort_rule=DIRS_FIRST):
          Window.__init__(self, title='Open File - ' + \
!                         application().name + '-' + application().version, \
!                         geometry=(250, 200, 420, 350))
!         self._updating = 0
!         self.dirMngr = DirManager(dir, filters[0], sort_rule)
          self._priorSelections = []
!         #self.createTripaneDirList()
!         self.initWidgets(filters)
  
      #def createTripaneDirList(self):
***************
*** 262,401 ****
      #        if not dirMngr.isRootDir(dirMngr.oneDirUp):
      #            self.dirList.prepend(dirMngr.twoDirUpCache)
! 
!     def initWidgets(self):
! 
!         dirMngr = self.dirMngr
! 
!         btnDirBack = self.btnDirBack = Button(text='<', size=(50,25))
!         if dirMngr.currDirIsRoot():
!             btnDirBack.enabled = 0
!         self.add(btnDirBack, left=10, top=10)
!         link(btnDirBack, self.goDirBack)
! 
!         btnDirFwd = self.btnDirFwd = Button(text='>', size=(50,25))
!         btnDirFwd.enabled = 0
!         self.add(btnDirFwd, left=(btnDirBack, 5), top=10)
!         link(btnDirFwd, self.goDirFwd)
! 
!         frmDirs = self.frmDirs = Frame()
!         frmDirs.layout = SimpleGridManager(3,1)
          self.add(frmDirs, left=10, rigth=10, top=(btnDirBack, 5), \
!                  bottom=75, vstretch=1, hstretch=1)
! 
!         lbxDirOne = self.lbxDirOne = ListBox()
          #lbxDirOne.items = self.dirList.tripane[0]
!         lbxDirOne.items = self.dirMngr.currDirCache
!         frmDirs.add(lbxDirOne)
!         link(lbxDirOne, self.lbxSelect)
! 
!         lbxDirTwo = self.lbxDirTwo = ListBox()
!         frmDirs.add(lbxDirTwo)
!         link(lbxDirTwo, self.lbxSelect)
! 
!         lbxDirThree = self.lbxDirThree = ListBox()
!         frmDirs.add(lbxDirThree)
!         link(lbxDirThree, self.lbxSelect)
! 
!         btnCancel = self.btnCancel = Button(text='Cancel')
!         self.add(btnCancel, right=10, top=(frmDirs, 5), hmove=1, vmove=1)
!         link(self.btnCancel, self.close)
! 
!         btnOpen = self.btnOpen = Button(text='Open')
!         self.add(btnOpen, right=10, top=(btnCancel, 5), hmove=1, vmove=1)
!         link(self.btnOpen, self.open)
! 
!         lblLocation = self.lblLocation = Label(text='Location:', width=55)
!         self.add(lblLocation, left=10, top=(frmDirs, 18), vmove=1)
! 
!         lblFilter = self.lblFilter = Label(text='Filter:', width=55)
!         self.add(lblFilter, left=10, top=(lblLocation, 20), vmove=1)
! 
!         txtLocation = self.txtLocation = TextField(text=dirMngr.currDir)
          self.add(txtLocation, left=(lblLocation, 5), right=100, top=(frmDirs, 8), \
!                  hstretch=1, vmove=1)
!         link(txtLocation, self.changeDirs)
! 
!         txtFilter = self.txtFilter = TextField(text=dirMngr.filter)
!         self.add(txtFilter, left=(lblFilter, 5), right=100, top=(txtLocation, 10), \
!                  hstretch=1, vmove=1)
!         link(txtFilter, self.applyFilter)
! 
!     def open(self, event):
!         print ">> Got event: ", event
!         print ">> event dict: ", event.__dict__
! 
!     def close(self, event):
!         self.destroy()
! 
!     def lbxSelect(self, event):
!         if self._updating: return
!         self_updating = 1
!         source = event.source
!         if source is self.lbxDirOne:
!             self.handleLbxDirOneEvent()
!         elif source is self.lbxDirTwo:
!             self.handleLbxDirTwoEvent()
!         elif source is self.lbxDirThree:
              self.handleLbxDirThreeEvent()
!         self.btnDirFwd.enabled = 0
!         self._updating = 0
! 
!     def handleLbxDirOneEvent(self):
!         print '>> handling lbxDirOne event'
!         dirMngr = self.dirMngr
!         s = self._state()
!         obj = dirMngr.currDir + s.dirOne
!         if os.path.isdir(obj):
!             dirMngr.filter = self.txtFilter.text
!             result = dirMngr.globDir(obj)
!             try:
!                 s.lbxTwo.items = result
!                 s.lbxThree.items = []
!             except (AttributeError):
!                 pass
!         else:
!             try:
!                 s.lbxTwo.items = []
!                 s.lbxThree.items = []
!             except (AttributeError):
!                 pass
!         self.txtLocation.text = obj
! 
!     def handleLbxDirTwoEvent(self):
!         print '>> handling lbxDirTwo event'
!         dirMngr = self.dirMngr
!         s = self._state()
!         obj = dirMngr.currDir + s.dirOne + s.dirTwo
!         if os.path.isdir(obj):
!             dirMngr.filter = self.txtFilter.text
!             result = dirMngr.globDir(obj)
!             s.lbxThree.items = result
!         else:
!             s.lbxThree.items = []
!         self.txtLocation.text = obj
! 
!     def handleLbxDirThreeEvent(self):
!         print '>> handling lbxDirThree event'
!         dirMngr  = self.dirMngr
!         s = self._state()
!         obj = dirMngr.currDir + s.dirOne + s.dirTwo + s.dirThree
! 
!         if os.path.isdir(obj):
!             dirMngr.currDir += s.dirOne
!             dirMngr.update()
!             s.lbxOne.items = dirMngr.currDirCache
!             s.lbxOne.selection = s.selTwo
!             dirMngr.filter = self.txtFilter.text
!             s.lbxTwo.items = dirMngr.globDir(dirMngr.currDir + s.dirTwo)
!             s.lbxTwo.selection = s.selThree
!             s.lbxThree.items = dirMngr.globDir(obj)
!             self.btnDirBack.enabled = 1
! 
!         self.txtLocation.text = obj
! 
!     def goDirFwd(self, event):
!         print ">> Got event: ", event
!         print ">> event dict: ", event.__dict__
!         self._updating = 1
          self.handleLbxDirThreeEvent()
          if self._priorSelections:
--- 132,273 ----
      #        if not dirMngr.isRootDir(dirMngr.oneDirUp):
      #            self.dirList.prepend(dirMngr.twoDirUpCache)
! 
!     def initWidgets(self, filters):
! 
!         dirMngr = self.dirMngr
! 
!         btnDirBack = self.btnDirBack = Button(text='<', size=(50,25))
!         if dirMngr.currDirIsRoot():
!             btnDirBack.enabled = 0
!         self.add(btnDirBack, left=10, top=10)
!         link(btnDirBack, self.goDirBack)
! 
!         btnDirFwd = self.btnDirFwd = Button(text='>', size=(50,25))
!         btnDirFwd.enabled = 0
!         self.add(btnDirFwd, left=(btnDirBack, 5), top=10)
!         link(btnDirFwd, self.goDirFwd)
! 
!         frmDirs = self.frmDirs = Frame()
!         frmDirs.layout = SimpleGridManager(3,1)
          self.add(frmDirs, left=10, rigth=10, top=(btnDirBack, 5), \
!                  bottom=75, vstretch=1, hstretch=1)
! 
!         lbxDirOne = self.lbxDirOne = ListBox()
          #lbxDirOne.items = self.dirList.tripane[0]
!         lbxDirOne.items = self.dirMngr.currDirCache
!         lbxDirOne.selection = 0
!         frmDirs.add(lbxDirOne)
!         link(lbxDirOne, self.lbxSelect)
! 
!         lbxDirTwo = self.lbxDirTwo = ListBox()
!         frmDirs.add(lbxDirTwo)
!         link(lbxDirTwo, self.lbxSelect)
! 
!         lbxDirThree = self.lbxDirThree = ListBox()
!         frmDirs.add(lbxDirThree)
!         link(lbxDirThree, self.lbxSelect)
! 
!         btnCancel = self.btnCancel = Button(text='Cancel')
!         self.add(btnCancel, right=10, top=(frmDirs, 5), hmove=1, vmove=1)
!         link(self.btnCancel, self.close)
! 
!         btnOpen = self.btnOpen = Button(text='Open')
!         self.add(btnOpen, right=10, top=(btnCancel, 5), hmove=1, vmove=1)
!         link(self.btnOpen, self.open)
! 
!         lblLocation = self.lblLocation = Label(text='Location:', width=55)
!         self.add(lblLocation, left=10, top=(frmDirs, 18), vmove=1)
! 
!         lblFilter = self.lblFilter = Label(text='Filter:', width=55)
!         self.add(lblFilter, left=10, top=(lblLocation, 20), vmove=1)
! 
!         txtLocation = self.txtLocation = TextField(text=dirMngr.currDir)
          self.add(txtLocation, left=(lblLocation, 5), right=100, top=(frmDirs, 8), \
!                  hstretch=1, vmove=1)
!         link(txtLocation, self.changeDirs)
! 
!         cbxFilter = self.cbxFilter = ComboBox(items=filters)
!         #txtFilter = self.txtFilter = TextField(text=dirMngr.filter)
!         self.add(cbxFilter, left=(lblFilter, 5), right=100, top=(txtLocation, 10), \
!                  hstretch=1, vmove=1)
!         link(cbxFilter, self.applyFilter)
! 
!     def open(self, event):
!         send(self, 'open', file=self.txtLocation.text)
!         self.destroy()
! 
!     def close(self, event):
!         self.destroy()
! 
!     def lbxSelect(self, event):
!         if self._updating: return
!         self_updating = 1
!         source = event.source
!         if source is self.lbxDirOne:
!             self.handleLbxDirOneEvent()
!         elif source is self.lbxDirTwo:
!             self.handleLbxDirTwoEvent()
!         elif source is self.lbxDirThree:
              self.handleLbxDirThreeEvent()
!         self.btnDirFwd.enabled = 0
!         self._updating = 0
! 
!     def handleLbxDirOneEvent(self):
!         #print '>> handling lbxDirOne event'
!         dirMngr = self.dirMngr
!         s = self._state()
!         obj = dirMngr.currDir + s.dirOne
!         if os.path.isdir(obj):
!             dirMngr.filter = self.cbxFilter.text
!             result = dirMngr.globDir(obj)
!             try:
!                 s.lbxTwo.items = result
!                 s.lbxThree.items = []
!             except (AttributeError):
!                 pass
!         else:
!             try:
!                 s.lbxTwo.items = []
!                 s.lbxThree.items = []
!             except (AttributeError):
!                 pass
!         self.txtLocation.text = obj
! 
!     def handleLbxDirTwoEvent(self):
!         #print '>> handling lbxDirTwo event'
!         dirMngr = self.dirMngr
!         s = self._state()
!         obj = dirMngr.currDir + s.dirOne + s.dirTwo
!         if os.path.isdir(obj):
!             dirMngr.filter = self.cbxFilter.text
!             result = dirMngr.globDir(obj)
!             s.lbxThree.items = result
!         else:
!             s.lbxThree.items = []
!         self.txtLocation.text = obj
! 
!     def handleLbxDirThreeEvent(self):
!         #print '>> handling lbxDirThree event'
!         dirMngr  = self.dirMngr
!         s = self._state()
!         obj = dirMngr.currDir + s.dirOne + s.dirTwo + s.dirThree
! 
!         if os.path.isdir(obj):
!             dirMngr.currDir += s.dirOne
!             dirMngr.update()
!             s.lbxOne.items = dirMngr.currDirCache
!             s.lbxOne.selection = s.selTwo
!             dirMngr.filter = self.cbxFilter.text
!             s.lbxTwo.items = dirMngr.globDir(dirMngr.currDir + s.dirTwo)
!             s.lbxTwo.selection = s.selThree
!             s.lbxThree.items = dirMngr.globDir(obj)
!             self.btnDirBack.enabled = 1
! 
!         self.txtLocation.text = obj
! 
!     def goDirFwd(self, event):
!         #print ">> Got event: ", event
!         #print ">> event dict: ", event.__dict__
!         self._updating = 1
          self.handleLbxDirThreeEvent()
          if self._priorSelections:
***************
*** 405,516 ****
          if not self._priorSelections:
              self.btnDirFwd.enabled = 0
!             
!         self._updating = 0
! 
! 
!     def goDirBack(self, event):
!         print ">> Got event: ", event
!         print ">> event dict: ", event.__dict__
! 
!         self._updating = 1
! 
!         dirMngr = self.dirMngr
!         s = self._state()
! 
!         backDir = dirMngr.currDir
!         currDir = dirMngr.currDir = dirMngr.oneDirUp
!         dirMngr.update()
! 
!         s.lbxOne.items = dirMngr.currDirCache
!         s.lbxOne.selection = dirMngr.currDirCache.index(\
!             backDir[backDir[:-1].rfind(PATH_SEPAR)+1:]\
!         )
! 
!         s.lbxTwo.items = s.itemsOne
!         s.lbxTwo.selection = s.selOne
! 
!         s.lbxThree.items = s.itemsTwo
          s.lbxThree.selection = s.selTwo
  
!         self._priorSelections.append(s.selThree)
!         self.btnDirFwd.enabled = 1
!         if dirMngr.currDirIsRoot():
!             self.btnDirBack.enabled = 0
! 
!         s = self._state()
!         self.txtLocation.text = currDir + s.dirOne + s.dirTwo + s.dirThree
! 
!         self._updating = 0
! 
!     def changeDirs(self, event):
!         print ">> Got event: ", event
!         print ">> event dict: ", event.__dict__
! 
!     def applyFilter(self, event):
!         print ">> Got event: ", event
!         print ">> event dict: ", event.__dict__
!         self._update = 1
! 
!         dirMngr = self.dirMngr
!         s = self._state()
! 
!         try:
!             s.dirThree
!             print '>> filtering lbxThree'
!             self.handleLbxDirTwoEvent()
!             return
!         except (AttributeError):
!             pass
! 
!         try:
!             s.dirTwo
!             print '>> filtering lbxTwo'
!             self.handleLbxDirOneEvent()
!             return
!         except (AttributeError):
!             pass
! 
!         print '>> filtering lbxOne'
!         dirMngr.filter = self.txtFilter.text
!         dirMngr.update()
! 
!         s.lbxOne.items = dirMngr.currDirCache
!         try:
!             selection = s.lbxOne.selection = dirMngr.currDirCache.index(s.dirOne)
!             self.txtLocation.text = dirMngr.currDir + dirMngr.currDirCache[selection]
!         except (AttributeError, ValueError):
              self.txtLocation.text = dirMngr.currDir
  
!         self.btnDirFwd.enabled = 0            
! 
!         self._update = 0
! 
!     def _state(self):
! 
!         class State:
!             def __str__(self):
!                 return str(self.__dict__)
!             pass
! 
!         s = State()
! 
!         s.lbxOne   = self.lbxDirOne
!         s.itemsOne = s.lbxOne.items
!         s.selOne   = s.lbxOne.selection
! 
!         try:
!             s.dirOne   = s.lbxOne.items[s.selOne]
! 
!             s.lbxTwo   = self.lbxDirTwo
!             s.itemsTwo = s.lbxTwo.items
!             s.selTwo   = s.lbxTwo.selection
!             s.dirTwo   = s.lbxTwo.items[s.selTwo]
! 
!             s.lbxThree   = self.lbxDirThree
!             s.itemsThree = s.lbxThree.items
!             s.selThree   = s.lbxThree.selection
!             s.dirThree   = s.lbxThree.items[s.selThree]
!         except (IndexError):
!             pass
! 
!         return s
--- 277,389 ----
          if not self._priorSelections:
              self.btnDirFwd.enabled = 0
! 
!         self._updating = 0
! 
! 
!     def goDirBack(self, event):
!         #print ">> Got event: ", event
!         #print ">> event dict: ", event.__dict__
! 
!         self._updating = 1
! 
!         dirMngr = self.dirMngr
!         s = self._state()
! 
!         backDir = dirMngr.currDir
!         currDir = dirMngr.currDir = dirMngr.oneDirUp
!         dirMngr.update()
! 
!         s.lbxOne.items = dirMngr.currDirCache
!         s.lbxOne.selection = dirMngr.currDirCache.index(\
!             backDir[backDir[:-1].rfind(PATH_SEPAR)+1:]\
!         )
! 
!         s.lbxTwo.items = s.itemsOne
!         s.lbxTwo.selection = s.selOne
! 
!         s.lbxThree.items = s.itemsTwo
          s.lbxThree.selection = s.selTwo
  
!         self._priorSelections.append(s.selThree)
!         self.btnDirFwd.enabled = 1
!         if dirMngr.currDirIsRoot():
!             self.btnDirBack.enabled = 0
! 
!         s = self._state()
!         self.txtLocation.text = currDir + s.dirOne + s.dirTwo + s.dirThree
! 
!         self._updating = 0
! 
!     def changeDirs(self, event):
!         print ">> Got event: ", event
!         print ">> event dict: ", event.__dict__
! 
!     def applyFilter(self, event):
!         #print ">> Got event: ", event
!         #print ">> event dict: ", event.__dict__
!         self._update = 1
! 
!         dirMngr = self.dirMngr
!         s = self._state()
! 
!         try:
!             s.dirThree
!             #print '>> filtering lbxThree'
!             self.handleLbxDirTwoEvent()
!             return
!         except (AttributeError):
!             pass
! 
!         try:
!             s.dirTwo
!             #print '>> filtering lbxTwo'
!             self.handleLbxDirOneEvent()
!             return
!         except (AttributeError):
!             pass
! 
!         #print '>> filtering lbxOne'
!         dirMngr.filter = self.cbxFilter.text
!         dirMngr.update()
! 
!         s.lbxOne.items = dirMngr.currDirCache
!         try:
!             selection = s.lbxOne.selection = dirMngr.currDirCache.index(s.dirOne)
!             self.txtLocation.text = dirMngr.currDir + dirMngr.currDirCache[selection]
!         except (AttributeError, ValueError):
!             traceback.print_exc()
              self.txtLocation.text = dirMngr.currDir
  
!         self.btnDirFwd.enabled = 0
! 
!         self._update = 0
! 
!     def _state(self):
! 
!         class State:
!             def __str__(self):
!                 return str(self.__dict__)
!             pass
! 
!         s = State()
! 
!         s.lbxOne   = self.lbxDirOne
!         s.itemsOne = s.lbxOne.items
!         s.selOne   = s.lbxOne.selection
! 
!         try:
!             s.dirOne   = s.lbxOne.items[s.selOne]
! 
!             s.lbxTwo   = self.lbxDirTwo
!             s.itemsTwo = s.lbxTwo.items
!             s.selTwo   = s.lbxTwo.selection
!             s.dirTwo   = s.lbxTwo.items[s.selTwo]
! 
!             s.lbxThree   = self.lbxDirThree
!             s.itemsThree = s.lbxThree.items
!             s.selThree   = s.lbxThree.selection
!             s.dirThree   = s.lbxThree.items[s.selThree]
!         except (IndexError):
!             pass
! 
!         return s



-------------------------------------------------------
This sf.net email is sponsored by: To learn the basics of securing 
your web site with SSL, click here to get a FREE TRIAL of a Thawte 
Server Certificate: http://www.gothawte.com/rd524.html