X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fundo.h;h=b9c8e3df990afcbfba20d61acbf28aaa5d2897d2;hb=09e01879979643949f1f2c7216023f1f35d5ada2;hp=8b85b7f50c83c58dafee5fc6601e9a23ff849ebd;hpb=e412a2a53ea60a327d6ea8b8b802cb1b169a7108;p=lyx.git diff --git a/src/undo.h b/src/undo.h index 8b85b7f50c..b9c8e3df99 100644 --- a/src/undo.h +++ b/src/undo.h @@ -14,41 +14,67 @@ #include "ParagraphList.h" -/// +/** + * These are the elements put on the undo stack. Each object + * contains complete paragraphs and sufficient information + * to restore the state. The work is done in undo_funcs.C + */ class Undo { public: - /// The undo kinds + /** + * The undo kinds are used to combine consecutive undo recordings + * of the same kind. + */ enum undo_kind { - /// + /** + * Insert something - these will combine to one big chunk + * when many inserts come after each other. + */ INSERT, - /// + + /** + * Delete something - these will combine to one big chunk + * when many deletes come after each other. + */ DELETE, - /// - EDIT, - /// - FINISH - }; - /// - undo_kind kind; - /// - int number_of_before_par; - /// - int number_of_behind_par; - /// - int number_of_cursor_par; - /// - int number_of_inset_id; // valid if >= 0, if < 0 then not in inset - /// - int cursor_pos; // valid if >= 0 - /// - ParagraphList pars; + /// Atomic - each of these will have its own entry in the stack + ATOMIC + }; /// Undo(undo_kind kind, int inset_id, - int before_par_id, int behind_par_id, - int cursor_par_id, int cursor_pos, + int first, int last, + int cursor, int cursor_pos, ParagraphList const & par_arg); + /// Which kind of operation are we recording for? + undo_kind kind; + + /** + * ID of hosting inset if the cursor is in one. + * if -1, then the cursor is not in an inset. + * if >= 0, then the cursor is in inset with given id. + */ + int inset_id; + + /// Offset to the first paragraph in the main document paragraph list + int first_par_offset; + + /// Offset to the last paragraph from the end of the main par. list + int last_par_offset; + + /** + * Offset from the start of the main document paragraph list, + * except if inside an inset, in which case it's the offset + * inside the hosting inset. + */ + int cursor_par_offset; + + /// The position of the cursor in the hosting paragraph + int cursor_pos; + + /// The contents of the paragraphs saved + ParagraphList pars; };