X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fundo.h;h=e5060add608eb7c532a5724ef65447eddcc9a0e6;hb=67f9c9fdae42211aa3ff8d0c6f62485bd721d8eb;hp=08cf5b98618bee85c1f849433df52d46620b5134;hpb=b79331e005662776a3339a5d9e0209feb2194d18;p=lyx.git diff --git a/src/undo.h b/src/undo.h index 08cf5b9861..e5060add60 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,73 +17,96 @@ #define UNDO_H #include "ParagraphList_fwd.h" +#include "support/types.h" + +class LCursor; +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: - /** - * The undo kinds are used to combine consecutive undo recordings - * of the same kind. - */ + /// This is 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, - /// Atomic - each of these will have its own entry in the stack ATOMIC }; - /// - Undo(undo_kind kind, int inset_id, - int plist, - int first, int last, - int cursor, int cursor_pos, - ParagraphList const & par_arg); - - /// Which kind of operation are we recording for? + + /// constructor + Undo(undo_kind kind, int text, int index, + int first_par, int end_par, int cursor_par, int cursor_pos); + +public: + /// which kind of operation are we recording for? undo_kind kind; + /// hosting LyXText counted from buffer begin + int text; + /// cell in a tabular or similar + int index; + /// offset to the first paragraph in the paragraph list + int first_par; + /// offset to the last paragraph from the end of paragraph list + int end_par; + /// 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 + ParagraphList pars; +}; - /// to what paragraph list do we belong? - int plist; - /** - * 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; +/// this will undo the last action - returns false if no undo possible +bool textUndo(BufferView &); - /// Offset to the first paragraph in the main document paragraph list - int first_par_offset; +/// this will redo the last undo - returns false if no redo possible +bool textRedo(BufferView &); - /// Offset to the last paragraph from the end of the main par. list - int last_par_offset; +/// makes sure the next operation will be stored +void finishUndo(); - /** - * 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; +/// whilst undo is frozen, all actions do not get added to the undo stack +void freezeUndo(); - /// The position of the cursor in the hosting paragraph - int cursor_pos; +/// track undos again +void unFreezeUndo(); - /// The contents of the paragraphs saved - ParagraphList pars; -}; +/** + * Record undo information - call with the current cursor and the 'other + * end' of the range of changed paragraphs. 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. + */ + +/// the common case: prepare undo for an arbitrary range +void recordUndo(LCursor & cur, Undo::undo_kind kind, + lyx::paroffset_type from, lyx::paroffset_type to); + +/// convienience: prepare undo for the range between 'from' and cursor. +void recordUndo(LCursor & cur, Undo::undo_kind kind, lyx::paroffset_type from); + +/// convienience: prepare undo for the single paragraph containing the cursor +void recordUndo(LCursor & cur, Undo::undo_kind kind); + +/// convienience: prepare undo for the single paragraph containing the cursor +void recordUndoFullDocument(LCursor & cur); + +/// are we avoiding tracking undos currently? +extern bool undo_frozen; -#endif +#endif // UNDO_FUNCS_H