class DOCUMENT_HISTORY

DOCUMENT_HISTORY è la classe di gestione della lista delle azioni effettuate su un documento (OPERATION_CALL).  Il modo migliore per utilizzare questa interfaccia è quella di dichiararla pubblica su una classe; La classe DB_OBJECT già contiene l’interfaccia DOCUMENT_HISTORY, quindi qualunque classe derivata da essa già contiene l’interfaccia alla storia del documento. Ad esempio la classe SPECTRAL_IMAGE, che gestisce le immagini spettrali di Colibri, derivando da DB_OBJECT eredita anche DOCUMENT_HISTORY.

La classe mette a disposizione un insieme di metodi per la gestione della lista delle azioni; è una FIFO che viene popolata con il metodo Push e Redo, e svuotata con i metodi Pop, Undo, Flush.

La lista delle azioni Undo/Redo non è  limitata: questo significa che l’uso della classe permette di gestire un numero qualunque di azioni di undo, limite posto solo dalle dimensioni della memoria e del disco a disposizione.

SetDocument(OPERATION_CALL *doc)

Questo metodo deve essere richiamato nel costruttore della classe per assegnare il documento di riferimento; Per le classi derivate da DB_OBJECT non è necessario richiamare questo metodo, poiché l’assegnazione è fatta nel costruttore di DB_OBJECT (vedi esempio che segue)

[sourcecode language=”cpp”]
DB_OBJECT::DB_OBJECT(void)
{
SetDocument(this); // assegna il documento al DOCUMENT_HISTORY
}
[/sourcecode]

Con questo metodo si informa l’interfaccia DOCUMENT_HISTORY che tutte le operazioni successive di Undo e Redo saranno relative al documento passato.

Push(ACTION *action)

Il metodo è usato per aggiungere alla lista un’azione di undo.

Pop()

Il metodo rimuove l’ultimo elemento inserito nella lista; chiamate successive di Pop svuotano la lista delle azioni in sospeso, dalla più recente alla più vecchia. In genere non esiste necessità di usare questa funzione, a meno che l’applicazione specifica non lo richiedA.

Flush()

Azzera la lista delle azioni di undo/redo. Il metodo è chiamato internamente dal distruttore di DOCUMENT_HISTORY, ma può essere richiamato comunque anche dall’applicazione. Tutte le operazioni di svuotamento della lista distruggono le istanze delle classi ACTION inserite con Push(); pertanto tutte le ACTION, sempre allocate dall’esterno, verranno distrutte nella DOCUMENT_HISTORY in modo completamente trasparente al programmatore che usa l’API di Colibri.

Undo()

esegue undo sull’ultima azione inserita in ordine cronologico, rimuove l’azione e genera un’azione di redo nella lista dei redo.

Redo()

E’ l’operazione inversa di Undo(); l’ultima operazione inserita dalla Undo() viene ripristinata nella lista degli undo e rimossa da quella dei redo.

fumetto Nota:

Le classi fin qui descritte gestiscono l’infrastruttura delle operazioni di Undo/Redo ma, come si può capire dal fatto che gestiscono documenti derivati da OPERATION_CALL, comunicano con questi attraverso i metodi di questa interfaccia; A conclusione dell’articolo propongo un esempio concreto di come questi metodi sono applicati in Colibrì: la gestione undo/redo nella classe SPECTRAL_IMAGE.

Pages: 1 2 3 4

Leave a Reply

Skip to toolbar