Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## com.trolltech.qt.gui
Class QUndoCommand

    java.lang.Object
      com.trolltech.qt.internal.QSignalEmitterInternal
          com.trolltech.qt.QSignalEmitter
              com.trolltech.qt.QtJambiObject
                  com.trolltech.qt.gui.QUndoCommand

All Implemented Interfaces:
  QtJambiInterface

    public class QUndoCommand

extends QtJambiObject

The `QUndoCommand` class is the base class of all commands stored on a `QUndoStack`. For an overview of Qt's Undo Framework, see the overview document.

A `QUndoCommand` represents a single editing action on a document; for example, inserting or deleting a block of text in a text editor. `QUndoCommand` can apply a change to the document with `redo()` and undo the change with `undo()`. The implementations for these functions must be provided in a derived class.

        public class AppendText extends QUndoCommand {

            private String m_document;
            private String m_text;

            public AppendText(String doc, String text) {
                m_document = doc;
                m_text= text;
                setText("append text");
            }

            public void undo() {
                m_document = m_document.substring(0,
                        m_document.length() -m_text.length());
            }

            public void redo() {
                m_document += m_text;
            }
        }

A `QUndoCommand` has an associated `text()`. This is a short string describing what the command does. It is used to update the text properties of the stack's undo and redo actions; see `QUndoStack::createUndoAction()` and `QUndoStack::createRedoAction()`.

`QUndoCommand` objects are owned by the stack they were pushed on. `QUndoStack` deletes a command if it has been undone and a new command is pushed. For example:

            MyCommand command1 = new MyCommand();
            stack.push(command1);
            MyCommand command2 = new MyCommand();
            stack.push(command2);

            stack.undo();

            MyCommand command3 = new MyCommand();
            stack.push(command3); // command2 gets deleted

In effect, when a command is pushed, it becomes the top-most command on the stack.

To support command compression, `QUndoCommand` has an `id()` and the virtual function `mergeWith()`. These functions are used by `QUndoStack::push()`.

To support command macros, a `QUndoCommand` object can have any number of child commands. Undoing or redoing the parent command will cause the child commands to be undone or redone. A command can be assigned to a parent explicitly in the constructor. In this case, the command will be owned by the parent.

The parent in this case is usually an empty command, in that it doesn't provide its own implementation of `undo()` and `redo()`. Instead, it uses the base implementations of these functions, which simply call `undo()` or `redo()` on all its children. The parent should, however, have a meaningful `text()`.

            QUndoCommand insertRed = new QUndoCommand(); // an empty command
            insertRed.setText("insert red text");

            new InsertText(document, idx, text, insertRed); // becomes child of insertRed
            new SetColor(document, idx, text.length(), Qt.GlobalColor.red, insertRed);

            stack.push(insertRed);

Another way to create macros is to use the convenience functions `QUndoStack::beginMacro()` and `QUndoStack::endMacro()`.

See also:
  `QUndoStack`.

Nested Class Summary

Nested classes/interfaces inherited from class com.trolltech.qt.QSignalEmitter
`QSignalEmitter.AbstractSignal, QSignalEmitter.Signal0, QSignalEmitter.Signal1, QSignalEmitter.Signal2, QSignalEmitter.Signal3, QSignalEmitter.Signal4, QSignalEmitter.Signal5, QSignalEmitter.Signal6, QSignalEmitter.Signal7, QSignalEmitter.Signal8, QSignalEmitter.Signal9`

Nested classes/interfaces inherited from class com.trolltech.qt.internal.QSignalEmitterInternal
`com.trolltech.qt.internal.QSignalEmitterInternal.AbstractSignalInternal`

Field Summary

Fields inherited from class com.trolltech.qt.internal.QSignalEmitterInternal
`currentSender`

Constructor Summary
`QUndoCommand()` Constructs a `QUndoCommand` object with parent `parent`.
`QUndoCommand(QUndoCommand parent)` Constructs a `QUndoCommand` object with parent `parent`.
`QUndoCommand(java.lang.String text)` Constructs a `QUndoCommand` object with the given `parent` and `text`.
`QUndoCommand(java.lang.String text, QUndoCommand parent)` Constructs a `QUndoCommand` object with the given `parent` and `text`.

Method Summary
`QUndoCommand` | `child(int index)` Returns the child command at `index`.
`int` | `childCount()` Returns the number of child commands in this command.
`int` | `id()` Returns the ID of this command.
`boolean` | `mergeWith(QUndoCommand other)` Attempts to merge this command with `command`.
`void` | `redo()` Applies a change to the document.
`void` | `setText(java.lang.String text)` Sets the command's text to be the `text` specified.
`java.lang.String` | `text()` Returns a short text string describing what this command does; for example, "insert text".
`void` | `undo()` Reverts a change to the document.

