X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fundo.h;h=e5060add608eb7c532a5724ef65447eddcc9a0e6;hb=67f9c9fdae42211aa3ff8d0c6f62485bd721d8eb;hp=83cd0db60d570bd18b0aab40dc78c4d07ba01a98;hpb=0088121bd8c3fc7f2109e8dc9b22b73ca193f20e;p=lyx.git diff --git a/src/undo.h b/src/undo.h index 83cd0db60d..e5060add60 100644 --- a/src/undo.h +++ b/src/undo.h @@ -1,88 +1,112 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. +/** + * \file undo.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * ====================================================== */ + * \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 -#ifdef __GNUG__ -#pragma interface -#endif +#include "ParagraphList_fwd.h" +#include "support/types.h" -#include "lyxparagraph.h" +class LCursor; +class BufferView; -#include -using std::list; -/// +/** + * These are the elements put on the undo stack. Each object + * contains complete paragraphs and sufficient information + * to restore the state. + */ class Undo { public: - /// The undo kinds + /// 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, - /// - EDIT, - /// - FINISH + /// Atomic - each of these will have its own entry in the stack + ATOMIC }; - /// - undo_kind kind; - /// - int number_of_before_par; - /// - int number_of_behind_par; - /// - int number_of_cursor_par; - /// - int cursor_pos; // valid if >= 0 - /// - LyXParagraph * par; - /// - Undo(undo_kind kind_arg, - int number_before_arg, int number_behind_arg, - int cursor_par_arg, int cursor_pos_arg, - LyXParagraph * par_arg); - /// - ~Undo(); -}; + /// constructor + Undo(undo_kind kind, int text, int index, + int first_par, int end_par, int cursor_par, int cursor_pos); -/// A limited Stack for the undo informations. -class UndoStack{ -private: - /// - typedef list Stakk; - /// - Stakk stakk; - /// the maximum number of undo steps stored. - Stakk::size_type limit; public: - /// - UndoStack(); - /// - Undo * pop(); - /// - Undo * top(); - /// - bool empty() const; - /// - ~UndoStack(); - /// - void clear(); - /// - void SetStackLimit(Stakk::size_type l); - /// - void push(Undo * undo_arg); + /// 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; }; -#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 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 // UNDO_FUNCS_H