Re: understanding undo and the general lack of comments in code ...



On Sat, 2007-07-28 at 08:51 +0530, Sameer Sahasrabuddhe wrote:
Hello,

I was trying to figure out how to us Undo, and started with this article:

http://live.gnome.org/Dia/Undo

I wanted to follow up on how struct ReorderObjectsChange and the
related functions are used. But the problem is can't really make out
what is happening in code such as
diagram_place_under_selected() in app/diagram.c

The tricky thing about diagram_place_under_selected() and its relatives
is that since you can move several objects, you need to keep the
original position of all of them in order to be able to undo.  The
easiest way to do this is to keep a copy of the whole object list.

Once we have the original object list, we take the selected objects out
(in the ordering they are in the layer, thus "sorted"), mark them all
for redrawing (object_add_updates_list()), then add them at the
beginning (bottom) of the object list.

The call to undo_reorder_list simply creates an undo object for the act
of changing the order of objects.  That call doesn't change the diagram.

Finally, we set the diagram modified, flush the diagram changes (to
force a redraw soon), and mark that this is the end of a user command by
setting an undo transaction point, meaning an undo command will undo
only until here.

Note that the undo_reorder_list call will merely stored the old and
current object lists (not the objects themselves), so it can switch back
and forth as it gets undone and redone.

-Lars




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]