You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
(45) |
May
(185) |
Jun
|
Jul
(36) |
Aug
(205) |
Sep
(98) |
Oct
(107) |
Nov
(6) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(1) |
Feb
(2) |
Mar
(19) |
Apr
(26) |
May
(18) |
Jun
|
Jul
(12) |
Aug
(16) |
Sep
(22) |
Oct
(7) |
Nov
(11) |
Dec
(74) |
2006 |
Jan
(14) |
Feb
(1) |
Mar
(3) |
Apr
(3) |
May
(14) |
Jun
(5) |
Jul
(20) |
Aug
(10) |
Sep
(1) |
Oct
|
Nov
(4) |
Dec
(1) |
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(3) |
Jul
(14) |
Aug
|
Sep
|
Oct
(6) |
Nov
(1) |
Dec
|
From: Kevin A. <ka...@us...> - 2007-11-15 21:39:44
|
Update of /cvsroot/pythoncard/PythonCard/samples/widgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11676 Modified Files: widgets.rsrc.py Log Message: fixed typo Index: widgets.rsrc.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/samples/widgets/widgets.rsrc.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** widgets.rsrc.py 4 Oct 2004 19:03:11 -0000 1.25 --- widgets.rsrc.py 15 Nov 2007 21:39:44 -0000 1.26 *************** *** 309,313 **** 'position':(100, 92), 'size':(180, 60), ! 'text':'Use the checkboxes and buttons on the right to set the attributes of the widgets on the left.\n\nThe editable attribute only applies to TextField, PasswordFiled, and TextArea.', }, --- 309,313 ---- 'position':(100, 92), 'size':(180, 60), ! 'text':'Use the checkboxes and buttons on the right to set the attributes of the widgets on the left.\n\nThe editable attribute only applies to TextField, PasswordField, and TextArea.', }, |
From: Phil E. <l2...@us...> - 2007-10-31 17:24:38
|
Update of /cvsroot/pythoncard/PythonCard/docs/html/dialogs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20488 Modified Files: colordialog.html directorydialog.html filedialog.html finddialog.html fontdialog.html messagedialog.html multiplechoicedialog.html singlechoicedialog.html textentrydialog.html Log Message: Change wording to reflect use of wx.libs.DialogResults object as a return value Index: textentrydialog.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/dialogs/textentrydialog.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** textentrydialog.html 17 Aug 2004 19:09:43 -0000 1.3 --- textentrydialog.html 31 Oct 2007 17:24:41 -0000 1.4 *************** *** 6,10 **** content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Dan Shafer"> <title>Text Entry Dialog</title> </head> --- 6,10 ---- content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Phil Edwards"> <title>Text Entry Dialog</title> </head> *************** *** 90,96 **** <h2>Interacting With the Dialog</h2> ! The textEntryDialog component returns three values, stored ! as elements of the Python dictionary called "results" returned by all ! PythonCard dialogs. These results are as shown in the following table.<br> <br> --- 90,95 ---- <h2>Interacting With the Dialog</h2> ! The textEntryDialog component returns a wxPython DialogResults object ! which contains 3 attributes, as shown in the following table<br> <br> Index: colordialog.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/dialogs/colordialog.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** colordialog.html 17 Aug 2004 19:09:43 -0000 1.2 --- colordialog.html 31 Oct 2007 17:24:41 -0000 1.3 *************** *** 6,10 **** content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Dan Shafer"> <title>Color Dialog</title> --- 6,10 ---- content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Phil Edwards"> <title>Color Dialog</title> *************** *** 30,36 **** <h2>Interacting With the Dialog</h2> ! The colorDialog component returns two values, stored as elements ! of the Python dictionary called "results" returned by all PythonCard dialogs. ! These results are as shown in the following table.<br> <br> --- 30,35 ---- <h2>Interacting With the Dialog</h2> ! The colorDialog component returns a wxPython DialogResults object ! which contains 2 attributes, as shown in the following table<br> <br> Index: multiplechoicedialog.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/dialogs/multiplechoicedialog.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** multiplechoicedialog.html 17 Aug 2004 19:09:43 -0000 1.3 --- multiplechoicedialog.html 31 Oct 2007 17:24:41 -0000 1.4 *************** *** 6,10 **** content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Dan Shafer"> <title>Multiple Choice Dialog</title> </head> --- 6,10 ---- content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Phil Edwards"> <title>Multiple Choice Dialog</title> </head> *************** *** 70,76 **** <h2>Interacting With the Dialog</h2> ! The multipleChoiceDialog component returns two values, stored as elements ! of the Python dictionary called "results" returned by all PythonCard dialogs. ! These results are as shown in the following table.<br> <br> --- 70,75 ---- <h2>Interacting With the Dialog</h2> ! The multipleChoiceDialog component returns a wxPython DialogResults object ! which contains 2 attributes, as shown in the following table<br> <br> Index: filedialog.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/dialogs/filedialog.html,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** filedialog.html 18 Sep 2004 16:59:15 -0000 1.6 --- filedialog.html 31 Oct 2007 17:24:41 -0000 1.7 *************** *** 6,13 **** content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Dan Shafer"> <title>File Dialog</title> ! <meta name="generator" content="Namo WebEditor v5.0(Trial)"> </head> <body> --- 6,13 ---- content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Phil Edwards"> <title>File Dialog</title> ! <meta name="generator" content="Bluefish 1.0.5"> </head> <body> *************** *** 117,123 **** confirmed with a prompt dialog.</p> <h2>Interacting With the Dialog</h2> ! The fileDialog component returns its values, stored as attributes ! of an instance of the DialogResults class called "results" returned by all PythonCard dialogs. ! These results are as shown in the following table.<br> <br> --- 117,122 ---- confirmed with a prompt dialog.</p> <h2>Interacting With the Dialog</h2> ! The fileDialog component returns a wxPython DialogResults object ! which contains 2 attributes, as shown in the following table<br> <br> Index: fontdialog.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/dialogs/fontdialog.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** fontdialog.html 17 Aug 2004 19:09:43 -0000 1.2 --- fontdialog.html 31 Oct 2007 17:24:41 -0000 1.3 *************** *** 6,10 **** content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Dan Shafer"> <title>Font Dialog</title> </head> --- 6,10 ---- content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Phil Edwards"> <title>Font Dialog</title> </head> *************** *** 56,62 **** <h2>Interacting With the Dialog</h2> ! The fontDialog component returns three values, stored as elements ! of the Python dictionary called "results" returned by all PythonCard dialogs. ! These results are as shown in the following table.<br> <br> --- 56,61 ---- <h2>Interacting With the Dialog</h2> ! The fontDialog component returns a wxPython DialogResults object ! which contains 3 attributes, as shown in the following table<br> <br> Index: singlechoicedialog.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/dialogs/singlechoicedialog.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** singlechoicedialog.html 17 Aug 2004 19:09:43 -0000 1.3 --- singlechoicedialog.html 31 Oct 2007 17:24:41 -0000 1.4 *************** *** 6,10 **** content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Dan Shafer"> <title>Single Choice Dialog</title> --- 6,10 ---- content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Phil Edwards"> <title>Single Choice Dialog</title> *************** *** 71,77 **** <h2>Interacting With the Dialog</h2> ! The singleChoiceDialog component returns two values, stored as elements ! of the Python dictionary called "results" returned by all PythonCard dialogs. ! These results are as shown in the following table.<br> <br> --- 71,77 ---- <h2>Interacting With the Dialog</h2> ! The singleChoiceDialog component returns a wxPython DialogResults object ! which contains 2 attributes, as shown in the following table<br> ! <br> Index: messagedialog.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/dialogs/messagedialog.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** messagedialog.html 17 Aug 2004 19:09:43 -0000 1.2 --- messagedialog.html 31 Oct 2007 17:24:41 -0000 1.3 *************** *** 6,10 **** content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Dan Shafer"> <title>Message Dialog</title> --- 6,10 ---- content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Phil Edwards"> <title>Message Dialog</title> *************** *** 186,193 **** <h2>Interacting With the Dialog</h2> ! The messageDialog component returns two values, stored as elements ! of the Python dictionary called "results" returned by all PythonCard ! dialogs. These results are as shown in the following table.<br> ! <br> <table cellpadding="2" cellspacing="2" border="1" width="80%"> --- 186,191 ---- <h2>Interacting With the Dialog</h2> ! The messageDialog component returns a wxPython DialogResults object ! which contains 2 attributes, as shown in the following table<br> <br> <table cellpadding="2" cellspacing="2" border="1" width="80%"> Index: finddialog.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/dialogs/finddialog.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** finddialog.html 17 Aug 2004 19:09:43 -0000 1.3 --- finddialog.html 31 Oct 2007 17:24:41 -0000 1.4 *************** *** 6,13 **** content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Dan Shafer"> <title>Find Dialog</title> ! <meta name="generator" content="Namo WebEditor v5.0(Trial)"> </head> <body> --- 6,13 ---- content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Phil Edwards"> <title>Find Dialog</title> ! <meta name="generator" content="Bluefish 1.0.5"> </head> <body> *************** *** 80,86 **** </table> <h2>Interacting With the Dialog</h2> ! The findDialog component returns four values, stored as elements of ! the Python dictionary called "results" returned by all PythonCard dialogs. ! These results are as shown in the following table.<br> <br> --- 80,85 ---- </table> <h2>Interacting With the Dialog</h2> ! The findDialog component returns a wxPython DialogResults object ! which contains 4 attributes, as shown in the following table<br> <br> Index: directorydialog.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/dialogs/directorydialog.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** directorydialog.html 17 Aug 2004 19:09:43 -0000 1.3 --- directorydialog.html 31 Oct 2007 17:24:41 -0000 1.4 *************** *** 6,13 **** content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Dan Shafer"> <title>Directory Dialog</title> ! <meta name="generator" content="Namo WebEditor v5.0(Trial)"> </head> <body> --- 6,13 ---- content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Phil Edwards"> <title>Directory Dialog</title> ! <meta name="generator" content="Bluefish 1.0.5"> </head> <body> *************** *** 83,89 **** </p> <h2>Interacting With the Dialog</h2> ! The directoryDialog component returns two values, stored as elements ! of the Python dictionary called "results" returned by all PythonCard ! dialogs. These results are as shown in the following table.<br> <br> --- 83,88 ---- </p> <h2>Interacting With the Dialog</h2> ! The alertDialog component returns a wxPython DialogResults object ! which contains 2 attributes, as shown in the following table<br> <br> |
From: Phil E. <l2...@us...> - 2007-10-31 17:24:20
|
Update of /cvsroot/pythoncard/PythonCard/docs/html/dialogs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20464 Modified Files: alertdialog.html Log Message: Change wording to reflect use of wx.libs.DialogResults object as a return value Index: alertdialog.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/dialogs/alertdialog.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** alertdialog.html 17 Aug 2004 19:09:34 -0000 1.2 --- alertdialog.html 31 Oct 2007 17:24:20 -0000 1.3 *************** *** 6,10 **** content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Dan Shafer"> <title>Alert Dialog</title> --- 6,10 ---- content="text/html; charset=ISO-8859-1"> ! <meta name="author" content="Phil Edwards"> <title>Alert Dialog</title> *************** *** 63,69 **** <code>result = dialog.alertDialog(self, 'a message', 'a title')</code><br> <h2>Interacting With the Dialog</h2> ! The alertDialog component returns two values, stored as elements ! of the Python dictionary called "results" returned by all PythonCard ! dialogs. These results are as shown in the following table.<br> <br> --- 63,68 ---- <code>result = dialog.alertDialog(self, 'a message', 'a title')</code><br> <h2>Interacting With the Dialog</h2> ! The alertDialog component returns a wxPython DialogResults object ! which contains 2 attributes, as shown in the following table<br> <br> |
Update of /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19502 Modified Files: changelog.txt customDialogs.py helpAbout.rsrc.py outputWindow.gtk.rsrc.py prefsDialog.gtk.rsrc.py propertiesDialog.gtk.rsrc.py propertiesDialog.rsrc.py readme.txt standaloneBuilder.gtk.rsrc.py standaloneBuilder.py standaloneBuilder.rsrc.py Added Files: buildDialog.rsrc.py helpAbout.gtk.rsrc.py helpManual.rsrc.py Log Message: Fixes and enhancements for standaloneBuilder v0.3.1, see changelog file for full details Index: standaloneBuilder.rsrc.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/standaloneBuilder.rsrc.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** standaloneBuilder.rsrc.py 3 Nov 2006 14:56:25 -0000 1.8 --- standaloneBuilder.rsrc.py 24 Oct 2007 00:51:18 -0000 1.9 *************** *** 1,586 **** ! {'application':{'type':'Application', ! 'name':'Template', ! 'backgrounds': [ ! {'type':'Background', ! 'name':'standaloneBuilder', ! 'title':u'PythonCard standaloneBuilder', ! 'size':(800, 590), ! 'statusBar':1, ! ! 'menubar': {'type':'MenuBar', [...1148 lines suppressed...] ! }, ! ! {'type':'StaticBox', ! 'name':'StaticBox4', ! 'position':(5, 370), ! 'size':(380, 150), ! 'label':u'Pixmap files:', ! }, ! ! {'type':'StaticBox', ! 'name':'StaticBox5', ! 'position':(405, 370), ! 'size':(380, 150), ! 'label':u'Other files:', ! }, ! ! ] # end components ! } # end background ! ] # end backgrounds ! } } Index: propertiesDialog.gtk.rsrc.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/propertiesDialog.gtk.rsrc.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** propertiesDialog.gtk.rsrc.py 12 May 2006 16:26:20 -0000 1.1 --- propertiesDialog.gtk.rsrc.py 24 Oct 2007 00:51:18 -0000 1.2 *************** *** 3,147 **** 'title':'Project properties', 'position':(468, 29), ! 'size':(450, 385), 'components': [ {'type':'TextField', 'name':'buildPath', ! 'position':(130, 5), 'size':(265, -1), - 'actionBindings':{}, }, {'type':'Button', 'name':'buildPathBtn', ! 'position':(400, 5), 'size':(25, 22), ! 'actionBindings':{}, ! 'label':'...', }, {'type':'TextField', 'name':'distPath', ! 'position':(130, 40), 'size':(265, -1), - 'actionBindings':{}, }, {'type':'Button', 'name':'distPathBtn', ! 'position':(400, 40), 'size':(25, 22), ! 'actionBindings':{}, ! 'label':'...', }, {'type':'TextField', 'name':'pixmapsPath', ! 'position':(130, 75), 'size':(265, -1), - 'actionBindings':{}, }, {'type':'Button', 'name':'pixmapsPathBtn', ! 'position':(400, 75), 'size':(25, 22), ! 'actionBindings':{}, ! 'label':'...', }, {'type':'TextField', 'name':'tarballPath', ! 'position':(130, 110), 'size':(265, -1), - 'actionBindings':{}, }, {'type':'Button', 'name':'tarballsPathBtn', ! 'position':(400, 110), 'size':(25, 22), ! 'actionBindings':{}, ! 'label':'...', }, {'type':'TextField', 'name':'appPublisher', ! 'position':(130, 145), 'size':(265, -1), - 'actionBindings':{}, }, {'type':'TextField', 'name':'appURL', ! 'position':(130, 180), 'size':(265, -1), - 'actionBindings':{}, }, {'type':'TextField', 'name':'appLicence', ! 'position':(130, 215), 'size':(265, -1), - 'actionBindings':{}, }, {'type':'Button', 'name':'appLicenceBtn', ! 'position':(400, 215), 'size':(25, 22), ! 'actionBindings':{}, ! 'label':'...', }, {'type':'Choice', 'name':'buildType', ! 'position':(125, 250), 'size':(140, -1), - 'actionBindings':{}, 'items':[u'Single file', u'Single directory'], ! 'stringSelection':'Single directory', }, {'type':'CheckBox', 'name':'asciiChk', ! 'position':(120, 285), ! 'actionBindings':{}, ! 'label':'No encoding', }, {'type':'CheckBox', 'name':'consoleChk', ! 'position':(250, 285), ! 'actionBindings':{}, ! 'label':'Console', }, {'type':'CheckBox', 'name':'compressChk', ! 'position':(345, 285), ! 'actionBindings':{}, ! 'label':'Compress', }, {'type':'CheckBox', 'name':'striplibsChk', ! 'position':(120, 305), ! 'actionBindings':{}, ! 'label':'Strip libs (Linux)', }, {'type':'CheckBox', 'name':'optimizeChk', ! 'position':(250, 305), ! 'actionBindings':{}, ! 'label':'Optimize', }, {'type':'CheckBox', 'name':'debugChk', ! 'position':(345, 305), ! 'actionBindings':{}, ! 'label':'Debug', }, --- 3,135 ---- 'title':'Project properties', 'position':(468, 29), ! 'size':(470, 405), 'components': [ + {'type':'CheckBox', + 'name':'runInno', + 'position':(150, 335), + 'size':(279, -1), + 'label':u'Run Inno Setup automatically (Windows)', + }, + {'type':'TextField', 'name':'buildPath', ! 'position':(155, 15), 'size':(265, -1), }, {'type':'Button', 'name':'buildPathBtn', ! 'position':(425, 15), 'size':(25, 22), ! 'label':u'...', }, {'type':'TextField', 'name':'distPath', ! 'position':(155, 50), 'size':(265, -1), }, {'type':'Button', 'name':'distPathBtn', ! 'position':(425, 50), 'size':(25, 22), ! 'label':u'...', }, {'type':'TextField', 'name':'pixmapsPath', ! 'position':(155, 85), 'size':(265, -1), }, {'type':'Button', 'name':'pixmapsPathBtn', ! 'position':(425, 85), 'size':(25, 22), ! 'label':u'...', }, {'type':'TextField', 'name':'tarballPath', ! 'position':(155, 120), 'size':(265, -1), }, {'type':'Button', 'name':'tarballsPathBtn', ! 'position':(425, 120), 'size':(25, 22), ! 'label':u'...', }, {'type':'TextField', 'name':'appPublisher', ! 'position':(155, 155), 'size':(265, -1), }, {'type':'TextField', 'name':'appURL', ! 'position':(155, 190), 'size':(265, -1), }, {'type':'TextField', 'name':'appLicence', ! 'position':(155, 225), 'size':(265, -1), }, {'type':'Button', 'name':'appLicenceBtn', ! 'position':(425, 225), 'size':(25, 22), ! 'label':u'...', }, {'type':'Choice', 'name':'buildType', ! 'position':(155, 260), 'size':(140, -1), 'items':[u'Single file', u'Single directory'], ! 'stringSelection':u'Single directory', }, {'type':'CheckBox', 'name':'asciiChk', ! 'position':(150, 295), ! 'label':u'No encoding', }, {'type':'CheckBox', 'name':'consoleChk', ! 'position':(280, 295), ! 'label':u'Console', }, {'type':'CheckBox', 'name':'compressChk', ! 'position':(375, 295), ! 'label':u'Compress', }, {'type':'CheckBox', 'name':'striplibsChk', ! 'position':(150, 315), ! 'label':u'Strip libs (Linux)', }, {'type':'CheckBox', 'name':'optimizeChk', ! 'position':(280, 315), ! 'label':u'Optimize', }, {'type':'CheckBox', 'name':'debugChk', ! 'position':(375, 315), ! 'label':u'Debug', }, *************** *** 149,155 **** 'id':5100, 'name':'btnOK', ! 'position':(270, 340), ! 'actionBindings':{}, ! 'label':'OK', }, --- 137,142 ---- 'id':5100, 'name':'btnOK', ! 'position':(285, 370), ! 'label':u'OK', }, *************** *** 157,226 **** 'id':5101, 'name':'btnCancel', ! 'position':(355, 340), ! 'actionBindings':{}, ! 'label':'Cancel', }, {'type':'StaticText', 'name':'StaticText9', ! 'position':(25, 220), ! 'actionBindings':{}, ! 'text':'App licence file', }, {'type':'StaticText', 'name':'StaticText8', ! 'position':(20, 185), ! 'actionBindings':{}, ! 'text':'Application URL', }, {'type':'StaticText', 'name':'StaticText7', ! 'position':(30, 150), ! 'actionBindings':{}, ! 'text':'App publisher', }, {'type':'StaticText', 'name':'StaticText6', ! 'position':(30, 285), ! 'actionBindings':{}, ! 'text':'Build options', }, {'type':'StaticText', 'name':'StaticText5', ! 'position':(15, 255), ! 'actionBindings':{}, ! 'text':'Deployment type', }, {'type':'StaticText', 'name':'StaticText4', ! 'position':(15, 115), ! 'actionBindings':{}, ! 'text':'Tarballs directory', }, {'type':'StaticText', 'name':'StaticText3', ! 'position':(15, 80), ! 'actionBindings':{}, ! 'text':'Pixmaps directory', }, {'type':'StaticText', 'name':'StaticText2', ! 'position':(5, 45), ! 'actionBindings':{}, ! 'text':'Distribution directory', }, {'type':'StaticText', 'name':'StaticText1', ! 'position':(30, 10), ! 'actionBindings':{}, ! 'text':'Build directory', }, --- 144,204 ---- 'id':5101, 'name':'btnCancel', ! 'position':(375, 370), ! 'label':u'Cancel', }, {'type':'StaticText', 'name':'StaticText9', ! 'position':(50, 230), ! 'text':u'App licence file', }, {'type':'StaticText', 'name':'StaticText8', ! 'position':(45, 195), ! 'text':u'Application URL', }, {'type':'StaticText', 'name':'StaticText7', ! 'position':(55, 160), ! 'text':u'App publisher', }, {'type':'StaticText', 'name':'StaticText6', ! 'position':(60, 300), ! 'text':u'Build options', }, {'type':'StaticText', 'name':'StaticText5', ! 'position':(35, 265), ! 'text':u'Deployment type', }, {'type':'StaticText', 'name':'StaticText4', ! 'position':(35, 125), ! 'text':u'Tarballs directory', }, {'type':'StaticText', 'name':'StaticText3', ! 'position':(25, 90), ! 'size':(118, -1), ! 'text':u'Pixmaps directory', }, {'type':'StaticText', 'name':'StaticText2', ! 'position':(10, 55), ! 'text':u'Distribution directory', }, {'type':'StaticText', 'name':'StaticText1', ! 'position':(50, 20), ! 'text':u'Build directory', }, --- NEW FILE: helpAbout.gtk.rsrc.py --- {'type':'CustomDialog', 'name':'dlgAbout', 'title':'About standaloneBuilder:', 'position':(129, 133), 'size':(520, 360), 'strings': { }, 'components': [ {'type':'Image', 'name':'Image1', 'position':(10, 10), 'file':u'pixmaps/apollon.png', }, {'type':'StaticText', 'name':'versionString', 'position':(70, 35), 'font':{'faceName': u'Trebuchet MS', 'family': 'sansSerif', 'size': 14}, 'text':u'standaloneBuilder version', }, {'type':'Notebook', 'name':'notebook', 'position':(5, 65), 'size':(500, 235), }, {'type':'Button', 'id':5100, 'name':'btnOK', 'position':(425, 310), 'label':u'Close', }, ] # end components } # end CustomDialog --- NEW FILE: helpManual.rsrc.py --- {'type':'CustomDialog', 'name':'standaloneBuilder Manual', 'title':'PythonCard standaloneBuilder Tool - Online Manual', 'position':(129, 133), 'size':(1000, 700), 'components': [ {'type':'HtmlWindow', 'name':'HtmlWindow', 'position':(4, 7), 'size':(983, 641), 'backgroundColor':(255, 255, 255), }, ] # end components } # end CustomDialog Index: outputWindow.gtk.rsrc.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/outputWindow.gtk.rsrc.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** outputWindow.gtk.rsrc.py 12 May 2006 16:26:20 -0000 1.1 --- outputWindow.gtk.rsrc.py 24 Oct 2007 00:51:18 -0000 1.2 *************** *** 10,18 **** 'components': [ {'type':'TextArea', 'name':'importError', 'position':(10, 10), 'size':(375, 205), - 'actionBindings':{}, 'editable':False, 'enabled':False, --- 10,68 ---- 'components': [ + {'type':'StaticText', + 'name':'txt8b', + 'position':(200, 60), + 'enabled':False, + 'font':{'style': 'bold', 'faceName': u'Sans', 'family': 'sansSerif', 'size': 10}, + 'text':u'Done', + 'visible':False, + }, + + {'type':'StaticText', + 'name':'txt8a', + 'position':(10, 60), + 'enabled':False, + 'text':u'Creating tarball:', + 'visible':False, + }, + + {'type':'StaticText', + 'name':'txt7b', + 'position':(200, 35), + 'enabled':False, + 'font':{'style': 'bold', 'faceName': u'Sans', 'family': 'sansSerif', 'size': 10}, + 'text':u'Done', + 'visible':False, + }, + + {'type':'StaticText', + 'name':'txt7a', + 'position':(10, 35), + 'enabled':False, + 'text':u'Creating manifest:', + 'visible':False, + }, + + {'type':'StaticText', + 'name':'txt6b', + 'position':(200, 10), + 'enabled':False, + 'font':{'style': 'bold', 'faceName': u'Sans', 'family': 'sansSerif', 'size': 10}, + 'text':u'Done', + 'visible':False, + }, + + {'type':'StaticText', + 'name':'txt6a', + 'position':(10, 10), + 'enabled':False, + 'text':u'Creating temp directories:', + 'visible':False, + }, + {'type':'TextArea', 'name':'importError', 'position':(10, 10), 'size':(375, 205), 'editable':False, 'enabled':False, *************** *** 22,29 **** {'type':'Button', 'name':'clipBoardBtn', ! 'position':(95, 225), ! 'actionBindings':{}, ! 'label':'Clipboard', ! 'toolTip':'Click here to copy the PythonCard component imports line to the Windows clipboard', }, --- 72,78 ---- {'type':'Button', 'name':'clipBoardBtn', ! 'position':(100, 225), ! 'label':u'Clipboard', ! 'toolTip':u'Click here to copy the PythonCard component imports line to the Windows clipboard', }, *************** *** 31,36 **** 'name':'closeBtn', 'position':(10, 225), ! 'actionBindings':{}, ! 'label':'Close', }, --- 80,84 ---- 'name':'closeBtn', 'position':(10, 225), ! 'label':u'Close', }, *************** *** 38,43 **** 'name':'txt5', 'position':(10, 90), ! 'actionBindings':{}, ! 'text':'Returned messages:', }, --- 86,91 ---- 'name':'txt5', 'position':(10, 90), ! 'size':(132, -1), ! 'text':u'Returned messages:', }, *************** *** 46,50 **** 'position':(10, 105), 'size':(375, 110), - 'actionBindings':{}, }, --- 94,97 ---- *************** *** 52,57 **** 'name':'txt4c', 'position':(145, 70), ! 'actionBindings':{}, ! 'text':'please wait...', 'visible':False, }, --- 99,103 ---- 'name':'txt4c', 'position':(145, 70), ! 'text':u'please wait...', 'visible':False, }, *************** *** 60,66 **** 'name':'txt4b', 'position':(145, 70), - 'actionBindings':{}, 'font':{'style': 'bold', 'faceName': 'Verdana', 'family': 'sansSerif', 'size': 8}, ! 'text':'Done', 'visible':False, }, --- 106,111 ---- 'name':'txt4b', 'position':(145, 70), 'font':{'style': 'bold', 'faceName': 'Verdana', 'family': 'sansSerif', 'size': 8}, ! 'text':u'Done', 'visible':False, }, *************** *** 69,74 **** 'name':'txt4a', 'position':(10, 70), ! 'actionBindings':{}, ! 'text':'Rebuilding distributable:', 'visible':False, }, --- 114,118 ---- 'name':'txt4a', 'position':(10, 70), ! 'text':u'Rebuilding distributable:', 'visible':False, }, *************** *** 77,82 **** 'name':'txt3c', 'position':(145, 50), ! 'actionBindings':{}, ! 'text':'please wait...', 'visible':False, }, --- 121,125 ---- 'name':'txt3c', 'position':(145, 50), ! 'text':u'please wait...', 'visible':False, }, *************** *** 85,91 **** 'name':'txt3b', 'position':(145, 50), - 'actionBindings':{}, 'font':{'style': 'bold', 'faceName': 'Verdana', 'family': 'sansSerif', 'size': 8}, ! 'text':'Done', 'visible':False, }, --- 128,133 ---- 'name':'txt3b', 'position':(145, 50), 'font':{'style': 'bold', 'faceName': 'Verdana', 'family': 'sansSerif', 'size': 8}, ! 'text':u'Done', 'visible':False, }, *************** *** 94,99 **** 'name':'txt3a', 'position':(10, 50), ! 'actionBindings':{}, ! 'text':'Rebuilding application:', 'visible':False, }, --- 136,140 ---- 'name':'txt3a', 'position':(10, 50), ! 'text':u'Rebuilding application:', 'visible':False, }, *************** *** 102,108 **** 'name':'txt2b', 'position':(145, 30), - 'actionBindings':{}, 'font':{'style': 'bold', 'faceName': 'Verdana', 'family': 'sansSerif', 'size': 8}, ! 'text':'Done', 'visible':False, }, --- 143,148 ---- 'name':'txt2b', 'position':(145, 30), 'font':{'style': 'bold', 'faceName': 'Verdana', 'family': 'sansSerif', 'size': 8}, ! 'text':u'Done', 'visible':False, }, *************** *** 111,116 **** 'name':'txt2a', 'position':(10, 30), ! 'actionBindings':{}, ! 'text':'Rebuilding versioninfo file:', 'visible':False, }, --- 151,155 ---- 'name':'txt2a', 'position':(10, 30), ! 'text':u'Rebuilding versioninfo file:', 'visible':False, }, *************** *** 119,125 **** 'name':'txt1b', 'position':(145, 10), - 'actionBindings':{}, 'font':{'style': 'bold', 'faceName': 'Verdana', 'family': 'sansSerif', 'size': 8}, ! 'text':'Done', 'visible':False, }, --- 158,163 ---- 'name':'txt1b', 'position':(145, 10), 'font':{'style': 'bold', 'faceName': 'Verdana', 'family': 'sansSerif', 'size': 8}, ! 'text':u'Done', 'visible':False, }, *************** *** 128,133 **** 'name':'txt1a', 'position':(10, 10), ! 'actionBindings':{}, ! 'text':'Rebuilding spec file:', 'visible':False, }, --- 166,170 ---- 'name':'txt1a', 'position':(10, 10), ! 'text':u'Rebuilding spec file:', 'visible':False, }, --- NEW FILE: buildDialog.rsrc.py --- {'type':'CustomDialog', 'name':'buildType', 'title':'Select Linux build type', 'position':(169, 114), 'size':(260, 145), 'components': [ {'type':'RadioGroup', 'name':'buildType', 'position':(95, 15), 'size':(158, 80), 'items':['Tarball only', 'Full binary'], 'label':u'Select build type', 'layout':'vertical', 'max':1, 'stringSelection':u'Tarball only', }, {'type':'Image', 'name':'Image1', 'position':(0, 5), 'size':(80, 96), 'file':u'pixmaps/tuxlogo.png', }, {'type':'Button', 'id':5100, 'name':'btnOK', 'position':(9, 110), 'default':1, 'label':u'OK', }, {'type':'Button', 'id':5101, 'name':'btnCancel', 'position':(100, 110), 'label':u'Cancel', }, ] # end components } # end CustomDialog Index: customDialogs.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/customDialogs.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** customDialogs.py 3 Nov 2006 14:56:25 -0000 1.7 --- customDialogs.py 24 Oct 2007 00:51:18 -0000 1.8 *************** *** 102,105 **** --- 102,124 ---- arg.append(os.path.join(dirname,item)) + class buildType(CustomDialog): + """Select the build type required on Linux platforms""" + + def __init__(self, aBg): + path = os.path.join(aBg.application.applicationDirectory, 'buildDialog') + aDialogRsrc = resource.ResourceFile(model.internationalResourceName(path)).getResource() + CustomDialog.__init__(self, aBg, aDialogRsrc) + self.parent = aBg + + def getType(self): + bType = self.components.buildType.stringSelection + return bType + + def on_btnOK_mouseClick(self, event): + event.Skip() + + def on_btnCancel_mouseClick(self, event): + event.Skip() + class versionDialog(CustomDialog): """Displays a dialog for the next release version number""" *************** *** 128,131 **** --- 147,160 ---- def on_btnCancel_mouseClick(self, event): event.Skip() + + class helpManual(CustomDialog): + """Displays an HTML based about box""" + + def __init__(self, aBg, pageName=None): + path = os.path.join(aBg.application.applicationDirectory, 'helpManual') + aDialogRsrc = resource.ResourceFile(model.internationalResourceName(path)).getResource() + CustomDialog.__init__(self, aBg, aDialogRsrc) + self.parent = aBg + self.components.HtmlWindow.text = pageName class HTMLHelp(CustomDialog): *************** *** 137,141 **** CustomDialog.__init__(self, aBg, aDialogRsrc) self.parent = aBg ! self.components.notebook.SetSize((660,270)) bgval = self.GetBackgroundColour() --- 166,177 ---- CustomDialog.__init__(self, aBg, aDialogRsrc) self.parent = aBg ! self.components.notebook.SetSize((505,240)) ! ! if sys.platform.startswith('win32'): ! fontSize = 2 ! else: ! fontSize = 2 ! ! if links is None: links = ['doc/about.html', 'doc/author.html', 'doc/license.html'] bgval = self.GetBackgroundColour() *************** *** 145,151 **** aboutPanel = wx.Panel(self.components.notebook, -1) aboutPanelHtmlWindow = wx.html.HtmlWindow(aboutPanel, -1) ! aboutPanelHtmlWindow.SetSize((660,270)) aboutPanelHtmlWindow.SetPosition((1,1)) ! aboutPanelHtmlWindow.LoadPage('doc/about.html') aboutPanelHtmlWindow.SetBackgroundColour(bgval) self.components.notebook.AddPage(aboutPanel, 'About', True) --- 181,188 ---- aboutPanel = wx.Panel(self.components.notebook, -1) aboutPanelHtmlWindow = wx.html.HtmlWindow(aboutPanel, -1) ! aboutPanelHtmlWindow.SetSize((495,210)) aboutPanelHtmlWindow.SetPosition((1,1)) ! pText = open(links[0]).read() % locals() ! aboutPanelHtmlWindow.SetPage(pText) aboutPanelHtmlWindow.SetBackgroundColour(bgval) self.components.notebook.AddPage(aboutPanel, 'About', True) *************** *** 153,159 **** authorPanel = wx.Panel(self.components.notebook, -1) authorPanelHtmlWindow = wx.html.HtmlWindow(authorPanel, -1) ! authorPanelHtmlWindow.SetSize((660,270)) authorPanelHtmlWindow.SetPosition((1,1)) ! authorPanelHtmlWindow.LoadPage('doc/author.html') authorPanelHtmlWindow.SetBackgroundColour(bgval) self.components.notebook.AddPage(authorPanel, 'Author', False) --- 190,197 ---- authorPanel = wx.Panel(self.components.notebook, -1) authorPanelHtmlWindow = wx.html.HtmlWindow(authorPanel, -1) ! authorPanelHtmlWindow.SetSize((495,210)) authorPanelHtmlWindow.SetPosition((1,1)) ! pText = open(links[1]).read() % locals() ! authorPanelHtmlWindow.SetPage(pText) authorPanelHtmlWindow.SetBackgroundColour(bgval) self.components.notebook.AddPage(authorPanel, 'Author', False) *************** *** 161,167 **** licensePanel = wx.Panel(self.components.notebook, -1) licensePanelHtmlWindow = wx.html.HtmlWindow(licensePanel, -1) ! licensePanelHtmlWindow.SetSize((660,270)) licensePanelHtmlWindow.SetPosition((1,1)) ! licensePanelHtmlWindow.LoadPage('doc/license.html') licensePanelHtmlWindow.SetBackgroundColour(bgval) self.components.notebook.AddPage(licensePanel, 'License', False) --- 199,206 ---- licensePanel = wx.Panel(self.components.notebook, -1) licensePanelHtmlWindow = wx.html.HtmlWindow(licensePanel, -1) ! licensePanelHtmlWindow.SetSize((495,210)) licensePanelHtmlWindow.SetPosition((1,1)) ! pText = open(links[2]).read() % locals() ! licensePanelHtmlWindow.SetPage(pText) licensePanelHtmlWindow.SetBackgroundColour(bgval) self.components.notebook.AddPage(licensePanel, 'License', False) *************** *** 531,534 **** --- 570,574 ---- #except: # pass + self.components.runInno.checked = self.parent.project.getboolean('Project', 'autoRunInnoSetup') def on_buildPathBtn_mouseClick(self, event): *************** *** 611,614 **** --- 651,656 ---- else: self.parent.project.set('Project', 'onedir', '0') + self.parent.project.set('Project', 'autoRunInnoSetup', str(int(self.components.runInno.checked))) + if self.parent.project != old: self.parent.documentChanged = True event.Skip() Index: standaloneBuilder.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/standaloneBuilder.py,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** standaloneBuilder.py 28 Jul 2007 23:12:00 -0000 1.17 --- standaloneBuilder.py 24 Oct 2007 00:51:18 -0000 1.18 *************** *** 35,44 **** import time import pprint # pythoncard imports import wx - # KEA 2007-07-28 - # unused... - #from wxPython.html import wxHtmlEasyPrinting from PythonCard import dialog, model, util from PythonCard.templates.dialogs import runOptionsDialog --- 35,42 ---- import time import pprint + import re # pythoncard imports import wx from PythonCard import dialog, model, util from PythonCard.templates.dialogs import runOptionsDialog *************** *** 48,63 **** import outputWindow ! from PythonCard.components import button, checkbox, choice, image, imagebutton, list, notebook, spinner, staticbox, statictext, textarea, textfield - # KEA 2007-07-28 - # updated for wx package organization # temporary hack until we get it working properly under MacOS if wx.Platform == '__WXMAC__': ! app = wx.PySimpleApp() title = 'Sorry!' ! frame = wx.Frame(None, -1, title) message = 'standaloneBuilder currently does not work properly under MacOS. This shortcoming will ' message += 'be fixed in a future release.\n\nClick OK to exit.' ! dialog = wx.MessageDialog(frame, wrap_string(message, 52), title, wx.ICON_EXCLAMATION | wx.OK) dialog.ShowModal() dialog.Destroy() --- 46,60 ---- import outputWindow ! from PythonCard.components import button, checkbox, choice, htmlwindow, image, imagebutton, list, notebook, radiogroup, spinner, staticbox, statictext, textarea, textfield # temporary hack until we get it working properly under MacOS if wx.Platform == '__WXMAC__': ! from wxPython.wx import wxPySimpleApp, wxFrame, wxMessageDialog, wxICON_EXCLAMATION, wxOK, wxVERSION_STRING ! app = wxPySimpleApp() title = 'Sorry!' ! frame = wxFrame(None, -1, title) message = 'standaloneBuilder currently does not work properly under MacOS. This shortcoming will ' message += 'be fixed in a future release.\n\nClick OK to exit.' ! dialog = wxMessageDialog(frame, wrap_string(message, 52), title, wxICON_EXCLAMATION | wxOK) dialog.ShowModal() dialog.Destroy() *************** *** 81,84 **** --- 78,83 ---- else: import commands + + debug = False # imports required by mcmillan installer *************** *** 143,150 **** def on_close(self, event): ! if self.doExit(): event.Skip() def on_menuFileExit_command(self, event): self.close() ########################################################################## --- 142,154 ---- def on_close(self, event): ! if self.doExit(): ! if debug: print 'on_close: calling event.Skip()' ! event.Skip() ! if debug: print 'on_close: back from event.Skip()' def on_menuFileExit_command(self, event): + if debug: print 'menuFileExit' self.close() + if debug: print 'menuFileExit done' ########################################################################## *************** *** 156,163 **** if self.documentPath is None: dir = os.path.join(self.cfg.get('ConfigData', 'projects'), self.components.baseDir.text) ! if sys.platform.startswith('win'): ! filename = '%s.pmr' % self.components.projectName.text ! else: ! filename = 'Untitled.pmr' else: dir = os.path.dirname(self.documentPath) --- 160,164 ---- if self.documentPath is None: dir = os.path.join(self.cfg.get('ConfigData', 'projects'), self.components.baseDir.text) ! filename = '%s.pmr' % self.components.projectName.text else: dir = os.path.dirname(self.documentPath) *************** *** 273,280 **** def on_menuHelpManual_command(self, event): ! title = 'Sorry!' ! txt = 'Online manual functionality will be implemented in a future ' ! txt += 'version of standaloneBuilder.' ! bull = dialog.alertDialog(self, txt, title) def on_menuHelpAbout_command(self, event): --- 274,285 ---- def on_menuHelpManual_command(self, event): ! #title = 'Sorry!' ! #txt = 'Online manual functionality will be implemented in a future ' ! #txt += 'version of standaloneBuilder.' ! #bull = dialog.alertDialog(self, txt, title) ! manual = 'doc/standaloneBuilder.html' ! dlg = helpManual(self, manual) ! dlg.showModal() ! dlg.destroy() def on_menuHelpAbout_command(self, event): *************** *** 333,340 **** title = 'Select icon' wildcard = "Icon files (*.ico)|*.ico;*.ICO|All files (*.*)|*.*" old = self.components.projectIcon.text ! result = dialog.openFileDialog(self, title, self.components.baseDir.text, '', wildcard=wildcard) if result.accepted: ! rpath = self.getRelativePath(self.components.baseDir.text, result.paths[0]) if rpath != old: self.components.projectIcon.text = rpath --- 338,349 ---- title = 'Select icon' wildcard = "Icon files (*.ico)|*.ico;*.ICO|All files (*.*)|*.*" + basepath = self.components.baseDir.text + if not os.path.isabs(basepath): + basepath = os.path.join(self.cfg.get('ConfigData', 'projects'), basepath) old = self.components.projectIcon.text ! result = dialog.openFileDialog(self, title, basepath, '', wildcard=wildcard) if result.accepted: ! rpath = self.getRelativePath(basepath, result.paths[0]) ! #rpath = result.paths[0] if rpath != old: self.components.projectIcon.text = rpath *************** *** 362,365 **** --- 371,376 ---- title = 'Select main script file' basepath = self.components.baseDir.text + if not os.path.isabs(basepath): + basepath = os.path.join(self.cfg.get('ConfigData', 'projects'), basepath) old = self.components.mainScript.text wildcard = "Script files (*.py)|*.py;*.PY" *************** *** 610,614 **** result = dialog.messageDialog(self, wrap_string(txt, 60), title, wx.ICON_EXCLAMATION | wx.YES_NO | wx.YES_DEFAULT) if result.accepted: ! self.buildInnoFile() else: return --- 621,625 ---- result = dialog.messageDialog(self, wrap_string(txt, 60), title, wx.ICON_EXCLAMATION | wx.YES_NO | wx.YES_DEFAULT) if result.accepted: ! self.buildInnoFile() ### FIXME ### this fails unless the project has been built once already else: return *************** *** 648,653 **** # code plus associated files if sys.platform.startswith('linux') or sys.platform.startswith('freebsd'): ! self.rebuildLinux() ! return 0 impFound, impLine = self.checkImports() --- 659,669 ---- # code plus associated files if sys.platform.startswith('linux') or sys.platform.startswith('freebsd'): ! dlg = buildType(self) ! dlg.ShowModal() ! bType = dlg.getType() ! dlg.Destroy() ! if bType != 'Full binary': ! self.rebuildLinux() ! return 0 impFound, impLine = self.checkImports() *************** *** 720,725 **** # delete all transient files from previous rebuilds basedir = str(os.path.join(self.cfg.get('ConfigData', 'projects'), self.components.baseDir.text)) - #print 'using [%s] as basedir' % basedir - #bull = raw_input() versionfile = os.path.join(basedir, 'versioninfo.txt') innofile = self.components.projectName.text + '.iss' --- 736,739 ---- *************** *** 751,756 **** pass ! self.recursiveDirDelete(os.path.join(basedir, 'build')) ! self.recursiveDirDelete(os.path.join(basedir, 'dist')) # window for progress marks and output messages --- 765,770 ---- pass ! if not self.recursiveDirDelete(os.path.join(basedir, 'build')): return ! if not self.recursiveDirDelete(os.path.join(basedir, 'dist')): return # window for progress marks and output messages *************** *** 798,801 **** --- 812,824 ---- self.outputWindow.Update() + # if the flag is set, run the Inno complier automatically + runInno = self.project.getboolean('Project', 'autoRunInnoSetup') + if not runInno: + # display yes/no prompt + title = 'Please confirm' + msg = 'Rebuild complete - run Inno compiler?' + result = dialog.messageDialog(self, wrap_string(msg, 60), title, wx.ICON_EXCLAMATION | wx.YES_NO | wx.YES_DEFAULT) + runInno = result.accepted + # rebuild the Inno script file self.outputWindow.components.txt4a.visible = True # rebuilding distributable *************** *** 803,813 **** self.outputWindow.Update() self.outputWindow.Refresh() ! if allokay: self.buildInnoFile() # rebuild the distributable - #self.buildDistFile() self.outputWindow.components.txt4c.visible = False self.outputWindow.components.txt4b.visible = True # done ! if allokay: self.buildInstaller() #self.outputWindow.Update() --- 826,835 ---- self.outputWindow.Update() self.outputWindow.Refresh() ! if allokay and runInno: self.buildInnoFile() # rebuild the distributable self.outputWindow.components.txt4c.visible = False self.outputWindow.components.txt4b.visible = True # done ! if allokay and runInno: self.buildInstaller() #self.outputWindow.Update() *************** *** 815,819 **** #self.outputWindow.Raise() else: ! self.outputWindow.components.txt4b.text = '*** ERROR ***' # rebuilding distributable # if the project is not frozen, increment the build number to finish --- 837,841 ---- #self.outputWindow.Raise() else: ! if not allokay: self.outputWindow.components.txt4b.text = '*** ERROR ***' # rebuilding distributable # if the project is not frozen, increment the build number to finish *************** *** 877,887 **** ############################################################################## def recursiveDirDelete(self, path=None): ! # recursively delete a sub directory ! if path is None: return ! if not os.path.isdir(path): return for root, dirs, files in os.walk(path, topdown=False): for name in files: os.unlink (os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name)) ! os.rmdir(path) def checkResourceFile(self, path): --- 899,930 ---- ############################################################################## def recursiveDirDelete(self, path=None): ! # recursively delete a sub directory - I'll do a better job of the ! # error checkiing in the next release... ! ! #if path is None or not os.path.isdir(path): ! # title = 'Build error!' ! # txt = 'Internal error: invalid directory passed to recursiveDirDelete' ! # txt += ' function - name given was %s' % path ! # bull = dialog.alertDialog(self, wrap_string(txt, 60), title) ! # return False ! ! for root, dirs, files in os.walk(path, topdown=False): for name in files: os.unlink (os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name)) ! ! try: ! os.rmdir(path) ! except: ! pass ! #OSError, estring: ! #if estring.startwith'[ ! #title = 'Build error!' ! #txt = 'Internal error: recursiveDirDelete failed to delete %s' % path ! #txt += '\n\nError returned was %s' % estring ! #bull = dialog.alertDialog(self, wrap_string(txt, 60), title) ! #return False ! ! return True def checkResourceFile(self, path): *************** *** 995,1005 **** return args ! def getRelativePath(self, root, path): # remove the root part of an absolute path ! #print 'getRelativePath: root=[%s], path=[%s]' % (root, path) retPath = string.replace(path, root, '') ! if retPath[0] == os.sep: retPath = retPath[1:] ! #print 'getRelativePath: returning [%s]' % retPath ! #bull = raw_input() return retPath --- 1038,1049 ---- return args ! def getRelativePath(self, root, path, debug=False): # remove the root part of an absolute path ! root = root + os.sep ! if debug: print 'getRelativePath: root=[%s], path=[%s]' % (root, path) retPath = string.replace(path, root, '') ! #if retPath[0] == os.sep: retPath = retPath[1:] ! if debug: print 'getRelativePath: returning [%s]' % retPath ! if debug: bull = raw_input() return retPath *************** *** 1079,1096 **** def doExit(self): if self.documentChanged: save = self.saveChanges() if save == wx.ID_CANCEL: ! return 0 elif save == wx.ID_NO: ! return 1 else: if self.documentPath is None: ! return self.on_menuFileSaveAs_select(None) else: self.saveFile(self.documentPath) ! return 1 ! else: ! return 1 def saveFile(self, path): --- 1123,1144 ---- def doExit(self): + bull = True if self.documentChanged: save = self.saveChanges() if save == wx.ID_CANCEL: ! bull = False # was 0 elif save == wx.ID_NO: ! bull = True # was 1 else: if self.documentPath is None: ! bull = self.on_menuFileSaveAs_select(None) else: self.saveFile(self.documentPath) ! bull = True # was 1 ! #else: ! # return True # was 1 ! ! if debug: print 'doExit: returning [%s]' % bull ! return bull def saveFile(self, path): *************** *** 1106,1109 **** --- 1154,1158 ---- except: pass + if debug: print 'saveFile: exiting' def saveChanges(self): *************** *** 1112,1117 **** else: filename = self.documentPath ! msg = "The text in the %s file has changed.\n\nDo you want to save the changes?" % filename ! result = dialog.messageDialog(self, msg, 'textEditor', wx.ICON_EXCLAMATION | wx.YES_NO | wx.CANCEL) return result.returned --- 1161,1167 ---- else: filename = self.documentPath ! msg = "Project details have been changed.\n\nDo you want to save these changes?" ! result = dialog.messageDialog(self, msg, 'Project has changed', wx.ICON_EXCLAMATION | wx.YES_NO | wx.CANCEL) ! if debug: print 'saveChanges: returning [%s]' % result.returned return result.returned *************** *** 1155,1158 **** --- 1205,1209 ---- self.project.set('Project', 'appurl', '') self.project.set('Project', 'status', 'open') + self.project.set('Project', 'autoRunInnoSetup', '1') self.project.set('Project', 'applicence', os.path.normpath('doc/gpl.txt')) *************** *** 1177,1181 **** for comp in self.components.keys(): ! self.components[comp].enabled = 1 def delItem(self, items, selected): --- 1228,1232 ---- for comp in self.components.keys(): ! self.components[comp].enabled = True def delItem(self, items, selected): *************** *** 1216,1219 **** --- 1267,1284 ---- # build a tarball for a Linux system # create a top level directory for the stuff to go in + self.outputWindow.clearLines() + for comp in self.outputWindow.components.keys(): + self.outputWindow.components[comp].enabled = False + self.outputWindow.components[comp].visible = False + self.outputWindow.components.closeBtn.enabled = True + self.outputWindow.components.closeBtn.visible = True + self.outputWindow.components.returnedText.enabled = True + self.outputWindow.components.returnedText.visible = True + self.outputWindow.components.txt5.enabled = True + self.outputWindow.components.txt5.visible = True + self.outputWindow.Show() + self.outputWindow.components.txt6a.enabled = True # creating temporary directories + self.outputWindow.components.txt6a.visible = True + vstring = self.project.get('Project', 'majorversion') vstring += '.' + self.project.get('Project', 'minorversion') *************** *** 1229,1239 **** try: cmd = 'rm -rf %s' % tdir ! os.system(cmd) ! #os.removedirs(tdir) except: pass os.mkdir(tdir) # write everything out to a 'manifest.in' file basedir = os.path.join(self.cfg.get('ConfigData', 'projects'), self.components.baseDir.text) manifestfile = os.path.join(basedir, 'manifest.in') --- 1294,1307 ---- try: cmd = 'rm -rf %s' % tdir ! os.system(cmd) except: pass os.mkdir(tdir) + self.outputWindow.components.txt6b.enabled = True # done + self.outputWindow.components.txt6b.visible = True # write everything out to a 'manifest.in' file + self.outputWindow.components.txt7a.enabled = True # creating manifest + self.outputWindow.components.txt7a.visible = True basedir = os.path.join(self.cfg.get('ConfigData', 'projects'), self.components.baseDir.text) manifestfile = os.path.join(basedir, 'manifest.in') *************** *** 1256,1262 **** --- 1324,1334 ---- fd.close() + self.outputWindow.components.txt7b.enabled = True # done + self.outputWindow.components.txt7b.visible = True # use cpio to copy everything listed in manifest.in into the temp # directory just created + self.outputWindow.components.txt8a.enabled = True # creating tarball + self.outputWindow.components.txt8a.visible = True cmd = "cd %s; cat manifest.in|cpio -vdump %s" % (basedir, topdir) os.system(cmd) *************** *** 1270,1293 **** pass tb = os.path.join(tb, tarball) ! cmd = "cd %s; tar -zcvf %s %s > /dev/null 2>&1" % (basedir, tb, topdir) ! os.system(cmd) # remove the temporary directory when done cmd = "cd %s; rm -rf %s" % (basedir, topdir) os.system(cmd) def checkImports(self): # if we're building from a PythonCard application, check that the ! # main script includes imports of the required PythonCard components ! ### TODO ############################################################### ! # # ! # make this work properly for a non-PythonCard project - it should # ! # return impFound=True if there are no PythonCard resource files in # ! # the project # ! ######################################################################## imps = {} impline = 'from PythonCard.components import ' basedir = os.path.join(self.cfg.get('ConfigData', 'projects'), self.components.baseDir.text) for res in self.components.resList.items: fullpath = str(os.path.join(basedir, res)) --- 1342,1386 ---- pass tb = os.path.join(tb, tarball) ! cmd = "cd %s; tar -zcvf %s %s" % (basedir, tb, topdir) ! self.outputWindow.Show() ! #os.system(cmd) ! stin, stout, sterr = os.popen3(cmd) ! stin.close() ! result = stout.readline() ! while result: ! self.outputWindow.addLine(result) ! self.outputWindow.Update() ! self.outputWindow.Refresh() ! result = stout.readline() ! stout.close() ! result = sterr.readline() ! while result: ! self.outputWindow.addLine(result) ! self.outputWindow.Update() ! self.outputWindow.Refresh() ! result = sterr.readline() ! sterr.close() # remove the temporary directory when done cmd = "cd %s; rm -rf %s" % (basedir, topdir) os.system(cmd) + self.outputWindow.components.txt8b.enabled = True # done + self.outputWindow.components.txt8b.visible = True + tbSize = self.commaSplit(str(os.stat(tb)[6])) + self.outputWindow.addLine('tarball size is %s bytes' % tbSize) + self.outputWindow.Update() + self.outputWindow.Refresh() def checkImports(self): # if we're building from a PythonCard application, check that the ! # main script includes imports of the required PythonCard components. ! # for a non-PythonCard project, i.e. a project with no defined resource ! # file, just return True imps = {} impline = 'from PythonCard.components import ' basedir = os.path.join(self.cfg.get('ConfigData', 'projects'), self.components.baseDir.text) + if len(self.components.resList.items) == 0: return (True, None) + for res in self.components.resList.items: fullpath = str(os.path.join(basedir, res)) *************** *** 1317,1321 **** line = fd.readline() while line: ! if line == impline + '\n': impFound = True break --- 1410,1414 ---- line = fd.readline() while line: ! if line == impline + '\n' or line == impline + '\r\n': impFound = True break *************** *** 1343,1351 **** # make sure we have a setup.py script in the current directory setupScript = os.path.join(basedir, 'setup.py') ! if not os.path.exists(setupScript): ! fd = open(setupScript, 'w') ! fd.write(self.setupCode) ! fd.close() specfile = os.path.join(basedir, self.components.projectName.text + '.spec') --- 1436,1446 ---- # make sure we have a setup.py script in the current directory + # it gets re-written every time, ,just in case someone decides + # to delete it... setupScript = os.path.join(basedir, 'setup.py') ! #if not os.path.exists(setupScript): ! fd = open(setupScript, 'w') ! fd.write(self.setupCode) ! fd.close() specfile = os.path.join(basedir, self.components.projectName.text + '.spec') *************** *** 1380,1387 **** # add in all the pixmap files ! pixmap = self.project.get('Project', 'pixmapspath') ! tmp = (str(pixmap), []) ! for pix in self.components.pixmapList.items: tmp[1].append(str(os.path.join(pixmap, pix))) ! data_files.append(tmp) # now process everything in the 'other files' list that lives in its --- 1475,1483 ---- # add in all the pixmap files ! if len(self.components.pixmapList.items) > 0: ! pixmap = self.project.get('Project', 'pixmapspath') ! tmp = (str(pixmap), []) ! for pix in self.components.pixmapList.items: tmp[1].append(str(os.path.join(pixmap, pix))) ! data_files.append(tmp) # now process everything in the 'other files' list that lives in its *************** *** 1427,1430 **** --- 1523,1531 ---- else: buildOpts['buildType'] = 'windows' + + # add a flag to denote that a single-file build is required + if not self.project.getboolean('Project', 'onedir'): + buildOpts['singlefile'] = 1 + pprint.pprint(buildOpts, fd) fd.close() *************** *** 1479,1484 **** spec = [] spec.append("p = '%s%s' # defines project root directory" % (basedir, os.sep)) ! spec.append("a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'),") ! spec.append(" os.path.join(HOMEPATH,'support\\useUnicode.py'),") spec.append(" p + '%s']," % self.components.mainScript.text) spec.append(" pathex=['%s'])" % self.cfg.get('ConfigData', 'installerpath')) --- 1580,1585 ---- spec = [] spec.append("p = '%s%s' # defines project root directory" % (basedir, os.sep)) ! spec.append("a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'),") ! spec.append(" os.path.join(HOMEPATH,'support/useUnicode.py'),") spec.append(" p + '%s']," % self.components.mainScript.text) spec.append(" pathex=['%s'])" % self.cfg.get('ConfigData', 'installerpath')) *************** *** 1571,1575 **** basedir = os.path.join(self.cfg.get('ConfigData', 'projects'), self.components.baseDir.text) versionfile = os.path.join(str(basedir), 'versioninfo.txt') - #bull = raw_input('should now have [%s]' % versionfile) fd = open(versionfile, 'w') --- 1672,1675 ---- *************** *** 1579,1582 **** --- 1679,1685 ---- def buildApplication(self): # run the pyInstaller build script and capture the output + + # a single file build with pyInstaller requires a '-D' flag to be + # added to the command line if sys.platform.startswith('win'): cmd = 'python ' + GetShortPathName(self.cfg.get('ConfigData', 'installerpath')) *************** *** 1587,1590 **** --- 1690,1694 ---- specfile = os.path.join(basedir, self.components.projectName.text + '.spec') # possible bug??? cmd += ' "' + specfile + '" -o "' + os.path.join(basedir, self.pathJoin(self.project.get('Project','buildfilespath'))) + '"' + if debug: print cmd stin, stout, sterr = os.popen3(cmd) stin.close() *************** *** 1611,1618 **** def buildInnoFile(self): ! # rebuild the Inno Setup spec file inno = [] basedir = self.components.baseDir.text innofile = self.components.projectName.text + '.iss' --- 1715,1725 ---- def buildInnoFile(self): ! # rebuild the Inno Setup spec file - this does not actually run Inno ! # setup, it just builds the spec file that Inno uses later on inno = [] basedir = self.components.baseDir.text + if not os.path.isabs(basedir): + basedir = os.path.join(self.cfg.get('ConfigData', 'projects'), basedir) innofile = self.components.projectName.text + '.iss' *************** *** 1669,1672 **** --- 1776,1782 ---- outputDir = os.path.join(basedir, self.pathJoin(self.project.get('Project', 'distfilespath'))) + if not os.path.exists(outputDir): + pass + for f in os.listdir(outputDir): fullname = os.path.join(outputDir, f) *************** *** 1893,1897 **** self.project.set('Project', 'projectdesc', self.components.projectDesc.text) self.project.set('Project', 'mainscript', self.components.mainScript.text) ! self.project.set('Project', 'iconfile', self.components.projectIcon.text) self.project.set('Project', 'innoscript', '%s.iss' % self.components.projectName.text) self.project.set('Project', 'specfile', '%s.spec' % self.components.projectName.text) --- 2003,2010 ---- self.project.set('Project', 'projectdesc', self.components.projectDesc.text) self.project.set('Project', 'mainscript', self.components.mainScript.text) ! if self.components.projectIcon.text != '': ! self.project.set('Project', 'iconfile', os.path.normpath(self.components.projectIcon.text)) ! else: ! self.project.set('Project', 'iconfile', '') self.project.set('Project', 'innoscript', '%s.iss' % self.components.projectName.text) self.project.set('Project', 'specfile', '%s.spec' % self.components.projectName.text) *************** *** 2148,2163 **** self.components.baseDir.text = self.project.get('Project', 'winbasepath') except ConfigParser.NoOptionError: ! self.components.baseDir.text = self.project.get('Project', 'basepath') elif sys.platform.startswith('linux'): try: self.components.baseDir.text = self.project.get('Project', 'linuxbasepath') except ConfigParser.NoOptionError: ! self.components.baseDir.text = self.project.get('Project', 'basepath') else: ! self.components.baseDir.text = self.project.get('Project', 'basepath') self.components.projectDesc.text = self.project.get('Project', 'projectdesc') self.components.mainScript.text = self.project.get('Project', 'mainscript') ! self.components.projectIcon.text = self.project.get('Project', 'iconfile') self.components.scriptList.items = self.sectionOutput('Scripts') self.components.resList.items = self.sectionOutput('ResourceFiles') --- 2261,2286 ---- self.components.baseDir.text = self.project.get('Project', 'winbasepath') except ConfigParser.NoOptionError: ! try: ! self.components.baseDir.text = self.project.get('Project', 'basepath') ! except ConfigParser.NoOptionError: ! self.components.baseDir.text = 'abc123' elif sys.platform.startswith('linux'): try: self.components.baseDir.text = self.project.get('Project', 'linuxbasepath') except ConfigParser.NoOptionError: ! try: ! self.components.baseDir.text = self.project.get('Project', 'basepath') ! except ConfigParser.NoOptionError: ! self.components.baseDir.text = 'abc123' else: ! try: ! self.components.baseDir.text = self.project.get('Project', 'basepath') ! except ConfigParser.NoOptionError: ! self.components.baseDir.text = 'abc123' self.components.projectDesc.text = self.project.get('Project', 'projectdesc') self.components.mainScript.text = self.project.get('Project', 'mainscript') ! self.components.projectIcon.text = os.path.normpath(self.project.get('Project', 'iconfile')) ! if self.components.projectIcon.text == '.': self.components.projectIcon.text = '' self.components.scriptList.items = self.sectionOutput('Scripts') self.components.resList.items = self.sectionOutput('ResourceFiles') *************** *** 2241,2245 **** if not os.path.isabs(basePath): basePath = os.path.join(self.cfg.get('ConfigData', 'projects'), basePath) ! if not os.path.exists(basePath): title = 'Invalid project path' --- 2364,2368 ---- if not os.path.isabs(basePath): basePath = os.path.join(self.cfg.get('ConfigData', 'projects'), basePath) ! if not os.path.exists(basePath): title = 'Invalid project path' *************** *** 2257,2260 **** --- 2380,2391 ---- pstatus = self.project.get('Project', 'status') + # default to running Inno Setup automatically if not otherwise specified + # in the project file + try: + bull = self.project.getboolean('Project', 'autoRunInnoSetup') + except ConfigParser.NoOptionError: + self.project.set('Project', 'autoRunInnoSetup', '1') + self.documentChanged = True + if pstatus == 'frozen': title = 'Frozen project' *************** *** 2327,2330 **** --- 2458,2474 ---- self.updateStatusBar() + #print self.components.scriptList.enabled + #self.Update() + #bull = raw_input('stopping for a rest... ') + + # handy little function to comma seperate thousands in a number - got this from + # ASPN web site...http://aspn.ActiveState.com/ASPN/Cookbook/Python/Recipe/146461 + def commaSplit(self, amount): + orig = amount + new = re.sub("^(-?\d+)(\d{3})", '\g<1>,\g<2>', amount) + if orig == new: + return new + else: + return... [truncated message content] |
Update of /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19145 Modified Files: about.html author.html license.html license.txt pic12.jpg standaloneBuilder.html Added Files: pic29.jpg Log Message: Fixes and enhancements for standaloneBuilder v0.3.1, see changelog file for full details Index: pic12.jpg =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/doc/pic12.jpg,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 Binary files /tmp/cvs107NEm and /tmp/cvsG1Ny3T differ --- NEW FILE: pic29.jpg --- (This appears to be a binary file; contents omitted.) Index: standaloneBuilder.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/doc/standaloneBuilder.html,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** standaloneBuilder.html 3 Nov 2006 14:14:01 -0000 1.5 --- standaloneBuilder.html 24 Oct 2007 00:50:58 -0000 1.6 *************** *** 1,234 **** ! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ! <html> ! <head> ! <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> ! <link rel="stylesheet" type="text/css" href="PythonCard.css" /> ! <title>PythonCard standaloneBuilder tool</title> ! </head> ! <body> ! <div id="banner"> ! <h1>PythonCard standaloneBuilder tool</h1> ! </div> ! <?php include "sidebar.php" ?> ! <div id="content"> ! <h2>Introduction</h2> ! <p>The process of converting a PythonCard project into a stand-alone application, ! complete with installer and un-install entry, is fairly tedious to do 'by ! hand'. Whilst writing some documentation (see <a href="standalone.html">here</a>) to ! cover this, it became clear that there was a need for some application ! software (written using PythonCard, naturally!) to help automate the process. The ! <i>standaloneBuilder</i> tool is the result. The program offers the user the ! ability to manage the development and release of successive versions of an ! application project written using PythonCard.</p> ! ! <p>Comments on this document and/or bug reports related to the <i>standaloneBuilder</i> tool ! may be posted to the PythonCard users mailing list, <a href="http://lists.sourceforge.net/lists/listinfo/pythoncard-users">http://lists.sourceforge.net/lists/listinfo/pythoncard-users</a>, for discussion.</p> ! ! <h2>Pre-Requisites</h2> ! <p>As well as Python, wxPython and PythonCard, you will need to have installed and configured ! pyInstaller and/or py2exe together with Inno Setup on your computer. These packages can be downloaded from ! the following locations as of the time of writing: <ul> <li>pyInstaller: <a href="http://pyinstaller.python-hosting.com/">http://pyinstaller.python-hosting.com/</a></li> ! <li>py2exe: <a href="http://www.py2exe.org/">http://www.py2exe.org/</a></li> ! <li>Inno Setup: <a href="http://www.jrsoftware.org/isdl.php">http://www.jrsoftware.org/isdl.php</a></li> ! </ul> ! Both packages come with comprehensive documentation - installation and setup should be ! painless.</p> ! ! <h2>Configuring <i>standaloneBuilder</i></h2> ! <p>When launching <i>standaloneBuilder</i> for the first time, it detects that the ! preferences need to be configured and drops you straight into the preferences ! dialog.</p> ! <div align="center"><img src="pic1.jpg" /></div> ! <p>You can come back to this dialog at any time by clicking the preferences ! button on the main screen. All of the options have help buttons (marked with ! '?') associated with them, so you can (hopefully) figure out what each one is ! for without too much difficulty. The program will try to find as much information as it ! can, you should only need to tell it your name and where to find the directory ! you keep all your projects in.</p> ! <div align="center"><img src="pic2.jpg" /></div> ! ! <p>After filling in any missing information, click the OK button to save your ! preferences for use In future projects. ! ! <h2>Creating a new project</h2> ! ! <p>For the purposes of this ! document, we'll use the <i>standaloneBuilder</i> tool in conjunction with the ! application created in <a href="walkthrough2.html">walkthrough #2,</a> to illustrate ! the steps involved in the creation, development and distribution of a typical PythonCard ! program. We'll assume that you have already followed the walkthrough and you have the ! <i>counter.py</i> application fully functional.</p> ! ! <div align="center"><img src="pic3.jpg" /></div> ! ! <p>To begin, click on the 'New' button to start the new project wizard and fill ! in the details as required:</p> ! <div align="center"><img src="pic4.jpg" /></div><br /> ! <div align="center"><img src="pic5.jpg" /></div><br /> ! <div align="center"><img src="pic6.jpg" /></div><br /> ! <div align="center"><img src="pic7.jpg" /></div><br /> ! <div align="center"><img src="pic8.jpg" /></div><br /> ! ! <p>After completing the new project wizard, the program will create the project ! and add in some default folders and template files. A 'save' dialog will then ! be presented to allow the project details to be written to disk. The main ! window will now appear as shown below:</p> ! ! <div align="center"><img src="pic9.jpg" /></div> ! ! <h2>Adding files to the project</h2> ! <p>The first step will be to define the main script file for the project. In this case, ! there is only one script, namely <i>counter.py</i>, so click the '...' button next to ! the main script file text field. Navigate to the <i>sab-demo</i> folder and select the ! 'counter.py' script. Click the Open button to add it to the project:</p> ! ! <div align="center"><img src="pic10.jpg" /></div><br /> ! <div align="center"><img src="pic11.jpg" /></div> ! ! <p>The program will automatically add in any matching PythonCard resource files, too.</p> ! ! <p>A note is probably in order at this point about the <i>Script files</i> box. Generally, ! McMillan Installer is quite good at working out if there are any additional source files ! associated with the main script, simply by examining any <i>import</i> lines in the ! source code. This may appear to make the <i>Script files</i> box largely superfluous. If ! you intend to only ever build projects for Windows platforms, then you may well find that ! you never need to explicitly list any additional script files. If, however, you also want ! to distribute your project to Linux users, then things are slightly different. When running ! <i>standaloneBuilder</i> on Linux, the rebuild button simply builds a compressed tar file ! containing the items you have specified as making up your project. In this scenario, only ! those files that you have explicitly listed will be included in the tar file. Also, by ! including your script files explicitly, the usefulness of <i>standaloneBuilder</i> as a ! general purpose project manager comes into play. You can edit a given script file by ! simply selecting it in the list and clicking the <i>Edit...</i> button.</p> ! ! <p>Any resource files which are added to the project can be opened in the resource editor simply by ! clicking on the Edit button on the main window. Files which are added in other sections ! of the main window can be edited in the same way. Script files will be opened using the ! program defined as the text editor in preferences. This defaults to the PythonCard code ! editor, but can be changed if required. Files listed under the Pixmaps section will ! be opened using whatever you specify as your default image editor in preferences,</p> ! ! <h2>Project properties</h2> ! <p>That pretty much covers the mechanics of adding and editing the files which make up ! your project. The project properties dialog provides a number of options which affect ! how the final standalone version of your program is built. To access this, click the ! Properties button on the main window:</p> ! ! <div align="center"><img src="pic13.jpg" /></div> ! ! <p>The first few fields determine the folder layout within your project. All the paths ! used within standaloneBuilder are relative. For example, the default build directory ! is simply called 'build' - in practice, this folder would be created in whatever you ! specified as the base folder when the project was initially created, this would in turn ! be created as a sub folder of your top level 'projects' folder defined in the ! preferences. Thus, in this example:</p> ! ! <ul> ! <li>Projects folder in preferences is <i>C:\Documents and Settings\pedwards\My Documents\Projects</i></li> ! <li>The project was created in a folder called <i>sab-demo</i></li> ! <li>The build directory is called simply <i>build</i></li> ! </ul> ! ! <p>The full path to the build directory is therefore <i>C:\Documents and Settings\pedwards\My Documents\Projects\sab-demo\build</i>. Having ! all of the folder references relative to each other allows <i>standaloneBuilder</i> ! to maintain projects on both Windows and Linux platforms, with Python itself taking ! care of the differences in path separators.</p> ! ! <p>The application publisher, application URL and application licence fields are ! used by Inno Setup when the final version of the program is built</p> ! ! <p>The other options from <i>Deployment type</i> onwards correspond to the same ! options in the McMillan Installer. Note that new projects are always created with ! the <i>Console</i> option turned on - this is intended to aid with debugging. The ! build process generates a warning message to remind you to turn this off before making ! a release of your finished application.</p> ! ! <h2>Changelog & README buttons</h2> ! <p>Clicking the Changelog button launches the text editor defined in preferences and ! opens the project changelog file for further editing:</p> ! ! <div align="center"><img src="pic14.jpg" /></div> ! ! <p>Additional entries can be made directly using this option. Alternatively, there ! is an 'add changelog entry' option on the 'tools' menu. This pops up a small text ! entry dialog like so:</p> ! <div align="center"><img src="pic15.jpg" /></div> ! <p>The entry then gets added to the changelog. Entries are made so that the ! most recently added is at the top:</p> ! <div align="center"><img src="pic16.jpg" /></div> ! ! <p>The README button does a similar thing, but instead uses the text editor ! to open a file called <i>readme.txt</i> in the project base folder</p> ! ! <h2>The Run Button</h2> ! <p>When clicked, the <i>Run...</i> button executes the main script of your project. It firstly pops ! up a small dialog wherein you can specify a number of useful command line options:</p> ! <div align="center"><img src="pic28.jpg" /></div> ! <p>There must be a reason why this looks suspiciously like the run-time options dialog ! from the PythonCard resource editor, but I'm sure I couldn't even begin to guess what ! that reason might be... :-)</p> ! ! <h2>The Rebuild button</h2> ! <p>Clicking this button causes the standalone version of your application to be rebuilt. As ! <i>sab-demo</i> is a new project, it has been created with the console option switched on. ! The first thing <i>standaloneBuilder</i> does is to remind you about this:</p> ! <div align="center"><img src="pic17.jpg" /></div> ! <p>The build then proceeds. If all is successful, the program will tell you where it has ! stored the installer for the project:</p> ! <div align="center"><img src="pic18.jpg" /></div> ! <p>A scrolling text window is also displayed where you can see the output from the ! build process:</p> ! <div align="center"><img src="pic19.jpg" /></div> ! <p>When the build has completed, the self extracting installer executable can be ! copied to another Windows machine ad run. The resulting setup wizard looks the same ! as virtually any other piece of 'professionally' produced software:</p> ! <div align="center"><img src="pic21.jpg" /></div> ! <p>The executable itself looks and behaves exactly the same as any other program. This ! is the result of right-clicking the <i>sab-demo.exe</i> file and selecting 'Properties':</p> ! <div align="center"><img src="pic20.jpg" /></div> ! ! <h2>The Release button</h2> ! <p>When you are happy that you have thoroughly debugged your project and are ready to ! release it to the outside world, you should open the project in <i>standaloneBuilder</i> ! and click the Release button. Doing this puts the current release of the project into ! a <i>frozen</i> state, in which no further changes can be made until you have checked and ! confirmed that the release is okay.</p> ! ! <p>The first thing that happens upon clicking the Release button is that a warning dialog ! pops up to give you the option of changing your mind:</p> ! <div align="center"><img src="pic22.jpg" /></div> ! ! <p>Assuming that you click OK at this point, a number of things then happen to the project. ! Firstly, the status gets changed from <i>Open</i> to <i>Frozen</i> and the majority ! of the controls on the main window get disabled:</p> ! <div align="center"><img src="pic23.jpg" /></div> ! <p>Secondly, the 'release date TBA' tag at the top of the project changelog gets replaced ! by the current date. At this point, only the <i>Rebuild</i> and <Release</i> buttons ! will work. You should carry out a final rebuild of your project under both Windows and ! Linux, if applicable. Under Linux, the <i>Rebuild</i> process simply produces a TAR archive ! of the files which make up your project, as opposed to a standalone binary executable.</p> ! ! <p>When you are happy that everything has been rebuilt as you need it, you are ready to ! close off the current release and start the next version of your project. To do this, just ! click the <i>Release</i> button again. You will be presented with this dialog:</p> ! <div align="center"><img src="pic24.jpg" /></div> ! <p>Click OK to confirm the release. You then have an opportunity to decide what the next ! version number of your project will be, with the option to override what the program offers ! as a deafult. In the example shown below I have decided that the next release of the ! <i>sab-demo</i> project should have a version number of 0.9.1:</p> ! <div align="center"><img src="pic25.jpg" /></div> ! <p>The main window is then refreshed. The build number has been reset to 1 and a new ! changelog entry has been added to indicate the start of the release cycle for the new ! version number:</p> ! <div align="center"><img src="pic26.jpg" /></div><br /> ! <div align="center"><img src="pic27.jpg" /></div> ! ! ! ! <?php include "footer.php" ?> ! <p>$Revision$ : $Author$ : Last updated $Date$</p> ! </div> <!-- end of content --> ! </body> ! </html> --- 1,239 ---- ! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ! <html> ! <head> ! <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> ! <link rel="stylesheet" type="text/css" href="PythonCard.css" /> ! <title>PythonCard standaloneBuilder tool</title> ! </head> ! <body> ! <font size="2"> ! <div id="banner"> ! <h1>PythonCard standaloneBuilder tool</h1> ! </div> ! <?php include "sidebar.php" ?> ! <div id="content"> ! <h2>Introduction</h2> ! <p>The process of converting a PythonCard project into a stand-alone application, ! complete with installer and un-install entry, is fairly tedious to do 'by ! hand'. Whilst writing some documentation (see <a href="standalone.html">here</a>) to ! cover this, it became clear that there was a need for some application ! software (written using PythonCard, naturally!) to help automate the process. The ! <i>standaloneBuilder</i> tool is the result. The program offers the user the ! ability to manage the development and release of successive versions of an ! application project written using PythonCard.</p> ! ! <p>Comments on this document and/or bug reports related to the <i>standaloneBuilder</i> tool ! may be posted to the PythonCard users mailing list, <a href="http://lists.sourceforge.net/lists/listinfo/pythoncard-users">http://lists.sourceforge.net/lists/listinfo/pythoncard-users</a>, for discussion.</p> ! ! <h2>Pre-Requisites</h2> ! <p>As well as Python, wxPython and PythonCard, you will need to have installed and configured ! pyInstaller and/or py2exe together with Inno Setup on your computer. These packages can be downloaded from ! the following locations as of the time of writing: <ul> <li>pyInstaller: <a href="http://pyinstaller.python-hosting.com/">http://pyinstaller.python-hosting.com/</a></li> ! <li>py2exe: <a href="http://www.py2exe.org/">http://www.py2exe.org/</a></li> ! <li>Inno Setup: <a href="http://www.jrsoftware.org/isdl.php">http://www.jrsoftware.org/isdl.php</a></li> ! </ul> ! All packages come with comprehensive documentation - installation and setup should be ! painless.</p> ! ! <h2>Configuring <i>standaloneBuilder</i></h2> ! <p>When launching <i>standaloneBuilder</i> for the first time, it detects that the ! preferences need to be configured and drops you straight into the preferences ! dialog.</p> ! <div align="center"><img src="pic1.jpg" /></div> ! <p>You can come back to this dialog at any time by clicking the preferences ! button on the main screen. All of the options have help buttons (marked with ! '?') associated with them, so you can (hopefully) figure out what each one is ! for without too much difficulty. The program will try to find as much information as it ! can, you should only need to tell it your name and where to find the directory ! you keep all your projects in.</p> ! <div align="center"><img src="pic2.jpg" /></div> ! ! <p>After filling in any missing information, click the OK button to save your ! preferences for use In future projects. ! ! <h2>Creating a new project</h2> ! ! <p>For the purposes of this ! document, we'll use the <i>standaloneBuilder</i> tool in conjunction with the ! application created in <a href="walkthrough2.html">walkthrough #2,</a> to illustrate ! the steps involved in the creation, development and distribution of a typical PythonCard ! program. We'll assume that you have already followed the walkthrough and you have the ! <i>counter.py</i> application fully functional.</p> ! ! <div align="center"><img src="pic3.jpg" /></div> ! ! <p>To begin, click on the 'New' button to start the new project wizard and fill ! in the details as required:</p> ! <div align="center"><img src="pic4.jpg" /></div><br /> ! <div align="center"><img src="pic5.jpg" /></div><br /> ! <div align="center"><img src="pic6.jpg" /></div><br /> ! <div align="center"><img src="pic7.jpg" /></div><br /> ! <div align="center"><img src="pic8.jpg" /></div><br /> ! ! <p>After completing the new project wizard, the program will create the project ! and add in some default folders and template files. A 'save' dialog will then ! be presented to allow the project details to be written to disk. The main ! window will now appear as shown below:</p> ! ! <div align="center"><img src="pic9.jpg" /></div> ! ! <h2>Adding files to the project</h2> ! <p>The first step will be to define the main script file for the project. In this case, ! there is only one script, namely <i>counter.py</i>, so click the '...' button next to ! the main script file text field. Navigate to the <i>sab-demo</i> folder and select the ! 'counter.py' script. Click the Open button to add it to the project:</p> ! ! <div align="center"><img src="pic10.jpg" /></div><br /> ! <div align="center"><img src="pic11.jpg" /></div> ! <p>If <i>standaloneBuilder</i> finds a resource file with a name which matches the script ! you have just added, it will offer to add this for you as well:</p> ! <div align="center"><img src="pic29.jpg" alt="" /></div> ! <p>Simply click the <i>Yes</i> button to have the resource file added into the project:</p> ! <div align="center"><img src="pic12.jpg" alt="" /></div> ! ! <p>A note is probably in order at this point about the <i>Script files</i> box. ! Generally, pyInstaller is quite good at working out if there are any additional source files ! associated with the main script, simply by examining any <i>import</i> lines in the ! source code. This may appear to make the <i>Script files</i> box largely superfluous. If ! you intend to only ever build projects for Windows platforms, then you may well find that ! you never need to explicitly list any additional script files. If, however, you also want ! to distribute your project to Linux users, then things are slightly different. When running ! <i>standaloneBuilder</i> on Linux, the rebuild button simply builds a compressed tar file ! containing the items you have specified as making up your project. In this scenario, only ! those files that you have explicitly listed will be included in the tar file. Also, by ! including your script files explicitly, the usefulness of <i>standaloneBuilder</i> as a ! general purpose project manager comes into play. You can edit a given script file by ! simply selecting it in the list and clicking the <i>Edit...</i> button.</p> ! ! <p>Having added the resource file, you can now open it in the resource editor simply by ! clicking on the Edit button on the main window. Files which are added in other sections ! of the main window can be edited in the same way. Script files will be opened using the ! program defined as the text editor in preferences. This defaults to the PythonCard code ! editor, but can be changed if required. Files listed under the Pixmaps section will ! be opened using whatever you specify as your default image editor in preferences,</p> ! ! <h2>Project properties</h2> ! <p>That pretty much covers the mechanics of adding and editing the files which make up ! your project. The project properties dialog provides a number of options which affect ! how the final standalone version of your program is built. To access this, click the ! Properties button on the main window:</p> ! ! <div align="center"><img src="pic13.jpg" /></div> ! ! <p>The first few fields determine the folder layout within your project. All the paths ! used within standaloneBuilder are relative. For example, the default build directory ! is simply called 'build' - in practice, this folder would be created in whatever you ! specified as the base folder when the project was initially created, this would in turn ! be created as a sub folder of your top level 'projects' folder defined in the ! preferences. Thus, in this example:</p> ! ! <ul> ! <li>Projects folder in preferences is <i>C:\Documents and Settings\pedwards\My Documents\Projects</i></li> ! <li>The project was created in a folder called <i>sab-demo</i></li> ! <li>The build directory is called simply <i>build</i></li> ! </ul> ! ! <p>The full path to the build directory is therefore <i>C:\Documents and Settings\pedwards\My Documents\Projects\sab-demo\build</i>. Having ! all of the folder references relative to each other allows <i>standaloneBuilder</i> ! to maintain projects on both Windows and Linux platforms, with Python itself taking ! care of the differences in path separators.</p> ! ! <p>The application publisher, application URL and application licence fields are ! used by Inno Setup when the final version of the program is built</p> ! ! <p>The other options from <i>Deployment type</i> onwards correspond to the same ! options in the McMillan Installer. Note that new projects are always created with ! the <i>Console</i> option turned on - this is intended to aid with debugging. The ! build process generates a warning message to remind you to turn this off before making ! a release of your finished application.</p> ! ! <h2>Changelog & README buttons</h2> ! <p>Clicking the Changelog button launches the text editor defined in preferences and ! opens the project changelog file for further editing:</p> ! ! <div align="center"><img src="pic14.jpg" /></div> ! ! <p>Additional entries can be made directly using this option. Alternatively, there ! is an 'add changelog entry' option on the 'tools' menu. This pops up a small text ! entry dialog like so:</p> ! <div align="center"><img src="pic15.jpg" /></div> ! <p>The entry then gets added to the changelog. Entries are made so that the ! most recently added is at the top:</p> ! <div align="center"><img src="pic16.jpg" /></div> ! ! <p>The README button does a similar thing, but instead uses the text editor ! to open a file called <i>readme.txt</i> in the project base folder</p> ! ! <h2>The Run Button</h2> ! <p>When clicked, the <i>Run...</i> button executes the main script of your project. It firstly pops ! up a small dialog wherein you can specify a number of useful command line options:</p> ! <div align="center"><img src="pic28.jpg" /></div> ! <p>There must be a reason why this looks suspiciously like the run-time options dialog ! from the PythonCard resource editor, but I'm sure I couldn't even begin to guess what ! that reason might be... :-)</p> ! ! <h2>The Rebuild button</h2> ! <p>Clicking this button causes the standalone version of your application to be rebuilt. As ! <i>sab-demo</i> is a new project, it has been created with the console option switched on. ! The first thing <i>standaloneBuilder</i> does is to remind you about this:</p> ! <div align="center"><img src="pic17.jpg" /></div> ! <p>The build then proceeds. If all is successful, the program will tell you where it has ! stored the installer for the project:</p> ! <div align="center"><img src="pic18.jpg" /></div> ! <p>A scrolling text window is also displayed where you can see the output from the ! build process:</p> ! <div align="center"><img src="pic19.jpg" /></div> ! <p>When the build has completed, the self extracting installer executable can be ! copied to another Windows machine ad run. The resulting setup wizard looks the same ! as virtually any other piece of 'professionally' produced software:</p> ! <div align="center"><img src="pic21.jpg" /></div> ! <p>The executable itself looks and behaves exactly the same as any other program. This ! is the result of right-clicking the <i>sab-demo.exe</i> file and selecting 'Properties':</p> ! <div align="center"><img src="pic20.jpg" /></div> ! ! <h2>The Release button</h2> ! <p>When you are happy that you have thoroughly debugged your project and are ready to ! release it to the outside world, you should open the project in <i>standaloneBuilder</i> ! and click the Release button. Doing this puts the current release of the project into ! a <i>frozen</i> state, in which no further changes can be made until you have checked and ! confirmed that the release is okay.</p> ! ! <p>The first thing that happens upon clicking the Release button is that a warning dialog ! pops up to give you the option of changing your mind:</p> ! <div align="center"><img src="pic22.jpg" /></div> ! ! <p>Assuming that you click OK at this point, a number of things then happen to the project. ! Firstly, the status gets changed from <i>Open</i> to <i>Frozen</i> and the majority ! of the controls on the main window get disabled:</p> ! <div align="center"><img src="pic23.jpg" /></div> ! <p>Secondly, the 'release date TBA' tag at the top of the project changelog gets replaced ! by the current date. At this point, only the <i>Rebuild</i> and <Release</i> buttons ! will work. You should carry out a final rebuild of your project under both Windows and ! Linux, if applicable. Under Linux, the <i>Rebuild</i> process simply produces a TAR archive ! of the files which make up your project, as opposed to a standalone binary executable.</p> ! ! <p>When you are happy that everything has been rebuilt as you need it, you are ready to ! close off the current release and start the next version of your project. To do this, just ! click the <i>Release</i> button again. You will be presented with this dialog:</p> ! <div align="center"><img src="pic24.jpg" /></div> ! <p>Click OK to confirm the release. You then have an opportunity to decide what the next ! version number of your project will be, with the option to override what the program offers ! as a deafult. In the example shown below I have decided that the next release of the ! <i>sab-demo</i> project should have a version number of 0.9.1:</p> ! <div align="center"><img src="pic25.jpg" /></div> ! <p>The main window is then refreshed. The build number has been reset to 1 and a new ! changelog entry has been added to indicate the start of the release cycle for the new ! version number:</p> ! <div align="center"><img src="pic26.jpg" /></div><br /> ! <div align="center"><img src="pic27.jpg" /></div> ! ! ! ! <?php include "footer.php" ?> ! <p>$Revision$ : $Author$ : Last updated $Date$</p> ! </div> <!-- end of content --> ! </font> ! </body> ! </html> Index: license.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/doc/license.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** license.html 12 May 2006 16:26:20 -0000 1.3 --- license.html 24 Oct 2007 00:50:58 -0000 1.4 *************** *** 1,34 **** ! <html> ! <head> ! <title>PythonCard License</title> ! </head> ! <body> ! <pre> ! Copyright (c) 2001-2005 PythonCard developers ! All rights reserved. ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: ! 1. Redistributions of source code must retain the above copyright ! notice, this list of conditions and the following disclaimer. ! 2. Redistributions in binary form must reproduce the above copyright ! notice, this list of conditions and the following disclaimer in the ! documentation and/or other materials provided with the distribution. ! 3. The name of the author may not be used to endorse or promote products ! derived from this software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ! IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ! OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN ! NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ! TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ! PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ! LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ! NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ! EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ! ! </pre> ! </body> </html> --- 1,34 ---- ! <html> ! <head> ! <title>PythonCard License</title> ! </head> ! <body> ! <font face="courier" size="%(fontSize)s"> ! <p>Copyright (c) 2001-2007 PythonCard developers ! All rights reserved.</p> ! ! <p>Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met:</p> ! <p><ol> ! <li>Redistributions of source code must retain the above copyright ! notice, this list of conditions and the following disclaimer. ! <li>Redistributions in binary form must reproduce the above copyright ! notice, this list of conditions and the following disclaimer in the ! documentation and/or other materials provided with the distribution. ! <li>The name of the author may not be used to endorse or promote products ! derived from this software without specific prior written permission. ! </ol></p> ! <p>THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ! IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ! OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN ! NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ! TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ! PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ! LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ! NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ! EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p> ! </font> ! </body> </html> Index: author.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/doc/author.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** author.html 9 Apr 2005 09:30:36 -0000 1.1 --- author.html 24 Oct 2007 00:50:58 -0000 1.2 *************** *** 1,22 **** ! <font face="verdana"> ! <p>standaloneBuilder was developed by Phil Edwards <ph...@li...> I would ! like to also extend my grateful thanks to the following:</p> ! <br></br> ! <div align="center"> ! <font face="verdana" size="2"> ! <table width="90%%"> ! <tr> ! <td> ! <hr> ! Kevin Altis <a href="mailto:al...@se...">al...@se...</a>, ! without whose excellent work on PythonCard none of this would be possible. ! </td> ! </tr> ! <tr> ! <td> ! <hr> ! </td> ! </tr> ! </table> ! </div> </font> --- 1,28 ---- ! <html> ! <head> ! </head> ! <body> ! <font face="verdana" size="%(fontSize)s"> ! <p>standaloneBuilder was developed by Phil Edwards ! <a href="mailto:ph...@li...">ph...@li...</a> I would ! like to also extend my grateful thanks to the following:</p> ! <br /> ! <!-- <div align="center"> --> ! <!-- <font face="verdana" size="2"> --> ! <table width="100%%"> ! <tr> ! <td> ! <ul> ! <li>Kevin Altis <a href="mailto:al...@se...">al...@se...</a>, ! without whose excellent work on PythonCard none of this would be possible. ! <li>Alex Tweedly <a href="mailto:al...@tw...">al...@tw...</a> for ! assistance with testing and an uncanny ability to find the most ! obscure bugs! :-) ! </ul> ! </td> ! </tr> ! </table> ! <!-- </div> --> </font> + </body> + </html> Index: about.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/doc/about.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** about.html 12 May 2006 16:26:20 -0000 1.3 --- about.html 24 Oct 2007 00:50:58 -0000 1.4 *************** *** 1,26 **** ! <html> ! <head> ! </head> ! <body bgcolor="7f7f7f"> ! <font face="verdana" size="2"> ! <table border="0" width="100%"> ! <tr> ! <td colspan="2"> ! <b>standaloneBuilder Version 0.1.4</b> ! </td> ! </tr> ! <tr> ! <td align="center" valign="top"> </td> ! <td valign="top"> ! standaloneBuilder is designed to help simplify the process of getting ! a PythonCard applpication distributed in standalone form, without the ! end user being required to install PythonCard, wxPython or even Python ! itself. ! <p>Developed using the PythonCard GUI toolkit and wxPython, ! <a href="http://pythoncard.sourceforge.net">http://pythoncard.sourceforge.net</a></p> ! </td> ! </tr> ! </table> ! </font> ! </body> ! </html> --- 1,23 ---- ! <html> ! <head> ! </head> ! <body> ! <font face="verdana" size="%(fontSize)s"> ! <table border="0" width="100%%"> ! <tr> ! <!-- <td align="center" valign="top"> </td> --> ! <td valign="top"> ! <p>standaloneBuilder is designed to help simplify the process of getting ! a PythonCard application distributed in standalone form, without the ! end user being required to install PythonCard, wxPython or even Python ! itself.</p> ! <p>Developed using Python, <a href="http://www.python.org">http://www.python.org</a>, ! wxPython, <a href="http://www.wxpython.org">http://www.wxpython.org</a></p> ! and the PythonCard GUI toolkit, ! <a href="http://pythoncard.sourceforge.net">http://pythoncard.sourceforge.net</a> ! </td> ! </tr> ! </table> ! </font> ! </body> ! </html> Index: license.txt =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/doc/license.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** license.txt 12 May 2006 16:26:20 -0000 1.3 --- license.txt 24 Oct 2007 00:50:58 -0000 1.4 *************** *** 1,27 **** ! Copyright (c) 2001-2005 PythonCard developers ! All rights reserved. ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: ! 1. Redistributions of source code must retain the above copyright ! notice, this list of conditions and the following disclaimer. ! 2. Redistributions in binary form must reproduce the above copyright ! notice, this list of conditions and the following disclaimer in the ! documentation and/or other materials provided with the distribution. ! 3. The name of the author may not be used to endorse or promote products ! derived from this software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY ! EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, ! THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ! PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ! AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, ! BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ! SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ! NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- 1,27 ---- ! Copyright (c) 2001-2007 PythonCard developers ! All rights reserved. ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: ! 1. Redistributions of source code must retain the above copyright ! notice, this list of conditions and the following disclaimer. ! 2. Redistributions in binary form must reproduce the above copyright ! notice, this list of conditions and the following disclaimer in the ! documentation and/or other materials provided with the distribution. ! 3. The name of the author may not be used to endorse or promote products ! derived from this software without specific prior written permission. ! ! THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY ! EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, ! THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ! PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ! AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, ! BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ! SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ! NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
From: Phil E. <l2...@us...> - 2007-10-24 00:50:32
|
Update of /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/pixmaps In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19121 Added Files: manual.png tuxlogo.png Log Message: Fixes and enhancements for standaloneBuilder v0.3.1, see changelog file for full details --- NEW FILE: tuxlogo.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: manual.png --- (This appears to be a binary file; contents omitted.) |
From: Phil E. <l2...@us...> - 2007-10-24 00:50:12
|
Update of /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/templates In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19089 Modified Files: setup.py Log Message: Fixes and enhancements for standaloneBuilder v0.3.1, see changelog file for full details Index: setup.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/templates/setup.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** setup.py 12 May 2006 16:26:20 -0000 1.1 --- setup.py 24 Oct 2007 00:50:11 -0000 1.2 *************** *** 36,41 **** buildOpts = eval((open('buildoptions.dat').read())) buildType = buildOpts['buildType'] ! zipfile = r"lib/sharedlib" ! options = {"py2exe": {"compressed": 1, "optimize": 2}} if buildType != "windows": --- 36,47 ---- buildOpts = eval((open('buildoptions.dat').read())) buildType = buildOpts['buildType'] ! if buildOpts.has_key('singlefile'): ! options = {"py2exe": {"compressed": 1, "optimize": 2, "bundle_files": 1, "ascii": 1}} ! zipfile = None ! else: ! options = {"py2exe": {"compressed": 1, "optimize": 2}} ! zipfile = r"lib/sharedlib" ! ! print options if buildType != "windows": |
From: Kevin A. <ka...@us...> - 2007-07-30 14:31:30
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17716/html Modified Files: what_is_python.html Log Message: switched to wingware.com urls Index: what_is_python.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/what_is_python.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** what_is_python.html 30 Jul 2007 04:34:45 -0000 1.1 --- what_is_python.html 30 Jul 2007 14:31:12 -0000 1.2 *************** *** 55,68 **** <h2>Why Python?</h2> ! <p>Archaeopteryx Software provides some great information pages discussing the benefits of the Python programming language:</p> <blockquote>"Python is an open-source object-oriented programming language that offers two to ten fold programmer productivity increases over languages like C, C++, Java, C#, Visual Basic (VB), and Perl."</blockquote> <ul> ! <li><a href="http://archaeopteryx.com/python">Python Overview</a> ! <li><a href="http://archaeopteryx.com/python/benefits">The benefits of Python</a> ! <li><a href="http://archaeopteryx.com/python/evaluating">Evaluating Python for your project</a> ! <li><a href="http://archaeopteryx.com/python/resources">Resources for evaluators</a></li></ul> <p><a href="http://www.catb.org/~esr/">Eric Raymond</a> explains <a href="http://www.linuxjournal.com/article.php?sid=3882">Why Python?</a> in a LinuxJournal article.</p> <p>Paul Prescod has his own reasons for <a href="http://www.prescod.net/python/why.html">why he promotes Python</a>.</p> ! <p>Some <a href="http://www.python.org/about/success/">Python Success Stories</a>.</p> <p>Watch a <a href="http://www.python.org/other/python.mov">15 minute movie Introducing Python</a> (68 MB) by some of its creators and users.</p><br> --- 55,70 ---- <h2>Why Python?</h2> ! <p>Wingware provides some great information pages discussing the benefits of the Python programming language:</p> <blockquote>"Python is an open-source object-oriented programming language that offers two to ten fold programmer productivity increases over languages like C, C++, Java, C#, Visual Basic (VB), and Perl."</blockquote> <ul> ! <li><a href="http://wingware.com/python">Python Overview</a> ! <li><a href="http://wingware.com/python/success">Python Success Stories</a> ! <li><a href="http://wingware.com/python/benefits">The benefits of Python</a> ! <li><a href="http://wingware.com/python/evaluating">Evaluating Python for your project</a> ! <li><a href="http://wingware.com/python/business">Open Source in Business</a></li> ! <li><a href="http://wingware.com/python/resources">Resources for evaluators</a></li></ul> <p><a href="http://www.catb.org/~esr/">Eric Raymond</a> explains <a href="http://www.linuxjournal.com/article.php?sid=3882">Why Python?</a> in a LinuxJournal article.</p> <p>Paul Prescod has his own reasons for <a href="http://www.prescod.net/python/why.html">why he promotes Python</a>.</p> ! <p>Dozens of categorized <a href="http://www.python.org/about/success/">Python Success Stories</a> on the Python.org site.</p> <p>Watch a <a href="http://www.python.org/other/python.mov">15 minute movie Introducing Python</a> (68 MB) by some of its creators and users.</p><br> |
From: Kevin A. <ka...@us...> - 2007-07-30 04:46:29
|
Update of /cvsroot/pythoncard/PythonCard/docs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25121 Modified Files: changelog.txt Log Message: changed to new release month, comments for doc changes Index: changelog.txt =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/changelog.txt,v retrieving revision 1.332 retrieving revision 1.333 diff -C2 -d -r1.332 -r1.333 *** changelog.txt 6 Aug 2006 23:55:52 -0000 1.332 --- changelog.txt 30 Jul 2007 04:46:30 -0000 1.333 *************** *** 8,12 **** ! Release 0.8.3 2006-08-?? added Mac OS X Tiger installation instructions added drag and drop file support to codeEditor --- 8,15 ---- ! Release 0.8.3 2007-09-?? ! added what_is_python.html page to docs ! updated Windows and Mac OS X Tiger install instructions for Python 2.5.1 ! and wxPython 2.8.4.0 added Mac OS X Tiger installation instructions added drag and drop file support to codeEditor |
From: Kevin A. <ka...@us...> - 2007-07-30 04:45:41
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25073 Modified Files: donations.html Log Message: fixed donation urls Index: donations.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/donations.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** donations.html 26 Jul 2004 15:35:31 -0000 1.2 --- donations.html 30 Jul 2007 04:45:40 -0000 1.3 *************** *** 28,32 **** tax law, and all donations made by US residents are tax deductible (see the ! <a href="http://www.python.org/psf/donations.html">PSF donations page</a> for details).</p> <p>For more information on the PSF, please see the --- 28,32 ---- tax law, and all donations made by US residents are tax deductible (see the ! <a href="http://www.python.org/psf/donations/">PSF donations page</a> for details).</p> <p>For more information on the PSF, please see the *************** *** 61,65 **** needed to springboard these kinds of projects.</p> <p>You may like to read the ! <a href="http://www.python.org/psf/mission.html">PSF Mission Statement</a> for more details.</p> <h2>OK, OK, where do I pay?</h2> --- 61,65 ---- needed to springboard these kinds of projects.</p> <p>You may like to read the ! <a href="http://www.python.org/psf/mission/">PSF Mission Statement</a> for more details.</p> <h2>OK, OK, where do I pay?</h2> |
From: Kevin A. <ka...@us...> - 2007-07-30 04:34:45
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20471 Modified Files: sidebar.php Added Files: what_is_python.html Log Message: added what is python and why python html from old blog entries --- NEW FILE: what_is_python.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta name="keywords" content="python, programming, hypercard, gui, development" /> <meta name="author" content="Kevin Altis" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="PythonCard.css" type="text/css" /> <title>What is Python and Why Python</title> </head> <body> <div id="banner"> <h1>What is Python and Why Python</h1> </div> <?php include "sidebar.php" ?> <div id="content"> <h2>What is Python?</h2> <p>Python is an agile programming language.</p> <p>There, I said it, so now everyone can stop using terms like scripting and interpreted or high-level that either have negative connotations or don't really get across why Python is so great. Just say <a href="http://www.python.org/">Python</a> is an <a href="http://dictionary.reference.com/search?q=agile">agile</a> programming language. Note that Java and C# are not agile languages, but that Ruby probably is based on what I know about Ruby. If you use <a href="http://www.jython.org/">Jython</a> with Java that also counts as agile.</p> <p><a href="http://c2.com/cgi/wiki?WardCunningham">Ward Cunningham</a> and I came up with the idea of calling Python an agile language during an evening get-together on March 14th, 2003 with <a href="http://search.cpan.org/author/INGY/">Brian Ingerson</a>. We tried using the term all evening and it seemed to work. Since then, I've brought it up with people at <a href="http://www.python.org/pycon/">PyCon</a> and other events and everyone seems to like the term. It looks like we have a winner.</a> <p>Here's the working list for what I'm calling agile programming languages.</p> <ul> <li>excellent for beginners, yet superb for experts <li>highly scalable, suitable for large projects as well as small ones <li>rapid development <li>portable, cross-platform <li>embeddable <li>easily extensible <li>object-oriented <li>you can get the job done <li>simple yet elegant <li>stable and mature <li>powerful standard libs <li>wealth of 3rd party packages</li></ul> <p>And don't forget that with Python, programming is fun again!</p> <p>What is sort of interesting is that while I think Python is an excellent programming language to use with <a href="http://www.computerworld.com/softwaretopics/software/appdev/story/0,10801,67952,00.html">Agile Development Methods</a> I wasn't trying to just ride on that bandwagon. It is precisely because Python is an agile language that it is applicable to agile development methods, quick one-off programs normally thought of as scripts, and traditional software development done by solo programmers or teams. Most of the programming world still hasn't embraced the tenets of the <a href="http://www.martinfowler.com/articles/newMethodology.html">agile methodology</A>, but despite the programming style or type of program you're writing, Python will be applicable to the problem you're trying to solve.</p> <h2>Why Python?</h2> <p>Archaeopteryx Software provides some great information pages discussing the benefits of the Python programming language:</p> <blockquote>"Python is an open-source object-oriented programming language that offers two to ten fold programmer productivity increases over languages like C, C++, Java, C#, Visual Basic (VB), and Perl."</blockquote> <ul> <li><a href="http://archaeopteryx.com/python">Python Overview</a> <li><a href="http://archaeopteryx.com/python/benefits">The benefits of Python</a> <li><a href="http://archaeopteryx.com/python/evaluating">Evaluating Python for your project</a> <li><a href="http://archaeopteryx.com/python/resources">Resources for evaluators</a></li></ul> <p><a href="http://www.catb.org/~esr/">Eric Raymond</a> explains <a href="http://www.linuxjournal.com/article.php?sid=3882">Why Python?</a> in a LinuxJournal article.</p> <p>Paul Prescod has his own reasons for <a href="http://www.prescod.net/python/why.html">why he promotes Python</a>.</p> <p>Some <a href="http://www.python.org/about/success/">Python Success Stories</a>.</p> <p>Watch a <a href="http://www.python.org/other/python.mov">15 minute movie Introducing Python</a> (68 MB) by some of its creators and users.</p><br> <?php include "footer.php" ?> <p>$Revision: 1.1 $ : $Author: kasplat $ : Last updated $Date: 2007/07/30 04:34:45 $</p> </div> </body> </html> Index: sidebar.php =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/sidebar.php,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** sidebar.php 24 May 2006 23:14:27 -0000 1.8 --- sidebar.php 30 Jul 2007 04:34:45 -0000 1.9 *************** *** 39,43 **** <h4>Exits</h4> <ul> ! <li><a href="http://altis.pycs.net/stories/2003/04/16/whatIsPythonAndWhyPython.html">What is Python?</a></li> <li><a href="/learning_python.html">Learning Python</a></li> <li><a href="http://www.wxpython.org/">wxPython</a></li> --- 39,43 ---- <h4>Exits</h4> <ul> ! <li><a href="/what_is_python.html">What is Python?</a></li> <li><a href="/learning_python.html">Learning Python</a></li> <li><a href="http://www.wxpython.org/">wxPython</a></li> |
From: Kevin A. <ka...@us...> - 2007-07-29 06:00:33
|
Update of /cvsroot/pythoncard/PythonCard/samples/noresource In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14399/samples/noresource Modified Files: autobutton.py Log Message: updated to use dynamic string and exec for creating event handlers Index: autobutton.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/samples/noresource/autobutton.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** autobutton.py 27 Jun 2007 01:35:02 -0000 1.1 --- autobutton.py 29 Jul 2007 06:00:28 -0000 1.2 *************** *** 14,18 **** 'name':'bgMin', 'title':'Minimal PythonCard Application', ! 'size':(200, 100), 'components': [ --- 14,18 ---- 'name':'bgMin', 'title':'Minimal PythonCard Application', ! 'size':(200, 120), 'components': [ *************** *** 26,30 **** self.components['field1'] = {'type':'TextField', 'name':'field1', ! 'position':(5,5), 'size':(150, -1), 'text':'Hello PythonCard'} --- 26,30 ---- self.components['field1'] = {'type':'TextField', 'name':'field1', ! 'position':(5, 5), 'size':(150, -1), 'text':'Hello PythonCard'} *************** *** 33,50 **** def mouseclick_factory(self, name): ! def function(self, event): ! # changed to event.target.name to verify we're getting ! # the correct target when button is clicked ! print "You clicked '%s'." % event.target.name ! # func_name seems to be the magic attribute rather than ! # just setting func.name ! function.func_name = "on_%s_mouseClick" % name ! self.addMethod(function) self.components[name] = {'type':'Button', 'name':name, 'label':name, ! 'position':(5,5+int(name[-1:])*30), 'text':name} - return function --- 33,47 ---- def mouseclick_factory(self, name): ! fname = 'on_%s_mouseClick' % name ! s = 'def %s(self, event):\n' % fname ! s += ' print "You clicked %s." % event.target.name\n' ! d = {} ! exec s in d ! self.addMethod(d[fname]) self.components[name] = {'type':'Button', 'name':name, 'label':name, ! 'position':(5, 5 + int(name[-1:]) * 30), 'text':name} |
From: Kevin A. <ka...@us...> - 2007-07-29 02:31:49
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32192 Modified Files: macosx_tiger_installation.html windows_installation.html Log Message: updated Windows and Mac OS X (Tiger) installation instructions for Python 2.5.1 and wxPython 2.8.4.0 Index: macosx_tiger_installation.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/macosx_tiger_installation.html,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** macosx_tiger_installation.html 7 Aug 2006 00:16:53 -0000 1.4 --- macosx_tiger_installation.html 29 Jul 2007 02:31:46 -0000 1.5 *************** *** 31,39 **** <p>If you're running Tiger then you already have Python 2.3.5 installed on your system, but we want a more up-to-date build of Python.</p> ! <p>Click on this <a href="http://www.python.org/ftp/python/2.4.3/Universal-MacPython-2.4.3.dmg">Universal-MacPython-2.4.3.dmg</a> link to begin the download. Most Mac OS X browsers will save the file to your desktop.</p> <h2>Downloading wxPython</h2> ! <p>PythonCard relies on the wxPython package. Click on this <a href="http://prdownloads.sourceforge.net/wxpython/wxPython2.6-osx-unicode-2.6.3.3-universal10.4-py2.4.dmg">wxPython2.6-osx-unicode-2.6.3.3-universal10.4-py2.4.dmg</a> link to begin the download. Again, most Mac OS X browsers will save the file to your desktop.</p> --- 31,39 ---- <p>If you're running Tiger then you already have Python 2.3.5 installed on your system, but we want a more up-to-date build of Python.</p> ! <p>Click on this <a href="http://www.python.org/ftp/python/2.5.1/python-2.5.1-macosx.dmg">python-2.5.1-macosx.dmg</a> link to begin the download. Most Mac OS X browsers will save the file to your desktop.</p> <h2>Downloading wxPython</h2> ! <p>PythonCard relies on the wxPython package. Click on this <a href="http://internap.dl.sourceforge.net/sourceforge/wxpython/wxPython2.8-osx-unicode-2.8.4.0-universal10.4-py2.5.dmg">wxPython2.8-osx-unicode-2.8.4.0-universal10.4-py2.5.dmg</a> link to begin the download. Again, most Mac OS X browsers will save the file to your desktop.</p> *************** *** 46,62 **** <p>Python arrives at your system as an installable disk image. All you have to do is double-click on the file you downloaded (it's called ! Universal-MacPython-2.4.3.dmg), then double-click the MacPython.mpkg icon and follow the instructions in the installation wizard. The installer will create ! a new directory <span class="code">/Library/Frameworks/Python.framework/Versions/2.4/</span> to contain the Python executables, documentation, tools, and standard ! libraries. It will also create a folder in your Applications folder called MacPython 2.4 which contains ! the IDLE editor, PythonLauncher, and a large number of demos.</p> <h2>Installing wxPython</h2> <p>wxPython also comes as an installable disk image. Just double-click on the ! file you downloaded (it's called wxPython2.6-osx-unicode-2.6.3.3-universal10.4-py2.4.dmg), then ! double-click the wxPython2.6-osx-unicode-universal10.4-py2.4.pkg icon and follow the instructions. ! wxPython will be installed into <span class="code">/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/</span>. </p> ! You should also download the Docs, Demos, and Samples for wxPython. Click on this <a href="http://prdownloads.sourceforge.net/wxpython/wxPython2.6-osx-docs-demos-2.6.3.3-universal10.4-py2.4.dmg">wxPython2.6-osx-docs-demos-2.6.3.3-universal10.4-py2.4.dmg</a> ! link to begin the download. <p>I recommend creating a wxPython folder in your Applications folder and copying the Apps, Docs, Samples, and README 1st.txt files to the wxPython --- 46,62 ---- <p>Python arrives at your system as an installable disk image. All you have to do is double-click on the file you downloaded (it's called ! python-2.5.1-macosx.dmg), then double-click the MacPython.mpkg icon and follow the instructions in the installation wizard. The installer will create ! a new directory <span class="code">/Library/Frameworks/Python.framework/Versions/2.5/</span> to contain the Python executables, documentation, tools, and standard ! libraries. It will also create a folder in your Applications folder called MacPython 2.5 which contains ! the IDLE editor, Python Launcher, and a large number of demos.</p> <h2>Installing wxPython</h2> <p>wxPython also comes as an installable disk image. Just double-click on the ! file you downloaded (it's called wxPython2.8-osx-unicode-2.8.4.0-universal10.4-py2.5.dmg), then ! double-click the wxPython2.8-osx-unicode-universal10.4-py2.5.pkg icon and follow the instructions. ! wxPython will be installed into <span class="code">/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/</span>. </p> ! <p>You should also download the Docs, Demos, and Samples for wxPython. Click on this <a href="http://internap.dl.sourceforge.net/sourceforge/wxpython/wxPython2.8-osx-docs-demos-2.8.4.0-universal10.4-py2.5.dmg">wxPython2.8-osx-docs-demos-2.8.4.0-universal10.4-py2.5.dmg</a> ! link to begin the download.</p> <p>I recommend creating a wxPython folder in your Applications folder and copying the Apps, Docs, Samples, and README 1st.txt files to the wxPython *************** *** 68,72 **** You should now have a PythonCard-0.8.2 directory on your desktop. Open the Terminal application and do a cd to that directory and then run the ! setup.py script using the 2.3 Python you just installed. The sudo command will prompt you for your password.</p> <p class="code"> --- 68,72 ---- You should now have a PythonCard-0.8.2 directory on your desktop. Open the Terminal application and do a cd to that directory and then run the ! setup.py script using the 2.5.1 Python you just installed. The sudo command will prompt you for your password.</p> <p class="code"> *************** *** 74,97 **** [mymachine:~/Desktop/PythonCard-0.8.2] bob% sudo python setup.py install</p> ! <p>By default, the PythonCard framework will be installed into <span class="code">/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/PythonCard/</span>. You'll probably want to make an alias to this directory to keep on your desktop or home folder to make it easier to get to the PythonCard tools and samples.</p> <h2>Confirming Installation</h2> ! <h3>Configuring PythonLauncher</h3> <p>The default install leaves .py and .pyw files associated with the Python ! IDE rather than PythonLauncher which is the app used to run Python scripts ! from the Finder. PythonLauncher is located in your Applications/MacPython 2.4 folder</p> <p>If you select a .py file you can choose Get Info from the File menu and ! then change the files to open with PythonLauncher instead of the IDE if you want to be able to double-click a file and have it run. Repeat the process for .pyw files. Alternatively, you can hold down the control key and when you ! click on a .py file then you can select PythonLauncher from the Open With menu item.</p> ! <p class="imageCaption"><img src="http://pythoncard.sourceforge.net/images/pythonlauncher.png" alt="Mac Preferences Dialog" /><br /> ! Figure 1. PythonLauncher Preferences</p> <h3>Acid Test</h3> <p>OK, now comes the acid test. Open the folder called "minimal" in ! <span class="code">/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/PythonCard/samples</span>. Find the icon labeled minimal.py and double-click it. In a few moments (after an operating system console window has appeared), a small window like the --- 74,97 ---- [mymachine:~/Desktop/PythonCard-0.8.2] bob% sudo python setup.py install</p> ! <p>By default, the PythonCard framework will be installed into <span class="code">/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/PythonCard/</span>. You'll probably want to make an alias to this directory to keep on your desktop or home folder to make it easier to get to the PythonCard tools and samples.</p> <h2>Confirming Installation</h2> ! <h3>Configuring Python Launcher</h3> <p>The default install leaves .py and .pyw files associated with the Python ! IDE rather than Python Launcher which is the app used to run Python scripts ! from the Finder. Python Launcher is located in your Applications/MacPython 2.5 folder</p> <p>If you select a .py file you can choose Get Info from the File menu and ! then change the files to open with Python Launcher instead of the IDE if you want to be able to double-click a file and have it run. Repeat the process for .pyw files. Alternatively, you can hold down the control key and when you ! click on a .py file then you can select Python Launcher from the Open With menu item.</p> ! <p class="imageCaption"><img src="http://pythoncard.sourceforge.net/images/pythonlauncher2.png" alt="Mac Preferences Dialog" /><br /> ! Figure 1. Python Launcher Preferences</p> <h3>Acid Test</h3> <p>OK, now comes the acid test. Open the folder called "minimal" in ! <span class="code">/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/PythonCard/samples</span>. Find the icon labeled minimal.py and double-click it. In a few moments (after an operating system console window has appeared), a small window like the Index: windows_installation.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/windows_installation.html,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** windows_installation.html 6 Apr 2006 11:00:26 -0000 1.18 --- windows_installation.html 29 Jul 2007 02:31:46 -0000 1.19 *************** *** 24,39 **** </ol> <h2>Downloading Python</h2> ! <p>Python 2.4.3 is available from a couple of sources.</p> <ul> ! <li>The main <a href="http://www.python.org/2.4.3/">Python 2.4.3</a> page.</li> ! <li>The <a href="http://www.activestate.com/Products/ActivePython/more_information.plex">ActivePython</a> distribution</li> </ul> <p>For this guide, we'll be installing from the main Python site. Click on ! this <a href="http://www.python.org/ftp/python/2.4.3/Python-2.4.3.exe">Python-2.4.3.exe</a> link to begin the download. Tell your browser where you want the file stored and the download proceeds. Note where on your system the file is saved by your browser.</p> <h2>Downloading wxPython</h2> ! <p>PythonCard relies on the wxPython package. Click on this <a href="http://prdownloads.sourceforge.net/wxpython/wxPython2.6-win32-ansi-2.6.3.0-py24.exe">win32-ansi 2.6.3 for Python 2.4</a> link to begin the download. Tell your browser where you want the file stored and the download proceeds. Note where on your system the file is saved by your --- 24,39 ---- </ol> <h2>Downloading Python</h2> ! <p>Python 2.5.1 is available from a couple of sources.</p> <ul> ! <li>The <a href="http://www.python.org/download/">Python downloads</a> page.</li> ! <li>The <a href="http://www.activestate.com/Products/activepython/">ActivePython</a> distribution</li> </ul> <p>For this guide, we'll be installing from the main Python site. Click on ! this <a href="http://www.python.org/ftp/python/2.5.1/python-2.5.1.msi">Python-2.5.1.msi</a> link to begin the download. Tell your browser where you want the file stored and the download proceeds. Note where on your system the file is saved by your browser.</p> <h2>Downloading wxPython</h2> ! <p>PythonCard relies on the wxPython package. Click on this <a href="http://internap.dl.sourceforge.net/sourceforge/wxpython/wxPython2.8-win32-unicode-2.8.4.0-py25.exe">wxPython2.8-win32-unicode-2.8.4.0-py25.exe</a> link to begin the download. Tell your browser where you want the file stored and the download proceeds. Note where on your system the file is saved by your *************** *** 48,65 **** <p>Python arrives at your system as an installable application. All you have to do is double-click on the file you downloaded (it's called ! Python-2.4.3.exe) and follow the instructions in the installation wizard. By ! default, the installer will create a new directory C:\Python23 to contain the Python executables, documentation, tools, IDLE editor, and standard ! libraries. We'll refer to that directory as just <strong>Python23</strong> for the remainder of the instructions.</p> <h2>Installing wxPython</h2> <p>wxPython also comes as an automatic installer. Just double-click on the ! file you downloaded (it's called wxPython2.6-win32-ansi-2.6.3.0-py24.exe) and follow the instructions. By default, wxPython will be installed into ! Python24\Lib\site-packages.</p> <h2>Installing PythonCard</h2> <p>PythonCard also comes as an automatic installer. Just double-click on the file you downloaded and follow the instructions. By default, the PythonCard ! framework will be installed into Python23\Lib\site-packages.</p> <p>As part of the automated install some shortcuts and a program group on your start menu are created. If you have installed Python as a ordinary user (Who --- 48,67 ---- <p>Python arrives at your system as an installable application. All you have to do is double-click on the file you downloaded (it's called ! python-2.5.1.msi) and follow the instructions in the installation wizard. By ! default, the installer will create a new directory C:\Python25 to contain the Python executables, documentation, tools, IDLE editor, and standard ! libraries. We'll refer to that directory as just <strong>Python25</strong> for the remainder of the instructions.</p> <h2>Installing wxPython</h2> <p>wxPython also comes as an automatic installer. Just double-click on the ! file you downloaded (it's called wxPython2.8-win32-unicode-2.8.4.0-py25.exe) and follow the instructions. By default, wxPython will be installed into ! Python25\Lib\site-packages.</p> ! <p>You should also download the Docs, Demos, and Samples for wxPython. Click on this <a href="http://internap.dl.sourceforge.net/sourceforge/wxpython/wxPython2.8-win32-docs-demos-2.8.4.0.exe">wxPython2.8-win32-docs-demos-2.8.4.0.exe</a> ! link to begin the download.</p> <h2>Installing PythonCard</h2> <p>PythonCard also comes as an automatic installer. Just double-click on the file you downloaded and follow the instructions. By default, the PythonCard ! framework will be installed into Python25\Lib\site-packages.</p> <p>As part of the automated install some shortcuts and a program group on your start menu are created. If you have installed Python as a ordinary user (Who *************** *** 72,76 **** <h2>Confirming Installation</h2> <p>OK, now comes the acid test. Open the folder called "minimal" in ! Python23\Lib\site-packages\PythonCard\samples. Find the icon labeled minimal.py and double-click it. In a few moments (after an operating system console window has appeared), a small window like the one shown in Figure 1 --- 74,78 ---- <h2>Confirming Installation</h2> <p>OK, now comes the acid test. Open the folder called "minimal" in ! Python25\Lib\site-packages\PythonCard\samples. Find the icon labeled minimal.py and double-click it. In a few moments (after an operating system console window has appeared), a small window like the one shown in Figure 1 |
From: Kevin A. <ka...@us...> - 2007-07-28 23:44:03
|
Update of /cvsroot/pythoncard/PythonCard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2193 Modified Files: model.py Log Message: tweaked addMethod and isPythonCardHandler to handle functions and methods Index: model.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/model.py,v retrieving revision 1.198 retrieving revision 1.199 diff -C2 -d -r1.198 -r1.199 *** model.py 28 Jul 2007 23:13:31 -0000 1.198 --- model.py 28 Jul 2007 23:44:04 -0000 1.199 *************** *** 537,541 **** Return true if the object is a PythonCard handler. """ ! return isinstance(aObject, types.FunctionType) and aObject.__name__.split('_')[0] == 'on' def _addHandler(self, aMethod): --- 537,543 ---- Return true if the object is a PythonCard handler. """ ! return isinstance(aObject, types.FunctionType) or \ ! isinstance(aObject, types.MethodType) and \ ! aObject.__name__.split('_')[0] == 'on' def _addHandler(self, aMethod): *************** *** 547,552 **** def addMethod(self, aFunction): ! if isinstance(aFunction, types.FunctionType): ! if self.isPythonCardHandler(aFunction) : #aMethod = new.instancemethod(aFunction, self, self.__class__) aMethod = new.instancemethod(aFunction, None, self.__class__) --- 549,554 ---- def addMethod(self, aFunction): ! if self.isPythonCardHandler(aFunction): ! if isinstance(aFunction, types.FunctionType): #aMethod = new.instancemethod(aFunction, self, self.__class__) aMethod = new.instancemethod(aFunction, None, self.__class__) *************** *** 555,576 **** #print aMethod.__name__ #print aMethod ! setattr(self.__class__, aMethod.__name__, aMethod) ! # now add the method info to our handler lookup dictionary ! # KEA 2001-11-29 simplified _addHandler ! #handler = event.Handler(aMethod.__name__, aMethod) ! #self._addHandler(aMethod.__name__, handler) ! self._addHandler(aMethod) ! ! # KEA 2004-05-13 ! # will need to call _bindEvents here to make sure the event handler ! # is bound to the right component instances ! # trying to figure out all the components as well as the reverse mapping ! # from an event name like mouseDown to event.MouseDownEvent is tricky ! # at best so we'll probably need to have user-code make explicit calls ! # to _bindEvents for each component they want to bind ! # the name to event class mapping can be found by iterativing over the ! # events defined in the spec for a given component to find a name match ! # maybe just calling _bindEvents with a full list of relevant events ! # would work, since the boundEvents list will prevent double-binding def findHandler(self, aString): --- 557,580 ---- #print aMethod.__name__ #print aMethod ! else: ! aMethod = aFunction ! setattr(self.__class__, aMethod.__name__, aMethod) ! # now add the method info to our handler lookup dictionary ! # KEA 2001-11-29 simplified _addHandler ! #handler = event.Handler(aMethod.__name__, aMethod) ! #self._addHandler(aMethod.__name__, handler) ! self._addHandler(aMethod) ! ! # KEA 2004-05-13 ! # will need to call _bindEvents here to make sure the event handler ! # is bound to the right component instances ! # trying to figure out all the components as well as the reverse mapping ! # from an event name like mouseDown to event.MouseDownEvent is tricky ! # at best so we'll probably need to have user-code make explicit calls ! # to _bindEvents for each component they want to bind ! # the name to event class mapping can be found by iterativing over the ! # events defined in the spec for a given component to find a name match ! # maybe just calling _bindEvents with a full list of relevant events ! # would work, since the boundEvents list will prevent double-binding def findHandler(self, aString): |
From: Kevin A. <ka...@us...> - 2007-07-28 23:13:30
|
Update of /cvsroot/pythoncard/PythonCard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23489 Modified Files: model.py Log Message: moved required version info to tuples and updated minimum requirements dialog Index: model.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/model.py,v retrieving revision 1.197 retrieving revision 1.198 diff -C2 -d -r1.197 -r1.198 *** model.py 13 Jan 2006 23:33:37 -0000 1.197 --- model.py 28 Jul 2007 23:13:31 -0000 1.198 *************** *** 11,18 **** # if they aren't met try: # some things might work with lesser # versions, but this is a reasonable base ! assert sys.version_info >= (2, 3) # sys.modules relative path fix sys.path[0] = os.path.abspath(sys.path[0]) --- 11,21 ---- # if they aren't met + REQUIRED_PYTHON = (2, 3) + REQUIRED_WXPYTHON = (2, 6) + try: # some things might work with lesser # versions, but this is a reasonable base ! assert sys.version_info >= REQUIRED_PYTHON # sys.modules relative path fix sys.path[0] = os.path.abspath(sys.path[0]) *************** *** 20,34 **** import wx ! assert wx.VERSION >= (2, 5, 2, 8) except AssertionError: ! from wxPython.wx import wxPySimpleApp, wxFrame, wxMessageDialog, wxICON_EXCLAMATION, wxOK, wxVERSION_STRING ! app = wxPySimpleApp() ! frame = wxFrame(None, -1, "Minimum Requirements Not Met") ! #frame.Show(1) ! message = "PythonCard minimum requirements:\nPython 2.3 and wxPython 2.5.2.8\n\n" + \ ! "You are using Python %s\nand wxPython %s.\n\nClick OK to exit." % (sys.version, wxVERSION_STRING) ! dialog = wxMessageDialog(frame, message, "Minimum Requirements Not Met", ! wxICON_EXCLAMATION | wxOK) dialog.ShowModal() dialog.Destroy() --- 23,45 ---- import wx ! assert wx.VERSION >= REQUIRED_WXPYTHON except AssertionError: ! app = wx.PySimpleApp() ! frame = wx.Frame(None, -1, "Minimum Requirements Not Met") ! message = """PythonCard minimum requirements: ! Python %s ! wxPython %s ! ! You are using: ! Python %s ! wxPython %s ! ! Click OK to exit.""" % \ ! (".".join([str(c) for c in REQUIRED_PYTHON]), ! ".".join([str(c) for c in REQUIRED_WXPYTHON]), ! sys.version, wx.VERSION_STRING) ! dialog = wx.MessageDialog(frame, message, "Minimum Requirements Not Met", ! wx.ICON_EXCLAMATION | wx.OK) dialog.ShowModal() dialog.Destroy() |
From: Kevin A. <ka...@us...> - 2007-07-28 23:12:00
|
Update of /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23098/tools/standaloneBuilder Modified Files: standaloneBuilder.py Log Message: removed import, switched to wx. style instead Index: standaloneBuilder.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/standaloneBuilder.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** standaloneBuilder.py 28 Jul 2007 14:53:11 -0000 1.16 --- standaloneBuilder.py 28 Jul 2007 23:12:00 -0000 1.17 *************** *** 54,64 **** # temporary hack until we get it working properly under MacOS if wx.Platform == '__WXMAC__': ! from wx import PySimpleApp, Frame, MessageDialog, ICON_EXCLAMATION, OK, VERSION_STRING ! app = PySimpleApp() title = 'Sorry!' ! frame = Frame(None, -1, title) message = 'standaloneBuilder currently does not work properly under MacOS. This shortcoming will ' message += 'be fixed in a future release.\n\nClick OK to exit.' ! dialog = MessageDialog(frame, wrap_string(message, 52), title, ICON_EXCLAMATION | OK) dialog.ShowModal() dialog.Destroy() --- 54,63 ---- # temporary hack until we get it working properly under MacOS if wx.Platform == '__WXMAC__': ! app = wx.PySimpleApp() title = 'Sorry!' ! frame = wx.Frame(None, -1, title) message = 'standaloneBuilder currently does not work properly under MacOS. This shortcoming will ' message += 'be fixed in a future release.\n\nClick OK to exit.' ! dialog = wx.MessageDialog(frame, wrap_string(message, 52), title, wx.ICON_EXCLAMATION | wx.OK) dialog.ShowModal() dialog.Destroy() |
From: Kevin A. <ka...@us...> - 2007-07-28 20:40:07
|
Update of /cvsroot/pythoncard/PythonCard/docs/html In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28956 Modified Files: moreapplications.html walkthrough1.html Log Message: fixed old instructions to refer to File->About menu item Index: moreapplications.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/moreapplications.html,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** moreapplications.html 10 Nov 2004 19:22:21 -0000 1.7 --- moreapplications.html 28 Jul 2007 20:40:04 -0000 1.8 *************** *** 18,21 **** --- 18,32 ---- <hr /> <dl> + <dt>Name:</dt> + <dd>dijkstra</dd> + <dt>Description:</dt> + <dd>Dijkstra's Shortest Path Algorithm Demo</dd> + <dt>URL:</dt> + <dd><a href="http://codeshift.net/dijkstra">http://codeshift.net/dijkstra</a></dd> + </dl> + <p class="imageCaption"><img src="http://codeshift.net/dijkstra?action=AttachFile&do=get&target=dijkstra.png" alt="Screenshot of dijkstra" /></p> + + <hr /> + <dl> <dt>Name:</dt> <dd>PIMP: Photographic Image Management Package</dd> Index: walkthrough1.html =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/docs/html/walkthrough1.html,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** walkthrough1.html 3 Jan 2006 18:28:32 -0000 1.23 --- walkthrough1.html 28 Jul 2007 20:40:04 -0000 1.24 *************** *** 171,175 **** GettingStarted". In that directory is a file called starter1.py. Launch it in the usual way. It is a bare-bones PythonCard application. In fact, it's ! a copy of the minimal application you ran in the last section.</p> <p>Open the file starter1.py in your Python-aware editor of choice. The Python script is, as you'd expect, brief and to the point. Here's the important --- 171,175 ---- GettingStarted". In that directory is a file called starter1.py. Launch it in the usual way. It is a bare-bones PythonCard application. In fact, it's ! a copy of the minimal application you ran in the last section with just a few changes.</p> <p>Open the file starter1.py in your Python-aware editor of choice. The Python script is, as you'd expect, brief and to the point. Here's the important *************** *** 197,201 **** </pre> <p>Again, this new line of Python code is readable even if you're not a ! Python guru yet. Now when the user selects the Exit menu, rather than doing nothing, we'll display an alert dialog titled "Showing Off" that says "It works!"</p> --- 197,201 ---- </pre> <p>Again, this new line of Python code is readable even if you're not a ! Python guru yet. Now when the user selects the About menu item, rather than doing nothing, we'll display an alert dialog titled "Showing Off" that says "It works!"</p> *************** *** 217,222 **** consequences because these editors use a different graphics library from what PythonCard uses.</p> ! <p>Double-click the "starter1" application. When the window appears, ! select the Exit option from the File menu. You'll see a small dialog appear as described above.</p> <p>Close the application by selecting its window's close box.</p> --- 217,222 ---- consequences because these editors use a different graphics library from what PythonCard uses.</p> ! <p>Double-click the "starter1.py" application. When the window appears, ! select the About option from the File menu. You'll see a small dialog appear as described above.</p> <p>Close the application by selecting its window's close box.</p> *************** *** 231,237 **** takes its text from the text in a component called "field1." That happens, of course, to be the only field in our little application.</p> ! <p>Save the code. Then double-click the "starter1" application to try out the change.</p> ! <p>Now when you change the text in the field and select File->Exit, you'll see a dialog box that contains the text you put into the field.</p> <h2>What We've Learned</h2> --- 231,237 ---- takes its text from the text in a component called "field1." That happens, of course, to be the only field in our little application.</p> ! <p>Save the code. Then double-click the "starter1.py" application to try out the change.</p> ! <p>Now when you change the text in the field and select File->About, you'll see a dialog box that contains the text you put into the field.</p> <h2>What We've Learned</h2> |
From: Kevin A. <ka...@us...> - 2007-07-28 14:56:47
|
Update of /cvsroot/pythoncard/PythonCard/tools/codeEditor In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31378/tools/codeEditor Modified Files: codeEditor.py Log Message: moved code to find Python documentation (pythonDocumentationURL) to util.py Index: codeEditor.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/codeEditor/codeEditor.py,v retrieving revision 1.128 retrieving revision 1.129 diff -C2 -d -r1.128 -r1.129 *** codeEditor.py 10 Aug 2006 09:40:54 -0000 1.128 --- codeEditor.py 28 Jul 2007 14:56:43 -0000 1.129 *************** *** 53,71 **** pythoncard_url = util.documentationURL("documentation.html") shell_url = util.documentationURL("shell.html") ! ! help_url = "http://docs.python.org/" ! if sys.platform.startswith("win"): ! fn = os.path.dirname(os.__file__) ! fn = os.path.join(fn, os.pardir, "Doc", "index.html") ! fn = os.path.normpath(fn) ! if os.path.isfile(fn): ! help_url = fn ! del fn ! elif sys.platform == 'darwin': ! fn = '/Library/Frameworks/Python.framework/Versions/' + \ ! 'Current/Resources/Python.app/Contents/Resources/English.lproj/' + \ ! 'PythonDocumentation/index.html' ! if os.path.exists(fn): ! help_url = "file://" + fn --- 53,57 ---- pythoncard_url = util.documentationURL("documentation.html") shell_url = util.documentationURL("shell.html") ! help_url = util.pythonDocumentationURL() |
From: Kevin A. <ka...@us...> - 2007-07-28 14:56:47
|
Update of /cvsroot/pythoncard/PythonCard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31378 Modified Files: util.py Log Message: moved code to find Python documentation (pythonDocumentationURL) to util.py Index: util.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/util.py,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** util.py 18 May 2006 21:11:49 -0000 1.39 --- util.py 28 Jul 2007 14:56:43 -0000 1.40 *************** *** 120,123 **** --- 120,146 ---- return url + def pythonDocumentationURL(): + help_url = "http://docs.python.org/" + if sys.platform.startswith("win"): + fn = os.path.dirname(os.__file__) + fn = os.path.join(fn, os.pardir, "Doc", "index.html") + fn = os.path.normpath(fn) + if os.path.isfile(fn): + help_url = fn + del fn + elif sys.platform == 'darwin': + fn = '/Library/Frameworks/Python.framework/Versions/' + \ + 'Current/Resources/English.lproj/Documentation/index.html' + if os.path.exists(fn): + help_url = "file://" + fn + else: + fn = '/Library/Frameworks/Python.framework/Versions/' + \ + 'Current/Resources/Python.app/Contents/Resources/English.lproj/' + \ + 'PythonDocumentation/index.html' + if os.path.exists(fn): + help_url = "file://" + fn + return help_url + + def dirwalk(dir, patterns=['*'], recurse=1): """walk a directory tree, using a generator |
From: Kevin A. <ka...@us...> - 2007-07-28 14:56:47
|
Update of /cvsroot/pythoncard/PythonCard/tools/oneEditor In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31378/tools/oneEditor Modified Files: tabcodeEditor.py Log Message: moved code to find Python documentation (pythonDocumentationURL) to util.py Index: tabcodeEditor.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/oneEditor/tabcodeEditor.py,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** tabcodeEditor.py 13 Jun 2006 16:11:45 -0000 1.18 --- tabcodeEditor.py 28 Jul 2007 14:56:43 -0000 1.19 *************** *** 56,74 **** pythoncard_url = util.documentationURL("documentation.html") shell_url = util.documentationURL("shell.html") ! ! help_url = "http://docs.python.org/" ! if sys.platform.startswith("win"): ! fn = os.path.dirname(os.__file__) ! fn = os.path.join(fn, os.pardir, "Doc", "index.html") ! fn = os.path.normpath(fn) ! if os.path.isfile(fn): ! help_url = fn ! del fn ! elif sys.platform == 'darwin': ! fn = '/Library/Frameworks/Python.framework/Versions/' + \ ! 'Current/Resources/Python.app/Contents/Resources/English.lproj/' + \ ! 'PythonDocumentation/index.html' ! if os.path.exists(fn): ! help_url = "file://" + fn def getResourceFilename(path): --- 56,60 ---- pythoncard_url = util.documentationURL("documentation.html") shell_url = util.documentationURL("shell.html") ! help_url = util.pythonDocumentationURL() def getResourceFilename(path): |
From: Kevin A. <ka...@us...> - 2007-07-28 14:53:11
|
Update of /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29890 Modified Files: standaloneBuilder.py Log Message: commented out unused wxHtmlEasyPrinting import converted wxPython to wx imports so Mac startup error works correctly Index: standaloneBuilder.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/tools/standaloneBuilder/standaloneBuilder.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** standaloneBuilder.py 3 Nov 2006 14:56:25 -0000 1.15 --- standaloneBuilder.py 28 Jul 2007 14:53:11 -0000 1.16 *************** *** 38,42 **** # pythoncard imports import wx ! from wxPython.html import wxHtmlEasyPrinting from PythonCard import dialog, model, util from PythonCard.templates.dialogs import runOptionsDialog --- 38,44 ---- # pythoncard imports import wx ! # KEA 2007-07-28 ! # unused... ! #from wxPython.html import wxHtmlEasyPrinting from PythonCard import dialog, model, util from PythonCard.templates.dialogs import runOptionsDialog *************** *** 48,60 **** from PythonCard.components import button, checkbox, choice, image, imagebutton, list, notebook, spinner, staticbox, statictext, textarea, textfield # temporary hack until we get it working properly under MacOS if wx.Platform == '__WXMAC__': ! from wxPython.wx import wxPySimpleApp, wxFrame, wxMessageDialog, wxICON_EXCLAMATION, wxOK, wxVERSION_STRING ! app = wxPySimpleApp() title = 'Sorry!' ! frame = wxFrame(None, -1, title) message = 'standaloneBuilder currently does not work properly under MacOS. This shortcoming will ' message += 'be fixed in a future release.\n\nClick OK to exit.' ! dialog = wxMessageDialog(frame, wrap_string(message, 52), title, wxICON_EXCLAMATION | wxOK) dialog.ShowModal() dialog.Destroy() --- 50,64 ---- from PythonCard.components import button, checkbox, choice, image, imagebutton, list, notebook, spinner, staticbox, statictext, textarea, textfield + # KEA 2007-07-28 + # updated for wx package organization # temporary hack until we get it working properly under MacOS if wx.Platform == '__WXMAC__': ! from wx import PySimpleApp, Frame, MessageDialog, ICON_EXCLAMATION, OK, VERSION_STRING ! app = PySimpleApp() title = 'Sorry!' ! frame = Frame(None, -1, title) message = 'standaloneBuilder currently does not work properly under MacOS. This shortcoming will ' message += 'be fixed in a future release.\n\nClick OK to exit.' ! dialog = MessageDialog(frame, wrap_string(message, 52), title, ICON_EXCLAMATION | OK) dialog.ShowModal() dialog.Destroy() |
From: Kevin A. <ka...@us...> - 2007-06-27 01:35:02
|
Update of /cvsroot/pythoncard/PythonCard/samples/noresource In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13296 Added Files: autobutton.py Log Message: simple usage example of addmethod --- NEW FILE: autobutton.py --- #!/usr/bin/python """ __version__ = "$Revision: 1.1 $" __date__ = "$Date: 2007/06/27 01:35:02 $" """ from PythonCard import model rsrc = {'application':{'type':'Application', 'name':'Minimal', 'backgrounds': [ {'type':'Background', 'name':'bgMin', 'title':'Minimal PythonCard Application', 'size':(200, 100), 'components': [ ] # end components } # end background ] # end backgrounds } } class Minimal(model.Background): def on_initialize(self, event): self.components['field1'] = {'type':'TextField', 'name':'field1', 'position':(5,5), 'size':(150, -1), 'text':'Hello PythonCard'} self.mouseclick_factory("Button1") self.mouseclick_factory("Button2") def mouseclick_factory(self, name): def function(self, event): # changed to event.target.name to verify we're getting # the correct target when button is clicked print "You clicked '%s'." % event.target.name # func_name seems to be the magic attribute rather than # just setting func.name function.func_name = "on_%s_mouseClick" % name self.addMethod(function) self.components[name] = {'type':'Button', 'name':name, 'label':name, 'position':(5,5+int(name[-1:])*30), 'text':name} return function if __name__ == '__main__': app = model.Application(Minimal, None, rsrc) app.MainLoop() |
From: Kevin A. <ka...@us...> - 2007-06-27 01:33:05
|
Update of /cvsroot/pythoncard/PythonCard/docs/text In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12511 Added Files: addmethod.txt Log Message: added text directory and addmethod doc --- NEW FILE: addmethod.txt --- Updated for PythonCard 0.8.2 and later on 2007-06-26 Subject: [Pythoncard-users] addMethod, dynamic method binding I made an addition to the Scriptable class in model.py so that we can add methods during runtime. It uses 'instanceMethod' from the 'new' module. The following interaction in the shell shows how this can be used. Startup minimal.py with the shell and type the following lines to add a button with a mouseClick handler. >>> def on_btn1_mouseClick(self, event): ... self.components.field1.text = event.target.name ... >>> self.addMethod(on_btn1_mouseClick) >>> comp['btn1'] = {'type':'Button', 'name':'btn1', 'position':(0, 30), 'label':'btn1 hello'} This simplifies creating PythonCard UIs on the fly. The more important reason for making this addition is to bring us closer to runtime editing of scripts. It is critical that you call addMethod prior to creating your component so that the automatic event binding works correctly. |
From: Kevin A. <ka...@us...> - 2007-06-27 01:32:13
|
Update of /cvsroot/pythoncard/PythonCard/docs/text In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12495/text Log Message: Directory /cvsroot/pythoncard/PythonCard/docs/text added to the repository |
From: Kevin A. <ka...@us...> - 2006-12-17 17:19:26
|
Update of /cvsroot/pythoncard/PythonCard/samples/financial In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17768/samples/financial Modified Files: mortgage.py Log Message: fixed missing colon Index: mortgage.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/samples/financial/mortgage.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** mortgage.py 13 Dec 2005 11:13:22 -0000 1.2 --- mortgage.py 17 Dec 2006 17:19:24 -0000 1.3 *************** *** 12,16 **** import pyfi ! class MyBackground(model.Background) def on_initialize(self, event): --- 12,16 ---- import pyfi ! class MyBackground(model.Background): def on_initialize(self, event): |