Monday, November 08, 2010 at 12:02 AM.
system.verbs.builtins.bookmarksMenu.add
<<Changes <<11/6/01; 11:33:08 PM by JES <<Bug fix: check to see if system.verbs.builtins.pike.isLocalOutline is defined, instead of system.verbs.builtins.pike. <<06/24/01; 1:33:50 AM by JES <<This is the entry point for the Add Bookmark command in the Bookmarks menu. <<First we call the callbacks at user.callbacks.addBookmark. <<If all of the callbacks return false, meaning that the command was not consumed, then the rest of this code will execute: <<First, we check to see if this is a file-based window. If so, we call bookmarksMenu.getFileLogic to get the script and command's default name. <<Next we check to see if it's an addressible object. If so, we call bookmarksMenu.getLogic to get the script and the command's default name. <<After that, we're out of luck -- we put up an error dialog. <<The Add Bookmark command in the right-click menu is handled by builtins.bookmarksMenu.addNode. local (adrwindow = window.frontmost ()); local (adr = table.getCursorAddress ()); local (logic, title); bundle { // give the user callbacks a chance to handle the command local (nomad); for nomad in @user.callbacks.addBookmark { try { while typeOf (nomad^) == addressType { nomad = nomad^}; if nomad^ (adr, @logic, @title) { return (bookmarksMenu.addBookmark (@logic, @title))}}}}; bundle { //handle windowTypes windows if defined (Frontier.tools.windowTypes) { local (type); if window.attributes.getOne ("type", @type, adrwindow) { //it has a type local (adrtype); if Frontier.tools.windowTypes.findWindowType (type, @adrtype) { if defined (adrtype^.getBookmarkLogic) { if adrtype^.getBookmarkLogic (adrwindow, @logic, @title) { return (bookmarksMenu.addBookmark (@logic, @title))} else { //windowTypes getBookmarkLogic scripts return false if they fail return (false)}}; if table.tableContains (@system.temp.windowTypes, adrwindow) { //can't find type or type has no getBookmarkLogic script dialog.alert ("Can't add a bookmark for this window because temporary windows of type '" + type + "' have no getBookmarkLogic script."); return (false)}}; if table.tableContains (@system.temp.windowTypes, adrwindow) { //can't find type or type has no getBookmarkLogic script dialog.alert ("Can't add a bookmark for this window because there is no windowType, '" + type + "'."); return (false)}}}}; bundle { // handle file-based windows local (f = window.getFile (adr)); local (isFile = (f != "") ); if system.environment.isRadio { if defined (system.verbs.builtins.pike.isLocalOutline) { if pike.isLocalOutline (adr) { local (adrFileInfo = parentOf (adr^)); f = adrFileInfo^.f; isFile = true}}}; if isFile { bookmarksMenu.getFileLogic (adr, f, @logic, @title); return (bookmarksMenu.addBookmark (@logic, @title))}}; bundle { // handle object database objects bookmarksMenu.getLogic (adr, @logic, @title); return (bookmarksMenu.addBookmark (@logic, @title))}
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.