ImageEn, unit imageenproc

TImageEnProc.SaveUndo

TImageEnProc.SaveUndo


Declaration

procedure SaveUndo(Source: TIEUndoSource = ieuImage; ClearRedo: Boolean = false); overload;
procedure SaveUndo(const Caption: String; Source: TIEUndoSource = ieuImage; ClearRedo: Boolean = false; Operation: Integer = 0; UndoBmp: TIEBitmap = nil); overload;


Description

Saves the current image to the Undo stack (i.e. after the next change, calling Undo will return us to this state).

Parameter Description
Caption Description of the saved undo (which will be assigned to UndoCaptions)
Source Specifies what to save (see below)
ClearRedo When true ClearAllRedo is called to reset the redo list (which is standard behavior for application Undo)
Operation An optional value that allows you to locate a specific undo (via GetUndoInfo). It can be zero or an Undo Constant
UndoBmp Optionally a bitmap can be specified as the undo image (i.e. the image the user will return to if Undo is called. Source must be ieuImage

Values for Source:
ieuImage The bitmap (of the current layer, if there are multiple layers)
ieuSelection The area the user has selected (Not the bitmap content within the selection, just the selection dimensions)
ieuObject All objects of a TImageEnVect
ieuLayer Properties of all current layers (position, size, etc, but not the layer bitmaps)
ieuFullLayer Same as ieuLayer but also saves the layer bitmaps
ieuObjectsAndLayers Saves complete state: Properties and bitmaps of all layers (TImageEnView) or objects (TImageEnVect)

Note:
You do not need to manually call SaveUndo if you have enabled AutoUndo
ieuLayer and ieuFullLayer do not restore removed layers, or redact added layers. Use ieuObjectsAndLayers instead
For TImageEnVect, ieuObject and ieuObjectsAndLayers are the same, except that ieuObjectsAndLayers also saves the background image


Examples

// Allow undo of Negative
ImageEnView1.Proc.SaveUndo();
ImageEnView1.Proc.Negative();

// Allow undo of Negative&Contrast
ImageEnView1.Proc.SaveUndo( 'Negative and contrast' );
ImageEnView1.Proc.Negative();
ImageEnView1.Proc.Contrast( 5 );

// Save undo before removing a layer (TImageEnView)
ImageEnView1.Proc.SaveUndo( 'Delete Layer', ieuObjectsAndLayers );
ImageEnView1.LayersRemove( ImageEnView1.LayersCurrent );

// Save undo before removing an object (TImageEnVect)
ImageEnVect1.Proc.SaveUndo( 'Delete Object', ieuObject ); // or ieuObjectsAndLayers
ImageEnVect1.RemoveObject( IEV_ALL_SELECTED_OBJECTS );

// Save undo before shifting all layers
ImageEnView1.Proc.SaveUndo( 'Move all Layers', ieuLayer );
ImageEnView1.LayersRepositionAll( -50, -50 );

// Save undo before flipping all image layers
ImageEnView1.Proc.SaveUndo( 'Flip All Layers', ieuFullLayers );
ImageEnView1.LockUpdate();
for I := 0 to ImageEnView1.LayersCount - 1 do
  if ImageEnView1.Layers[ I ] is TIEImageLayer then
    ImageEnView1.Layers[ I ].Bitmap.Flip( fdHorizontal );
ImageEnView1.UnlockUpdate();

// Save undo before adding a new layer
// Note: Use ieuObjectsAndLayers, not ieuLayer or ieuFullLayers (which only support existing layers)
ImageEnView1.Proc.SaveUndo('Add Image Layer' + IntToStr(ImageEnView1.LayersCount-1), ieuObjectsAndLayers);
ImageEnView1.LayersAppend( ielkImage );


See Also

AutoUndo
UndoCount
UndoLimit
Undo
SaveRedo