anygui-checkins Mailing List for anygui - Generic GUI Module for Python
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: Magnus L. H. <ml...@us...> - 2004-03-21 21:47:18
|
Update of /cvsroot/anygui/nondist/admin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31894 Modified Files: status.txt Log Message: Index: status.txt =================================================================== RCS file: /cvsroot/anygui/nondist/admin/status.txt,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -r1.65 -r1.66 *** status.txt 17 Feb 2003 03:09:45 -0000 1.65 --- status.txt 21 Mar 2004 21:37:05 -0000 1.66 *************** *** 13,17 **** qtgui + + + ! - + + ! + + + + + + - + - - - + - - + textgui ? ? ? ! ? ? ? ! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ! tkgui + + + ! + + - ! + + + + ? ! + + + + + + + + + wxgui + + + ! + + + ! + + + + + + + + + + + + + + + --- 13,17 ---- qtgui + + + ! - + + ! + + + + + + - + - - - + - - + textgui ? ? ? ! ? ? ? ! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ! tkgui + + + ! + + + ! + + + + + ! + + + + + + + + + wxgui + + + ! + + + ! + + + + + + + + + + + + + + + |
From: Magnus L. H. <ml...@us...> - 2004-03-21 21:42:50
|
Update of /cvsroot/anygui/anygui/lib/anygui/backends In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30900/lib/anygui/backends Modified Files: tkgui.py Log Message: Removed the sunken border on frames in tkgui, to match other back-ends. Index: tkgui.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/tkgui.py,v retrieving revision 1.87 retrieving revision 1.88 diff -C2 -r1.87 -r1.88 *** tkgui.py 26 Aug 2003 16:21:44 -0000 1.87 --- tkgui.py 21 Mar 2004 21:32:40 -0000 1.88 *************** *** 568,572 **** def widgetFactory(self, *args, **kws): ! kws['relief'] = 'sunken' kws['borderwidth'] = 2 widget=Tkinter.Frame(*args, **kws) --- 568,572 ---- def widgetFactory(self, *args, **kws): ! #kws['relief'] = 'sunken' kws['borderwidth'] = 2 widget=Tkinter.Frame(*args, **kws) |
From: Magnus L. H. <ml...@us...> - 2003-08-26 18:06:08
|
Update of /cvsroot/anygui//nondist/sandbox/magnus/tester In directory sc8-pr-cvs1:/tmp/cvs-serv3742 Modified Files: runme.py Added Files: server.py Log Message: --- NEW FILE: server.py --- from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler from threading import Thread import webbrowser import os, sys from time import * from glob import glob from anygui import * from anygui.Utils import topologicalSort # FIXME: Currently resets all results; should keep results from other # back-ends. Rewrite to create a single table of successes/failures for all # back-ends, parse in existing test results from the result file, and # display the test descriptions only once, below the table. TEST_DIR = 'tests' TEST_PAT = 'test_*.py' RESULT_FILE = 'results.html' HEAD = """\ <html> <head> <title>Anygui Test Wizard</title> <style> body { color: #000000; background-color: #ffffff; } a:active { color: #ff0000; } a:visited { color: #551a8b; } a:link { color: #0000bb; } h1, h2, h3, h4, h5, h6 { font-family: avantgarde, sans-serif; font-weight: bold; } h1 { font-size: 180%%; } h2 { font-size: 150%%; } h3, h4 { font-size: 120%%; } code, tt { font-family: lucida typewriter, lucidatypewriter, monospace; } var { font-family: times, serif; font-style: italic; font-weight: normal; } .typelabel { font-family: lucida, sans-serif; } .navigation td { background-color: #99ccff; font-weight: bold; font-family: avantgarde, sans-serif; font-size: 110%%; } .release-info { font-style: italic; } .titlegraphic { vertical-align: top; } .verbatim { color: #00008b; font-family: lucida typewriter, lucidatypewriter, monospace; } .grammar { background-color: #99ccff; margin-right: 0.5in; padding: 0.05in; } .productions { background-color: #bbeeff; } .productions table { vertical-align: baseline; } .grammar-footer { padding: 0.05in; font-size: 85%%; } .email { font-family: avantgarde, sans-serif; } .mailheader { font-family: avantgarde, sans-serif; } .mimetype { font-family: avantgarde, sans-serif; } .newsgroup { font-family: avantgarde, sans-serif; } .url { font-family: avantgarde, sans-serif; } .file { font-family: avantgarde, sans-serif; } .tableheader { background-color: #99ccff; font-family: avantgarde, sans-serif; } </style> </head> <body> <div class="navigation"> <table align="center" width="100%%" cellpadding="0" cellspacing="2"> <tr> <td><img src="icons/blank.gif" border="0" height="32" alt="" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Up One Level" width="32"></td> <td><img src="icons/up.gif" border="0" height="32" alt="Next Page" width="32"></td> <td align="center" width="100%%">Anygui Test Wizard</td> <td><img src="icons/blank.gif" border="0" height="32" alt="Contents" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Module Index" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Index" width="32"></td> </tr></table> <b class="navlabel">Up:</b> <a class="sectref" HREF="http://www.anygui.org">Anygui home</a> <br /><hr /> </div> <div class="titlepage"> <center> <h1>Anygui Test Wizard</h1> <!-- <strong>%s</strong> --> </center> </div> <br /> <hr /> """ FOOT = """\ <div class="navigation"> <hr /> <table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td><img src="icons/blank.gif" border="0" height="32" alt="" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Up One Level" width="32"></td> <td><img src="icons/up.gif" border="0" height="32" alt="Next Page" width="32"></td> <td align="center" width="100%">Anygui Test Wizard</td> <td><img src="icons/blank.gif" border="0" height="32" alt="Contents" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Module Index" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Index" width="32"></td> </tr></table> <b class="navlabel">Up:</b> <a class="sectref" HREF="http://www.anygui.org">Anygui home</a> <br><hr /> </div> </body> </html>""" def testFiles(): return glob(os.path.join(TEST_DIR, TEST_PAT)) """ class TestResult: status = 'Failed' def __init__(self, name, scope): self.name = name self.scope = scope def __str__(self): docs = self.scope.get('__doc__', '(No description available)') docs = '<p>' + docs.replace('\n\n', '\n</p>\n<p>') + '\n</p>' return '''<h3>%s: %s</h3> %s ''' % (self.name, self.status, docs) class TestWizard: def __init__(self, files, resultFile, *args, **kwds): Application.__init__(self, *args, **kwds) self.files = files self.resultFile = resultFile self.results = [] self.setupGUI() def setupTests(self): testScopes = [] testNames = [] constraints = [] for fname in self.files: scope = {} exec open(fname) in scope testScopes.append(scope) name = os.path.basename(fname) testNames.append(name) for other in eval('after', scope): constraints.append((other, name)) topologicalSort(testNames, testScopes, constraints) testScopes.reverse() testNames.reverse() self.testScopes = testScopes self.testNames = testNames def nextTest(self): if not self.testScopes: self.writeResults() sys.exit() scope = self.testScopes.pop() name = self.testNames.pop() try: self.win.remove(self.frame) except AttributeError: pass self.frame = Frame() assert not hasattr(scope, '__supplied_frame') scope['__supplied_frame'] = self.frame exec 'setup(__supplied_frame)' in scope self.win.add(self.frame, top=0, left=0, right=0, bottom=(self.passButton, 10), hstretch=1, vstretch=1) self.results.append(TestResult(name, scope)) def writeResults(self): out = open(self.resultFile, 'w') print >> out, HEAD for result in self.results: print >> out, result print >> out, FOOT out.close() def passTest(self, event): self.results[-1].status = 'Passed' self.nextTest() def failTest(self, event): self.nextTest() """ class RequestHandler(BaseHTTPRequestHandler): def __init__(self, *args, **kwds): BaseHTTPRequestHandler.__init__(self, *args, **kwds) self.setupTests() def setupTests(self): testScopes = [] testNames = [] constraints = [] for fname in testFiles(): scope = {} exec open(fname) in scope testScopes.append(scope) name = os.path.basename(fname) testNames.append(name) for other in eval('after', scope): constraints.append((other, name)) topologicalSort(testNames, testScopes, constraints) testScopes.reverse() testNames.reverse() self.testScopes = testScopes self.testNames = testNames def do_GET(self): if self.client_address[0] != "127.0.0.1": self.send_error(403) return if self.path in ['/icons/blank.gif', '/icons/up.gif']: print >> self.wfile, "Content-type: image/gif\n" self.wfile.write(open(self.path[1:], 'rb').read()) return print >> self.wfile, "Content-type: text/html\n" print >> self.wfile, HEAD # [...] print >> self.wfile, FOOT def main(args=[]): webbrowser.open('http://localhost:8000') server = HTTPServer(('', 8000), RequestHandler) try: server.serve_forever() except KeyboardInterrupt: pass #tw = TestWizard(testFiles(), RESULT_FILE) #tw.run() if __name__ == '__main__': main(sys.argv) Index: runme.py =================================================================== RCS file: /cvsroot/anygui//nondist/sandbox/magnus/tester/runme.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** runme.py 9 Jun 2003 18:40:37 -0000 1.4 --- runme.py 26 Aug 2003 18:05:52 -0000 1.5 *************** *** 23,26 **** --- 23,27 ---- <title>Anygui Test Results</title> <style> + body { color: #000000; background-color: #ffffff; } |
From: Magnus L. H. <ml...@us...> - 2003-08-26 16:22:03
|
Update of /cvsroot/anygui//anygui/lib/anygui/backends In directory sc8-pr-cvs1:/tmp/cvs-serv15708/lib/anygui/backends Modified Files: tkgui.py Log Message: Added exportselection=0 to the ListBox constructor, so selecting entries in multiple, independent listboxes is possible. Thanks to Sascha Silbe for this one. Index: tkgui.py =================================================================== RCS file: /cvsroot/anygui//anygui/lib/anygui/backends/tkgui.py,v retrieving revision 1.86 retrieving revision 1.87 diff -C2 -r1.86 -r1.87 *** tkgui.py 13 Nov 2002 17:19:22 -0000 1.86 --- tkgui.py 26 Aug 2003 16:21:44 -0000 1.87 *************** *** 440,443 **** --- 440,444 ---- def widgetFactory(self, *args, **kws): + kws.setdefault('exportselection', 0) widget=Tkinter.Listbox(*args, **kws) widget.bind('<ButtonRelease-1>', self.clickHandler) |
From: Magnus L. H. <ml...@us...> - 2003-06-09 18:40:40
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester In directory sc8-pr-cvs1:/tmp/cvs-serv24307 Modified Files: runme.py Log Message: Index: runme.py =================================================================== RCS file: /cvsroot/anygui/nondist/sandbox/magnus/tester/runme.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** runme.py 9 Jun 2003 18:40:00 -0000 1.3 --- runme.py 9 Jun 2003 18:40:37 -0000 1.4 *************** *** 1,6 **** #!/usr/bin/env python ! # FIXME: Currently resets all results; should keep results from other ! # back-ends. Rewrite to create a single table of successes/failures for all # back-ends, parse in existing test results from the result file, and # display the test descriptions only once, below the table. --- 1,5 ---- #!/usr/bin/env python ! # FIXME: Rewrite to create a single table of successes/failures for all # back-ends, parse in existing test results from the result file, and # display the test descriptions only once, below the table. |
From: Magnus L. H. <ml...@us...> - 2003-06-09 18:40:05
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester In directory sc8-pr-cvs1:/tmp/cvs-serv23907 Modified Files: runme.py Log Message: Index: runme.py =================================================================== RCS file: /cvsroot/anygui/nondist/sandbox/magnus/tester/runme.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** runme.py 8 Feb 2003 03:12:45 -0000 1.2 --- runme.py 9 Jun 2003 18:40:00 -0000 1.3 *************** *** 6,10 **** # display the test descriptions only once, below the table. ! import os, sys from time import * from glob import glob --- 6,10 ---- # display the test descriptions only once, below the table. ! import os, sys, re from time import * from glob import glob *************** *** 12,15 **** --- 12,18 ---- from anygui.Utils import topologicalSort + BEGIN_COMMENT = re.compile('^<!-- begin (\w+) -->$') + END_COMMENT = re.compile('^<!-- end (\w+) -->$') + TEST_DIR = 'tests' TEST_PAT = 'test_*.py' *************** *** 112,120 **** <br /> ! <hr /> <h2>Test Results for <code>%sgui</code></h2> ! """ % (strftime('%Y-%m-%d %H:%M:%S', localtime()), backend()) FOOT = """\ --- 115,133 ---- <br /> ! """ % (strftime('%Y-%m-%d %H:%M:%S', localtime()),) ! ! BACKEND_HEADER = """<hr /> ! ! <!-- begin %s --> <h2>Test Results for <code>%sgui</code></h2> ! """ % (backend(), backend()) ! ! BACKEND_FOOTER = """ ! ! <!-- end %s --> ! ! """ % (backend(),) FOOT = """\ *************** *** 175,181 **** --- 188,216 ---- self.files = files self.resultFile = resultFile + self.readExisting() self.results = [] self.setupGUI() + def readExisting(self): + self.existing = [] + if not os.path.isfile(self.resultFile): + return + collect = False + for line in open(self.resultFile): + m = BEGIN_COMMENT.match(line) + if m and not m.group(1) == backend(): + collect = True + continue + m = END_COMMENT.match(line) + if m: + collect = False + continue + if collect: + self.existing.append(line) + + def writeExisting(self, out): + for line in self.existing: + out.write(line) + def setupGUI(self): self.win = Window(text='The Anygui Test Program') *************** *** 232,237 **** --- 267,275 ---- out = open(self.resultFile, 'w') print >> out, HEAD + self.writeExisting(out) + print >> out, BACKEND_HEADER for result in self.results: print >> out, result + print >> out, BACKEND_FOOTER print >> out, FOOT out.close() |
From: Robin B. <rgb...@us...> - 2003-05-18 10:16:43
|
Update of /cvsroot/anygui/anygui/lib/anygui/backends In directory sc8-pr-cvs1:/tmp/cvs-serv2482 Modified Files: ctmswgui.py Log Message: Fix up to use ctype-0.6.0 Index: ctmswgui.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/ctmswgui.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** ctmswgui.py 29 Nov 2002 09:15:24 -0000 1.7 --- ctmswgui.py 18 May 2003 10:16:26 -0000 1.8 *************** *** 26,30 **** ################################################################ ! from ctypes import CDLL, _DLLS, _DynFunction, CFunction, c_string, Structure, WinError, byref, GetLastError _apiMode = 'A' --- 26,30 ---- ################################################################ ! from ctypes import CDLL, _DLLS, WinDLL, WINFUNCTYPE, c_buffer, c_int, c_char_p, Structure, WinError, byref, GetLastError _apiMode = 'A' *************** *** 35,48 **** return text.replace('\r\n', '\n') ! class WinDLL(CDLL): ! def __getattr__(self, name): try: ! func = _DynFunction(name, self) except: ! func = _DynFunction(name+_apiMode, self) setattr(self, name, func) return func ! windll = _DLLS(WinDLL) user32 = windll.user32 --- 35,50 ---- return text.replace('\r\n', '\n') ! class LocalWinDLL(WinDLL): def __getattr__(self, name): + if name[:2] == '__' and name[-2:] == '__': + raise AttributeError, name try: ! func = self._StdcallFuncPtr(name, self) except: ! func = self._StdcallFuncPtr(name+_apiMode, self) setattr(self, name, func) return func ! ! windll = _DLLS(LocalWinDLL) user32 = windll.user32 *************** *** 213,220 **** class t_rect(Structure): ! _fields_=(('left','i'),('top','i'),('right','i'),('bottom','i')) class t_point(Structure): ! _fields_=(('x','i'),('y','i')) # BUGS: --- 215,222 ---- class t_rect(Structure): ! _fields_=(('left',c_int),('top',c_int),('right',c_int),('bottom',c_int)) class t_point(Structure): ! _fields_=(('x',c_int),('y',c_int)) # BUGS: *************** *** 356,365 **** 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))) def _getText(self): 'return native text' n = GetWindowTextLength(self.widget) ! t = c_string('\000'*(n+1)) GetWindowText(self.widget,t,n+1) return t.value --- 358,367 ---- 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_buffer(_to_native(text))) def _getText(self): 'return native text' n = GetWindowTextLength(self.widget) ! t = c_buffer('\000'*(n+1)) GetWindowText(self.widget,t,n+1) return t.value *************** *** 428,432 **** for item in map(str, list(items)): # FIXME: This doesn't work! Items get jumbled... ! SendMessage(self.widget, LB_ADDSTRING, 0, c_string(item)) --- 430,434 ---- for item in map(str, list(items)): # FIXME: This doesn't work! Items get jumbled... ! SendMessage(self.widget, LB_ADDSTRING, 0, c_buffer(item)) *************** *** 605,609 **** if self.kind=='bitmap': try: ! self._handle = LoadImage(0,c_string(fn), IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE) except: --- 607,611 ---- if self.kind=='bitmap': try: ! self._handle = LoadImage(0,c_buffer(fn), IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE) except: *************** *** 713,717 **** def setTitle(self,title): if self.widget and title: ! SetWindowText(self.widget, c_string(title)) def getTitle(self): --- 715,719 ---- def setTitle(self,title): if self.widget and title: ! SetWindowText(self.widget, c_buffer(title)) def getTitle(self): *************** *** 810,828 **** def _register_class(self): #if _verbose: log('Application._register_class:start',str(self)) ! class WINDOWPROC(CFunction): ! _types_ = "iiii" ! _stdcall_ = 1 class WNDCLASS(Structure): _fields_= ( ! ('style','i'), ('lpfnWndProc',WINDOWPROC), ! ('cls_extra','i'), ! ('wnd_extra','i'), ! ('hInst','i'), ! ('hIcon','i'), ! ('hCursor','i'), ! ('hbrBackground','i'), ! ('menu_name','z'), ! ('lpzClassName','z'), ) --- 812,829 ---- def _register_class(self): #if _verbose: log('Application._register_class:start',str(self)) ! WINDOWPROC = WINFUNCTYPE(c_int,c_int,c_int,c_int,c_int) ! class WNDCLASS(Structure): _fields_= ( ! ('style',c_int), ('lpfnWndProc',WINDOWPROC), ! ('cls_extra',c_int), ! ('wnd_extra',c_int), ! ('hInst',c_int), ! ('hIcon',c_int), ! ('hCursor',c_int), ! ('hbrBackground',c_int), ! ('menu_name',c_char_p), ! ('lpzClassName',c_char_p), ) *************** *** 861,871 **** class MSG(Structure): _fields_ = ( ! ('hwnd','i'), ! ('message','i'), ! ('wParam','i'), ! ('lParam','i'), ! ('time','i'), ! ('x','i'), ! ('y','i'), ) --- 862,872 ---- class MSG(Structure): _fields_ = ( ! ('hwnd',c_int), ! ('message',c_int), ! ('wParam',c_int), ! ('lParam',c_int), ! ('time',c_int), ! ('x',c_int), ! ('y',c_int), ) |
From: Magnus L. H. <ml...@us...> - 2003-04-02 20:46:51
|
Update of /cvsroot/anygui//anygui/lib/anygui In directory sc8-pr-cvs1:/tmp/cvs-serv21658/lib/anygui Modified Files: Events.py Log Message: Index: Events.py =================================================================== RCS file: /cvsroot/anygui//anygui/lib/anygui/Events.py,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -r1.42 -r1.43 *** Events.py 19 Jul 2002 00:28:27 -0000 1.42 --- Events.py 2 Apr 2003 20:32:25 -0000 1.43 *************** *** 1,11 **** - ''' Event framework for Anygui. - - Magnus Lie Hetland 2001-11-26 - - 2002-02-12: Modified send() to send a single event object to the - event handlers. - ''' - TODO = ''' - Fix optional arguments/use of kwdargs in place of positionals etc. --- 1,3 ---- |
From: Magnus L. H. <ml...@us...> - 2003-04-02 20:46:32
|
Update of /cvsroot/anygui//anygui In directory sc8-pr-cvs1:/tmp/cvs-serv21658 Modified Files: TODO.txt Log Message: Index: TODO.txt =================================================================== RCS file: /cvsroot/anygui//anygui/TODO.txt,v retrieving revision 1.62 retrieving revision 1.63 diff -C2 -r1.62 -r1.63 *** TODO.txt 19 Mar 2003 12:35:12 -0000 1.62 --- TODO.txt 2 Apr 2003 20:32:23 -0000 1.63 *************** *** 37,40 **** --- 37,43 ---- * Fix transformation push('position') -> push('x', 'y') etc. + * Update documentation to include descriptions of use in IDLE and + other IDEs. + Objectives for version 0.2a0: ----------------------------- |
From: Magnus L. H. <ml...@us...> - 2003-04-02 20:43:02
|
Update of /cvsroot/anygui//anygui/lib/anygui/backends In directory sc8-pr-cvs1:/tmp/cvs-serv21658/lib/anygui/backends Modified Files: skelgui.py Log Message: Index: skelgui.py =================================================================== RCS file: /cvsroot/anygui//anygui/lib/anygui/backends/skelgui.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** skelgui.py 14 Nov 2002 17:00:10 -0000 1.3 --- skelgui.py 2 Apr 2003 20:32:25 -0000 1.4 *************** *** 33,40 **** """ # Import Anygui infrastructure. You shouldn't have to change these. from anygui.backends import * from anygui.Applications import AbstractApplication ! from anygui.Wrappers import AbstractWrapper, DummyWidget, isDummy from anygui.Events import * from anygui.Exceptions import Error --- 33,54 ---- """ + __all__ = ''' + + Application + ButtonWrapper + WindowWrapper + LabelWrapper + TextFieldWrapper + TextAreaWrapper + ListBoxWrapper + RadioButtonWrapper + CheckBoxWrapper + + '''.split() + # Import Anygui infrastructure. You shouldn't have to change these. from anygui.backends import * from anygui.Applications import AbstractApplication ! from anygui.Wrappers import AbstractWrapper from anygui.Events import * from anygui.Exceptions import Error *************** *** 103,110 **** native widget. You can also call it within the wrapper code if you need to destroy your native widget for some reason. You ! should set self.widget to DummyWidget() ! here, after destroying the native widget. """ ! self.widget = DummyWidget() raise NotImplementedError, 'should be implemented by subclasses' --- 117,124 ---- native widget. You can also call it within the wrapper code if you need to destroy your native widget for some reason. You ! should set self.widget to None here, after destroying the ! native widget. """ ! self.widget = None raise NotImplementedError, 'should be implemented by subclasses' |
From: Magnus L. H. <ml...@us...> - 2003-03-29 12:02:45
|
Update of /cvsroot/anygui//anygui/doc In directory sc8-pr-cvs1:/tmp/cvs-serv5768 Modified Files: tutorial.txt Log Message: Index: tutorial.txt =================================================================== RCS file: /cvsroot/anygui//anygui/doc/tutorial.txt,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** tutorial.txt 16 Feb 2003 02:11:24 -0000 1.5 --- tutorial.txt 29 Mar 2003 12:02:42 -0000 1.6 *************** *** 240,247 **** Cool, huh? ! (Note: Event handlers receive information about the event through Event objects. We ignore the specifics of these objects here. In version 0.1.1 and earlier, event handlers received information ! through keyword arguments.) 9. Further Exploration --- 240,254 ---- Cool, huh? ! Note: Event handlers receive information about the event through Event objects. We ignore the specifics of these objects here. In version 0.1.1 and earlier, event handlers received information ! through keyword arguments. So, if you're using Anygui 0.1.1, the ! event handler should be: ! ! def handler(**kwds): ! txt.text = sentence() ! ! If you use the definition without keyword arguments, you'll get a ! TypeError, which complains about unexpected keyword arguments. 9. Further Exploration *************** *** 331,334 **** --- 338,342 ---- win.height = txt.height + btn.height + 30 + # Remember to use keyword arguments in Anygui 0.1.1 def handler(event): txt.text = sentence() link(btn, 'click', handler) |
From: Magnus L. H. <ml...@us...> - 2003-03-19 12:35:16
|
Update of /cvsroot/anygui//anygui In directory sc8-pr-cvs1:/tmp/cvs-serv24338 Modified Files: TODO.txt Log Message: Index: TODO.txt =================================================================== RCS file: /cvsroot/anygui//anygui/TODO.txt,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -r1.61 -r1.62 *** TODO.txt 29 Jan 2003 01:51:42 -0000 1.61 --- TODO.txt 19 Mar 2003 12:35:12 -0000 1.62 *************** *** 80,83 **** --- 80,85 ---- relevant components. + * Implement the method Application.quit in all back-ends. + New Components: |
From: Magnus L. H. <ml...@us...> - 2003-02-17 03:09:49
|
Update of /cvsroot/anygui/nondist/admin In directory sc8-pr-cvs1:/tmp/cvs-serv14433 Modified Files: status.txt Log Message: Index: status.txt =================================================================== RCS file: /cvsroot/anygui/nondist/admin/status.txt,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -r1.64 -r1.65 *** status.txt 26 Jan 2003 16:03:11 -0000 1.64 --- status.txt 17 Feb 2003 03:09:45 -0000 1.65 *************** *** 11,15 **** javagui + + + ! + ! - ! + + + + ? + - ! + + + + + + + mswgui + + + ! + + + ! + + + + + ! + + + - + + - + + ! qtgui + + + ! - + + ! - + + + - + - + - - - + - - + textgui ? ? ? ! ? ? ? ! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tkgui + + + ! + + - ! + + + + ? ! + + + + + + + + + --- 11,15 ---- javagui + + + ! + ! - ! + + + + ? + - ! + + + + + + + mswgui + + + ! + + + ! + + + + + ! + + + - + + - + + ! qtgui + + + ! - + + ! + + + + + + - + - - - + - - + textgui ? ? ? ! ? ? ? ! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tkgui + + + ! + + - ! + + + + ? ! + + + + + + + + + |
From: Magnus L. H. <ml...@us...> - 2003-02-17 02:53:18
|
Update of /cvsroot/anygui/anygui In directory sc8-pr-cvs1:/tmp/cvs-serv8853 Modified Files: KNOWN_BUGS.txt Log Message: Fixed the window offset problem in qtgui. The setGeometry of QMainWindow doesn't take into account the window frame. I changed WindowWrapper.setGeometry to use QMainWindow.move() and QMainWindow.resize() instead -- not sure whether resize() takes the window frame into account. One related bug remains: When the window is resized so that comtained components get negative dimensions, qt will keep them at zero (naturally), and when the window has its size increased again, the component dimensions will be wrong. Index: KNOWN_BUGS.txt =================================================================== RCS file: /cvsroot/anygui/anygui/KNOWN_BUGS.txt,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** KNOWN_BUGS.txt 1 Nov 2002 14:31:16 -0000 1.10 --- KNOWN_BUGS.txt 17 Feb 2003 02:53:15 -0000 1.11 *************** *** 16,24 **** qtgui: ! [mlh@20021101] qtgui windows seem to be displaced by a fixed amount. ! Also, handling of Nond vs. DummyWidget doesn't seem to work properly yet. And... After editing the text in a textfield, the cursor seems to ! automatically jump to the end of the text. And defaults don't seem to ! be working properly. -- Old (0.1.1) problems ---------------------------------------------- --- 16,26 ---- qtgui: ! [mlh@20030217] Handling of Nond vs. DummyWidget doesn't seem to work properly yet. And... After editing the text in a textfield, the cursor seems to ! automatically jump to the end of the text. And defaults don't seem to be ! working properly. And if a window is resized to a very small size, so that a ! contained widget has one of its dimensions reduced to less zero, the widgets ! geometry will be wrong when the window is resized to become large again. The ! negative dimension should be "remembered" somehow. -- Old (0.1.1) problems ---------------------------------------------- |
From: Magnus L. H. <ml...@us...> - 2003-02-17 02:53:18
|
Update of /cvsroot/anygui/anygui/lib/anygui/backends In directory sc8-pr-cvs1:/tmp/cvs-serv8853/lib/anygui/backends Modified Files: qtgui.py Log Message: Fixed the window offset problem in qtgui. The setGeometry of QMainWindow doesn't take into account the window frame. I changed WindowWrapper.setGeometry to use QMainWindow.move() and QMainWindow.resize() instead -- not sure whether resize() takes the window frame into account. One related bug remains: When the window is resized so that comtained components get negative dimensions, qt will keep them at zero (naturally), and when the window has its size increased again, the component dimensions will be wrong. Index: qtgui.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/qtgui.py,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** qtgui.py 29 Jan 2003 01:43:43 -0000 1.28 --- qtgui.py 17 Feb 2003 02:53:15 -0000 1.29 *************** *** 531,536 **** dh = h - self.proxy.state['height'] # @@@ (and therefore will tell us nothing!) ! self.proxy.height ! self.proxy.width self.proxy.resized(dw, dh) --- 531,536 ---- dh = h - self.proxy.state['height'] # @@@ (and therefore will tell us nothing!) ! self.proxy.height # FIXME: What's this? [mlh] ! self.proxy.width # FIXME: What's this? [mlh] self.proxy.resized(dw, dh) *************** *** 602,610 **** def setGeometry(self, x, y, width, height): if self.widget: ! self.mainWindow.setGeometry(x, y, width, height) def getGeometry(self): if self.widget: ! r = self.widget.geometry() p = self.widget.mapToGlobal(QPoint(r.x(), r.y())) return (p.x(), p.y(), r.width(), r.height()) --- 602,614 ---- def setGeometry(self, x, y, width, height): if self.widget: ! # Doesn't account for the frame: ! #self.mainWindow.setGeometry(x, y, width, height) ! self.mainWindow.move(x, y) ! # FIXME: Does resize account for the window frame? ! self.mainWindow.resize(width, height) def getGeometry(self): if self.widget: ! r = self.widget.frameGeometry() p = self.widget.mapToGlobal(QPoint(r.x(), r.y())) return (p.x(), p.y(), r.width(), r.height()) |
From: Magnus L. H. <ml...@us...> - 2003-02-16 02:11:27
|
Update of /cvsroot/anygui/anygui/doc In directory sc8-pr-cvs1:/tmp/cvs-serv11887 Modified Files: tutorial.txt Log Message: Index: tutorial.txt =================================================================== RCS file: /cvsroot/anygui/anygui/doc/tutorial.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** tutorial.txt 24 Apr 2002 15:57:03 -0000 1.4 --- tutorial.txt 16 Feb 2003 02:11:24 -0000 1.5 *************** *** 1,5 **** Title: Anygui Tutorial Author: Magnus Lie Hetland ! Date: 2002-01-04 1. Introduction --- 1,5 ---- Title: Anygui Tutorial Author: Magnus Lie Hetland ! Date: 2003-02-16 1. Introduction *************** *** 55,65 **** from anygui import * - win = Window() app = Application() app.add(win) There; we've created a Window object, an Application object, and added the Window to the Application (otherwise it wouldn't show up ! anywhere). This won't do anything by itself; we need to tell the Application --- 55,66 ---- from anygui import * app = Application() + win = Window() app.add(win) There; we've created a Window object, an Application object, and added the Window to the Application (otherwise it wouldn't show up ! anywhere). You should create your Application object before your ! other Anygui components (including Windows). This won't do anything by itself; we need to tell the Application *************** *** 218,222 **** and link it to the button: ! def handler(**kw): txt.text = sentence() --- 219,223 ---- and link it to the button: ! def handler(event): txt.text = sentence() *************** *** 240,246 **** (Note: Event handlers receive information about the event through ! keyword arguments, such as event type, the time when the event ! occurred etc. We simply ignore all that here, using the **kw syntax ! to allow any keywords.) 9. Further Exploration --- 241,247 ---- (Note: Event handlers receive information about the event through ! Event objects. We ignore the specifics of these objects here. In ! version 0.1.1 and earlier, event handlers received information ! through keyword arguments.) 9. Further Exploration *************** *** 318,321 **** --- 319,324 ---- return ' '.join(words) + app = Application() + win = Window() *************** *** 328,335 **** win.height = txt.height + btn.height + 30 ! def handler(**kw): txt.text = sentence() link(btn, 'click', handler) - app = Application() app.add(win) app.run() --- 331,337 ---- win.height = txt.height + btn.height + 30 ! def handler(event): txt.text = sentence() link(btn, 'click', handler) app.add(win) app.run() |
From: Magnus L. H. <ml...@us...> - 2003-02-08 03:12:49
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester In directory sc8-pr-cvs1:/tmp/cvs-serv4597 Modified Files: runme.py Log Message: Fixed thinko Index: runme.py =================================================================== RCS file: /cvsroot/anygui/nondist/sandbox/magnus/tester/runme.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** runme.py 8 Feb 2003 02:01:25 -0000 1.1 --- runme.py 8 Feb 2003 03:12:45 -0000 1.2 *************** *** 164,168 **** docs = self.scope.get('__doc__', '(No description available)') docs = '<p>' + docs.replace('\n\n', '\n</p>\n<p>') + '\n</p>' ! return '''<h3>%s: %s</h3> %s --- 164,168 ---- docs = self.scope.get('__doc__', '(No description available)') docs = '<p>' + docs.replace('\n\n', '\n</p>\n<p>') + '\n</p>' ! return '''<h3>test_%s.py: %s</h3> %s *************** *** 202,206 **** exec open(fname) in scope testScopes.append(scope) ! name = os.path.basename(fname) testNames.append(name) for other in eval('after', scope): --- 202,206 ---- exec open(fname) in scope testScopes.append(scope) ! name = os.path.basename(fname)[5:-3] testNames.append(name) for other in eval('after', scope): |
From: Magnus L. H. <ml...@us...> - 2003-02-08 03:06:36
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester2 In directory sc8-pr-cvs1:/tmp/cvs-serv2736 Added Files: README Removed Files: runme.py Log Message: --- NEW FILE: README --- Please ignore this directory (and its subdirectories) :) --- runme.py DELETED --- |
From: Magnus L. H. <ml...@us...> - 2003-02-08 02:14:23
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester2/tests In directory sc8-pr-cvs1:/tmp/cvs-serv18738/tests Added Files: test_button.py test_label.py Log Message: --- NEW FILE: test_button.py --- """ Tests the basic functionality of the Button class, as well as some simple event handling. """ from anygui import * after = ['label'] # Dummy dependency... def setup(frame): btn = Button(text='Click me!', x=50, y=50) def clicked(event): btn.text = 'Thank you.' link(btn, clicked) frame.add(btn) --- NEW FILE: test_label.py --- """ Tests the basic functionality of the Label class. """ from anygui import * after = [] def setup(frame): lbl = Label(text='Hello, world!', x=50, y=50) frame.add(lbl) |
From: Magnus L. H. <ml...@us...> - 2003-02-08 02:14:22
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester2 In directory sc8-pr-cvs1:/tmp/cvs-serv18738 Added Files: runme.py Log Message: --- NEW FILE: runme.py --- #!/usr/bin/env python # FIXME: Currently resets all results; should keep results from other # back-ends. Rewrite to create a single table of successes/failures for all # back-ends, parse in existing test results from the result file, and # display the test descriptions only once, below the table. import os, sys from time import * from glob import glob from anygui import * from anygui.Utils import topologicalSort TEST_DIR = 'tests' TEST_PAT = 'test_*.py' RESULT_FILE = 'results.html' HEAD = """\ <html> <head> <title>Anygui Test Results</title> <style> body { color: #000000; background-color: #ffffff; } a:active { color: #ff0000; } a:visited { color: #551a8b; } a:link { color: #0000bb; } h1, h2, h3, h4, h5, h6 { font-family: avantgarde, sans-serif; font-weight: bold; } h1 { font-size: 180%%; } h2 { font-size: 150%%; } h3, h4 { font-size: 120%%; } code, tt { font-family: lucida typewriter, lucidatypewriter, monospace; } var { font-family: times, serif; font-style: italic; font-weight: normal; } .typelabel { font-family: lucida, sans-serif; } .navigation td { background-color: #99ccff; font-weight: bold; font-family: avantgarde, sans-serif; font-size: 110%%; } .release-info { font-style: italic; } .titlegraphic { vertical-align: top; } .verbatim { color: #00008b; font-family: lucida typewriter, lucidatypewriter, monospace; } .grammar { background-color: #99ccff; margin-right: 0.5in; padding: 0.05in; } .productions { background-color: #bbeeff; } .productions table { vertical-align: baseline; } .grammar-footer { padding: 0.05in; font-size: 85%%; } .email { font-family: avantgarde, sans-serif; } .mailheader { font-family: avantgarde, sans-serif; } .mimetype { font-family: avantgarde, sans-serif; } .newsgroup { font-family: avantgarde, sans-serif; } .url { font-family: avantgarde, sans-serif; } .file { font-family: avantgarde, sans-serif; } .tableheader { background-color: #99ccff; font-family: avantgarde, sans-serif; } </style> </head> <body> <div class="navigation"> <table align="center" width="100%%" cellpadding="0" cellspacing="2"> <tr> <td><img src="icons/blank.gif" border="0" height="32" alt="" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Up One Level" width="32"></td> <td><img src="icons/up.gif" border="0" height="32" alt="Next Page" width="32"></td> <td align="center" width="100%%">Anygui Test Results</td> <td><img src="icons/blank.gif" border="0" height="32" alt="Contents" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Module Index" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Index" width="32"></td> </tr></table> <b class="navlabel">Up:</b> <a class="sectref" HREF="http://www.anygui.org">Anygui home</a> <br /><hr /> </div> <div class="titlepage"> <center> <h1>Anygui Test Results</h1> <strong>%s</strong></p> <p> </center> </div> <br /> <hr /> <h2>Test Results for <code>%sgui</code></h2> """ % (strftime('%Y-%m-%d %H:%M:%S', localtime()), backend()) FOOT = """\ <div class="navigation"> <hr /> <table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td><img src="icons/blank.gif" border="0" height="32" alt="" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Up One Level" width="32"></td> <td><img src="icons/up.gif" border="0" height="32" alt="Next Page" width="32"></td> <td align="center" width="100%">Anygui Test Results</td> <td><img src="icons/blank.gif" border="0" height="32" alt="Contents" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Module Index" width="32"></td> <td><img src="icons/blank.gif" border="0" height="32" alt="Index" width="32"></td> </tr></table> <b class="navlabel">Up:</b> <a class="sectref" HREF="http://www.anygui.org">Anygui home</a> <br><hr /> </div> </body> </html>""" def testFiles(): return glob(os.path.join(TEST_DIR, TEST_PAT)) class TestResult: status = 'Failed' def __init__(self, name, scope): self.name = name self.scope = scope def __str__(self): docs = self.scope.get('__doc__', '(No description available)') docs = '<p>' + docs.replace('\n\n', '\n</p>\n<p>') + '\n</p>' return '''<h3>%s: %s</h3> %s ''' % (self.name, self.status, docs) class TestWizard(Application): def __init__(self, files, resultFile, *args, **kwds): Application.__init__(self, *args, **kwds) self.files = files self.resultFile = resultFile self.results = [] self.setupGUI() def setupGUI(self): self.win = Window(text='The Anygui Test Program') self.passButton = Button(text='Pass') self.win.add(self.passButton, right=10, bottom=10, hmove=1, vmove=1) link(self.passButton, self.passTest) self.failButton = Button(text='Fail') self.win.add(self.failButton, right=(self.passButton,10), bottom=10, hmove=1, vmove=1) link(self.failButton, self.failTest) self.setupTests() self.nextTest() self.add(self.win) def setupTests(self): testScopes = [] testNames = [] constraints = [] for fname in self.files: scope = {} exec open(fname) in scope testScopes.append(scope) name = os.path.basename(fname) testNames.append(name) for other in eval('after', scope): constraints.append((other, name)) topologicalSort(testNames, testScopes, constraints) testScopes.reverse() testNames.reverse() self.testScopes = testScopes self.testNames = testNames def nextTest(self): if not self.testScopes: self.writeResults() sys.exit() scope = self.testScopes.pop() name = self.testNames.pop() try: self.win.remove(self.frame) except AttributeError: pass self.frame = Frame() assert not hasattr(scope, '__supplied_frame') scope['__supplied_frame'] = self.frame exec 'setup(__supplied_frame)' in scope self.win.add(self.frame, top=0, left=0, right=0, bottom=(self.passButton, 10), hstretch=1, vstretch=1) self.results.append(TestResult(name, scope)) def writeResults(self): out = open(self.resultFile, 'w') print >> out, HEAD for result in self.results: print >> out, result print >> out, FOOT out.close() def passTest(self, event): self.results[-1].status = 'Passed' self.nextTest() def failTest(self, event): self.nextTest() def main(args=[]): tw = TestWizard(testFiles(), RESULT_FILE) tw.run() if __name__ == '__main__': main(sys.argv) |
From: Magnus L. H. <ml...@us...> - 2003-02-08 02:14:22
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester2/icons In directory sc8-pr-cvs1:/tmp/cvs-serv18738/icons Added Files: blank.gif up.gif Log Message: --- NEW FILE: blank.gif --- GIF87a --- NEW FILE: up.gif --- GIF89a =p fªªÃ¬ð*8Q¤ÄøH@u}ä1¯ªA!IåÒñµ¤ÒÅs@ÃJÀ×kÀ½ñeeKÈ¡@lº½ÛÞ3D h?+j5N Db50mN D"J51Z$K%j1%DT%v2e%|5/%°O5U*D·¼%xÁ)¢Æ%uÉ%D Í"¹»Ò×"DÒLÚ²®×yá ë áÆ! |
From: Magnus L. H. <ml...@us...> - 2003-02-08 02:13:35
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester2/tests In directory sc8-pr-cvs1:/tmp/cvs-serv18498/tests Log Message: Directory /cvsroot/anygui/nondist/sandbox/magnus/tester2/tests added to the repository |
From: Magnus L. H. <ml...@us...> - 2003-02-08 02:13:04
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester2/icons In directory sc8-pr-cvs1:/tmp/cvs-serv18330/icons Log Message: Directory /cvsroot/anygui/nondist/sandbox/magnus/tester2/icons added to the repository |
From: Magnus L. H. <ml...@us...> - 2003-02-08 02:12:37
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester2 In directory sc8-pr-cvs1:/tmp/cvs-serv18228/tester2 Log Message: Directory /cvsroot/anygui/nondist/sandbox/magnus/tester2 added to the repository |
From: Magnus L. H. <ml...@us...> - 2003-02-08 02:01:28
|
Update of /cvsroot/anygui/nondist/sandbox/magnus/tester/tests In directory sc8-pr-cvs1:/tmp/cvs-serv14678/tests Added Files: test_button.py test_label.py Log Message: --- NEW FILE: test_button.py --- """ Tests the basic functionality of the Button class, as well as some simple event handling. """ from anygui import * after = ['label'] # Dummy dependency... def setup(frame): btn = Button(text='Click me!', x=50, y=50) def clicked(event): btn.text = 'Thank you.' link(btn, clicked) frame.add(btn) --- NEW FILE: test_label.py --- """ Tests the basic functionality of the Label class. """ from anygui import * after = [] def setup(frame): lbl = Label(text='Hello, world!', x=50, y=50) frame.add(lbl) |