Commit ef5cd05c authored by Jack Jansen's avatar Jack Jansen

Calling Application._quit() is now preferred over raising self.

parent 4cb94545
...@@ -47,7 +47,7 @@ class PICTbrowse(FrameWork.Application): ...@@ -47,7 +47,7 @@ class PICTbrowse(FrameWork.Application):
self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit) self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit)
def quit(self, *args): def quit(self, *args):
raise self self._quit()
def showPICT(self, resid): def showPICT(self, resid):
w = PICTwindow(self) w = PICTwindow(self)
......
...@@ -51,7 +51,7 @@ class PICTbrowse(FrameWork.Application): ...@@ -51,7 +51,7 @@ class PICTbrowse(FrameWork.Application):
self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit) self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit)
def quit(self, *args): def quit(self, *args):
raise self self._quit()
def showPICT(self, resid): def showPICT(self, resid):
w = PICTwindow(self) w = PICTwindow(self)
......
...@@ -30,11 +30,6 @@ This file contains two classes, <code>MiniApplication</code> and <code>AEServer< ...@@ -30,11 +30,6 @@ This file contains two classes, <code>MiniApplication</code> and <code>AEServer<
MiniApplication is a tiny replacement for <code>FrameWork.Application</code>, MiniApplication is a tiny replacement for <code>FrameWork.Application</code>,
suitable if your application does not need windows and such. suitable if your application does not need windows and such.
<blockquote>Actually, Framework.Application has a problem for AE Servers,
due to the way it expects to be quit through an exception, and raising an exception
while inside an Apple Event handler is a very bad idea. This will be fixed.
</blockquote>
AEServer is a bit of glue that does part of the appleevent decoding for you. You AEServer is a bit of glue that does part of the appleevent decoding for you. You
call <code>installaehandler</code> passing it the class and id (4-char strings) call <code>installaehandler</code> passing it the class and id (4-char strings)
of the event you have a handler for and the handler callback routine. When the of the event you have a handler for and the handler callback routine. When the
...@@ -45,7 +40,7 @@ suites provide. <p> ...@@ -45,7 +40,7 @@ suites provide. <p>
You can test AEServer by double-clicking it. It will react to the standard You can test AEServer by double-clicking it. It will react to the standard
run/open/print/quit OSA commands. If it is running as a normal python script and you run/open/print/quit OSA commands. If it is running as a normal python script and you
drag a file onto the interpreter the script will tell you what event is got. <p> drag a file onto the interpreter the script will tell you what event it got. <p>
<h2>A Minimal CGI script</h2> <h2>A Minimal CGI script</h2>
......
...@@ -85,8 +85,8 @@ Next comes the definition of our main class, ...@@ -85,8 +85,8 @@ Next comes the definition of our main class,
menu bar and the main event loop and event dispatching. In the menu bar and the main event loop and event dispatching. In the
<CODE>__init__</CODE> routine we first let the base class initialize <CODE>__init__</CODE> routine we first let the base class initialize
itself, then we create our modeless dialog and finally we jump into itself, then we create our modeless dialog and finally we jump into
the main loop. The main loop continues until <CODE>self</CODE> is the main loop. The main loop continues until we call <CODE>self._quit</CODE>,
raised, which we will do when the user selects "quit". When we create which we will do when the user selects "quit". When we create
the instance of <CODE>MyDialog</CODE> (which inherits the instance of <CODE>MyDialog</CODE> (which inherits
<CODE>DialogWindow</CODE>, which inherits <CODE>Window</CODE>) we pass <CODE>DialogWindow</CODE>, which inherits <CODE>Window</CODE>) we pass
a reference to the application object, this reference is used to tell a reference to the application object, this reference is used to tell
...@@ -97,8 +97,8 @@ clicks. <p> ...@@ -97,8 +97,8 @@ clicks. <p>
The <CODE>makeusermenus()</CODE> method (which is called sometime The <CODE>makeusermenus()</CODE> method (which is called sometime
during the Application <CODE>__init__</CODE> routine) creates a File during the Application <CODE>__init__</CODE> routine) creates a File
menu with a Quit command (shortcut command-Q), which will callback to menu with a Quit command (shortcut command-Q), which will callback to
our quit() method. <CODE>Quit()</CODE>, in turn, raises 'self' which our quit() method. <CODE>Quit()</CODE>, in turn, calls <CODE>_quit</CODE> which
causes the mainloop to terminate. <p> causes the mainloop to terminate at a convenient time. <p>
Application provides a standard about box, but we override this by Application provides a standard about box, but we override this by
providing our own <CODE>do_about()</CODE> method which shows an about providing our own <CODE>do_about()</CODE> method which shows an about
......
...@@ -51,7 +51,7 @@ class InterslipControl(FrameWork.Application): ...@@ -51,7 +51,7 @@ class InterslipControl(FrameWork.Application):
self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit) self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit)
def quit(self, *args): def quit(self, *args):
raise self self._quit()
def do_about(self, *args): def do_about(self, *args):
f = Dlg.GetNewDialog(ID_ABOUT, -1) f = Dlg.GetNewDialog(ID_ABOUT, -1)
......
...@@ -81,7 +81,7 @@ class imgbrowse(FrameWork.Application): ...@@ -81,7 +81,7 @@ class imgbrowse(FrameWork.Application):
self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit) self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit)
def quit(self, *args): def quit(self, *args):
raise self self._quit()
def opendoc(self, *args): def opendoc(self, *args):
fss, ok = macfs.StandardGetFile() # Any file type fss, ok = macfs.StandardGetFile() # Any file type
......
...@@ -108,8 +108,7 @@ lines. <p> ...@@ -108,8 +108,7 @@ lines. <p>
Oh yes: the <code>quit</code> callback does a little magic too. It closes all windows, and only if this Oh yes: the <code>quit</code> callback does a little magic too. It closes all windows, and only if this
succeeds it actually quits. This gives the user a chance to cancel the operation if some files are unsaved. succeeds it actually quits. This gives the user a chance to cancel the operation if some files are unsaved.
Quitting itself is also a bit strange: you raise <code>self</code> to break out of the main loop. This bit <p>
of idiom was invented by Guido, so blame him:-). <p>
Lastly, there is the <code>idle</code> method, called by the Application base class when no event Lastly, there is the <code>idle</code> method, called by the Application base class when no event
is available. It is forwarded to the active window, so it can blink the text caret. <p> is available. It is forwarded to the active window, so it can blink the text caret. <p>
......
...@@ -295,7 +295,7 @@ class Ped(Application): ...@@ -295,7 +295,7 @@ class Ped(Application):
w.close() w.close()
if self._windows: if self._windows:
return return
raise self self._quit()
# #
# Edit menu # Edit menu
......
...@@ -730,7 +730,7 @@ class Wed(Application): ...@@ -730,7 +730,7 @@ class Wed(Application):
w.close() w.close()
if self._windows: if self._windows:
return return
raise self self._quit()
# #
# Edit menu # Edit menu
......
...@@ -558,7 +558,7 @@ class Wed(Application): ...@@ -558,7 +558,7 @@ class Wed(Application):
w.close() w.close()
if self._windows: if self._windows:
return return
raise self self._quit()
# #
# Edit menu # Edit menu
......
...@@ -368,7 +368,7 @@ class Wed(Application): ...@@ -368,7 +368,7 @@ class Wed(Application):
w.close() w.close()
if self._windows: if self._windows:
return return
raise self self._quit()
# #
# Edit menu # Edit menu
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment