The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Prima::Widget::UndoActions - undo and redo the content of editable widgets

DESCRIPTION

Generic helpers that implement stored actions for undo/redo.

SYNOPSIS

        package MyUndoableWidget;
        use base qw(Prima::Widget Prima::Widget::UndoActions);

        sub on_mousedown
        {
                if ( $button == mb::Left ) {
                        $self->begin_undo_group;
                        $self->push_undo_action(text => $self->text);
                        $self->text($self->text . '.');
                        $self->end_undo_group;
                } else {
                        $self->undo; # will call $self->text( old text )
                }
        }

Properties

undoLimit INTEGER

Sets the limit on the number of atomic undo operations. If 0, undo is disabled.

Methods

begin_undo_group

Opens a bracket for a group of actions that can be undone as a single operation. The bracket is closed by calling end_undo_group.

can_undo, can_redo

Return a boolean flag that reflects if the undo or redo actions could be done. Useful for graying a menu, f ex.

end_undo_group

Closes the bracket for a group of actions, that was previously opened by begin_undo_group.

init_undo

Should be called once, inside init()

has_undo_action ACTION

Checks whether there are any undo-able ACTIONs in the undo list.

push_grouped_undo_action ACTION, @PARAMS

Stores a single undo action where ACTION is a method to be called inside undo/redo, if any. Each action is added to the last undo group and will be removed/replayed together with the other actions in the group.

push_undo_action ACTION, @PARAMS

Stores a single undo action where ACTION is the method to be called inside undo/redo, if any. Each action is a single undo/redo operation.

redo

Re-applies changes, previously rolled back by undo.

undo

Rolls back changes into an internal array. The array size cannot extend the undoLimit value. In case undoLimit is 0 no undo actions can be made.

AUTHOR

Dmitry Karasik, <dmitry@karasik.eu.org>.

SEE ALSO

Prima, Prima::Edit,