Methods inherited from class com.trolltech.qt.QtJambiObject
`dispose, disposed, equals, finalize, reassignNativeResources, tr, tr, tr`

Methods inherited from class com.trolltech.qt.QSignalEmitter
`blockSignals, disconnect, disconnect, signalsBlocked, signalSender, thread`

Methods inherited from class com.trolltech.qt.internal.QSignalEmitterInternal
`__qt_signalInitialization`

Methods inherited from class java.lang.Object
`clone, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Methods inherited from interface com.trolltech.qt.QtJambiInterface
`disableGarbageCollection, nativeId, nativePointer, reenableGarbageCollection, setJavaOwnership`

Constructor Detail

### QUndoCommand

    public QUndoCommand()

  Constructs a `QUndoCommand` object with parent `parent`.

  If `parent` is not 0, this command is appended to parent's child list. The parent command then owns this command and will delete it in its destructor.

See also:
  ~QUndoCommand().

### QUndoCommand

    public QUndoCommand(QUndoCommand parent)

  Constructs a `QUndoCommand` object with parent `parent`.

  If `parent` is not 0, this command is appended to parent's child list. The parent command then owns this command and will delete it in its destructor.

See also:
  ~QUndoCommand().

### QUndoCommand

    public QUndoCommand(java.lang.String text)

  Constructs a `QUndoCommand` object with the given `parent` and `text`.

  If `parent` is not 0, this command is appended to parent's child list. The parent command then owns this command and will delete it in its destructor.

See also:
  ~QUndoCommand().

### QUndoCommand

    public QUndoCommand(java.lang.String text,
                        QUndoCommand parent)

  Constructs a `QUndoCommand` object with the given `parent` and `text`.

  If `parent` is not 0, this command is appended to parent's child list. The parent command then owns this command and will delete it in its destructor.

See also:
  ~QUndoCommand().

Method Detail

### child

    public final QUndoCommand child(int index)

  Returns the child command at `index`.

See also:
  `childCount()`, and `QUndoStack::command()`.

### childCount

    public final int childCount()

  Returns the number of child commands in this command.

See also:
  `child()`.

### setText

    public final void setText(java.lang.String text)

  Sets the command's text to be the `text` specified.

  The specified text should be a short user-readable string describing what this command does.

See also:
  `text()`, `QUndoStack::createUndoAction()`, and `QUndoStack::createRedoAction()`.

### text

    public final java.lang.String text()

  Returns a short text string describing what this command does; for example, "insert text".

  The text is used when the text properties of the stack's undo and redo actions are updated.

See also:
  `setText()`, `QUndoStack::createUndoAction()`, and `QUndoStack::createRedoAction()`.

### id

    public int id()

  Returns the ID of this command.

  A command ID is used in command compression. It must be an integer unique to this command's class, or -1 if the command doesn't support compression.

  If the command supports compression this function must be overridden in the derived class to return the correct ID. The base implementation returns -1.

  `QUndoStack::push()` will only try to merge two commands if they have the same ID, and the ID is not -1.

See also:
  `mergeWith()`, and `QUndoStack::push()`.

### mergeWith

    public boolean mergeWith(QUndoCommand other)

  Attempts to merge this command with `command`. Returns true on success; otherwise returns false.

  If this function returns true, calling this command's `redo()` must have the same effect as redoing both this command and `command`. Similarly, calling this command's `undo()` must have the same effect as undoing `command` and this command.

  `QUndoStack` will only try to merge two commands if they have the same id, and the id is not -1.

  The default implementation returns false.

              public boolean mergeWith(QUndoCommand other)
              {
                  if (other.id() != id()) // make sure other is also an AppendText command
                      return false;
                  m_text += ((AppendText)other).m_text;
                  return true;
              }

See also:
  `id()`, and `QUndoStack::push()`.

### redo

    public void redo()

  Applies a change to the document. This function must be implemented in the derived class. Calling `QUndoStack::push()`, `QUndoStack::undo()` or `QUndoStack::redo()` from this function leads to undefined beahavior.

  The default implementation calls `redo()` on all child commands.

See also:
  `undo()`.

### undo

    public void undo()

  Reverts a change to the document. After `undo()` is called, the state of the document should be the same as before `redo()` was called. This function must be implemented in the derived class. Calling `QUndoStack::push()`, `QUndoStack::undo()` or `QUndoStack::redo()` from this function leads to undefined beahavior.

  The default implementation calls `undo()` on all child commands in reverse order.

See also:
  `redo()`.

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD