CVS: anygui/lib/anygui/dialogs AboutAnyguiDlg.py,NONE,1.1 AnyguiOpenFileDlg.py,NONE,1.1 __init__.py,NONE,1.1
"Dallas T. Johnston" <[email protected]> Wed, 13 Nov 2002 09:19:25 -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-serv4972/lib/anygui/dialogs
Added Files:
AboutAnyguiDlg.py AnyguiOpenFileDlg.py __init__.py
Log Message:
lots of goodies...
1) added pure anygui dialogs
2) fixed many bugs
3) enhanced Application with name and version
--- NEW FILE: AboutAnyguiDlg.py ---
from anygui import Window, Label, Button, TextArea
from anygui import link
ABOUT_TEXT="""
The purpose of the Anygui project is to create an easy-to-use, simple, \
and generic module for making graphical user interfaces in Python. \
Its main feature is that it works transparently with many different \
GUI packages on most platforms.
"""
class AboutAnyguiDlg(Window):
def __init__(self):
Window.__init__(self, title='About Anygui', geometry=(250, 200, 300, 225))
self.initWidgets()
def initWidgets(self):
#self.layout = SimpleGridManager(1,3)
self.label = Label(text="Anygui info:")
self.add(self.label, left=10, top=10)
self.txtAbout = TextArea(text=ABOUT_TEXT, enabled=0)
self.add(self.txtAbout, left=10, right=10, top=(self.label,5), \
bottom=45, hstretch=1, vstretch=1)
self.btnOK = Button(text="OK")
self.add(self.btnOK, right=10, bottom=10, hmove=1, vmove=1)
link(self.btnOK, self.close)
def close(self, event):
self.destroy()
--- NEW FILE: AnyguiOpenFileDlg.py ---
from __future__ import nested_scopes
from anygui import Window, Label, Button, TextArea, ListBox, Frame, TextField
from anygui import application, link
from anygui.LayoutManagers import SimpleGridManager
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]:\\\\(?!.)'
elif sys.platform in ['cygwin','linux1', 'linux2', 'sunos5']:
PATH_SEPAR = '/'
ROOT_PATH = '/(?!.)'
DIRS_FIRST=0
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)
SORT_RULES={DIRS_FIRST: sort_dirs_first}
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):
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 AnyguiOpenFileDlg(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
self.dirMngr = DirManager(dir, filter, sort_rule)
self.initWidgets()
def initWidgets(self):
btnDirBack = self.btnDirBack = Button(text='<', size=(50,25))
if self.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.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=self.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='*.*')
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
source = event.source
if source is self.lbxDirOne:
self.handleLbxDirOneEvent()
elif source is self.lbxDirTwo:
self.handleLbxDirTwoEvent()
elif source is self.lbxDirThree:
self.handleLbxDirThreeEvent()
def handleLbxDirOneEvent(self):
self_updating = 1
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
self._updating = 0
def handleLbxDirTwoEvent(self):
self._updating = 1
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
self._updating = 0
def handleLbxDirThreeEvent(self):
self._updating = 1
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
self._updating = 0
def goDirFwd(self, event):
print ">> Got event: ", event
print ">> event dict: ", event.__dict__
self._updating = 1
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 = s.lbxOne.items.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
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__
def _state(self):
class State:
def __str__(self):
return str(self.__dict__)
pass
s = State()
s.lbxOne = self.lbxDirOne
s.selOne = s.lbxOne.selection
s.itemsOne = s.lbxOne.items
s.dirOne = s.lbxOne.items[s.selOne]
try:
s.lbxTwo = self.lbxDirTwo
s.selTwo = s.lbxTwo.selection
s.itemsTwo = s.lbxTwo.items
s.dirTwo = s.lbxTwo.items[s.selTwo]
s.lbxThree = self.lbxDirThree
s.selThree = s.lbxThree.selection
s.itemsThree = s.lbxThree.items
s.dirThree = s.lbxThree.items[s.selThree]
except (IndexError):
pass
return s
--- NEW FILE: __init__.py ---
from AboutAnyguiDlg import AboutAnyguiDlg
from AnyguiOpenFileDlg import AnyguiOpenFileDlg
__all__="""
AboutAnyguiDlg
AnyguiOpenFileDlg
""".split()
-------------------------------------------------------
This sf.net email is sponsored by: Are you worried about
your web server security? Click here for a FREE Thawte
Apache SSL Guide and answer your Apache SSL security
needs: http://www.gothawte.com/rd523.html