class MiniApplication: """A minimal FrameWork.Application-like class""" def __init__(self): self.quitting = 0 # Initialize menu self.appleid = 1 self.quitid = 2 Menu.ClearMenuBar() self.applemenu = applemenu = Menu.NewMenu(self.appleid, "\024") applemenu.AppendMenu("%s;(-" % self.getaboutmenutext()) if MacOS.runtimemodel == 'ppc': applemenu.AppendResMenu('DRVR') applemenu.InsertMenu(0) self.quitmenu = Menu.NewMenu(self.quitid, "File") self.quitmenu.AppendMenu("Quit") self.quitmenu.SetItemCmd(1, ord("Q")) self.quitmenu.InsertMenu(0) Menu.DrawMenuBar() def __del__(self): self.close() def close(self): pass def mainloop(self, mask=everyEvent, timeout=60 * 60): while not self.quitting: self.dooneevent(mask, timeout) def _quit(self): self.quitting = 1 def dooneevent(self, mask=everyEvent, timeout=60 * 60): got, event = Evt.WaitNextEvent(mask, timeout) if got: self.lowlevelhandler(event) def lowlevelhandler(self, event): what, message, when, where, modifiers = event h, v = where if what == kHighLevelEvent: msg = "High Level Event: %r %r" % (code(message), code(h | (v << 16))) try: AE.AEProcessAppleEvent(event) except AE.Error, err: print 'AE error: ', err print 'in', msg traceback.print_exc() return elif what == keyDown: c = chr(message & charCodeMask) if modifiers & cmdKey: if c == '.': raise KeyboardInterrupt, "Command-period" if c == 'q': if hasattr(MacOS, 'OutputSeen'): MacOS.OutputSeen() self.quitting = 1 return
def lowlevelhandler(self, event): what, message, when, where, modifiers = event h, v = where if what == kHighLevelEvent: msg = 'High Level Event: %r %r' % (code(message), code(h | v << 16)) try: AE.AEProcessAppleEvent(event) except AE.Error as err: print 'AE error: ', err print 'in', msg traceback.print_exc() return if what == keyDown: c = chr(message & charCodeMask) if modifiers & cmdKey: if c == '.': raise KeyboardInterrupt, 'Command-period' if c == 'q': if hasattr(MacOS, 'OutputSeen'): MacOS.OutputSeen() self.quitting = 1 return elif what == mouseDown: partcode, window = Win.FindWindow(where) if partcode == inMenuBar: result = Menu.MenuSelect(where) id = result >> 16 & 65535 item = result & 65535 if id == self.appleid: if item == 1: EasyDialogs.Message(self.getabouttext()) elif item > 1 and hasattr(Menu, 'OpenDeskAcc'): name = self.applemenu.GetMenuItemText(item) Menu.OpenDeskAcc(name) elif id == self.quitid and item == 1: if hasattr(MacOS, 'OutputSeen'): MacOS.OutputSeen() self.quitting = 1 Menu.HiliteMenu(0) return if hasattr(MacOS, 'HandleEvent'): MacOS.HandleEvent(event) else: print 'Unhandled event:', event
def close_callback(self, exitcallback=None): for top in self.tops[:]: top.destroy() if sys.platform == 'mac': import MacOS MacOS.OutputSeen() if exitcallback: rtn, arg = exitcallback apply(rtn, arg) else: raise SystemExit, 0
def do_exit(self, exitcallback=None): # XXXX This is pretty expensive (and useless) if AttrEdit hasn't been used... import AttrEdit AttrEdit.closepreferenceattreditor() ok = 1 for top in self.tops[:]: top.close() if self.tops: return if sys.platform == 'mac': import MacOS MacOS.OutputSeen() if exitcallback: rtn, arg = exitcallback apply(rtn, arg) else: raise SystemExit, 0
"""MiniAEFrame - A minimal AppleEvent Application framework.
def do_menu(self, id, item, window, event): if hasattr(MacOS, 'OutputSeen'): MacOS.OutputSeen() self.menubar.dispatch(id, item, window, event)
return elif what == mouseDown: partcode, window = Win.FindWindow(where) if partcode == inMenuBar: result = Menu.MenuSelect(where) id = (result >> 16) & 0xffff # Hi word item = result & 0xffff # Lo word if id == self.appleid: if item == 1: EasyDialogs.Message(self.getabouttext()) elif item > 1 and hasattr(Menu, 'OpenDeskAcc'): name = self.applemenu.GetMenuItemText(item) Menu.OpenDeskAcc(name) elif id == self.quitid and item == 1: if hasattr(MacOS, 'OutputSeen'): MacOS.OutputSeen() self.quitting = 1 Menu.HiliteMenu(0) return # Anything not handled is passed to Python/SIOUX if hasattr(MacOS, 'HandleEvent'): MacOS.HandleEvent(event) else: print "Unhandled event:", event def getabouttext(self): return self.__class__.__name__ def getaboutmenutext(self): return "About %s\311" % self.__class__.__name__
"A sort of application framework for the Mac"