Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.Frontier.tools.windowTypes.commands.close
on close (adr=nil) { <<Close a window. <<Changes: <<09/30/00; 12:51:56 PM by PBS <<Call callbacks. <<11/30/00; 12:09:26 AM by JES <<Dereference callback addresses in a try block in case a tool's odb is not opened <<07/03/01; 12:32:56 AM by JES <<Migrated form pike.commands.close. if adr == nil { //close the frontmost window adr = window.frontmost ()}; if not defined (adr^) { //close the Find & Replace Dialog or the About window window.close (adr); return (true)}; on runCallbacks (adrCallbackTable, adrWindow) { if defined (adrCallbackTable^) { local (flConsumed = false); local (adrScript); for adrScript in adrCallbackTable { try { //11/30/00 JES while typeOf (adrScript^) == addressType { //follow addresses adrScript = adrScript^}; return (adrScript^ (adrWindow))}}}; //address is parameter return (false)}; if runCallbacks (@user.tools.commandCallbacks.close, adr) { return (true)}; if system.environment.isRadio { //legacy support for user.pike.commandCallbacks if defined (user.pike) { if defined (user.pike.commandCallbacks) { if runCallbacks (@user.pike.commandCallbacks.close, adr) { return (true)}}}}; if nameOf (adr^) != "/atts" { //if the windowType defines a close script, do that, and otherwise ask to save local (type, adrType); local (title = window.getTitle (adr), flSaveWindow=false, flCloseWindow=true); if not window.attributes.getOne ("title", @title, adr) { title = window.getTitle (adr)}; if window.attributes.getOne ("type", @type, adr) { if Frontier.tools.windowTypes.findWindowType (type, @adrType, adr) { local (flDirty = Frontier.tools.windowTypes.isWindowDirty (adr)); if not defined (adrType^.save) { //temp windows can't be saved unless the windowType can do it if table.tableContains (@system.temp, adr) { flDirty = false}}; if flDirty { //ask the user if they want to save the window case dialog.yesNoCancel ("Save " + title + " before closing?") { 1 { //yes flSaveWindow = true}; 2 { //no flSaveWindow = false}; 3 { //cancel flSaveWindow = false; flCloseWindow = false}}}; if flSaveWindow { if defined (adrType^.save) { //the windowType knows how to save flCloseWindow = Frontier.tools.windowTypes.commands.save (adr, true)} else { //save the database containing the window fileMenu.saveMyRoot (adr)}}; if flCloseWindow { //close the window, deleting tables in system.temp.windowTypes.windows if defined (adrType^.close) { //the windowType adds to the close behavior -- it has a chance to clean up flCloseWindow = adrType^.close (adr)}; if flCloseWindow { //clean up if we're still supposed to close the window if defined (adr^) { //don't do anything unless the window still exists if table.tableContains (@system.temp.windowTypes, adr) { delete (parentOf (adr^)); return (true)}}}} else { //the user cancelled the ask to save dialog or the save failed, so we do nothing return (false)}}}}; try { //hide database windows -- try because this will error for About or Find if sizeOf (string.parseAddress (window.frontmost ())) == 1 { window.hide (adr); return (true)}}; if defined (adr^) { //close the window if it still exists, run callbacks if flRunCallbacks is true window.close (adr)}; //no fancy logic happened -- just close the window return (true)}; bundle { //debugging close ()}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.