X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fundo.h;h=a45e97bff56493e78e23b73a3ab3903e14467a31;hb=69bee02a8901793b34ac5ca6d07e93910cef4005;hp=415377cf3309cd05496354c98bad323ddc688b12;hpb=ffdb0baea3cfed37790f3769ae74081183d439cc;p=lyx.git diff --git a/src/undo.h b/src/undo.h index 415377cf33..a45e97bff5 100644 --- a/src/undo.h +++ b/src/undo.h @@ -6,7 +6,9 @@ * * \author Asger Alstrup * \author Lars Gullik Bjønnes + * \author John Levon * \author André Pönitz + * \author Jürgen Vigna * * Full author contact details are available in file CREDITS. */ @@ -15,11 +17,15 @@ #define UNDO_H #include "ParagraphList_fwd.h" +#include "support/types.h" + +class LyXText; +class BufferView; /** * 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 + * to restore the state. */ class Undo { public: @@ -43,41 +49,70 @@ public: /// Atomic - each of these will have its own entry in the stack ATOMIC }; - /// - Undo(undo_kind kind, int inset_id, - int first, int last, - int cursor, int cursor_pos, - ParagraphList const & par_arg); + /// constructor + Undo(undo_kind kind, int text, int index, + int first_par, int end_par, int cursor_par, int cursor_pos); - /// Which kind of operation are we recording for? + /// 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; + /// hosting LyXText counted from buffer begin + int text; - /// Offset to the first paragraph in the main document paragraph list - int first_par_offset; + /// cell in a tabular or similar + int index; - /// Offset to the last paragraph from the end of the main par. list - int last_par_offset; + /// offset to the first paragraph in the paragraph list + int first_par; - /** - * 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; + /// offset to the last paragraph from the end of parargraph list + int end_par; - /// The position of the cursor in the hosting paragraph + /// offset to the first paragraph in the paragraph list + int cursor_par; + + /// the position of the cursor in the hosting paragraph int cursor_pos; - /// The contents of the paragraphs saved + /// the contents of the paragraphs saved ParagraphList pars; }; -#endif +/// this will undo the last action - returns false if no undo possible +bool textUndo(BufferView *); + +/// this will redo the last undo - returns false if no redo possible +bool textRedo(BufferView *); + +/// makes sure the next operation will be stored +void finishUndo(); + +/// whilst undo is frozen, all actions do not get added to the undo stack +void freezeUndo(); + +/// track undos again +void unFreezeUndo(); + +/** + * Record undo information - call with the first paragraph that will be changed + * and the last paragraph that will be changed. So we give an inclusive + * range. + * This is called before you make the changes to the paragraph, and it + * will record the original information of the paragraphs in the undo stack. + */ +void recordUndo(Undo::undo_kind kind, + LyXText const * text, lyx::paroffset_type first, lyx::paroffset_type last); + +/// convienience: prepare undo when change in a single paragraph +void recordUndo(Undo::undo_kind kind, + LyXText const * text, lyx::paroffset_type par); + +/// convienience: prepare undo for the paragraph that contains the cursor +void recordUndo(BufferView *, Undo::undo_kind kind); +void recordUndo(BufferView &, Undo::undo_kind kind); + +/// are we avoiding tracking undos currently? +extern bool undo_frozen; + +#endif // UNDO_FUNCS_H