anygui-checkins Mailing List for anygui - Generic GUI Module for Python (Page 3)
Brought to you by:
mlh
You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(110) |
Aug
(245) |
Sep
(134) |
Oct
(89) |
Nov
(221) |
Dec
(465) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(108) |
Feb
(71) |
Mar
(52) |
Apr
(43) |
May
(39) |
Jun
(10) |
Jul
(91) |
Aug
(40) |
Sep
(24) |
Oct
(28) |
Nov
(75) |
Dec
|
2003 |
Jan
(15) |
Feb
(18) |
Mar
(2) |
Apr
(3) |
May
(1) |
Jun
(2) |
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
2004 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Dallas T. J. <pan...@us...> - 2002-11-23 16:43:00
|
Update of /cvsroot/anygui/anygui In directory sc8-pr-cvs1:/tmp/cvs-serv5647 Modified Files: setup.py Log Message: Moved all the funny frontend widget stuff into genericgui.py. Note that there will be issues with how we want the backend specific use of dialogs to work. This issue mainly relates to naming of backend wrappers. Index: setup.py =================================================================== RCS file: /cvsroot/anygui/anygui/setup.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** setup.py 16 Nov 2002 12:41:10 -0000 1.10 --- setup.py 23 Nov 2002 16:42:57 -0000 1.11 *************** *** 76,80 **** package_dir = {'': 'lib'}, packages = ['anygui', 'anygui.backends', ! 'anygui.backends.txtutils', ! 'anygui.dialogs', ! 'anygui.frontend_wrappers']) --- 76,78 ---- package_dir = {'': 'lib'}, packages = ['anygui', 'anygui.backends', ! 'anygui.backends.txtutils']) |
From: Dallas T. J. <pan...@us...> - 2002-11-23 16:43:00
|
Update of /cvsroot/anygui/anygui/lib/anygui In directory sc8-pr-cvs1:/tmp/cvs-serv5647/lib/anygui Modified Files: ComboBoxes.py __init__.py Log Message: Moved all the funny frontend widget stuff into genericgui.py. Note that there will be issues with how we want the backend specific use of dialogs to work. This issue mainly relates to naming of backend wrappers. Index: ComboBoxes.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/ComboBoxes.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ComboBoxes.py 17 Nov 2002 18:42:07 -0000 1.2 --- ComboBoxes.py 23 Nov 2002 16:42:57 -0000 1.3 *************** *** 1,4 **** from anygui.Components import Component ! from anygui import Defaults, backendModule, frontEndWrappers class ComboBox(Component, Defaults.ComboBox): --- 1,5 ---- + import anygui.backends.genericgui from anygui.Components import Component ! from anygui import Defaults, backendModule class ComboBox(Component, Defaults.ComboBox): *************** *** 8,10 **** return backendModule().ComboBoxWrapper(self) except(AttributeError): ! return frontEndWrappers().ComboBoxWrapper(self) \ No newline at end of file --- 9,11 ---- return backendModule().ComboBoxWrapper(self) except(AttributeError): ! return anygui.backends.genericgui.ComboBoxWrapper(self) Index: __init__.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/__init__.py,v retrieving revision 1.75 retrieving revision 1.76 diff -C2 -r1.75 -r1.76 *** __init__.py 17 Nov 2002 18:42:07 -0000 1.75 --- __init__.py 23 Nov 2002 16:42:57 -0000 1.76 *************** *** 33,38 **** unlinkMethods unlinkSource - AboutDialog - OpenFileDialog """.split() --- 33,36 ---- *************** *** 59,68 **** return _backend - def frontEndWrappers(): - 'Returns the list of available frontend widgets' - if not _frontend_wrappers: - raise RuntimeError, 'no frontend wrappers exists' - return _frontend_wrappers - def setup(self, **kwds): 'Used to configure Anygui' --- 57,60 ---- *************** *** 70,78 **** - ########## Get the list of frontend wrappers ############################## - import anygui.frontend_wrappers as few - _frontend_wrappers = few - ########## End get list of frontend wrappers ############################## - ########## Begin Imports ################################################## --- 62,65 ---- *************** *** 98,104 **** from anygui.LayoutManagers import LayoutManager, Placer from anygui.Menus import MenuBar, Menu, MenuCommand, MenuCheck, MenuSeparator - - # import objects from dialogs - from anygui.dialogs import * ########### End Imports ################################################### --- 85,88 ---- |
From: Robin B. <rgb...@us...> - 2002-11-19 12:41:47
|
Update of /cvsroot/anygui/anygui/lib/anygui/backends In directory sc8-pr-cvs1:/tmp/cvs-serv1722 Modified Files: ctmswgui.py Log Message: Comment debugging code Index: ctmswgui.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/ctmswgui.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** ctmswgui.py 15 Nov 2002 18:50:08 -0000 1.5 --- ctmswgui.py 19 Nov 2002 12:41:44 -0000 1.6 *************** *** 23,27 **** from anygui.Events import * from anygui import application ! from anygui.Utils import log, setLogFile, logTraceback ################################################################ --- 23,27 ---- from anygui.Events import * from anygui import application ! from anygui.Utils import log, setLogFile ################################################################ *************** *** 36,40 **** class WinDLL(CDLL): ! def __getattr__(self, name): try: --- 36,40 ---- class WinDLL(CDLL): ! def __getattr__(self, name): try: *************** *** 208,214 **** PBM_SETRANGE=WM_USER+1 ! _verbose=0 ! if _verbose: ! setLogFile('/tmp/dbg.txt') class t_rect(Structure): --- 208,214 ---- PBM_SETRANGE=WM_USER+1 ! #_verbose=0 ! #if _verbose: ! # setLogFile('/tmp/dbg.txt') class t_rect(Structure): *************** *** 264,268 **** def widgetSetUp(self): ! if _verbose: log('widgetSetup',str(self)) self.proxy.container.wrapper.widget_map[self.widget] = self SendMessage(self.widget, --- 264,268 ---- def widgetSetUp(self): ! #if _verbose: log('widgetSetup',str(self)) self.proxy.container.wrapper.widget_map[self.widget] = self SendMessage(self.widget, *************** *** 273,277 **** def internalProd(self): ! if _verbose: log('internalProd',str(self)) self.proxy.push(blocked=['container']) --- 273,277 ---- def internalProd(self): ! #if _verbose: log('internalProd',str(self)) self.proxy.push(blocked=['container']) *************** *** 284,288 **** h = b-t ! if _verbose: log(str(self),'getGeometry',l,t,w,h) try: p = t_point() --- 284,288 ---- h = b-t ! #if _verbose: log(str(self),'getGeometry',l,t,w,h) try: p = t_point() *************** *** 290,298 **** ScreenToClient(self.proxy.container.wrapper.widget,byref(p)) l,t = p.x, p.y ! if _verbose: log(' -->', l,t,w,h) except AttributeError: pass - except: - logTraceback(None) return l,t,w,h --- 290,296 ---- ScreenToClient(self.proxy.container.wrapper.widget,byref(p)) l,t = p.x, p.y ! #if _verbose: log(' -->', l,t,w,h) except AttributeError: pass return l,t,w,h *************** *** 329,333 **** def setGeometry(self,x,y,width,height): if self.widget: ! if _verbose: log(str(self),'setGeometry', x,y,width,height) SetWindowPos(self.widget, 0, x, y, width, height, SWP_NOACTIVATE | SWP_NOZORDER) UpdateWindow(self.widget) --- 327,331 ---- def setGeometry(self,x,y,width,height): if self.widget: ! #if _verbose: log(str(self),'setGeometry', x,y,width,height) SetWindowPos(self.widget, 0, x, y, width, height, SWP_NOACTIVATE | SWP_NOZORDER) UpdateWindow(self.widget) *************** *** 335,339 **** def setVisible(self,visible): if self.widget: ! if _verbose: log(str(self),'setVisible', visible, self.widget) ShowWindow(self.widget, visible and SW_SHOWNORMAL or SW_HIDE) --- 333,337 ---- def setVisible(self,visible): if self.widget: ! #if _verbose: log(str(self),'setVisible', visible, self.widget) ShowWindow(self.widget, visible and SW_SHOWNORMAL or SW_HIDE) *************** *** 357,361 **** def setText(self,text): if not self.widget: return ! if _verbose: log("%s.SetWindowText('%s'(%s)) hwnd=%s(%s) self=%s" % (self.__class__.__name__,text,type(text),self.widget,type(self.widget),str(self))) SetWindowText(self.widget,c_string(_to_native(text))) --- 355,359 ---- def setText(self,text): if not self.widget: return ! #if _verbose: log("%s.SetWindowText('%s'(%s)) hwnd=%s(%s) self=%s" % (self.__class__.__name__,text,type(text),self.widget,type(self.widget),str(self))) SetWindowText(self.widget,c_string(_to_native(text))) *************** *** 551,555 **** def _WM_COMMAND(self, hwnd, msg, wParam, lParam): ! if _verbose: log("ContainerMixin _WM_COMMAND called for %s"%self) # lParam: handle of control (or NULL, if not from a control) # HIWORD(wParam): notification code --- 549,553 ---- def _WM_COMMAND(self, hwnd, msg, wParam, lParam): ! #if _verbose: log("ContainerMixin _WM_COMMAND called for %s"%self) # lParam: handle of control (or NULL, if not from a control) # HIWORD(wParam): notification code *************** *** 559,571 **** child_window = self.widget_map[lParam] except KeyError: ! if _verbose: log("NO SUCH CHILD WINDOW %s"%lParam) # we receive (when running test_textfield.py) # EN_CHANGE (0x300) and EN_UPDATE (0x400) notifications # here even before the call to CreateWindow returns. return -1 ! except: ! logTraceback(None) ! return -1 ! if _verbose: log("Dispatching to child %s"%child_window) return child_window._WM_COMMAND(hwnd, msg, wParam, lParam) --- 557,566 ---- child_window = self.widget_map[lParam] except KeyError: ! #if _verbose: log("NO SUCH CHILD WINDOW %s"%lParam) # we receive (when running test_textfield.py) # EN_CHANGE (0x300) and EN_UPDATE (0x400) notifications # here even before the call to CreateWindow returns. return -1 ! #if _verbose: log("Dispatching to child %s"%child_window) return child_window._WM_COMMAND(hwnd, msg, wParam, lParam) *************** *** 613,618 **** IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE) except: - logTraceback(None) log(WinError()) def handle(self): --- 608,613 ---- IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE) except: log(WinError()) + raise def handle(self): *************** *** 621,625 **** import zlib, base64, tempfile, os fn = tempfile.mktemp(self.suffix) ! if _verbose: log('resource:','fn',fn,'kind',self.kind) open(fn,'wb').write(zlib.decompress(base64.decodestring(self.text))) try: --- 616,620 ---- import zlib, base64, tempfile, os fn = tempfile.mktemp(self.suffix) ! #if _verbose: log('resource:','fn',fn,'kind',self.kind) open(fn,'wb').write(zlib.decompress(base64.decodestring(self.text))) try: *************** *** 629,633 **** else: self._fn2handle(self.text) ! if _verbose: log('resource:','-->',self._handle) return self._handle --- 624,628 ---- else: self._fn2handle(self.text) ! #if _verbose: log('resource:','-->',self._handle) return self._handle *************** *** 647,651 **** def _WM_PAINT(self, hwnd, msg, wParam, lParam): if not self.widget: return -1 ! if _verbose: log('Image _WM_PAINT self.__dict__',self.__dict__) r = ComponentWrapper._WM_PAINT(self, hwnd, msg, wParam, lParam) self.draw() --- 642,646 ---- def _WM_PAINT(self, hwnd, msg, wParam, lParam): if not self.widget: return -1 ! #if _verbose: log('Image _WM_PAINT self.__dict__',self.__dict__) r = ComponentWrapper._WM_PAINT(self, hwnd, msg, wParam, lParam) self.draw() *************** *** 653,661 **** def draw(self,*arg,**kw): ! if _verbose: log('Image.draw',self.widget,self._image) if not self.widget or not self._image: return dc = GetDC(self.widget) memdc = gdi32.CreateCompatibleDC(dc) ! if _verbose: log('Image.draw dc, memdc',dc,memdc) old = gdi32.SelectObject(memdc,self._image.handle()) gdi32.BitBlt(dc,0,0,self.proxy.width,self.proxy.height,memdc,0,0,0x00CC0020) --- 648,656 ---- def draw(self,*arg,**kw): ! #if _verbose: log('Image.draw',self.widget,self._image) if not self.widget or not self._image: return dc = GetDC(self.widget) memdc = gdi32.CreateCompatibleDC(dc) ! #if _verbose: log('Image.draw dc, memdc',dc,memdc) old = gdi32.SelectObject(memdc,self._image.handle()) gdi32.BitBlt(dc,0,0,self.proxy.width,self.proxy.height,memdc,0,0,0x00CC0020) *************** *** 689,698 **** w = r-l-self._extraWidth h = b-t-self._extraHeight ! if _verbose: log(str(self),'getGeometry WindowWrapper:', l,t,w,h) return l,t,w,h def setGeometry(self,x,y,width,height): if not self.widget: return ! if _verbose: log('WindowWrapper: setGeometry',str(self),self.widget,x,y,width,height,self._extraWidth,self._extraHeight) # take account for title bar and borders SetWindowPos(self.widget, --- 684,693 ---- w = r-l-self._extraWidth h = b-t-self._extraHeight ! #if _verbose: log(str(self),'getGeometry WindowWrapper:', l,t,w,h) return l,t,w,h def setGeometry(self,x,y,width,height): if not self.widget: return ! #if _verbose: log('WindowWrapper: setGeometry',str(self),self.widget,x,y,width,height,self._extraWidth,self._extraHeight) # take account for title bar and borders SetWindowPos(self.widget, *************** *** 725,739 **** def widgetSetUp(self): ! if _verbose: log('Windowwrapper widgetSetup',str(self),'application()',application(),'isRunning()',application().isRunning(),'widget',getattr(self,'widget',None)) application().widget_map[self.widget] = self SendMessage(self.widget, WM_SETFONT, self._hfont, 0) def internalProd(self): ! if _verbose: log('internalProd',str(self)) self.proxy.push(blocked=['container']) def _WM_SIZE(self, hwnd, msg, wParam, lParam): w, h = lParam & 0xFFFF, lParam >> 16 ! if _verbose: log('WindowWrapper: _WM_SIZE _width,_height,w,h=',self._width,self._height,w,h,) if self._width==0 and self._height==0: # This will be the case when the widget is first --- 720,734 ---- def widgetSetUp(self): ! #if _verbose: log('Windowwrapper widgetSetup',str(self),'application()',application(),'isRunning()',application().isRunning(),'widget',getattr(self,'widget',None)) application().widget_map[self.widget] = self SendMessage(self.widget, WM_SETFONT, self._hfont, 0) def internalProd(self): ! #if _verbose: log('internalProd',str(self)) self.proxy.push(blocked=['container']) def _WM_SIZE(self, hwnd, msg, wParam, lParam): w, h = lParam & 0xFFFF, lParam >> 16 ! #if _verbose: log('WindowWrapper: _WM_SIZE _width,_height,w,h=',self._width,self._height,w,h,) if self._width==0 and self._height==0: # This will be the case when the widget is first *************** *** 746,750 **** dw = w - self._width dh = h - self._height ! if _verbose: log('dw,dh=',dw,dh) self._width = w --- 741,745 ---- dw = w - self._width dh = h - self._height ! #if _verbose: log('dw,dh=',dw,dh) self._width = w *************** *** 759,763 **** def _WM_COMMAND(self, hwnd, msg, wParam, lParam): ! if _verbose: log('WindowWrapper: _WM_COMMAND',str(self),hwnd,msg,wParam,lParam) return ContainerMixin._WM_COMMAND(self, hwnd, msg, wParam, lParam) --- 754,758 ---- def _WM_COMMAND(self, hwnd, msg, wParam, lParam): ! #if _verbose: log('WindowWrapper: _WM_COMMAND',str(self),hwnd,msg,wParam,lParam) return ContainerMixin._WM_COMMAND(self, hwnd, msg, wParam, lParam) *************** *** 799,803 **** global _app if not _app: ! if _verbose: log('Application.__init__:start',str(self)) AbstractApplication.__init__(self) if not self._wndclass: self._register_class() --- 794,798 ---- global _app if not _app: ! #if _verbose: log('Application.__init__:start',str(self)) AbstractApplication.__init__(self) if not self._wndclass: self._register_class() *************** *** 805,809 **** FrameWrapper._wndclass = self._wndclass _app = self ! if _verbose: log('Application.__init__:end',str(self)) def __str__(self): --- 800,804 ---- FrameWrapper._wndclass = self._wndclass _app = self ! #if _verbose: log('Application.__init__:end',str(self)) def __str__(self): *************** *** 814,818 **** def _register_class(self): ! if _verbose: log('Application._register_class:start',str(self)) class WINDOWPROC(CFunction): _types_ = "iiii" --- 809,813 ---- def _register_class(self): ! #if _verbose: log('Application._register_class:start',str(self)) class WINDOWPROC(CFunction): _types_ = "iiii" *************** *** 847,871 **** self.__class__._wndclass = RegisterClass(byref(wc)) ## assert self.__class__._wndclass, "RegisterClass --> %s" % WinError() ! if _verbose: log('Application._register_class:end',str(self)) def _wndproc(self, hwnd, msg, wParam, lParam): ! if _verbose: log("%s._wndproc called with %s,%s,%s,%s"%(self.__class__.__name__,hex(hwnd),hex(msg),hex(wParam),hex(lParam))) try: window = self.widget_map[hwnd] except: ! if _verbose: log("\tNO WINDOW TO DISPATCH???") return DefWindowProc(hwnd, msg, wParam, lParam) ! try: ! _dispatch = self._dispatch.get(msg,_dispatch_DEFAULT) ! x = _dispatch(window,hwnd,msg,wParam,lParam) ! except: ! if _verbose: logTraceback(None,'_wndproc.1') ! x = -1 ! if _verbose: log("\tdispatch %s to %s %s\n" % (_dispatch.__name__[9:],window.__class__.__name__,window),"\t ==>",x) return x def internalRun(self): ! if _verbose: log('internalRun:Begin',str(self)) class MSG(Structure): _fields_ = ( --- 842,862 ---- self.__class__._wndclass = RegisterClass(byref(wc)) ## assert self.__class__._wndclass, "RegisterClass --> %s" % WinError() ! #if _verbose: log('Application._register_class:end',str(self)) def _wndproc(self, hwnd, msg, wParam, lParam): ! #if _verbose: log("%s._wndproc called with %s,%s,%s,%s"%(self.__class__.__name__,hex(hwnd),hex(msg),hex(wParam),hex(lParam))) try: window = self.widget_map[hwnd] except: ! #if _verbose: log("\tNO WINDOW TO DISPATCH???") return DefWindowProc(hwnd, msg, wParam, lParam) ! _dispatch = self._dispatch.get(msg,_dispatch_DEFAULT) ! x = _dispatch(window,hwnd,msg,wParam,lParam) ! #if _verbose: log("\tdispatch %s to %s %s\n" % (_dispatch.__name__[9:],window.__class__.__name__,window),"\t ==>",x) return x def internalRun(self): ! #if _verbose: log('internalRun:Begin',str(self)) class MSG(Structure): _fields_ = ( *************** *** 881,930 **** msg = MSG() while GetMessage(byref(msg), 0, 0, 0): ! try: ! if _verbose: log('internalRun: loopstart',msg) ! TranslateMessage(byref(msg)) ! DispatchMessage(byref(msg)) ! if _verbose: log('internalRun: loopend') ! except: ! logTraceback(None) ! if _verbose: log('internalRun: finish') def internalRemove(self): if not self._windows: ! if _verbose: log('PostQuitMessage(0)') PostQuitMessage(0) global _app _app = None ! if 1 and _verbose: ! n = 0 ! from inspect import isclass, ismethod, getmembers ! def makeTBWrap(C,methodname): ! import new ! global n ! oldmethodname = '_%d_tbWrap_%s' % (n,methodname) ! oldmethod = getattr(C,methodname) ! S = [] ! s = S.append ! s('def %s(self,*A,**K):' % methodname) ! s('\ttry:') ! s('\t\treturn self.%s(*A,**K)' % oldmethodname) ! s('\texcept:') ! s('\t\tfrom anygui.Utils import logTraceback') ! s('\t\tlogTraceback(None,\'[%s.%s]\')' % (C.__name__,methodname)) ! s('\t\traise') ! s('setattr(C,oldmethodname,oldmethod)') ! s('setattr(C,methodname,new.instancemethod(%s,None,C))' % methodname) ! exec '\n'.join(S) + '\n' in locals() ! n += 1 ! ! for a in __all__: ! C = globals()[a] ! if isclass(C): ! M = [] ! m = M.append ! for methodname,method in getmembers(C): ! if ismethod(method): m(methodname) ! for methodname in M: makeTBWrap(C,methodname) ################################################################ --- 872,897 ---- msg = MSG() while GetMessage(byref(msg), 0, 0, 0): ! TranslateMessage(byref(msg)) ! DispatchMessage(byref(msg)) ! #if _verbose: log('internalRun: finish') def internalRemove(self): if not self._windows: ! #if _verbose: log('PostQuitMessage(0)') PostQuitMessage(0) global _app _app = None ! #if 1 and _verbose: ! # try: ! # import tbwrap ! # from inspect import isclass ! # from anygui.Utils import _logger ! # for a in __all__: ! # C = globals()[a] ! # if isclass(C): ! # tbwrap.tracebackWrap(C,out=_logger._f) ! # except ImportError: ! # pass ################################################################ |
From: Magnus L. H. <ml...@pr...> - 2002-11-18 01:58:05
|
Update of /cvsroot/anygui/anygui/test In directory sc8-pr-cvs1:/tmp/cvs-serv3539/test Added Files: test_win_before_app.py Removed Files: test_borg_application.py Log Message: --- NEW FILE: test_win_before_app.py --- from anygui import * win = Window() app = Application() app.add(win) app.run() --- test_borg_application.py DELETED --- |
From: Magnus L. H. <ml...@pr...> - 2002-11-18 01:58:05
|
Update of /cvsroot/anygui/anygui/lib/anygui/backends In directory sc8-pr-cvs1:/tmp/cvs-serv3539/lib/anygui/backends Modified Files: qtgui.py Log Message: Index: qtgui.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/qtgui.py,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** qtgui.py 17 Nov 2002 02:08:30 -0000 1.26 --- qtgui.py 18 Nov 2002 01:58:02 -0000 1.27 *************** *** 2,5 **** --- 2,7 ---- # Imports + # FIXME: The "if widget" stuff doesn't seem quite consistent. [mlh] + try: # Anygui specific imports *************** *** 76,80 **** def internalDestroy(self): if DEBUG: print "in internalDestroy of: ", self ! self.widget.destroy() def rebuild(self): pass --- 78,83 ---- def internalDestroy(self): if DEBUG: print "in internalDestroy of: ", self ! if self.widget: ! self.widget.destroy() def rebuild(self): pass *************** *** 313,317 **** btnGroup = QButtonGroup(container.wrapper.widget) RadioButtonWrapper.groupMap[group] = btnGroup ! btnGroup.insert(self.widget) elif self.proxy not in group._items: group._items.append(self.proxy) --- 316,320 ---- btnGroup = QButtonGroup(container.wrapper.widget) RadioButtonWrapper.groupMap[group] = btnGroup ! btnGroup.insert(self.widget) # What if widget is None? elif self.proxy not in group._items: group._items.append(self.proxy) *************** *** 320,324 **** def setValue(self, value): ! self.widget.setChecked(bool(value)) def getValue(self): --- 323,328 ---- def setValue(self, value): ! if self.widget: ! self.widget.setChecked(bool(value)) def getValue(self): *************** *** 537,542 **** dy = ny - self.proxy.state['y'] ! self.proxy.x ! self.proxy.y #self.proxy.moved(dx, dy) --- 541,546 ---- dy = ny - self.proxy.state['y'] ! self.proxy.x # FIXME: What's this? [mlh] ! self.proxy.y # FIXME: What's this? [mlh] #self.proxy.moved(dx, dy) |
From: Magnus L. H. <ml...@us...> - 2002-11-17 18:43:50
|
Update of /cvsroot/anygui/anygui/test In directory usw-pr-cvs1:/tmp/cvs-serv14652/test Added Files: test_borg_application.py Log Message: --- NEW FILE: test_borg_application.py --- from anygui import * win = Window(title="You will be assimilated!") app = Application() app.add(win) app.run() |
From: Magnus L. H. <ml...@us...> - 2002-11-17 18:42:11
|
Update of /cvsroot/anygui/anygui/lib/anygui/frontend_wrappers In directory usw-pr-cvs1:/tmp/cvs-serv11968/lib/anygui/frontend_wrappers Modified Files: ComboBoxWrapper.py __init__.py Log Message: Started to fiddle with a Borg Application, and tried to fix line endings. Index: ComboBoxWrapper.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/frontend_wrappers/ComboBoxWrapper.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ComboBoxWrapper.py 16 Nov 2002 16:44:59 -0000 1.2 --- ComboBoxWrapper.py 17 Nov 2002 18:42:07 -0000 1.3 *************** *** 1,266 **** ! import anygui ! from anygui.Wrappers import AbstractWrapper ! from anygui.Events import link, send ! from time import sleep ! ! """ ! This is a generic implementation of the ComboBox that is provided for ! backends that do not provide the ComboBox widget in their respective ! toolkits. This also models the creation of Mega-widgets using the ! Anygui GUI API. ! """ ! ! #==============================================================# ! # Factoring out creational code... ! ! class Wrapper(AbstractWrapper): ! ! def __init__(self, *args, **kwds): ! AbstractWrapper.__init__(self, *args, **kwds) ! ! # 'container' before everything... ! self.setConstraints('container','x','y','width','height','items','selection') ! # Note: x,y,width, and height probably have no effect here, due to ! # the way getSetters() works. I'm not sure if that's something ! # that needs fixing or not... - jak ! ! self.addConstraint('geometry', 'visible') ! # FIXME: Is this the right place to put it? Make sure ! # 'geometry' implies 'x', 'y', etc. too (see Wrappers.py) ! # Also, this scheme will cause flashing... (place before ! # place_forget) ! ! def enterMainLoop(self): ! self.proxy.push() ! ! def rebuild(self): pass ! ! def rebuildAll(self): pass ! ! #==============================================================# ! ! class ComboBoxWrapper(Wrapper): ! _connected = 0 ! _comps = 0 ! _textFld = None ! _popupBtn = None ! _itemLbx = None ! _currentItem = 0 ! _popupOpen = 0 ! _visible = 1 ! _enabled = 1 ! _loop = 0 ! _btnWidth = 0 ! _lbxHeight = 0 ! _cbxHeight = 0 ! ! ! def _createWidgets(self): ! state = self.proxy.state ! x = state['x'] ! y = state['y'] ! width = state['width'] ! height = state['height'] ! self._lbxHeight = state['lbxHeight'] ! items = list(self.proxy.items) ! self._textFld = anygui.TextField(geometry = ( x, ! y, ! width - height, ! height )) ! self._popupBtn = anygui.Button(text = 'v', ! geometry = ( x + width - height, ! y, ! height, ! height )) ! self._itemLbx = anygui.ListBox(visible = 0, ! items = items, ! geometry = ( x, ! y + height, ! width, ! self._lbxHeight )) ! ! ! def _setupBtn(self): ! self._popupBtn.container = self.proxy.container ! ! def _setupTxtFld(self): ! self._textFld.container = self.proxy.container ! ! def _setupLbx(self): ! self._itemLbx.container = self.proxy.container ! ! def widgetFactory(self, *args, **kws): ! #print '>> in widgetFactory...' ! self._createWidgets() ! self._comps = 1 ! class Class: pass ! widget = Class() ! return widget ! ! def widgetSetUp(self): ! if self._comps and not self._connected: ! #print '>> in widgetSetUp' ! link(self._popupBtn, self._handlePopup) ! link(self._itemLbx, self._handleSelection) ! self._connected = 1 ! ! def setupChildWidgets(self): ! if self._comps: ! #print '>> in setupChildWidgets' ! self._setupTxtFld() ! self._setupBtn() ! self._setupLbx() ! ! def setContainer(self, container): ! if container is None: return ! parent = container.wrapper.widget ! try: ! assert parent is None ! except (AssertionError): ! self.create(parent) ! self.proxy.push(blocked=['container']) ! self.setupChildWidgets() ! ! def _handlePopup(self, event): ! #print '>> handling Popup...' ! self._loop = 1 ! self._itemLbx.visible = self._popupOpen = not self._popupOpen ! self._loop = 0 ! ! def _handleSelection(self, event): ! #print '>> handling Selection...' ! if not self._loop: ! self._loop = 1 ! self._textFld.text = self._itemLbx.items[self._itemLbx.selection] ! self._itemLbx.visible = 0 ! sleep(0.1) ! self._popupOpen = 0 ! send(self.proxy, 'select') ! self._loop = 0 ! ! def setX(self, x): ! if self._comps: ! dummy, y, width, height = self.geometry ! self.setGeometry(x, y, width, height) ! ! def setY(self, y): ! if self._comps: ! x, dummy, width, height = self.geometry ! self.setGeometry(x, y, width, height) ! ! def setWidth(self, width): ! if self._comps: ! x, y, dummy, height = self.geometry ! self.setGeometry(x, y, width, height) ! ! def setHeight(self, height): ! if self._comps: ! x, y, width, dummy = self.geometry ! self.setGeometry(x, y, width, height) ! ! def setPosition(self, x, y): ! if self._comps: ! dummy, dummy2, width, height = self.geometry ! self.setGeometry(x, y, width, height) ! ! def setSize(self, width, height): ! if self._comps: ! x, y, dummy, dummy2 = self.geometry ! self.setGeometry(x, y, width, height) ! ! def getGeometry(self): ! if self._comps: ! x, y, dummy, height = self._textFld.geometry ! d, d1, width, d2 = self._itemLbx.geometry ! return (x, y, width, height) ! ! def setGeometry(self, x, y, width, height): ! if self._comps: ! self._loop = 1 ! self._textFld.geometry = (x, ! y, ! width - height, ! height) ! self._popupBtn.geometry = (x + width - height, ! y, ! height, ! height) ! self._itemLbx.geometry = (x, ! y + height, ! width, ! self._lbxHeight) ! self._loop = 0 ! ! def getSelection(self): ! if self._comps: ! return self._itemLbx.selection ! ! def setSelection(self, selection): ! if self._comps: ! self._loop = 1 ! self._itemLbx.selection = selection ! self._textFld.text = self._itemLbx.items[selection] ! self._loop = 0 ! ! def getItems(self): ! if self._comps: ! return self._itemLbx.items ! ! def setItems(self, items): ! if self._comps: ! #print '>> in setItems(items) -> ', items ! self._loop = 1 ! self._itemLbx.items = items ! self._loop = 0 ! ! def getText(self): ! items = list(self._itemLbx.items) ! text = self._textFld.text ! if text in items: ! return text ! else: ! return items[self._itemLbx.selection] ! ! def getLbxHeight(self): ! return self._lbxHeight ! ! def setLbxHeight(self, lbxHeight): ! if self._comps: ! self._lbxHeight = lbxHeight ! x, y, width, height = self.proxy.geometry ! self._itemLbx.geometry = ( x, ! y + height, ! width, ! lbxHeight) ! ! def getVisible(self): ! return self._visible ! ! def setVisibile(self, visible): ! if self._comps: ! self._visible = visible ! if self._popupOpen: ! self._itemLbx.visible = visible ! self._popupOpen = visible ! self._textFld.visible = visible ! self._popupBtn.visible = visible ! ! def getEnabled(self): ! return self._enabled ! ! def setEnabled(self, enabled): ! if self._comps: ! if self._popupOpen: ! self._itemLbx.visible = 0 ! self._popupOpen = 0 ! self._enabled = enabled ! self._textFld.enabled = enabled ! self._popupBtn.enabled = enabled ! ! def internalDestroy(self): ! if self._comps: ! self._connected = 0 ! self._textFld.destroy() ! self._popupBtn.destroy() ! self._itemLbx.destroy() ! self._comps = 0 --- 1,266 ---- ! import anygui ! from anygui.Wrappers import AbstractWrapper ! from anygui.Events import link, send ! from time import sleep ! ! """ ! This is a generic implementation of the ComboBox that is provided for ! backends that do not provide the ComboBox widget in their respective ! toolkits. This also models the creation of Mega-widgets using the ! Anygui GUI API. ! """ ! ! #==============================================================# ! # Factoring out creational code... ! ! class Wrapper(AbstractWrapper): ! ! def __init__(self, *args, **kwds): ! AbstractWrapper.__init__(self, *args, **kwds) ! ! # 'container' before everything... ! self.setConstraints('container','x','y','width','height','items','selection') ! # Note: x,y,width, and height probably have no effect here, due to ! # the way getSetters() works. I'm not sure if that's something ! # that needs fixing or not... - jak ! ! self.addConstraint('geometry', 'visible') ! # FIXME: Is this the right place to put it? Make sure ! # 'geometry' implies 'x', 'y', etc. too (see Wrappers.py) ! # Also, this scheme will cause flashing... (place before ! # place_forget) ! ! def enterMainLoop(self): ! self.proxy.push() ! ! def rebuild(self): pass ! ! def rebuildAll(self): pass ! ! #==============================================================# ! ! class ComboBoxWrapper(Wrapper): ! _connected = 0 ! _comps = 0 ! _textFld = None ! _popupBtn = None ! _itemLbx = None ! _currentItem = 0 ! _popupOpen = 0 ! _visible = 1 ! _enabled = 1 ! _loop = 0 ! _btnWidth = 0 ! _lbxHeight = 0 ! _cbxHeight = 0 ! ! ! def _createWidgets(self): ! state = self.proxy.state ! x = state['x'] ! y = state['y'] ! width = state['width'] ! height = state['height'] ! self._lbxHeight = state['lbxHeight'] ! items = list(self.proxy.items) ! self._textFld = anygui.TextField(geometry = ( x, ! y, ! width - height, ! height )) ! self._popupBtn = anygui.Button(text = 'v', ! geometry = ( x + width - height, ! y, ! height, ! height )) ! self._itemLbx = anygui.ListBox(visible = 0, ! items = items, ! geometry = ( x, ! y + height, ! width, ! self._lbxHeight )) ! ! ! def _setupBtn(self): ! self._popupBtn.container = self.proxy.container ! ! def _setupTxtFld(self): ! self._textFld.container = self.proxy.container ! ! def _setupLbx(self): ! self._itemLbx.container = self.proxy.container ! ! def widgetFactory(self, *args, **kws): ! #print '>> in widgetFactory...' ! self._createWidgets() ! self._comps = 1 ! class Class: pass ! widget = Class() ! return widget ! ! def widgetSetUp(self): ! if self._comps and not self._connected: ! #print '>> in widgetSetUp' ! link(self._popupBtn, self._handlePopup) ! link(self._itemLbx, self._handleSelection) ! self._connected = 1 ! ! def setupChildWidgets(self): ! if self._comps: ! #print '>> in setupChildWidgets' ! self._setupTxtFld() ! self._setupBtn() ! self._setupLbx() ! ! def setContainer(self, container): ! if container is None: return ! parent = container.wrapper.widget ! try: ! assert parent is None ! except (AssertionError): ! self.create(parent) ! self.proxy.push(blocked=['container']) ! self.setupChildWidgets() ! ! def _handlePopup(self, event): ! #print '>> handling Popup...' ! self._loop = 1 ! self._itemLbx.visible = self._popupOpen = not self._popupOpen ! self._loop = 0 ! ! def _handleSelection(self, event): ! #print '>> handling Selection...' ! if not self._loop: ! self._loop = 1 ! self._textFld.text = self._itemLbx.items[self._itemLbx.selection] ! self._itemLbx.visible = 0 ! sleep(0.1) ! self._popupOpen = 0 ! send(self.proxy, 'select') ! self._loop = 0 ! ! def setX(self, x): ! if self._comps: ! dummy, y, width, height = self.geometry ! self.setGeometry(x, y, width, height) ! ! def setY(self, y): ! if self._comps: ! x, dummy, width, height = self.geometry ! self.setGeometry(x, y, width, height) ! ! def setWidth(self, width): ! if self._comps: ! x, y, dummy, height = self.geometry ! self.setGeometry(x, y, width, height) ! ! def setHeight(self, height): ! if self._comps: ! x, y, width, dummy = self.geometry ! self.setGeometry(x, y, width, height) ! ! def setPosition(self, x, y): ! if self._comps: ! dummy, dummy2, width, height = self.geometry ! self.setGeometry(x, y, width, height) ! ! def setSize(self, width, height): ! if self._comps: ! x, y, dummy, dummy2 = self.geometry ! self.setGeometry(x, y, width, height) ! ! def getGeometry(self): ! if self._comps: ! x, y, dummy, height = self._textFld.geometry ! d, d1, width, d2 = self._itemLbx.geometry ! return (x, y, width, height) ! ! def setGeometry(self, x, y, width, height): ! if self._comps: ! self._loop = 1 ! self._textFld.geometry = (x, ! y, ! width - height, ! height) ! self._popupBtn.geometry = (x + width - height, ! y, ! height, ! height) ! self._itemLbx.geometry = (x, ! y + height, ! width, ! self._lbxHeight) ! self._loop = 0 ! ! def getSelection(self): ! if self._comps: ! return self._itemLbx.selection ! ! def setSelection(self, selection): ! if self._comps: ! self._loop = 1 ! self._itemLbx.selection = selection ! self._textFld.text = self._itemLbx.items[selection] ! self._loop = 0 ! ! def getItems(self): ! if self._comps: ! return self._itemLbx.items ! ! def setItems(self, items): ! if self._comps: ! #print '>> in setItems(items) -> ', items ! self._loop = 1 ! self._itemLbx.items = items ! self._loop = 0 ! ! def getText(self): ! items = list(self._itemLbx.items) ! text = self._textFld.text ! if text in items: ! return text ! else: ! return items[self._itemLbx.selection] ! ! def getLbxHeight(self): ! return self._lbxHeight ! ! def setLbxHeight(self, lbxHeight): ! if self._comps: ! self._lbxHeight = lbxHeight ! x, y, width, height = self.proxy.geometry ! self._itemLbx.geometry = ( x, ! y + height, ! width, ! lbxHeight) ! ! def getVisible(self): ! return self._visible ! ! def setVisibile(self, visible): ! if self._comps: ! self._visible = visible ! if self._popupOpen: ! self._itemLbx.visible = visible ! self._popupOpen = visible ! self._textFld.visible = visible ! self._popupBtn.visible = visible ! ! def getEnabled(self): ! return self._enabled ! ! def setEnabled(self, enabled): ! if self._comps: ! if self._popupOpen: ! self._itemLbx.visible = 0 ! self._popupOpen = 0 ! self._enabled = enabled ! self._textFld.enabled = enabled ! self._popupBtn.enabled = enabled ! ! def internalDestroy(self): ! if self._comps: ! self._connected = 0 ! self._textFld.destroy() ! self._popupBtn.destroy() ! self._itemLbx.destroy() ! self._comps = 0 Index: __init__.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/frontend_wrappers/__init__.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** __init__.py 16 Nov 2002 12:41:11 -0000 1.1 --- __init__.py 17 Nov 2002 18:42:07 -0000 1.2 *************** *** 1,7 **** ! from ComboBoxWrapper import ComboBoxWrapper ! ! __all__=""" ! ! ComboBoxWrapper ! """.split() --- 1,7 ---- ! from ComboBoxWrapper import ComboBoxWrapper ! ! __all__=""" ! ! ComboBoxWrapper ! """.split() |
From: Magnus L. H. <ml...@us...> - 2002-11-17 18:42:11
|
Update of /cvsroot/anygui/anygui/lib/anygui In directory usw-pr-cvs1:/tmp/cvs-serv11968/lib/anygui Modified Files: Applications.py ComboBoxes.py __init__.py Log Message: Started to fiddle with a Borg Application, and tried to fix line endings. Index: Applications.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/Applications.py,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** Applications.py 16 Nov 2002 17:50:03 -0000 1.26 --- Applications.py 17 Nov 2002 18:42:07 -0000 1.27 *************** *** 10,15 **** --- 10,17 ---- _name = 'Anygui App' _version = '0' + #__shared_state = {} # For the Borg pattern def __init__(self, **kwds): + #self.__dict__ = self.__shared_state # Borg behaviour Attrib.__init__(self) self.parseKwds(**kwds) Index: ComboBoxes.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/ComboBoxes.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** ComboBoxes.py 16 Nov 2002 12:45:23 -0000 1.1 --- ComboBoxes.py 17 Nov 2002 18:42:07 -0000 1.2 *************** *** 1,10 **** ! from anygui.Components import Component ! from anygui import Defaults, backendModule, frontEndWrappers ! ! class ComboBox(Component, Defaults.ComboBox): ! ! def wrapperFactory(self): ! try: ! return backendModule().ComboBoxWrapper(self) ! except(AttributeError): return frontEndWrappers().ComboBoxWrapper(self) --- 1,10 ---- ! from anygui.Components import Component ! from anygui import Defaults, backendModule, frontEndWrappers ! ! class ComboBox(Component, Defaults.ComboBox): ! ! def wrapperFactory(self): ! try: ! return backendModule().ComboBoxWrapper(self) ! except(AttributeError): return frontEndWrappers().ComboBoxWrapper(self) Index: __init__.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/__init__.py,v retrieving revision 1.74 retrieving revision 1.75 diff -C2 -r1.74 -r1.75 *** __init__.py 16 Nov 2002 12:41:10 -0000 1.74 --- __init__.py 17 Nov 2002 18:42:07 -0000 1.75 *************** *** 1,178 **** ! #_backends = 'msw gtk java wx tk beos qt curses text' ! _backends = 'java msw wx qt tk' ! ! # 20020208:mlh -- starting to experiment with new architecture ! __all__ = """ ! ! Application ! Frame ! GroupBox ! Button ! CheckBox ! Options ! Window ! Label ! TextField ! TextArea ! ListBox ! ComboBox ! RadioButton ! RadioGroup ! BooleanModel ! ListModel ! TextModel ! any ! application ! backend ! link ! send ! sender ! setup ! unlink ! unlinkHandler ! unlinkMethods ! unlinkSource ! AboutDialog ! OpenFileDialog ! ! """.split() ! ! def application(): ! 'Returns the global application object' ! #global _application ! if not _application: ! #_application = factory()._map['Application']() ! raise RuntimeError, 'no application exists' ! return _application ! ! def backend(): ! 'Returns the name of the current backend' ! if not _backend_name: ! raise RuntimeError, 'no backend exists' ! return _backend_name ! ! def backendModule(): ! 'Returns the current backend module' ! if not _backend: ! raise RuntimeError, 'no backend exists' ! return _backend ! ! def frontEndWrappers(): ! 'Returns the list of available frontend widgets' ! if not _frontend_wrappers: ! raise RuntimeError, 'no frontend wrappers exists' ! return _frontend_wrappers ! ! def setup(self, **kwds): ! 'Used to configure Anygui' ! raise NotImplementedError ! ! ! ########## Get the list of frontend wrappers ############################## ! import anygui.frontend_wrappers as few ! _frontend_wrappers = few ! ########## End get list of frontend wrappers ############################## ! ! ########## Begin Imports ################################################## ! ! import os, sys ! from anygui.Attribs import Attrib ! from anygui.Utils import Options ! #from anygui.Applications import AbstractApplication ! from anygui.Windows import Window ! from anygui.Buttons import Button ! #from anygui.Canvases import Canvas ! #from anygui import Colors ! from anygui.Labels import Label ! from anygui.CheckBoxes import CheckBox ! from anygui.RadioButtons import RadioButton ! from anygui.RadioGroups import RadioGroup ! from anygui.TextFields import TextField ! from anygui.TextAreas import TextArea ! from anygui.ListBoxes import ListBox ! from anygui.ComboBoxes import ComboBox ! from anygui.Models import BooleanModel, ListModel, TextModel ! from anygui.Events import * ! from anygui.Frames import Frame, GroupBox ! from anygui.LayoutManagers import LayoutManager, Placer ! from anygui.Menus import MenuBar, Menu, MenuCommand, MenuCheck, MenuSeparator ! ! # import objects from dialogs ! from anygui.dialogs import * ! ! ########### End Imports ################################################### ! ! """ ! # Original export list: ! __all__ = ['application', 'Application', ! 'Window', 'Button', 'CheckBox', 'Label', ! 'RadioButton', 'RadioGroup', 'ListBox', 'TextField', 'TextArea', ! 'BooleanModel', 'ListModel', 'TextModel', 'Options', ! 'LayoutManager', 'Placer', ! 'send', 'sender', 'link', 'unlink', 'any', 'unlinkSource', 'unlinkHandler', ! 'unlinkMethods', 'Frame', 'Placer', 'backend' ! ] # FIXME: Add stuff from Colors and Fonts ! """ ! ! # Try to get the environment variables ANYGUI_WISHLIST (overrides ! # anygui.wishlist), and ANYGUI_DEBUG (to print out stacktraces when ! # importing backends): ! ! if hasattr(sys, 'registry'): ! # Jython: ! wishlist = sys.registry.getProperty('ANYGUI_WISHLIST', _backends).split() ! DEBUG = sys.registry.getProperty('ANYGUI_DEBUG', '0') ! else: ! # CPython: ! wishlist = os.environ.get('ANYGUI_WISHLIST', _backends).split() ! DEBUG = os.environ.get('ANYGUI_DEBUG', '0') ! ! # Non-empty string may be zero (i.e. false): ! if DEBUG: ! try: ! DEBUG = int(DEBUG) ! except ValueError: ! pass ! ! _application = None ! _backend = None ! _backend_name = None ! ! def _dotted_import(name): ! # version of __import__ which handles dotted names ! # copied from python docs for __import__ ! import string ! mod = __import__(name, globals(), locals(), []) ! components = string.split(name, '.') ! for comp in components[1:]: ! mod = getattr(mod, comp) ! return mod ! ! def _backend_passthrough(): ! global _backends, _backend, _backend_name ! _backends = _backends.split() ! _backends = [b for b in _backends if not b in wishlist] ! if wishlist: ! try: ! idx = wishlist.index('*') ! wishlist[idx:idx+1] = _backends ! except ValueError: pass ! _backends = wishlist ! for name in _backends: ! try: ! mod = _dotted_import('anygui.backends.%sgui' % name,) ! for key in mod.__all__: ! globals()[key] = mod.__dict__[key] ! except (ImportError, AttributeError, KeyError): ! if DEBUG and not (DEBUG in _backends and not DEBUG==name): ! import traceback ! traceback.print_exc() ! continue ! else: ! _backend_name = name ! _backend = mod ! return ! raise RuntimeError, "no usable backend found" ! ! # Pass the backend namespace through: ! _backend_passthrough() --- 1,179 ---- ! #_backends = 'msw gtk java wx tk beos qt curses text' ! _backends = 'java msw wx qt tk' ! ! # 20020208:mlh -- starting to experiment with new architecture ! __all__ = """ ! ! Application ! Frame ! GroupBox ! Button ! CheckBox ! Options ! Window ! Label ! TextField ! TextArea ! ListBox ! ComboBox ! RadioButton ! RadioGroup ! BooleanModel ! ListModel ! TextModel ! any ! application ! backend ! link ! send ! sender ! setup ! unlink ! unlinkHandler ! unlinkMethods ! unlinkSource ! AboutDialog ! OpenFileDialog ! ! """.split() ! ! # When the Borg pattern is in use, this is no longer needed: ! def application(): ! 'Returns the global application object' ! #global _application ! if not _application: ! #_application = backendModule().Application() ! raise RuntimeError, 'no application exists' ! return _application ! ! def backend(): ! 'Returns the name of the current backend' ! if not _backend_name: ! raise RuntimeError, 'no backend exists' ! return _backend_name ! ! def backendModule(): ! 'Returns the current backend module' ! if not _backend: ! raise RuntimeError, 'no backend exists' ! return _backend ! ! def frontEndWrappers(): ! 'Returns the list of available frontend widgets' ! if not _frontend_wrappers: ! raise RuntimeError, 'no frontend wrappers exists' ! return _frontend_wrappers ! ! def setup(self, **kwds): ! 'Used to configure Anygui' ! raise NotImplementedError ! ! ! ########## Get the list of frontend wrappers ############################## ! import anygui.frontend_wrappers as few ! _frontend_wrappers = few ! ########## End get list of frontend wrappers ############################## ! ! ########## Begin Imports ################################################## ! ! import os, sys ! from anygui.Attribs import Attrib ! from anygui.Utils import Options ! #from anygui.Applications import AbstractApplication ! from anygui.Windows import Window ! from anygui.Buttons import Button ! #from anygui.Canvases import Canvas ! #from anygui import Colors ! from anygui.Labels import Label ! from anygui.CheckBoxes import CheckBox ! from anygui.RadioButtons import RadioButton ! from anygui.RadioGroups import RadioGroup ! from anygui.TextFields import TextField ! from anygui.TextAreas import TextArea ! from anygui.ListBoxes import ListBox ! from anygui.ComboBoxes import ComboBox ! from anygui.Models import BooleanModel, ListModel, TextModel ! from anygui.Events import * ! from anygui.Frames import Frame, GroupBox ! from anygui.LayoutManagers import LayoutManager, Placer ! from anygui.Menus import MenuBar, Menu, MenuCommand, MenuCheck, MenuSeparator ! ! # import objects from dialogs ! from anygui.dialogs import * ! ! ########### End Imports ################################################### ! ! """ ! # Original export list: ! __all__ = ['application', 'Application', ! 'Window', 'Button', 'CheckBox', 'Label', ! 'RadioButton', 'RadioGroup', 'ListBox', 'TextField', 'TextArea', ! 'BooleanModel', 'ListModel', 'TextModel', 'Options', ! 'LayoutManager', 'Placer', ! 'send', 'sender', 'link', 'unlink', 'any', 'unlinkSource', 'unlinkHandler', ! 'unlinkMethods', 'Frame', 'Placer', 'backend' ! ] # FIXME: Add stuff from Colors and Fonts ! """ ! ! # Try to get the environment variables ANYGUI_WISHLIST (overrides ! # anygui.wishlist), and ANYGUI_DEBUG (to print out stacktraces when ! # importing backends): ! ! if hasattr(sys, 'registry'): ! # Jython: ! wishlist = sys.registry.getProperty('ANYGUI_WISHLIST', _backends).split() ! DEBUG = sys.registry.getProperty('ANYGUI_DEBUG', '0') ! else: ! # CPython: ! wishlist = os.environ.get('ANYGUI_WISHLIST', _backends).split() ! DEBUG = os.environ.get('ANYGUI_DEBUG', '0') ! ! # Non-empty string may be zero (i.e. false): ! if DEBUG: ! try: ! DEBUG = int(DEBUG) ! except ValueError: ! pass ! ! _application = None ! _backend = None ! _backend_name = None ! ! def _dotted_import(name): ! # version of __import__ which handles dotted names ! # copied from python docs for __import__ ! import string ! mod = __import__(name, globals(), locals(), []) ! components = string.split(name, '.') ! for comp in components[1:]: ! mod = getattr(mod, comp) ! return mod ! ! def _backend_passthrough(): ! global _backends, _backend, _backend_name ! _backends = _backends.split() ! _backends = [b for b in _backends if not b in wishlist] ! if wishlist: ! try: ! idx = wishlist.index('*') ! wishlist[idx:idx+1] = _backends ! except ValueError: pass ! _backends = wishlist ! for name in _backends: ! try: ! mod = _dotted_import('anygui.backends.%sgui' % name,) ! for key in mod.__all__: ! globals()[key] = mod.__dict__[key] ! except (ImportError, AttributeError, KeyError): ! if DEBUG and not (DEBUG in _backends and not DEBUG==name): ! import traceback ! traceback.print_exc() ! continue ! else: ! _backend_name = name ! _backend = mod ! return ! raise RuntimeError, "no usable backend found" ! ! # Pass the backend namespace through: ! _backend_passthrough() |
From: Magnus L. H. <ml...@us...> - 2002-11-17 18:42:11
|
Update of /cvsroot/anygui/anygui/test In directory usw-pr-cvs1:/tmp/cvs-serv11968/test Modified Files: test_openfiledlg.py Log Message: Started to fiddle with a Borg Application, and tried to fix line endings. Index: test_openfiledlg.py =================================================================== RCS file: /cvsroot/anygui/anygui/test/test_openfiledlg.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_openfiledlg.py 16 Nov 2002 16:44:59 -0000 1.4 --- test_openfiledlg.py 17 Nov 2002 18:42:07 -0000 1.5 *************** *** 1,17 **** ! from anygui import * ! import sys ! ! dir='' ! if sys.platform in ['cygwin', 'linux1', 'linux2']: ! dir='/usr/lib' ! else: ! dir='C:\\' ! ! def openFileDlgCallback(event): ! print '>> file chosen -> ', event.file ! ! app = Application(name='Test OpenFileDlg', version='1.0') ! filedlg = OpenFileDialog(dir,'*') ! link(filedlg, 'open', openFileDlgCallback) ! app.add(filedlg) ! app.run() --- 1,17 ---- ! from anygui import * ! import sys ! ! dir='' ! if sys.platform in ['cygwin', 'linux1', 'linux2']: ! dir='/usr/lib' ! else: ! dir='C:\\' ! ! def openFileDlgCallback(event): ! print '>> file chosen -> ', event.file ! ! app = Application(name='Test OpenFileDlg', version='1.0') ! filedlg = OpenFileDialog(dir,'*') ! link(filedlg, 'open', openFileDlgCallback) ! app.add(filedlg) ! app.run() |
From: Magnus L. H. <ml...@us...> - 2002-11-17 18:42:11
|
Update of /cvsroot/anygui/anygui/lib/anygui/dialogs In directory usw-pr-cvs1:/tmp/cvs-serv11968/lib/anygui/dialogs Modified Files: OpenFileDialog.py Log Message: Started to fiddle with a Borg Application, and tried to fix line endings. Index: OpenFileDialog.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/dialogs/OpenFileDialog.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** OpenFileDialog.py 16 Nov 2002 16:44:59 -0000 1.2 --- OpenFileDialog.py 17 Nov 2002 18:42:07 -0000 1.3 *************** *** 1,389 **** ! 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): ! # dirMngr = self.dirMngr ! # self.dirList = TripanedDoublyLinkedList([dirMngr.currDirCache]) ! # if not dirMngr.currDirIsRoot(): ! # self.dirList.prepend(dirMngr.oneDirUpCache) ! # 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: ! priSels = self._priorSelections ! self.lbxDirThree.selection = priSels[0] ! del priSels[0] ! 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 --- 1,389 ---- ! 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): ! # dirMngr = self.dirMngr ! # self.dirList = TripanedDoublyLinkedList([dirMngr.currDirCache]) ! # if not dirMngr.currDirIsRoot(): ! # self.dirList.prepend(dirMngr.oneDirUpCache) ! # 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: ! priSels = self._priorSelections ! self.lbxDirThree.selection = priSels[0] ! del priSels[0] ! 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 |
From: Robin B. <rgb...@us...> - 2002-11-17 11:36:49
|
Update of /cvsroot/anygui/anygui/lib/anygui In directory usw-pr-cvs1:/tmp/cvs-serv28836 Modified Files: Utils.py Log Message: Add a possible label to logTraceback Index: Utils.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/Utils.py,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** Utils.py 4 Nov 2002 19:46:40 -0000 1.19 --- Utils.py 17 Nov 2002 11:36:46 -0000 1.20 *************** *** 192,196 **** _logger.flush() ! def logTraceback(n): import traceback traceback.print_exc(n,_logger._f) --- 192,197 ---- _logger.flush() ! def logTraceback(n,label=None): ! if label is not None: _logger._f.write(label+': ') import traceback traceback.print_exc(n,_logger._f) |
From: Dallas T. J. <pan...@us...> - 2002-11-17 02:08:32
|
Update of /cvsroot/anygui/anygui/lib/anygui/backends In directory usw-pr-cvs1:/tmp/cvs-serv27927/lib/anygui/backends Modified Files: qtgui.py Log Message: turned debugging off Index: qtgui.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/qtgui.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** qtgui.py 16 Nov 2002 16:44:59 -0000 1.25 --- qtgui.py 17 Nov 2002 02:08:30 -0000 1.26 *************** *** 48,52 **** FALSE = 0 ! DEBUG = 1 TMP_DBG = 0 --- 48,52 ---- FALSE = 0 ! DEBUG = 0 TMP_DBG = 0 |
From: Robin B. <rgb...@us...> - 2002-11-16 17:50:06
|
Update of /cvsroot/anygui/anygui/lib/anygui In directory usw-pr-cvs1:/tmp/cvs-serv5990 Modified Files: Defaults.py Applications.py Log Message: Added Defaults.Application Index: Defaults.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/Defaults.py,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** Defaults.py 16 Nov 2002 16:44:59 -0000 1.28 --- Defaults.py 16 Nov 2002 17:50:02 -0000 1.29 *************** *** 1,249 **** ! """ ! Defaults for the anygui package. ! ! Each class in module Defaults provides default attributes for the ! widget of the same name, plus an attribute named explicit_attributes ! that lists the attributes which need to be set explicitly per instance ! (currently, the latter defaults to "all defaulted attributes"). ! """ ! ! # FIXME: Change the default mechanism (i.e. state = {...}) ! ! # For the Frame.place method: ! ! direction = 'right' ! space = 10 ! ! #def _list_attributes(klass): ! # klass.explicit_attributes = klass.__dict__.keys() ! ! class Button: ! _defaultEvent = 'click' ! state = { ! 'text': 'Button', ! 'x': 0, ! 'y': 0, ! 'width': 80, ! 'height': 30, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1 ! } ! ! class Frame: ! state = { ! 'text': 'Frame', # Hardly needed... ! 'x': 0, ! 'y': 0, ! 'width': 400, ! 'height': 300, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1 ! } ! ! class Window: ! state = { ! 'text': 'Window', ! 'x': 30, ! 'y': 30, ! 'width': 400, ! 'height': 300, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1, ! 'title': 'Untitled' ! } ! ! class Label: ! state = { ! 'text': 'Label', ! 'x': 0, ! 'y': 0, ! 'width': 100, ! 'height': 15, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1, ! } ! ! class TextField: ! _defaultEvent = 'enterkey' ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 25, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'editable' : 1, ! 'selection' : (0, 0), ! } ! ! # FIXME: Should be improved -- base new placement on top window etc. ! ! winX, winY = 0, 0 ! def shift_window(): ! global winX, winY ! winX += 30 ! winX %= 360 ! winY += 30 ! winY %= 360 ! ! class Canvas: ! state = { ! 'text' : 'Canvas', # Hardly needed..., ! 'x' : 0, ! 'y' : 0, ! 'width' : 400, ! 'height' : 300, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! } ! ! class CheckBox: ! _defaultEvent = 'click' ! state = { ! 'text' : 'CheckBox', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 15, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'on' : 0, ! } ! ! class ListBox: ! _defaultEvent = 'select' ! state = { ! 'text' : 'ListBox', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 100, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'items' : (), ! 'selection' : 0, ! } ! ! class ComboBox: ! _defaultEvent = 'select' ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 22, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'items' : (), ! 'selection' : 0, ! 'lbxHeight' : 100, ! } ! ! class RadioButton: ! _defaultEvent = 'click' ! state = { ! 'text' : 'RadioButton', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 15, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'on' : 0, ! 'group' : None, ! } ! ! class RadioGroup: ! _defaultEvent = 'select' ! state = { ! 'items' : None, ! 'value' : None, ! } ! ! class TextArea: ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 100, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'editable' : 1, ! 'selection' : (0, 0), ! } ! ! class MenuBar: ! state = { ! 'contents' : [], ! 'enabled': 1 ! } ! ! class Menu: ! _defaultEvent = 'click' ! state = { ! 'contents' : [], ! 'enabled': 1 ! } ! ! class MenuCommand: ! _defaultEvent = 'click' ! state = { ! 'enabled': 1 ! } ! ! class MenuCheck: ! _defaultEvent = 'click' ! state = { ! 'enabled': 1 ! } ! ! class MenuSeparator: ! state = { ! 'enabled': 1 ! } --- 1,252 ---- ! """ ! Defaults for the anygui package. ! ! Each class in module Defaults provides default attributes for the ! widget of the same name, plus an attribute named explicit_attributes ! that lists the attributes which need to be set explicitly per instance ! (currently, the latter defaults to "all defaulted attributes"). ! """ ! ! # FIXME: Change the default mechanism (i.e. state = {...}) ! ! # For the Frame.place method: ! ! direction = 'right' ! space = 10 ! ! #def _list_attributes(klass): ! # klass.explicit_attributes = klass.__dict__.keys() ! ! class Application: ! state = {} ! ! class Button: ! _defaultEvent = 'click' ! state = { ! 'text': 'Button', ! 'x': 0, ! 'y': 0, ! 'width': 80, ! 'height': 30, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1 ! } ! ! class Frame: ! state = { ! 'text': 'Frame', # Hardly needed... ! 'x': 0, ! 'y': 0, ! 'width': 400, ! 'height': 300, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1 ! } ! ! class Window: ! state = { ! 'text': 'Window', ! 'x': 30, ! 'y': 30, ! 'width': 400, ! 'height': 300, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1, ! 'title': 'Untitled' ! } ! ! class Label: ! state = { ! 'text': 'Label', ! 'x': 0, ! 'y': 0, ! 'width': 100, ! 'height': 15, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1, ! } ! ! class TextField: ! _defaultEvent = 'enterkey' ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 25, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'editable' : 1, ! 'selection' : (0, 0), ! } ! ! # FIXME: Should be improved -- base new placement on top window etc. ! ! winX, winY = 0, 0 ! def shift_window(): ! global winX, winY ! winX += 30 ! winX %= 360 ! winY += 30 ! winY %= 360 ! ! class Canvas: ! state = { ! 'text' : 'Canvas', # Hardly needed..., ! 'x' : 0, ! 'y' : 0, ! 'width' : 400, ! 'height' : 300, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! } ! ! class CheckBox: ! _defaultEvent = 'click' ! state = { ! 'text' : 'CheckBox', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 15, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'on' : 0, ! } ! ! class ListBox: ! _defaultEvent = 'select' ! state = { ! 'text' : 'ListBox', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 100, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'items' : (), ! 'selection' : 0, ! } ! ! class ComboBox: ! _defaultEvent = 'select' ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 22, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'items' : (), ! 'selection' : 0, ! 'lbxHeight' : 100, ! } ! ! class RadioButton: ! _defaultEvent = 'click' ! state = { ! 'text' : 'RadioButton', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 15, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'on' : 0, ! 'group' : None, ! } ! ! class RadioGroup: ! _defaultEvent = 'select' ! state = { ! 'items' : None, ! 'value' : None, ! } ! ! class TextArea: ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 100, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'editable' : 1, ! 'selection' : (0, 0), ! } ! ! class MenuBar: ! state = { ! 'contents' : [], ! 'enabled': 1 ! } ! ! class Menu: ! _defaultEvent = 'click' ! state = { ! 'contents' : [], ! 'enabled': 1 ! } ! ! class MenuCommand: ! _defaultEvent = 'click' ! state = { ! 'enabled': 1 ! } ! ! class MenuCheck: ! _defaultEvent = 'click' ! state = { ! 'enabled': 1 ! } ! ! class MenuSeparator: ! state = { ! 'enabled': 1 ! } Index: Applications.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/Applications.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** Applications.py 16 Nov 2002 16:44:59 -0000 1.25 --- Applications.py 16 Nov 2002 17:50:03 -0000 1.26 *************** *** 5,9 **** import anygui ! class AbstractApplication(Attrib): _running = 0 --- 5,9 ---- import anygui ! class AbstractApplication(Attrib,anygui.Defaults.Application): _running = 0 |
From: Dallas T. J. <pan...@us...> - 2002-11-16 17:04:20
|
Update of /cvsroot/anygui/anygui/lib/anygui/backends In directory usw-pr-cvs1:/tmp/cvs-serv18653/lib/anygui/backends Modified Files: mswgui.py Log Message: Just added **kwds to Application.__init__ Index: mswgui.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/mswgui.py,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -r1.42 -r1.43 *** mswgui.py 15 Nov 2002 13:28:24 -0000 1.42 --- mswgui.py 16 Nov 2002 17:04:18 -0000 1.43 *************** *** 167,171 **** pass self.widget = None ! def setText(self,text): --- 167,171 ---- pass self.widget = None ! def setText(self,text): *************** *** 249,253 **** 0, item) ! def setSelection(self,selection): --- 249,253 ---- 0, item) ! def setSelection(self,selection): *************** *** 314,318 **** self._value = -2 ToggleButtonWrapper.__init__(self,*args,**kws) ! def widgetFactory(self,*args,**kws): # The first radiobutton in a group must have the wxRB_GROUP style --- 314,318 ---- self._value = -2 ToggleButtonWrapper.__init__(self,*args,**kws) ! def widgetFactory(self,*args,**kws): # The first radiobutton in a group must have the wxRB_GROUP style *************** *** 380,384 **** end -= text[:end].count('\n') return start, end ! def setSelection(self,selection): #log("TextField._ensure_selection") --- 380,384 ---- end -= text[:end].count('\n') return start, end ! def setSelection(self,selection): #log("TextField._ensure_selection") *************** *** 417,421 **** def __init__(self,*args,**kws): self.widget_map = {} # maps child window handles to instances ! def _WM_COMMAND(self, hwnd, msg, wParam, lParam): #log("ContainerMixin _WM_COMMAND called for %s"%self) --- 417,421 ---- def __init__(self,*args,**kws): self.widget_map = {} # maps child window handles to instances ! def _WM_COMMAND(self, hwnd, msg, wParam, lParam): #log("ContainerMixin _WM_COMMAND called for %s"%self) *************** *** 449,453 **** OK, this probably needs to be pulled into a mixin heritable by various backends. ! Ensure all contents are properly created. This looks like it could be handled at the Proxy level, but it probably *shouldn't* be - --- 449,453 ---- OK, this probably needs to be pulled into a mixin heritable by various backends. ! Ensure all contents are properly created. This looks like it could be handled at the Proxy level, but it probably *shouldn't* be - *************** *** 528,532 **** dw = w - self._width dh = h - self._height ! self._width = w self._height = h --- 528,532 ---- dw = w - self._width dh = h - self._height ! self._width = w self._height = h *************** *** 573,578 **** } ! def __init__(self): ! AbstractApplication.__init__(self) if not self._wndclass: self._register_class() --- 573,578 ---- } ! def __init__(self, **kwds): ! AbstractApplication.__init__(self, **kwds) if not self._wndclass: self._register_class() *************** *** 605,609 **** x = -1 return x ! def internalRun(self): win32gui.PumpMessages() --- 605,609 ---- x = -1 return x ! def internalRun(self): win32gui.PumpMessages() |
From: Dallas T. J. <pan...@us...> - 2002-11-16 16:45:03
|
Update of /cvsroot/anygui/anygui/lib/anygui/backends In directory usw-pr-cvs1:/tmp/cvs-serv9861/lib/anygui/backends Modified Files: qtgui.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: qtgui.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/qtgui.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** qtgui.py 16 Nov 2002 12:41:11 -0000 1.24 --- qtgui.py 16 Nov 2002 16:44:59 -0000 1.25 *************** *** 12,16 **** from anygui.Menus import Menu, MenuCommand, MenuCheck, MenuSeparator ! # qtgui specific imports import sys from weakref import ref as wr --- 12,16 ---- from anygui.Menus import Menu, MenuCommand, MenuCheck, MenuSeparator ! # qtgui specific imports import sys from weakref import ref as wr *************** *** 166,170 **** # Widget has no text. return "" ! def setupChildWidgets(self): pass --- 166,170 ---- # Widget has no text. return "" ! def setupChildWidgets(self): pass *************** *** 178,182 **** temp fix for some slight problems with PyQt. """ ! _comp = None _events = {} --- 178,182 ---- temp fix for some slight problems with PyQt. """ ! _comp = None _events = {} *************** *** 272,278 **** class ButtonWrapper(ButtonWrapperBase): - def __init__(self, *args, **kws): - ButtonWrapperBase.__init__(self, *args, **kws) - def widgetFactory(self, *args, **kwds): return QPushButton(*args, **kwds) --- 272,275 ---- *************** *** 283,289 **** class ToggleButtonWrapperBase(ButtonWrapperBase): - def __init__(self, *args, **kws): - ButtonWrapperBase.__init__(self, *args, **kws) - def setOn(self, on): if self.widget: --- 280,283 ---- *************** *** 299,305 **** class CheckBoxWrapper(ToggleButtonWrapperBase): - def __init__(self, *args, **kws): - ToggleButtonWrapperBase.__init__(self, *args, **kws) - def widgetFactory(self, *args, **kwds): return QCheckBox(*args, **kwds) --- 293,296 ---- *************** *** 311,317 **** groupMap = {} - def __init__(self, *args, **kws): - ComponentWrapper.__init__(self, *args, **kws) - def widgetFactory(self, *args, **kwds): return QRadioButton(*args, **kwds) --- 302,305 ---- *************** *** 343,349 **** connected = 0 - def __init__(self, *args, **kws): - ComponentWrapper.__init__(self, *args, **kws) - def widgetSetUp(self): if not self.connected: --- 331,334 ---- *************** *** 366,370 **** self.proxy.pull('text') if int(event.key()) == 0x1004: #Qt Return Key Code ! if DEBUG: print 'enter key was pressed in ', self send(self.proxy, 'enterkey') return 1 --- 351,355 ---- self.proxy.pull('text') if int(event.key()) == 0x1004: #Qt Return Key Code ! if DEBUG: print 'enter key was pressed in ', self send(self.proxy, 'enterkey') return 1 *************** *** 396,402 **** class TextFieldWrapper(TextWrapperBase): - def __init__(self, *args, **kws): - TextWrapperBase.__init__(self, *args, **kws) - def widgetFactory(self, *args, **kwds): return QLineEdit(*args, **kwds) --- 381,384 ---- *************** *** 407,411 **** start, end = selection self.widget.setSelection(start, end-start) ! def getSelection(self): if self.widget: --- 389,393 ---- start, end = selection self.widget.setSelection(start, end-start) ! def getSelection(self): if self.widget: *************** *** 422,428 **** class TextAreaWrapper(TextWrapperBase): - def __init__(self, *args, **kws): - TextWrapperBase.__init__(self, *args, **kws) - def widgetFactory(self, *args, **kwds): return QTextEdit(*args, **kwds) --- 404,407 ---- *************** *** 494,500 **** class FrameWrapper(ComponentWrapper): - def __init__(self, *args, **kws): - ComponentWrapper.__init__(self, *args, **kws) - def widgetFactory(self, *args, **kws): widget = QFrame(*args, **kws) --- 473,476 ---- *************** *** 515,529 **** mainWindow = None - def __init__(self, proxy): - ComponentWrapper.__init__(self, proxy) - def setText(self, text): if self.widget: self.mainWindow.setCaption(QString(str(text))) def setTitle(self, title): if self.widget: self.mainWindow.setCaption(QString(str(title))) def widgetSetUp(self): if not self.connected: --- 491,508 ---- mainWindow = None def setText(self, text): if self.widget: self.mainWindow.setCaption(QString(str(text))) + def getText(self): + return str(self.widget.title()) + def setTitle(self, title): if self.widget: self.mainWindow.setCaption(QString(str(title))) + def getTitle(self): + return str(self.widget.title()) + def widgetSetUp(self): if not self.connected: *************** *** 538,544 **** self.connected = 1 - def getTitle(self): - return str(self.widget.title()) - def resizeHandler(self, event): if DEBUG: print 'in resizeHandler of: ', self.widget --- 517,520 ---- *************** *** 635,641 **** class GroupBoxWrapper(ComponentWrapper): - def __init__(self, *args, **kws): - ComponentWrapper.__init__(self, *args, **kws) - def widgetFactory(self, *args, **kws): widget = QButtonGroup(*args, **kws) --- 611,614 ---- *************** *** 663,667 **** def setEnabled(self,enabled): if self.proxy.container is not None \ ! and self.proxy.container.wrapper.widget is not None: self.proxy.container.wrapper.rebuild() --- 636,640 ---- def setEnabled(self,enabled): if self.proxy.container is not None \ ! and self.proxy.container.wrapper.widget is not None: self.proxy.container.wrapper.rebuild() *************** *** 729,733 **** """ if self.proxy.container is not None and \ ! self.proxy.container.wrapper.widget is not None: parent = self.proxy.container.wrapper.widget if DEBUG: print "\nREBUILDING: ", self,self.proxy.contents --- 702,706 ---- """ if self.proxy.container is not None and \ ! self.proxy.container.wrapper.widget is not None: parent = self.proxy.container.wrapper.widget if DEBUG: print "\nREBUILDING: ", self,self.proxy.contents *************** *** 739,743 **** else: self.create(None) ! for item in self.proxy.contents: item.wrapper.createIfNeeded() --- 712,716 ---- else: self.create(None) ! for item in self.proxy.contents: item.wrapper.createIfNeeded() *************** *** 748,752 **** def enterMainLoop(self): # ... self.proxy.push() # FIXME: Why is this needed when push ! # is called in internalProd (by prod)? def insertInto(self, widget): --- 721,725 ---- def enterMainLoop(self): # ... self.proxy.push() # FIXME: Why is this needed when push ! # is called in internalProd (by prod)? def insertInto(self, widget): *************** *** 760,764 **** widget.clear() return widget ! class MenuCommandWrapper(MenuItemMixin, AbstractWrapper): --- 733,737 ---- widget.clear() return widget ! class MenuCommandWrapper(MenuItemMixin, AbstractWrapper): *************** *** 789,797 **** def clickHandler(self,*args,**kws): self.setOn(not self.getOn()) ! MenuCommandWrapper.clickHandler(self,*args,**kws) class MenuSeparatorWrapper(MenuItemMixin, AbstractWrapper): ! def insertInto(self, widget): widget.insertSeparator() --- 762,770 ---- def clickHandler(self,*args,**kws): self.setOn(not self.getOn()) ! MenuCommandWrapper.clickHandler(self,*args,**kws) class MenuSeparatorWrapper(MenuItemMixin, AbstractWrapper): ! def insertInto(self, widget): widget.insertSeparator() |
From: Dallas T. J. <pan...@us...> - 2002-11-16 16:45:03
|
Update of /cvsroot/anygui/anygui/test In directory usw-pr-cvs1:/tmp/cvs-serv9861/test Modified Files: test_openfiledlg.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: test_openfiledlg.py =================================================================== RCS file: /cvsroot/anygui/anygui/test/test_openfiledlg.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_openfiledlg.py 16 Nov 2002 12:41:11 -0000 1.3 --- test_openfiledlg.py 16 Nov 2002 16:44:59 -0000 1.4 *************** *** 1,3 **** ! from anygui import * import sys --- 1,3 ---- ! from anygui import * import sys *************** *** 7,13 **** else: dir='C:\\' ! ! app = Application(name='Test OpenFileDlg', version='1.0') ! filedlg = OpenFileDialog(dir,'*') ! app.add(filedlg) ! app.run() --- 7,17 ---- else: dir='C:\\' ! ! def openFileDlgCallback(event): ! print '>> file chosen -> ', event.file ! ! app = Application(name='Test OpenFileDlg', version='1.0') ! filedlg = OpenFileDialog(dir,'*') ! link(filedlg, 'open', openFileDlgCallback) ! app.add(filedlg) ! app.run() |
From: Dallas T. J. <pan...@us...> - 2002-11-16 16:45:02
|
Update of /cvsroot/anygui/anygui/lib/anygui/frontend_wrappers In directory usw-pr-cvs1:/tmp/cvs-serv9861/lib/anygui/frontend_wrappers Modified Files: ComboBoxWrapper.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: ComboBoxWrapper.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/frontend_wrappers/ComboBoxWrapper.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** ComboBoxWrapper.py 16 Nov 2002 12:41:11 -0000 1.1 --- ComboBoxWrapper.py 16 Nov 2002 16:44:59 -0000 1.2 *************** *** 58,83 **** def _createWidgets(self): state = self.proxy.state ! lx = state['x'] ! ly = state['y'] ! lwidth = state['width'] ! lheight = state['height'] ! self._btnWidth = state['btnWidth'] self._lbxHeight = state['lbxHeight'] ! self._cbxHeight = state['cbxHeight'] ! litems = list(self.proxy.items) self._popupBtn = anygui.Button(text = 'v', ! geometry = ( lx + lwidth - self._btnWidth, ! ly, ! self._btnWidth, ! self._cbxHeight )) ! self._textFld = anygui.TextField(geometry = ( lx, ! ly, ! lwidth - self._btnWidth, ! self._cbxHeight )) self._itemLbx = anygui.ListBox(visible = 0, ! items = litems, ! geometry = ( lx, ! ly + lheight, ! lwidth, self._lbxHeight )) --- 58,81 ---- def _createWidgets(self): state = self.proxy.state ! x = state['x'] ! y = state['y'] ! width = state['width'] ! height = state['height'] self._lbxHeight = state['lbxHeight'] ! items = list(self.proxy.items) ! self._textFld = anygui.TextField(geometry = ( x, ! y, ! width - height, ! height )) self._popupBtn = anygui.Button(text = 'v', ! geometry = ( x + width - height, ! y, ! height, ! height )) self._itemLbx = anygui.ListBox(visible = 0, ! items = items, ! geometry = ( x, ! y + height, ! width, self._lbxHeight )) *************** *** 85,100 **** def _setupBtn(self): self._popupBtn.container = self.proxy.container - self.proxy.container.contents.append(self._popupBtn) def _setupTxtFld(self): self._textFld.container = self.proxy.container - self.proxy.container.contents.append(self._textFld) def _setupLbx(self): self._itemLbx.container = self.proxy.container - self.proxy.container.contents.append(self._itemLbx) def widgetFactory(self, *args, **kws): ! print '>> in widgetFactory...' self._createWidgets() self._comps = 1 --- 83,95 ---- def _setupBtn(self): self._popupBtn.container = self.proxy.container def _setupTxtFld(self): self._textFld.container = self.proxy.container def _setupLbx(self): self._itemLbx.container = self.proxy.container def widgetFactory(self, *args, **kws): ! #print '>> in widgetFactory...' self._createWidgets() self._comps = 1 *************** *** 105,112 **** def widgetSetUp(self): if self._comps and not self._connected: ! print '>> in widgetSetUp' ! #self._popupBtn._ensure_events() link(self._popupBtn, self._handlePopup) - #self._itemLbx._ensure_events() link(self._itemLbx, self._handleSelection) self._connected = 1 --- 100,105 ---- def widgetSetUp(self): if self._comps and not self._connected: ! #print '>> in widgetSetUp' link(self._popupBtn, self._handlePopup) link(self._itemLbx, self._handleSelection) self._connected = 1 *************** *** 114,118 **** def setupChildWidgets(self): if self._comps: ! print '>> in setupChildWidgets' self._setupTxtFld() self._setupBtn() --- 107,111 ---- def setupChildWidgets(self): if self._comps: ! #print '>> in setupChildWidgets' self._setupTxtFld() self._setupBtn() *************** *** 129,156 **** self.setupChildWidgets() - def getSelection(self): - if self._comps: - return self._itemLbx.selection - - def setSelection(self, selection): - if self._comps: - self._loop = 1 - self._itemLbx.selection = selection - self._textFld.text = self._itemLbx.items[selection] - self._loop = 0 - - def getItems(self): - if self._comps: - return self._itemLbx.items - - def setItems(self, items): - if self._comps: - print '>> in setItems(items) -> ', items - self._loop = 1 - self._itemLbx.items = items - self._loop = 0 - def _handlePopup(self, event): ! print '>> handling Popup...' self._loop = 1 self._itemLbx.visible = self._popupOpen = not self._popupOpen --- 122,127 ---- self.setupChildWidgets() def _handlePopup(self, event): ! #print '>> handling Popup...' self._loop = 1 self._itemLbx.visible = self._popupOpen = not self._popupOpen *************** *** 158,162 **** def _handleSelection(self, event): ! print '>> handling Selection...' if not self._loop: self._loop = 1 --- 129,133 ---- def _handleSelection(self, event): ! #print '>> handling Selection...' if not self._loop: self._loop = 1 *************** *** 202,206 **** x, y, dummy, height = self._textFld.geometry d, d1, width, d2 = self._itemLbx.geometry ! return (x, y, height, width) def setGeometry(self, x, y, width, height): --- 173,177 ---- x, y, dummy, height = self._textFld.geometry d, d1, width, d2 = self._itemLbx.geometry ! return (x, y, width, height) def setGeometry(self, x, y, width, height): *************** *** 209,224 **** self._textFld.geometry = (x, y, ! width - self._btnWidth, ! self._cbxHeight) ! self._popupBtn.geometry = (x + width - self._btnWidth, y, ! self._btnWidth, ! self._cbxHeight) self._itemLbx.geometry = (x, ! y + self._cbxHeight, width, self._lbxHeight) self._loop = 0 def getVisible(self): return self._visible --- 180,237 ---- self._textFld.geometry = (x, y, ! width - height, ! height) ! self._popupBtn.geometry = (x + width - height, y, ! height, ! height) self._itemLbx.geometry = (x, ! y + height, width, self._lbxHeight) self._loop = 0 + def getSelection(self): + if self._comps: + return self._itemLbx.selection + + def setSelection(self, selection): + if self._comps: + self._loop = 1 + self._itemLbx.selection = selection + self._textFld.text = self._itemLbx.items[selection] + self._loop = 0 + + def getItems(self): + if self._comps: + return self._itemLbx.items + + def setItems(self, items): + if self._comps: + #print '>> in setItems(items) -> ', items + self._loop = 1 + self._itemLbx.items = items + self._loop = 0 + + def getText(self): + items = list(self._itemLbx.items) + text = self._textFld.text + if text in items: + return text + else: + return items[self._itemLbx.selection] + + def getLbxHeight(self): + return self._lbxHeight + + def setLbxHeight(self, lbxHeight): + if self._comps: + self._lbxHeight = lbxHeight + x, y, width, height = self.proxy.geometry + self._itemLbx.geometry = ( x, + y + height, + width, + lbxHeight) + def getVisible(self): return self._visible *************** *** 227,241 **** if self._comps: self._visible = visible self._textFld.visible = visible self._popupBtn.visible = visible def setEnabled(self, enabled): if self._comps: self._enabled = enabled self._textFld.enabled = enabled self._popupBtn.enabled = enabled - - def getEnabled(self): - return self._enabled def internalDestroy(self): --- 240,260 ---- if self._comps: self._visible = visible + if self._popupOpen: + self._itemLbx.visible = visible + self._popupOpen = visible self._textFld.visible = visible self._popupBtn.visible = visible + def getEnabled(self): + return self._enabled + def setEnabled(self, enabled): if self._comps: + if self._popupOpen: + self._itemLbx.visible = 0 + self._popupOpen = 0 self._enabled = enabled self._textFld.enabled = enabled self._popupBtn.enabled = enabled def internalDestroy(self): |
From: Dallas T. J. <pan...@us...> - 2002-11-16 16:45:02
|
Update of /cvsroot/anygui/anygui/lib/anygui In directory usw-pr-cvs1:/tmp/cvs-serv9861/lib/anygui Modified Files: Applications.py Defaults.py Frames.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: Applications.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/Applications.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** Applications.py 13 Nov 2002 17:19:22 -0000 1.24 --- Applications.py 16 Nov 2002 16:44:59 -0000 1.25 *************** *** 8,14 **** _running = 0 ! _name = "Anygui App" ! _version = "0" ! def __init__(self, **kwds): Attrib.__init__(self) --- 8,14 ---- _running = 0 ! _name = 'Anygui App' ! _version = '0' ! def __init__(self, **kwds): Attrib.__init__(self) *************** *** 40,44 **** for w in flatten(win): self._windows.append(w) ! w.container = self w.wrapper.prod() --- 40,44 ---- for w in flatten(win): self._windows.append(w) ! w.container = self w.wrapper.prod() *************** *** 48,52 **** self.internalRemove() except: pass ! # FIXME: Temporary(?) fix to cover problem in mswgui _wndproc # FIXME: Destroy the window? --- 48,52 ---- self.internalRemove() except: pass ! # FIXME: Temporary(?) fix to cover problem in mswgui _wndproc # FIXME: Destroy the window? *************** *** 94,96 **** def quit(self): ! raise UnimplementedMethod, (self, "quit") --- 94,96 ---- def quit(self): ! raise UnimplementedMethod, (self, 'quit') Index: Defaults.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/Defaults.py,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** Defaults.py 16 Nov 2002 12:47:13 -0000 1.27 --- Defaults.py 16 Nov 2002 16:44:59 -0000 1.28 *************** *** 1,251 **** ! """ ! Defaults for the anygui package. ! ! Each class in module Defaults provides default attributes for the ! widget of the same name, plus an attribute named explicit_attributes ! that lists the attributes which need to be set explicitly per instance ! (currently, the latter defaults to "all defaulted attributes"). ! """ ! ! # FIXME: Change the default mechanism (i.e. state = {...}) ! ! # For the Frame.place method: ! ! direction = 'right' ! space = 10 ! ! #def _list_attributes(klass): ! # klass.explicit_attributes = klass.__dict__.keys() ! ! class Button: ! _defaultEvent = 'click' ! state = { ! 'text': 'Button', ! 'x': 0, ! 'y': 0, ! 'width': 80, ! 'height': 30, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1 ! } ! ! class Frame: ! state = { ! 'text': 'Frame', # Hardly needed... ! 'x': 0, ! 'y': 0, ! 'width': 400, ! 'height': 300, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1 ! } ! ! class Window: ! state = { ! 'text': 'Window', ! 'x': 30, ! 'y': 30, ! 'width': 400, ! 'height': 300, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1, ! 'title': 'Untitled' ! } ! ! class Label: ! state = { ! 'text': 'Label', ! 'x': 0, ! 'y': 0, ! 'width': 100, ! 'height': 15, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1, ! } ! ! class TextField: ! _defaultEvent = 'enterkey' ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 25, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'editable' : 1, ! 'selection' : (0, 0), ! } ! ! # FIXME: Should be improved -- base new placement on top window etc. ! ! winX, winY = 0, 0 ! def shift_window(): ! global winX, winY ! winX += 30 ! winX %= 360 ! winY += 30 ! winY %= 360 ! ! class Canvas: ! state = { ! 'text' : 'Canvas', # Hardly needed..., ! 'x' : 0, ! 'y' : 0, ! 'width' : 400, ! 'height' : 300, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! } ! ! class CheckBox: ! _defaultEvent = 'click' ! state = { ! 'text' : 'CheckBox', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 15, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'on' : 0, ! } ! ! class ListBox: ! _defaultEvent = 'select' ! state = { ! 'text' : 'ListBox', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 100, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'items' : (), ! 'selection' : 0, ! } class ComboBox: _defaultEvent = 'select' ! state = { ! 'text' : 'ComboBox', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 15, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'items' : (), ! 'selection' : 0, ! 'lbxHeight' : 100, ! 'cbxHeight' : 22, ! 'btnWidth' : 18, ! } ! ! class RadioButton: ! _defaultEvent = 'click' ! state = { ! 'text' : 'RadioButton', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 15, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'on' : 0, ! 'group' : None, ! } ! ! class RadioGroup: ! _defaultEvent = 'select' ! state = { ! 'items' : None, ! 'value' : None, ! } ! ! class TextArea: ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 100, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'editable' : 1, ! 'selection' : (0, 0), ! } ! ! class MenuBar: ! state = { ! 'contents' : [], ! 'enabled': 1 ! } ! ! class Menu: ! _defaultEvent = 'click' ! state = { ! 'contents' : [], ! 'enabled': 1 ! } ! ! class MenuCommand: ! _defaultEvent = 'click' ! state = { ! 'enabled': 1 ! } ! ! class MenuCheck: ! _defaultEvent = 'click' ! state = { ! 'enabled': 1 ! } ! ! class MenuSeparator: ! state = { ! 'enabled': 1 ! } --- 1,249 ---- ! """ ! Defaults for the anygui package. ! ! Each class in module Defaults provides default attributes for the ! widget of the same name, plus an attribute named explicit_attributes ! that lists the attributes which need to be set explicitly per instance ! (currently, the latter defaults to "all defaulted attributes"). ! """ ! ! # FIXME: Change the default mechanism (i.e. state = {...}) ! ! # For the Frame.place method: ! ! direction = 'right' ! space = 10 ! ! #def _list_attributes(klass): ! # klass.explicit_attributes = klass.__dict__.keys() ! ! class Button: ! _defaultEvent = 'click' ! state = { ! 'text': 'Button', ! 'x': 0, ! 'y': 0, ! 'width': 80, ! 'height': 30, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1 ! } ! ! class Frame: ! state = { ! 'text': 'Frame', # Hardly needed... ! 'x': 0, ! 'y': 0, ! 'width': 400, ! 'height': 300, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1 ! } ! ! class Window: ! state = { ! 'text': 'Window', ! 'x': 30, ! 'y': 30, ! 'width': 400, ! 'height': 300, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1, ! 'title': 'Untitled' ! } ! ! class Label: ! state = { ! 'text': 'Label', ! 'x': 0, ! 'y': 0, ! 'width': 100, ! 'height': 15, ! 'hmove': 0, ! 'vmove': 0, ! 'hstretch': 0, ! 'vstretch': 0, ! 'visible': 1, ! 'enabled': 1, ! } ! ! class TextField: ! _defaultEvent = 'enterkey' ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 25, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'editable' : 1, ! 'selection' : (0, 0), ! } ! ! # FIXME: Should be improved -- base new placement on top window etc. ! ! winX, winY = 0, 0 ! def shift_window(): ! global winX, winY ! winX += 30 ! winX %= 360 ! winY += 30 ! winY %= 360 ! ! class Canvas: ! state = { ! 'text' : 'Canvas', # Hardly needed..., ! 'x' : 0, ! 'y' : 0, ! 'width' : 400, ! 'height' : 300, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! } ! ! class CheckBox: ! _defaultEvent = 'click' ! state = { ! 'text' : 'CheckBox', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 15, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'on' : 0, ! } ! ! class ListBox: ! _defaultEvent = 'select' ! state = { ! 'text' : 'ListBox', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 100, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'items' : (), ! 'selection' : 0, ! } class ComboBox: _defaultEvent = 'select' ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 22, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'items' : (), ! 'selection' : 0, ! 'lbxHeight' : 100, ! } ! ! class RadioButton: ! _defaultEvent = 'click' ! state = { ! 'text' : 'RadioButton', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 15, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'on' : 0, ! 'group' : None, ! } ! ! class RadioGroup: ! _defaultEvent = 'select' ! state = { ! 'items' : None, ! 'value' : None, ! } ! ! class TextArea: ! state = { ! 'text' : '', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 100, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'editable' : 1, ! 'selection' : (0, 0), ! } ! ! class MenuBar: ! state = { ! 'contents' : [], ! 'enabled': 1 ! } ! ! class Menu: ! _defaultEvent = 'click' ! state = { ! 'contents' : [], ! 'enabled': 1 ! } ! ! class MenuCommand: ! _defaultEvent = 'click' ! state = { ! 'enabled': 1 ! } ! ! class MenuCheck: ! _defaultEvent = 'click' ! state = { ! 'enabled': 1 ! } ! ! class MenuSeparator: ! state = { ! 'enabled': 1 ! } Index: Frames.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/Frames.py,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** Frames.py 13 Nov 2002 17:19:22 -0000 1.35 --- Frames.py 16 Nov 2002 16:44:59 -0000 1.36 *************** *** 1,3 **** ! import sys from anygui.Components import Component from types import TupleType, InstanceType, IntType, ListType --- 1,3 ---- ! import traceback from anygui.Components import Component from types import TupleType, InstanceType, IntType, ListType *************** *** 17,21 **** def wrapperFactory(self): return backendModule().FrameWrapper(self) ! def add(self,items,options=None,**kws): """ --- 17,21 ---- def wrapperFactory(self): return backendModule().FrameWrapper(self) ! def add(self,items,options=None,**kws): """ *************** *** 73,77 **** pass except: ! print "Layout error, please contact Anygui team:",sys.exc_info() pass --- 73,78 ---- pass except: ! print "Layout error, please contact Anygui team:" ! traceback.print_exc() pass |
From: Dallas T. J. <pan...@us...> - 2002-11-16 16:45:02
|
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 |
From: Dallas T. J. <pan...@us...> - 2002-11-16 12:51:07
|
Update of /cvsroot/anygui/anygui/lib/anygui/dialogs In directory usw-pr-cvs1:/tmp/cvs-serv26456/lib/anygui/dialogs Modified Files: __init__.py Log Message: i'm on a roll... there's no stopping me now...!!! 8-):wq Index: __init__.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/dialogs/__init__.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** __init__.py 13 Nov 2002 17:19:23 -0000 1.1 --- __init__.py 16 Nov 2002 12:51:04 -0000 1.2 *************** *** 1,9 **** ! from AboutAnyguiDlg import AboutAnyguiDlg ! from AnyguiOpenFileDlg import AnyguiOpenFileDlg __all__=""" ! AboutAnyguiDlg ! AnyguiOpenFileDlg """.split() --- 1,9 ---- ! from AboutDialog import AboutDialog ! from OpenFileDialog import OpenFileDialog __all__=""" ! AboutDialog ! OpenFileDialog """.split() |
From: Dallas T. J. <pan...@us...> - 2002-11-16 12:47:16
|
Update of /cvsroot/anygui/anygui/lib/anygui In directory usw-pr-cvs1:/tmp/cvs-serv25678/lib/anygui Modified Files: Defaults.py Log Message: and this... Index: Defaults.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/Defaults.py,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** Defaults.py 8 Aug 2002 07:17:44 -0000 1.26 --- Defaults.py 16 Nov 2002 12:47:13 -0000 1.27 *************** *** 157,161 **** 'selection' : 0, } ! class RadioButton: _defaultEvent = 'click' --- 157,182 ---- 'selection' : 0, } ! ! class ComboBox: ! _defaultEvent = 'select' ! state = { ! 'text' : 'ComboBox', ! 'x' : 0, ! 'y' : 0, ! 'width' : 100, ! 'height' : 15, ! 'hmove' : 0, ! 'vmove' : 0, ! 'hstretch' : 0, ! 'vstretch' : 0, ! 'visible' : 1, ! 'enabled' : 1, ! 'items' : (), ! 'selection' : 0, ! 'lbxHeight' : 100, ! 'cbxHeight' : 22, ! 'btnWidth' : 18, ! } ! class RadioButton: _defaultEvent = 'click' |
From: Dallas T. J. <pan...@us...> - 2002-11-16 12:45:26
|
Update of /cvsroot/anygui/anygui/lib/anygui In directory usw-pr-cvs1:/tmp/cvs-serv25354/lib/anygui Added Files: ComboBoxes.py Log Message: Forgot this one =) --- NEW FILE: ComboBoxes.py --- from anygui.Components import Component from anygui import Defaults, backendModule, frontEndWrappers class ComboBox(Component, Defaults.ComboBox): def wrapperFactory(self): try: return backendModule().ComboBoxWrapper(self) except(AttributeError): return frontEndWrappers().ComboBoxWrapper(self) |
From: Dallas T. J. <pan...@us...> - 2002-11-16 12:41:14
|
Update of /cvsroot/anygui/anygui/test In directory usw-pr-cvs1:/tmp/cvs-serv24516/test Modified Files: test_openfiledlg.py test_aboutdlg.py Added Files: test_combobox.py Log Message: dded frontend widgets and ported ComboBox to the new architecture. Still some layout bugs in cb, but that will be fixed by tomorrow. Also, changed the dialogs to remove Anygui, and fixed OpenFileDialog to pretty much work perfectly now. We just need to think of a clean way to have dialogs return their values. --- NEW FILE: test_combobox.py --- from anygui import * from anygui.Utils import log class SelectionPrinter: def __init__(self, cb): self._cb = cb link(cb, self.print_selection) def print_selection(self, event): log('Item selected:', self._cb.selection, '(%s)' % self._cb.items[self._cb.selection]) app = Application() cb = ComboBox() sp = SelectionPrinter(cb) cb.installItemsModel(ListModel('There was a wee cooper of county Fyfe, Nickety, nockety, noo, noo, noo'.split())) cb.selection = 2 win = Window(title='ComboBox test', width=200, height=200) win.add(cb, left=25, top=25, right=25, hstretch=1) app.add(win) app.run() Index: test_openfiledlg.py =================================================================== RCS file: /cvsroot/anygui/anygui/test/test_openfiledlg.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_openfiledlg.py 13 Nov 2002 18:47:51 -0000 1.2 --- test_openfiledlg.py 16 Nov 2002 12:41:11 -0000 1.3 *************** *** 1,6 **** from anygui import * app = Application(name='Test OpenFileDlg', version='1.0') ! filedlg = AnyguiOpenFileDlg('/usr/lib','*') app.add(filedlg) app.run() --- 1,13 ---- from anygui import * + import sys + + dir='' + if sys.platform in ['cygwin', 'linux1', 'linux2']: + dir='/usr/lib' + else: + dir='C:\\' app = Application(name='Test OpenFileDlg', version='1.0') ! filedlg = OpenFileDialog(dir,'*') app.add(filedlg) app.run() Index: test_aboutdlg.py =================================================================== RCS file: /cvsroot/anygui/anygui/test/test_aboutdlg.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_aboutdlg.py 13 Nov 2002 17:19:22 -0000 1.1 --- test_aboutdlg.py 16 Nov 2002 12:41:11 -0000 1.2 *************** *** 2,6 **** app = Application() ! aboutAg = AboutAnyguiDlg() app.add(aboutAg) app.run() --- 2,6 ---- app = Application() ! aboutAg = AboutDialog() app.add(aboutAg) app.run() |
From: Dallas T. J. <pan...@us...> - 2002-11-16 12:41:14
|
Update of /cvsroot/anygui/anygui/lib/anygui/backends In directory usw-pr-cvs1:/tmp/cvs-serv24516/lib/anygui/backends Modified Files: qtgui.py Log Message: dded frontend widgets and ported ComboBox to the new architecture. Still some layout bugs in cb, but that will be fixed by tomorrow. Also, changed the dialogs to remove Anygui, and fixed OpenFileDialog to pretty much work perfectly now. We just need to think of a clean way to have dialogs return their values. Index: qtgui.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/qtgui.py,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** qtgui.py 13 Nov 2002 17:19:22 -0000 1.23 --- qtgui.py 16 Nov 2002 12:41:11 -0000 1.24 *************** *** 48,52 **** FALSE = 0 ! DEBUG = 0 TMP_DBG = 0 --- 48,52 ---- FALSE = 0 ! DEBUG = 1 TMP_DBG = 0 *************** *** 85,91 **** # Base class for all Widgets - # FIXME: It seems that layout stuff (e.g. hstretch and vmove) is set - # directly as state variables/attributes... Why is that? (There is a - # layout_data attribute too... Hm.) class ComponentWrapper(Wrapper): --- 85,88 ---- *************** *** 173,178 **** pass - - #==============================================================# --- 170,173 ---- *************** *** 228,232 **** if not self.connected: qApp.connect(self.widget, SIGNAL('highlighted(int)'), ! self.clickHandler) self.connected = 1 --- 223,227 ---- if not self.connected: qApp.connect(self.widget, SIGNAL('highlighted(int)'), ! self.selectHandler) self.connected = 1 *************** *** 251,255 **** return selection ! def clickHandler(self, index): # self.selection = int(index) send(self.proxy, 'select') --- 246,250 ---- return selection ! def selectHandler(self, index): # self.selection = int(index) send(self.proxy, 'select') *************** *** 310,315 **** return QCheckBox(*args, **kwds) - - #==============================================================# # RadioButton --- 305,308 ---- *************** *** 355,359 **** def widgetSetUp(self): if not self.connected: ! events = {QEvent.KeyRelease: self.keyPressHandler.im_func, QEvent.FocusIn: self.gotFocusHandler.im_func, QEvent.FocusOut: self.lostFocusHandler.im_func} --- 348,352 ---- def widgetSetUp(self): if not self.connected: ! events = {QEvent.KeyRelease: self.keyReleaseHandler.im_func, QEvent.FocusIn: self.gotFocusHandler.im_func, QEvent.FocusOut: self.lostFocusHandler.im_func} *************** *** 369,379 **** return QString(str(self.text)) ! def keyPressHandler(self, event): ! if DEBUG: print 'in keyPressHandler of: ', self.widget self.proxy.pull('text') if int(event.key()) == 0x1004: #Qt Return Key Code ! send(self, 'enterkey') return 1 - def gotFocusHandler(self, event): --- 362,372 ---- return QString(str(self.text)) ! def keyReleaseHandler(self, event): ! if DEBUG: print 'in keyReleaseHandler of: ', self.widget self.proxy.pull('text') if int(event.key()) == 0x1004: #Qt Return Key Code ! if DEBUG: print 'enter key was pressed in ', self ! send(self.proxy, 'enterkey') return 1 def gotFocusHandler(self, event): |
From: Dallas T. J. <pan...@us...> - 2002-11-16 12:41:13
|
Update of /cvsroot/anygui/anygui/lib/anygui/dialogs In directory usw-pr-cvs1:/tmp/cvs-serv24516/lib/anygui/dialogs Added Files: OpenFileDialog.py AboutDialog.py Removed Files: AboutAnyguiDlg.py AnyguiOpenFileDlg.py Log Message: dded frontend widgets and ported ComboBox to the new architecture. Still some layout bugs in cb, but that will be fixed by tomorrow. Also, changed the dialogs to remove Anygui, and fixed OpenFileDialog to pretty much work perfectly now. We just need to think of a clean way to have dialogs return their values. --- NEW FILE: OpenFileDialog.py --- 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): # dirMngr = self.dirMngr # self.dirList = TripanedDoublyLinkedList([dirMngr.currDirCache]) # if not dirMngr.currDirIsRoot(): # self.dirList.prepend(dirMngr.oneDirUpCache) # 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: priSels = self._priorSelections self.lbxDirThree.selection = priSels[0] del priSels[0] 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 --- NEW FILE: AboutDialog.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 AboutDialog(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() --- AboutAnyguiDlg.py DELETED --- --- AnyguiOpenFileDlg.py DELETED --- |