Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.Frontier.tools.windowTypes.commands.revert
on revert (adr = nil) {
<<Revert a window.
<<Changes:
<<03/24/00; 7:24:20 PM by PBS
<<This command was seriously broken -- now it's fixed. It works again for advanced items and stories.
<<Fri, Jul 7, 2000 at 11:00:09 PM by AR
<<Call any scripts in user.pike.commandCallbacks.revert
<<If one of the scripts returns true, we're done
<<07/24/00; 12:37:39 PM by PBS
<<Handle reverting local XML outline documents.
<<10/03/00; 6:39:09 PM by PBS
<<Callbacks can be addresses.
<<11/30/00; 12:17:04 AM by JES
<<Dereference callback addresses in a try block in case a tool's odb is not opened
if adr == nil {
try {
adr = window.frontmost ()}
else {
return (false)}};
on askForConfirmation (s) {
return (dialog.twoWay ("Discard all changes made to " + s + "?", "Discard", "Cancel"))};
on runCallbacks (adrcallbacks) {
if defined (adrcallbacks^) {
local (adrcallback);
for adrcallback in adrcallbacks {
try { //11/30/00 JES
while typeOf (adrcallback^) == addressType { //follow addresses
adrcallback = adrcallback^};
flConsumed = adrcallback^ (adr)};
if flConsumed {
return (true)}}};
return (false)};
if runCallbacks (@user.tools.commandCallbacks.revert) {
return (true)};
if system.environment.isRadio {
if defined (user.pike.commandCallbacks) {
if runCallbacks (@user.pike.commandCallbacks.revert) {
return (true)}}};
bundle { //run the windowType script if it exists
local (type);
if window.attributes.getOne ("type", @type, adr) {
local (adrtype);
if Frontier.tools.windowTypes.findWindowType (type, @adrtype, adr) {
if defined (adrtype^.revert) {
if Frontier.tools.windowTypes.isWindowDirty (adr) {
local (title = window.getTitle (adr));
window.attributes.getOne ("title", @title, adr); //we don't care if this doesn't work
if askForConfirmation (title) {
local (adrNewWindow);
if adrtype^.revert (adr, @adrNewWindow) {
<<lastSaved may already have been set by the windowType, but we do it here too just in case.
window.attributes.setOne ("lastSaved", timeModified (adrNewWindow), adrNewWindow);
return (true)}}}}}}};
return (false);
};
<<bundle //old code for reverting Manila windows
<<if adrItem!= nil
<<local (flConsumed = false)
<<if defined (user.pike.commandCallbacks.revert)
<<local (adrcallback)
<<for adrcallback in @user.pike.commandCallbacks.revert
<<try //11/30/00 JES
<<while typeOf (adrcallback^) == addressType //follow addresses
<<adrcallback = adrcallback^
<<flConsumed = adrcallback^ (adrItem)
<<if flConsumed
<<break
<<if not flConsumed
<<on askForConfirmation (s)
<<return (dialog.twoWay ("Discard all changes made to " + s + "?", "Discard", "Cancel"))
<<
<<bundle //PBS 07/24/00: handle local outlines
<<if pike.isLocalOutline (adrItem)
<<local (adrTable = parentOf (adrItem^))
<<if defined (adrTable^.f)
<<if file.exists (adrTable^.f)
<<local (title = adrTable^.title)
<<if askForConfirmation (title)
<<window.close (adrItem)
<<pike.commands.open (adrTable^.f)
<<fileMenu.save ()
<<return (true)
<<
<<local (windowType = pike.getWindowType (adrItem))
<<if windowType != ""
<<local (adrTable = parentOf (adrItem^))
<<case windowType //can't revert "newStories"
<<"advancedItems"
<<if not askForConfirmation ("the " + adrTable^.iteminfo.type)
<<return (false)
<<local (handlerName = pike.advancedItemToHandlerName (adrTable^.itemInfo.type))
<<local (t = manila.[handlerName].get (@adrTable^.siteInfo))
<<adrTable^.itemInfo.body = string (t.body)
<<pike.commands.editAdvancedItem (adrTable^.siteInfo, adrTable^.itemInfo, false)
<<"savedStories"
<<local (adrStory = @adrTable^.storyinfo)
<<if not askForConfirmation ("\"" + adrStory^.subject + "\"")
<<return (false)
<<adrStory^ = manila.message.get (@adrTable^.siteinfo, adrStory^.msgnum)
<<if defined (adrStory^.bodyType)
<<if string.lower (adrStory^.bodyType) == "text/x-outline-tabbed"
<<adrStory^.body = string (adrStory^.outline)
<<pike.commands.editStory (adrTable^.siteInfo, adrTable^.storyInfo, false)
<<
<<fileMenu.save ()
<<
<<return (true)
bundle { //debugging
revert (window.frontmost ())}
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.