back/forward confined to one stack

Richard Gaskin ambassador at fourthworld.com
Fri Aug 19 16:19:58 EDT 2005


Excellent work, Charles. I've quoted your full post here because your 
script makes good learning material for others who may have the same 
need, well worth a second read.

As much as I appreciate the convenience of "go back", like you I've 
found that I often need more control of what's included in the backList 
and what isn't.  As you've found, maintaining your own history only 
takes a couple dozen lines in all, and gives you complete control over it.

Good job!

--
  Richard Gaskin
  Managing Editor, revJournal
  _______________________________________________________
  Rev tips, tutorials and more: http://www.revJournal.com



Charles Hartman wrote:
> I'm positively childishly pleased to report that my simple  
> implementation of a history-list for a single stack or substack  works. 
> It confines itself to that stack alone (unlike the Rev- internal 
> commands relevant to "recent" -- but thanks to Jacque for  her 
> suggestions that made me learn more about those). Assuming that  each 
> card in the relevant stack has a Back button whose mouseUp  handler just 
> sends the command 'backButton' and a Forward button that  sends 
> 'forwardButton', the handler's in the stack's script that I've  copied 
> below seem to do the trick.
> 
> I don't know if anybody else needs this -- or if, as I'd be glad to  
> hear, there's a better way to do it. It turned out to be a pretty  
> design problem; the crux is what to do when the user navigates to  card 
> *not* using the Back or Forward buttons. In that case I've opted  for 
> deleting everything in the list after the present "Ptr" position.  This 
> has the disadvantage of making some visited cards not accessible  
> through "Back". (Visit Able then Baker then Charlie, then go back to  
> Baker, then visit Delta. Charlie is not in the history path any  more.) 
> Getting around that requires, as far as I can see, adding  every visit 
> to every card (through a button or not) to the list, and  keeping a 
> potentially very complicated tree-based set of pointers to  it. The only 
> complete implementation of *that* kind of history I know  of is the 
> thorough, branch-preserving Undo facility of MOTU's Digital  Performer. 
> Certainly beyond me -- so it's a good thing it's beyond my  needs.
> 
> Charles
> 
> ======== handlers for script of stack to be "historicized"  
> =================
> 
> global gHistList, gHistPtr, gFromButton
> 
> on preOpenStack
>   put empty into gHistList
>   put 0 into gHistPtr
>   put false into gFromButton
> end preOpenStack
> 
> on backButton
>   if gHistPtr > 1 then
>     put true into gFromButton
>     subtract 1 from gHistPtr
>     put line gHistPtr of gHistList into tDest
>     go to tDest
>   end if
> end backButton
> 
> on forwardButton
>   put the number of lines of gHistList into tLast
>   if gHistPtr < tLast then
>     put true into gFromButton
>     add 1 to gHistPtr
>     put line gHistPtr of gHistList into tDest
>     go to tDest
>   end if
> end forwardButton
> 
> on preOpenCard
>   if not gFromButton then
>     repeat with n = the number of lines of gHistList down to  gHistPtr + 1
>       delete line n of gHistList
>     end repeat
>     put the name of this card & return after gHistList
>     add 1 to gHistPtr
>   end if
>   put false into gFromButton
>   if exists(btn "Back") then
>     disable btn "Back"
>     if gHistPtr > 1
>     then enable btn "Back"
>   end if
>   if exists(btn "Forward") then
>     disable btn "Forward"
>     if gHistPtr < the number of lines of gHistList
>     then enable btn "Forward"
>   end if
> end preOpenCard
> 
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your 
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
> 
> 
> 




More information about the use-livecode mailing list