Skip navigation
asharazeem
Currently Being Moderated

Undo Stack

May 17, 2011 6:36 AM

Hi,

 

I have run into a situation where I wouls want to update the text of a span not by copy pasting a textscrap or any other known means ,

instead by directly updating the text property

eg

 

somespan.text="my new text";

 

By doing so I am not able to undo this change

editMgr.undoManager.undo();

does nothing when I undo this.

 

 

Eg:

Initial Span <someSpan>enter your name</somSpan>

 

after setting the text property

someSpan.text="my new text";

 

Now if I try to undo the span back to "enter your name" by editMgr.undoManager.undo();

it doesnt happen so.
Thanks
Ashar
 
Replies
  • Currently Being Moderated
    May 17, 2011 11:42 PM   in reply to asharazeem

    The UndoManager class manages the history of editing operations on a text flow so that these operations can be undone and redone.

    The undo manager maintains two stacks of IOperation objects. When a reversible operation is executed, it is placed on the undo stack. If that operation is undone, it is removed from the undo stack, reversed, and placed on the redo stack. Likewise, if that operation is then redone, it is removed from the redo stack, re-executed, and then placed onto the undo stack again. If another operation is executed first, the redo stack is cleared.

     

    (This paragraph can answer your question)
    If the TextFlow is modified directly (not via calls to the edit manager, but directly via calls to the managed FlowElement objects), then the edit manager clears the undo stack to prevent the stack from getting out of sync with the current state.

     

     

    From code,

            public function undo():void
            {
                // Cancel out of an IME session if there is one.
                // Some IMEs are on all the time, and so the undo has to win over the IME,
                // otherwise you would never be able to undo in Korean.
                if (_imeSession)
                    _imeSession.compositionAbandoned();
               
                if (undoManager)
                    undoManager.undo();
            }


    Your operation can be undone only when you input words through input methods or the undoManager is initialized.

    Since there is no imeSession in your case, you can have a look at when undoManager is not null.

     
    |
    Mark as:
  • Currently Being Moderated
    May 18, 2011 9:30 AM   in reply to Jin-Huang

    If you use InsertTextOperation to moidfy the span then that will be an undoable operation.  You can use BeginCompositeOperation/EndCompositeoperation APIs to group operations.

     

    Richard

     
    |
    Mark as:

More Like This

  • Retrieving data ...

Bookmarked By (0)

Answers + Points = Status

  • 10 points awarded for Correct Answers
  • 5 points awarded for Helpful Answers
  • 10,000+ points
  • 1,001-10,000 points
  • 501-1,000 points
  • 5-500 points