La funzione Undo di DOCUMENT_HISTORY

Di DOCUMENT_HISTORY ho già scritto in questo articolo. Eè la classe che gestisce la lista Undo/Redo e revisioni dei documenti.

In particolare la funzione di ripristino di uno stato precedente è svolta dalla funzione Undo, della quale si riporta il codice, molto semplice:

[sourcecode language=”cpp”]

bool DOCUMENT_HISTORY:: Undo()
{
GETSTR
if (!HISTORY)
return false;
CWaitCursor wait;

ACTION *action;
if ( HISTORY->Pop(&action)) {
bool res=action->Do(STR->doc);
delete action;
return res;
}
return false;
}

[/sourcecode]

La funzione, verificata la condizione di esistenza di una lista non vuota, estrae l’ultima ACTION inserita nella fifo (funzione Pop())  e richiama la funzione Do() della stessa. Alla Do viene passato il puntatore al documento di appartenenza. Quindi viene distrutta l’azione dopo averla eliminata dalla lista con la Pop.

La Undo rimanda un valore true se l’azione è stata effettuata correttamente (comunicazione ricevuta da ACTION::Do()

In pratica la funzione di Undo è semplicemente un router del messaggio, che viene passato all’istanza ACTION estratta dalla lista.

La funzione ACTION::Do() è già stata descritta qui; Nel caso della AREA_RESTORE, la classe derivata da ACTION aggetto di questo articolo, la Do()  manda il messaggio OP_RESTORE_AREA alla SPECTRAL_IMAGE, che lo intercetta attraverso il codice che segue:

[sourcecode language=”cpp”]

_____SLOT(DO_RESTORE_AREA)
bool res=false;
if (PUT_AREA(OP_STR, (ACTIONS::AREA_RESTORE *)_A(0))) {
res= RECALC_IMAGE(OP_STR, (ACTIONS::AREA_RESTORE *)_A(0));
if (res)
SEND_APP_MESSAGE(MSG_REDRAW_DOCUMENT_VIEW,_OBJ);
}
return res;
_____END
[/sourcecode]

La funzione DO_RESTORE_AREA era dichiarata nella lista degli SLOT di ricezione dei messaggi esterni di SPECTRAL_IMAGE (vedi codice che segue)

[sourcecode language=”cpp”]
_____SLOTS_____
…..
{ OP_RESTORE_AREA, DO_RESTORE_AREA },
…..

_____SLOTS_END_____

[/sourcecode]

Non ci resta che analizzare come la SPECTRAL_IMAGE ripristina l’area oggetto dell’undo.

Pages: 1 2 3 4 5 6 7
%d bloggers like this:
Skip to toolbar