Move OSD of Undo/Redo to bottom of workspace

A lot of the time when I am trying to compare one particular edit that I've made, say, increase Vibrance +30, I switch back and forth using Undo/Redo to view the Before/After (using the '\' key to see 'Before' vs 'After' doesn't work if you've already made multiple edits, obviously).
Now, I like how LR shows 'Undo Vibrance + 30' in big bold letters across the screen, BUT, could you please move it *away* from smack dab right in the center on top of my image?
If you moved the On-Screen-Display of 'Undo/Redo' actions to near the bottom of the LR workspace, it wouldn't interfere with my viewing of what's happening to the image.
Seems simple + logical enough.
Thanks,
Rishi

I approach it differently :
When (or if) I get an image to a point where I want to compare small changes I make a virtual copy and then adjust the VC, then using the '\' key to see 'Before' vs 'After' does work.
Not a work around - a different way of working.
Sid
The LightroomExtra home page is right here.

Similar Messages

  • Undo/redo animation

    I'm begging you guys to move the giant "undo/redo" message that appears in the center of the screen someplace less conspicuous. Also I'd like the undo/redo of the last step to be buffered for fast toggling (like show before image). The way it is now is very distracting.

    I get confused every time I try to use Undo/Redo but I'll try to remember what I've done in the past.
    textPane.getDocument().addUndoAbleEditListener(new MyUndoAbleEditListener()); The above is used to to accumulate the edits for undo/redo. The UndoManager is responsible for undo/redo of the actual edit, so in your case you would also have 3 UndoManagers. Presumably you have a toolbar button or menuItem to invoke the undo/redo. When you click on the button, you must make sure you are using the correct UndoManager to undo/redo the edit.
    When I was playing around trying to learn Swing I created a [url http://www.discoverteenergy.com/files/Editor.zip]Simple Editor that handles this. In my EditPanel class I created a UndoManager class for each textPane. This class also contains undo/redo buttons and menuItems for this UndoManager. Whenever I switch tabs to work with a new textpane, I also switch the undo/redo buttons and menuItems so that the buttons displayed are for the UndoManager of the current textpane. This code is done by the updateToolbarAndMenubar() method of the Editor class.

  • View in expert mode shows following on the bottom PHOTO BIN, TOOL OPTIONS, UNDO, REDO, ROTATE, LAYOUT ORGANIZER how do i remove this?

    Adobe Photoshop Elements 11. When in EXPERT MODE i get the following  on the bottom PHOTO BIN, TOOL OPTIONS, UNDO, REDO, ROTATE, LAYOUT ORGANIZER how do i remove this?

    Sorry, but you don't. That's part of the way adobe changed PSE starting with PSE 11. If you don't like it, you can leave feedback here:
    Photoshop Family Customer Community

  • Undo/Redo

    Hi..
    How to implement undo/redo functionality?
    Actually I have a painting canvas in flash in AS3.0.
    For it I need UNDO/REDO functionality as user draws.
    Any Clue.
    Thanks.

    For something like painting you will need to store the mouse movements and such into an array, then you can use that array as your undo/redo stack. When you undo - you can stick that item onto the redo array... something like that. Shouldn't be too hard to implement.

  • Setting Undo/Redo menu text

    When artwork is changed, the text for the Undo menu will be something like "Undo Move" or "Undo Color".  The AIUndo suite has a SetUndoText function that "Specifies the localizable text for Undo and Redo menu items".  However, when I use this function for my plugin, the text doesn't come out the way I would think.  When I pass in "Create" for the undo text, the menu will show up as "CreateUndo".  Ok, I can fix the spacing issue...  But it seems I should be able to set the entire string, not just half of it.  Or at least, the text I pass in should show up after 'Undo', not before it, to make it look like a normal Undo action.
    Am I missing something, or does this just not work correctly?

    It's not pretty, but here's the dump:
    #ifdef WIN_ENV
    #define CAPITAL_A_ANGSTROM        "\xC5"
    #define SMALL_A_ANGSTROM        "\xE5"
    #define A_ACCENT_UMLAUT            "\xE4"
    #define E_ACCENT_AIGU            "\xE9"
    #define O_ACCENT_AIGU            "\xF3"
    #define O_ACCENT_UMLAUT            "\xF6"
    #define U_ACCENT_UMLAUT            "\xFC"
    #define NORWEIGIAN_O            "\xF8"
    #define SMALL_LATIN_LIGATURE    "\xE6"
    #define GERMAN_BETA                "\xDF"
    #else
    #define CAPITAL_A_ANGSTROM        "\x81"
    #define SMALL_A_ANGSTROM        "\x8c"
    #define A_ACCENT_UMLAUT            "\x8A"
    #define E_ACCENT_AIGU            "\x8E"
    #define O_ACCENT_AIGU            "\x97"
    #define O_ACCENT_UMLAUT            "\x9A"
    #define U_ACCENT_UMLAUT            "\x9F"
    #define NORWEIGIAN_O            "\xBF"
    #define SMALL_LATIN_LIGATURE    "\xBE"
    #define GERMAN_BETA                "\xA7"
    #endif
    const char* UNDO_TEXT_TYPE_LOOKUP_TABLE[11][2] = {
            // English
            { "Undo", "Redo" },
            // Danish
            { "Fortryd", "Gentag" },
            // French
            { "Annuler", "R" E_ACCENT_AIGU "tablir" },
            // German
            { "R" U_ACCENT_UMLAUT "ckg" A_ACCENT_UMLAUT "ngig:", "Wiederherstellen:" },
            // Spanish
            { "Deshacer", "Rehacer" },
            // Finnish
            { "Peru", "Tee sittenkin" },
            // Italian
            { "Annulla", "Ripristina" },
            // Dutch
            { "Ongedaan maken", "Opnieuw" },
            // Norwegian
            { "Angre", "Gj" NORWEIGIAN_O "r om " },
            // Brazilian Portuguese
            { "Desfazer", "Refazer" },
            // Swedish
            { CAPITAL_A_ANGSTROM "ngra", "G" O_ACCENT_UMLAUT "r om" }

  • Undo/Redo help please...

    I want to include undo/redo capabilities in my app. All the examples and code that I've seen deals with text. Can undo/redo handle undoing the move of an object(from one side of screen to the other), undoing the adding of a label or panel to a frame, etc..? If so could someone point me in the right direction or post some sample code.
    thanks...

    how do i redraw the contents of a panel again. I don't know about the internals of your program. I just described a general approach to undo levels.
    If you're adding labels to a panel, then you're trying to undo the GUI itself? What, are you trying to make some kind of rapid prototyping tool for java GUIs? If so, the problem I see here is that you may have to re-compile and re-run the app being designed every time you make a change.
    Or is "label" relevant only to your app with nothing to do with java labels?
    this panel is inside an internalframe ...
    redraw only that panel without redrawing other parts of the window. AWT handles this fine. Swing probably does as well though I don't know.
    but if i move the cursor to the controls in the applet whole
    labels which i moved in the panel comes to their
    original position. how do i fix this.This depends on how you implemented it. There's no way someone reading this forum can see what your problem is from this description and give you a repair. Maybe someone who has worked on similar projects can hazard a reasonable guess.

  • How much undo/Redo will be generate ?

    Dear Experts,
    (Oracle 10gR2,Windows 2003 Server)
    We are going to shink some segments(Recommended by Segment Advisor) with total allocated size around 500G (say 5 segments there ). As shrink space need huge amount of undo/redo space, could you please suggest me how to estimate undo/redo and/or temporary space requirement for this operation( Locally managed, ASSM).
    Thanks&Regards
    Sunil Kumar
    Edited by: sunil kumar on 04-Apr-2011 02:24

    sunil kumar wrote:
    We are going to shink some segments(Recommended by Segment Advisor) with total allocated size around 500G (say 5 segments there ). As shrink space need huge amount of undo/redo space, could you please suggest me how to estimate undo/redo and/or temporary space requirement for this operation( Locally managed, ASSM).
    Interesting question - and Aman has pointed you to a generic note I wrote about undo/redo space.
    Off the top of my head I think I'd look at it like this:
    Size of used space BEFORE shrink - predicted size of used space AFTER shrink = total size of rows moved
    total size of rows move / average row length = total number of rows moved.
    Then apply the comments in the note for each row, remembering that a "move" of a row is a delete/insert, and don't forget to allow for the indexes on the row. An remember that since the object is very large the cost of random reads of INDEX blocks may be the most signficant performance problem.
    Regards
    Jonathan Lewis

  • Undo/redo amount

    Hello all,
    For the life of me, I cant figure out where to set the undo/redo amount. I had thought it was under Edit > Preferences > Units & Undo, but when I go to Edit, then Preferences, I do not see the undo options.
    I had to reinstall CS2 on my computer, but I had thought there was a way you could set the amount of undo's you're allowed.
    Win / CS2
    Sometimes I'd loose my head if it weren't attached.
    Thanks in advance.

    Don't recall what 10 was/is, but I believe CS1's limit was 200. I do not recall if that was or could be user defined. I just remember seeing the number of undos available at the bottom left near the taskbar would stop increasing once I hit 200.
    Haven't bothered with it in CS3 and while I had CS2 on my previous system before the MB fried, I never looked into that.
    So is the number of undos available dependent on memory in CS4, too?

  • New to undo/redo on component

    hello all,
    i'm new to swing programming & i have to develop a web enabled application. in that i'm having an internalframe which contains a panel with some labels in it. i'm able to move the labels around the panel by using mouse listener. but my problem is i have to implement undo/redo functionality on this movement. but i don't know how to proceed since i don't have a single idea abt this api. i got some materials related to undo/redo of textual components. but nothing related to this labels or components like that. can someone help me on this topic or guide me to some links which has details. if u can provide me some code samples i'll be really greateful.
    Thanks in advance

    The Java Tutorial provides a section on how to implement the java.swing.undo package.
    http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#undo
    The TextComponentDemo example code it references uses a text Document to generate the UndoableEditListener events, but any component document or data model can be coded to do the same thing, such as the data model for your label placement panel. The listeners are usually added by a controlling parent class, such as a JFrame.
    * Create an addUndoableEditListener(UndoableEditListener listener) method in your model class.
    * Whenever an undoable edit is done in your model class, create an UndoableEditEvent object with the undoable edit data and call the undoableEditHappened(UndoableEditEvent e) method for all of your registered listeners.
    * Create an UndoManager object in your controlling parent class.
    * Create UndoAction and RedoAction subclassed objects in your controlling parent class.
    * Create an UndoableEditListener object in your controlling parent class and add it to your model class.
    The listeners will handle adding the UndoableEditEvent object to the UndoManager and updating any menu or toolbar Undo/Redo actions. The Undo/Redo actions will handle performing the commands via the UndoManager and updating the state of the Undo/Redo actions.
    I hope you find this of some help.

  • To many undo redo button

    Hi to everyone!!!
    I need your advice for my problem!!
    when I cliked new in the file to create a new JTextPane the undo redo button will multiply and if I have so many JTextPane then I have many undo redo in my toolbar
    here is my code.
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.text.*;
    import java.util.*;
    import javax.swing.undo.*;
    public class URTest extends JFrame {
         JToolBar toolBar = new JToolBar();
         JButton undo;
         JButton redo = new JButton("Redo");
         JMenuBar menuBar = new JMenuBar();
         JMenu menu = new JMenu("File");
         JMenuItem item = new JMenuItem("New");
         JMenuItem item2 = new JMenuItem("Close");
         JTabbedPane tabbedPane = new JTabbedPane();
         JTextPane pane;
         public URTest() {
              item.addActionListener(new ActionListener() {
                   public void actionPerformed(ActionEvent e) {
                        create();
              item2.addActionListener(new ActionListener() {
                   public void actionPerformed(ActionEvent e) {
                        removeCreate();
              menu.add(item);
              menu.add(item2);
              menuBar.add(menu);
              this.add(toolBar,BorderLayout.NORTH);
              this.add(tabbedPane);
              this.setJMenuBar(menuBar);
         void create() {
              undo = new JButton("Undo");
              redo = new JButton("Redo");
              pane = new JTextPane();
              EditorKit editorKit = new StyledEditorKit() {
                   public Document createDefaultDocument() {
                        return new SyntaxDocument();
              pane.setEditorKit(editorKit);
              final CompoundUndoManager undoManager = new CompoundUndoManager( pane );
              undo.addActionListener( new ActionListener()
                   public void actionPerformed(ActionEvent e)
                        try
                             undoManager.undo();
                             pane.requestFocus();
                        catch (CannotUndoException ex)
                             System.out.println("Unable to undo: " + ex);
              redo.addActionListener( new ActionListener()
                   public void actionPerformed(ActionEvent e)
                        try
                             undoManager.redo();
                             pane.requestFocus();
                        catch (CannotRedoException ex)
                             System.out.println("Unable to redo: " + ex);
              toolBar.add(undo);
              toolBar.add(redo);
              tabbedPane.addTab("Tab",pane);
         void removeCreate() {
              tabbedPane.remove(tabbedPane.getSelectedIndex());
         public static void main(String[] args) {
              URTest frame = new URTest();
              frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
              frame.setSize(400,400);
              frame.setVisible(true);
    class CompoundUndoManager extends UndoManager
         implements UndoableEditListener, DocumentListener
         public CompoundEdit compoundEdit;
         private JTextComponent editor;
         //  These fields are used to help determine whether the edit is an
         //  incremental edit. For each character added the offset and length
         //  should increase by 1 or decrease by 1 for each character removed.
         private int lastOffset;
         private int lastLength;
         public CompoundUndoManager(JTextComponent editor)
              this.editor = editor;
              editor.getDocument().addUndoableEditListener( this );
         **  Add a DocumentLister before the undo is done so we can position
         **  the Caret correctly as each edit is undone.
         public void undo()
              editor.getDocument().addDocumentListener( this );
              super.undo();
              editor.getDocument().removeDocumentListener( this );
         **  Add a DocumentLister before the redo is done so we can position
         **  the Caret correctly as each edit is redone.
         public void redo()
              editor.getDocument().addDocumentListener( this );
              super.redo();
              editor.getDocument().removeDocumentListener( this );
         **  Whenever an UndoableEdit happens the edit will either be absorbed
         **  by the current compound edit or a new compound edit will be started
         public void undoableEditHappened(UndoableEditEvent e)
              //  Start a new compound edit
              if (compoundEdit == null)
                   compoundEdit = startCompoundEdit( e.getEdit() );
                   lastLength = editor.getDocument().getLength();
                   return;
              //  Check for an attribute change
              AbstractDocument.DefaultDocumentEvent event =
                   (AbstractDocument.DefaultDocumentEvent)e.getEdit();
              if  (event.getType().equals(DocumentEvent.EventType.CHANGE))
                   compoundEdit.addEdit( e.getEdit() );
                   return;
              //  Check for an incremental edit or backspace.
              //  The change in Caret position and Document length should be either
              //  1 or -1 .
              int offsetChange = editor.getCaretPosition() - lastOffset;
              int lengthChange = editor.getDocument().getLength() - lastLength;
              if (Math.abs(offsetChange) == 1
              &&  Math.abs(lengthChange) == 1)
                   compoundEdit.addEdit( e.getEdit() );
                   lastOffset = editor.getCaretPosition();
                   lastLength = editor.getDocument().getLength();
                   return;
              //  Not incremental edit, end previous edit and start a new one
              compoundEdit.end();
              compoundEdit = startCompoundEdit( e.getEdit() );
         **  Each CompoundEdit will store a group of related incremental edits
         **  (ie. each character typed or backspaced is an incremental edit)
         private CompoundEdit startCompoundEdit(UndoableEdit anEdit)
              //  Track Caret and Document information of this compound edit
              lastOffset = editor.getCaretPosition();
              lastLength = editor.getDocument().getLength();
              //  The compound edit is used to store incremental edits
              compoundEdit = new MyCompoundEdit();
              compoundEdit.addEdit( anEdit );
              //  The compound edit is added to the UndoManager. All incremental
              //  edits stored in the compound edit will be undone/redone at once
              addEdit( compoundEdit );
              return compoundEdit;
         //  Implement DocumentListener
         //      Updates to the Document as a result of Undo/Redo will cause the
         //  Caret to be repositioned
         public void insertUpdate(final DocumentEvent e)
              SwingUtilities.invokeLater(new Runnable()
                   public void run()
                        int offset = e.getOffset() + e.getLength();
                        offset = Math.min(offset, editor.getDocument().getLength());
                        editor.setCaretPosition( offset );
         public void removeUpdate(DocumentEvent e)
              editor.setCaretPosition(e.getOffset());
         public void changedUpdate(DocumentEvent e)      {}
         class MyCompoundEdit extends CompoundEdit
              public boolean isInProgress()
                   //  in order for the canUndo() and canRedo() methods to work
                   //  assume that the compound edit is never in progress
                   return false;
              public void undo() throws CannotUndoException
                   //  End the edit so future edits don't get absorbed by this edit
                   if (compoundEdit != null)
                        compoundEdit.end();
                   super.undo();
                   //  Always start a new compound edit after an undo
                   compoundEdit = null;

    I was not actually sure what you wanted so I made the wild guess that you actually wanted only one pair of Undo/Redo buttons. Here you go :import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import java.util.List;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.text.*;
    import javax.swing.undo.*;
    public class URTest extends JPanel {
         private JMenuBar theMenuBar;
         private JTabbedPane theTabbedPane;
         private List<Pane> thePanes;
         private static class Pane {
              private JTextPane theTextPane;
              private CompoundUndoManager theUndoManager;
              private class CompoundUndoManager extends UndoManager implements UndoableEditListener, DocumentListener {
                   public CompoundEdit compoundEdit;
                   private int lastOffset;
                   private int lastLength;
                   public CompoundUndoManager() {
                        compoundEdit = null;
                   public void undo() {
                        theTextPane.getDocument().addDocumentListener(this);
                        super.undo();
                        theTextPane.getDocument().removeDocumentListener(this);
                   public void redo() {
                        theTextPane.getDocument().addDocumentListener(this);
                        super.redo();
                        theTextPane.getDocument().removeDocumentListener(this);
                   public void undoableEditHappened(UndoableEditEvent e) {
                        if (compoundEdit == null) {
                             compoundEdit = startCompoundEdit(e.getEdit());
                             lastLength = theTextPane.getDocument().getLength();
                             return;
                        AbstractDocument.DefaultDocumentEvent event = (AbstractDocument.DefaultDocumentEvent)e.getEdit();
                        if (event.getType().equals(DocumentEvent.EventType.CHANGE)) {
                             compoundEdit.addEdit(e.getEdit());
                             return;
                        int offsetChange = theTextPane.getCaretPosition() - lastOffset;
                        int lengthChange = theTextPane.getDocument().getLength() - lastLength;
                        if (Math.abs(offsetChange) == 1
                             && Math.abs(lengthChange) == 1) {
                             compoundEdit.addEdit(e.getEdit());
                             lastOffset = theTextPane.getCaretPosition();
                             lastLength = theTextPane.getDocument().getLength();
                             return;
                        compoundEdit.end();
                        compoundEdit = startCompoundEdit(e.getEdit());
                   private CompoundEdit startCompoundEdit(UndoableEdit anEdit) {
                        lastOffset = theTextPane.getCaretPosition();
                        lastLength = theTextPane.getDocument().getLength();
                        compoundEdit = new MyCompoundEdit();
                        compoundEdit.addEdit(anEdit);
                        addEdit(compoundEdit);
                        return compoundEdit;
                   public void insertUpdate(final DocumentEvent e) {
                        SwingUtilities.invokeLater(new Runnable() {
                             public void run() {
                                  int offset = e.getOffset() + e.getLength();
                                  offset = Math.min(offset, theTextPane.getDocument().getLength());
                                  theTextPane.setCaretPosition(offset);
                   public void removeUpdate(DocumentEvent e) {
                        theTextPane.setCaretPosition(e.getOffset());
                   public void changedUpdate(DocumentEvent e) {}
                   class MyCompoundEdit extends CompoundEdit {
                        public boolean isInProgress() {
                             return false;
                        public void undo() throws CannotUndoException {
                             if (compoundEdit != null) compoundEdit.end();
                             super.undo();
                             compoundEdit = null;
              public Pane() {
                   theTextPane = new JTextPane();
                   theTextPane.setEditorKit(new StyledEditorKit() {
                        public Document createDefaultDocument() {
                             return new SyntaxDocument();
                   theUndoManager = new CompoundUndoManager();
                   theTextPane.getDocument().addUndoableEditListener(theUndoManager);
              public JTextPane getTextPane() {
                   return theTextPane;
              public UndoManager getUndoManager() {
                   return theUndoManager;
         public URTest() {
              super(new BorderLayout(5, 5));
              setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
              JToolBar toolBar = new JToolBar();
              toolBar.setFloatable(false);
              toolBar.add(new AbstractAction("Undo") {
                   public void actionPerformed(ActionEvent e) {
                        undo();
              toolBar.add(new AbstractAction("Redo") {
                   public void actionPerformed(ActionEvent e) {
                        redo();
              add(toolBar, BorderLayout.NORTH);
              thePanes = new LinkedList<Pane>();
              theTabbedPane = new JTabbedPane();
              add(theTabbedPane, BorderLayout.CENTER);
              theMenuBar = new JMenuBar();
              JMenu menu = new JMenu("File");
              menu.add(new AbstractAction("New") {
                   public void actionPerformed(ActionEvent e) {
                        create();
              menu.add(new AbstractAction("Close") {
                   public void actionPerformed(ActionEvent e) {
                        remove();
              theMenuBar.add(menu);
         public JMenuBar getMenuBar() {
              return theMenuBar;
         private void create() {
              Pane pane = new Pane();
              thePanes.add(pane);
              theTabbedPane.addTab("Tab", pane.getTextPane());
         private void remove() {
              Pane selectedPane = getSelectedPane();
              if (selectedPane == null) return;
              thePanes.remove(selectedPane);
              theTabbedPane.remove(selectedPane.getTextPane());
         private void undo() {
              Pane selectedPane = getSelectedPane();
              if (selectedPane == null) return;
              try {
                   selectedPane.getUndoManager().undo();
                   selectedPane.getTextPane().requestFocus();
              } catch (CannotUndoException ex) {
                   System.out.println("Unable to undo: " + ex);
         private void redo() {
              Pane selectedPane = getSelectedPane();
              if (selectedPane == null) return;
              try {
                   selectedPane.getUndoManager().redo();
                   selectedPane.getTextPane().requestFocus();
              } catch (CannotRedoException ex) {
                   System.out.println("Unable to redo: " + ex);
         private Pane getSelectedPane() {
              Component selectedComponent = theTabbedPane.getSelectedComponent();
              if (selectedComponent == null) return null;
              for (Pane pane : thePanes) {
                   if (pane.getTextPane() == selectedComponent) return pane;
              return null;
         private static void test() {
              JFrame f = new JFrame("URTest");
              f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              URTest urTest = new URTest();
              f.setContentPane(urTest);
              f.setJMenuBar(urTest.getMenuBar());
              f.setSize(400, 400);
              f.setLocationRelativeTo(null);
              f.setVisible(true);
         public static void main(String[] args) {
              SwingUtilities.invokeLater(new Runnable() {
                   public void run() {
                        test();
    }Hope it helps.

  • Undo/Redo button are not performing more than one operation at a time

    Hi,
    I have created undo/redo button on my paint application. But it performing only last action to undo.I have just the code which store offscreen image into undo buffer image like this :
        if (OSC == null || widthOfOSC != getSize().width || heightOfOSC != getSize().height) {
                     // Create the OSC, or make a new one if canvas size has changed.
                 OSC = null;  // (If OSC & undoBuffer already exist, this frees up the memory.)
                 undoBuffer = null;
                 OSC = createImage(getSize().width, getSize().height);
                 widthOfOSC = getSize().width;
                 heightOfOSC = getSize().height;
                 OSG = OSC.getGraphics();  // Graphics context for drawing to OSC.
                 OSG.setColor(getBackground());              
                 OSG.dispose();
                 undoBuffer = createImage(widthOfOSC, heightOfOSC);
                  OSG = undoBuffer.getGraphics();  // Graphics context for drawing to the undoBuffer.
                  OSG.setColor(getBackground());            
                  OSG.fillRect(0, 0,widthOfOSC, heightOfOSC);
                   and the button performed it's action :
    else if (command.equals("Undo")) {
                 // Swap the off-screen canvas with the undoBuffer and repaint.
                 Image temp = OSC;
                 OSC = undoBuffer;
                 undoBuffer = temp;
                 repaint();I want to create undo button that performed end operation on canvas.
    please help me
    Thanks in advance....

    Don't post the same question repeatedly. I've removed the thread you started 4 days after this one with the identical same question.
    db

  • Undo,redo not working properly with JPopupMenu

    if i use JButton for undo ,redo it is working fine. but the same code is not
    working properly if i add it in JPopupMenu.
    what could be the problem.
    thanks

    what could be the problem.Your code is different or written incorrectly and since you didn't post any we can't help.
    [url http://java.sun.com/docs/books/tutorial/uiswing/misc/action.html]How to Use Actions
    If you need further help then you need to create a [url http://homepage1.nifty.com/algafield/sscce.html]Short, Self Contained, Compilable and Executable, Example Program that demonstrates the incorrect behaviour, because I can't guess exactly what you are doing based on the information provided.
    And don't forget to use the [url http://forum.java.sun.com/help.jspa?sec=formatting]Code Formatting Tags so the code retains its original formatting.

  • Lazy Notification and Command Undo/Redo

    I have a two-part CS3 plug-in (model and UI).<br /><br />When I click on one of the checkboxes in the UI, it causes a command to be executed that highlights certain fields in the document and sets a persistent boolean indicating the state of the higlighting.<br /><br />I want to be able to uncheck the checkbox when an Edit > Undo is done using lazy notification, but I've been working on this for a few days now and I can't get it to work.<br /><br />I've made the following changes to the model plug-in code:<br /><br />1. In the .fr file, I added this:<br />AddIn<br />{<br />     kDocWorkspaceBoss,<br />     kInvalidClass,<br />     {<br />          // Interface to the persistent prefs implementation<br />          IID_IVIPREFERENCES, kVIPrefsImpl,<br />               <br />          // Interface to the Toggle Highlighting command<br />          IID_IVIHIGHLIGHTCHANGE, kVISetHighlightDisplayedCmdImpl,<br />     }<br />},<br /><br />2. In the command's DoNotify method, I do a ModelChange call with an 'interestedIn' parameter of IID_IVIHIGHLIGHTCHANGE. I've tried invoking this method on various subjects, e.g., document subject, document workspace subject, document preferences subject (i.e., getting my persistent interface on the workspace and then getting an ISubject interface on it), all to no apparent avail.<br /><br />I've made the following changes to the UI plug-in code:<br /><br />1. In the .fr file, I added this:<br /><br />AddIn<br />{<br />     kDocWorkspaceBoss,<br />     kInvalidClass,<br />     {<br />          // Interface to the preference change observer<br />          IID_IPREFSOBSERVER, kVIPUIPrefsObserverImpl,<br />     }<br />},<br /><br />2. In the preference change observer's AutoAttach method, I do the following (with error checking removed here for clarity). I've tried various subjects besides the document workspace subject here as well...<br /><br />InterfacePtr<IActiveContext><br />    ac(gSession->GetActiveContext(), UseDefaultIID());<br />IDocument *doc = ac->GetContextDocument();<br />InterfacePtr<ISubject> subject(doc->GetDocWorkSpace(), UseDefaultIID());<br /><br />if (!subject->IsAttached(ISubject::kLazyAttachment, this,<br />    IID_IVIHIGHLIGHTCHANGE, IID_IPREFSOBSERVER)<br />) {<br />    subject->AttachObserver(ISubject::kLazyAttachment, this,<br />        IID_IVIHIGHLIGHTCHANGE, IID_IPREFSOBSERVER);<br />}<br /><br />I've implemented a LazyUpdate method in the preference change observer, but it never gets called -- not when the checkbox is checked, and not when an Undo or Redo is done. I've verified that the observer's AutoAttach method is getting called, and that the ModelChange method inside the command's DoNotify method is being called.<br /><br />Has anyone gotten lazy notification on command undo/redo to work? If so, can you tell me what I might be doing wrong?

    Don't post the same question repeatedly. I've removed the thread you started 4 days after this one with the identical same question.
    db

  • I just loaded the 'lion' now my mail takes a new life....how do i move the reading panel to the bottom / also how do i get rid of the text/content under each mail..two simple things not sure obvious on this version !!!

    i just loaded the 'lion' now my mail takes a new life....how do i move the reading panel to the bottom / also how do i get rid of the text/content under each mail..two simple things not sure obvious on this version !!!

             

  • Keybindings for undo/redo buttons.

    I thought I knew how to do this, and I do seem to have this working fine for cut/copy/paste/select all keybindings CTRL X/C/V/A respectively.
    However I tried to do this for CTRL X and Y undo/redo and it's not working as I intended. Can anyone see what I'm doing wrong?
    I created a SSCCE based off the original example I was following from: [http://www.java2s.com/Code/Java/Swing-JFC/Undoredotextarea.htm]
    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.KeyStroke;
    import javax.swing.event.UndoableEditEvent;
    import javax.swing.event.UndoableEditListener;
    import javax.swing.undo.CannotRedoException;
    import javax.swing.undo.UndoManager;
    public class UndoRedoTextArea extends JFrame implements KeyListener{
        private static final long serialVersionUID = 1L;
        protected JTextArea textArea = new JTextArea();
        protected UndoManager undoManager = new UndoManager();
        protected JButton undoButton = new JButton("Undo");
        protected JButton redoButton = new JButton("Redo");
        public UndoRedoTextArea() {
            super("Undo/Redo Demo");
            undoButton.setEnabled(false);
            redoButton.setEnabled(false);
            JPanel buttonPanel = new JPanel(new GridLayout());
            buttonPanel.add(undoButton);
            buttonPanel.add(redoButton);
            JScrollPane scroller = new JScrollPane(textArea);
            getContentPane().add(buttonPanel, BorderLayout.NORTH);
            getContentPane().add(scroller, BorderLayout.CENTER);
            textArea.getDocument().addUndoableEditListener(
                new UndoableEditListener() {
                    public void undoableEditHappened(UndoableEditEvent e) {
                        undoManager.addEdit(e.getEdit());
                        updateButtons();
            undoButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try {
                        undoManager.undo();
                    } catch (CannotRedoException cre) {
                        cre.printStackTrace();
                    updateButtons();
            undoButton.addKeyListener(this);
            redoButton.addKeyListener(this);
            redoButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try {
                        undoManager.redo();
                    } catch (CannotRedoException cre)  {
                        cre.printStackTrace();
                    updateButtons();
            setSize(400, 300);
            setVisible(true);
        public void updateButtons() {
            undoButton.setText(undoManager.getUndoPresentationName());
            redoButton.setText(undoManager.getRedoPresentationName());
            undoButton.setEnabled(undoManager.canUndo());
            redoButton.setEnabled(undoManager.canRedo());
        public static void main(String argv[]) {
            new UndoRedoTextArea();
        public void keyPressed(KeyEvent e){
            if (e.equals(KeyStroke.getKeyStroke
                (KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK))){
                // undo
                try {
                    undoManager.undo();
                } catch (CannotRedoException cre)  {
                    cre.printStackTrace();
                updateButtons();
            else if (e.equals(KeyStroke.getKeyStroke
                    (KeyEvent.VK_Y, InputEvent.CTRL_DOWN_MASK))){
                // redo
                try  {
                    undoManager.redo();
                } catch (CannotRedoException cre) {
                    cre.printStackTrace();
                updateButtons();
        public void keyTyped(KeyEvent e){}
        public void keyReleased(KeyEvent e){}
    }Edited by: G-Unit on Oct 24, 2010 5:30 AM

    camickr wrote:
    So the way I posted in the second lump of code OK (3rd post) or did you mean something different? Why did you set the key bindings? Did I not state they would be created automatically? I think you need to reread my suggestion (and the tutorial).Because I don't get it, it says only Menu items can contain accelerators and buttons only get mnemonics. I'm not using menu items here, I only have a text pane and 2 buttons. So I set the actions for the InputMap in TextPane. For the buttons, I pretty much used the small bit of code using undoManager.
    I tried to set KEYSTROKE constructor for the action and simply add them to the buttons that way, but this didn't seem to have any response.
    Also I don't get how this could happen anyway if the TextPane has the focus.
    Not like the example using MNEMONICS.
        Action leftAction = new LeftAction(); //LeftAction code is shown later
        button = new JButton(leftAction)
        menuItem = new JMenuItem(leftAction);
    To create an Action object, you generally create a subclass of AbstractAction and then instantiate it. In your subclass, you must implement the actionPerformed method to react appropriately when the action event occurs. Here's an example of creating and instantiating an AbstractAction subclass:
        leftAction = new LeftAction("Go left", anIcon,
                     "This is the left button.",
                     new Integer(KeyEvent.VK_L));
        class LeftAction extends AbstractAction {
            public LeftAction(String text, ImageIcon icon,
                              String desc, Integer mnemonic) {
                super(text, icon);
                putValue(SHORT_DESCRIPTION, desc);
                putValue(MNEMONIC_KEY, mnemonic);
            public void actionPerformed(ActionEvent e) {
                displayResult("Action for first button/menu item", e);
        }This is what I attempted. No errors... It just doesn't work.
    public JPanel p()
        undoButton.addActionListener(new UndoAction(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Event.CTRL_MASK)));
        panel.add(undoButton);
        return panel;
    private class UndoAction extends AbstractAction
         public UndoAction(KeyStroke keyStroke)
              putValue(ACCELERATOR_KEY, keyStroke);
         private static final long serialVersionUID = 1L;
         public void actionPerformed(ActionEvent e)
              try
                   if (undoManager.canUndo())
                        undoManager.undo();
              catch (CannotRedoException cre)
                   cre.printStackTrace();
              updateButtons();
    }Edited by: G-Unit on Oct 25, 2010 8:32 AM

Maybe you are looking for