X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fundo.h;h=e5060add608eb7c532a5724ef65447eddcc9a0e6;hb=67f9c9fdae42211aa3ff8d0c6f62485bd721d8eb;hp=b9c8e3df990afcbfba20d61acbf28aaa5d2897d2;hpb=c3a34a64f10486d1bd2e00da781a0423d8420519;p=lyx.git diff --git a/src/undo.h b/src/undo.h index b9c8e3df99..e5060add60 100644 --- a/src/undo.h +++ b/src/undo.h @@ -1,81 +1,112 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor +/** + * \file undo.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. + * \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. + */ #ifndef UNDO_H #define UNDO_H -#include "ParagraphList.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 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; +}; - /** - * 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; +/// this will undo the last action - returns false if no undo possible +bool textUndo(BufferView &); - /// Offset to the last paragraph from the end of the main par. list - int last_par_offset; +/// this will redo the last undo - returns false if no redo possible +bool textRedo(BufferView &); - /** - * 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; +/// makes sure the next operation will be stored +void finishUndo(); - /// The position of the cursor in the hosting paragraph - int cursor_pos; +/// whilst undo is frozen, all actions do not get added to the undo stack +void freezeUndo(); - /// The contents of the paragraphs saved - ParagraphList pars; -}; +/// track undos again +void unFreezeUndo(); + + +/** + * 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