X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fundo.h;h=a45e97bff56493e78e23b73a3ab3903e14467a31;hb=69bee02a8901793b34ac5ca6d07e93910cef4005;hp=4f9af2af8ff688278682912c657108569a899fa3;hpb=1d7d3cc4afa2205c801ccc2aa71c7ac59359dc5f;p=lyx.git diff --git a/src/undo.h b/src/undo.h index 4f9af2af8f..a45e97bff5 100644 --- a/src/undo.h +++ b/src/undo.h @@ -1,104 +1,118 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-1999 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 -using std::list; - -#include "lyxparagraph.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. + */ 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 + + /// Atomic - each of these will have its own entry in the stack + ATOMIC }; - /// + /// 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? 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) - { - kind = kind_arg; - number_of_before_par = number_before_arg; - number_of_behind_par = number_behind_arg; - number_of_cursor_par = cursor_par_arg; - cursor_pos = cursor_pos_arg; - par = par_arg; - } - /// - ~Undo() { - LyXParagraph * tmppar; - while (par) { - tmppar = par; - par = par->next; - delete tmppar; - } - } -}; + /// hosting LyXText counted from buffer begin + int text; -/// 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 { return stakk.empty(); } - /// - ~UndoStack(); - /// - void clear(); - /// - void SetStackLimit(Stakk::size_type l); - /// - void push(Undo * undo_arg); + /// 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 parargraph 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 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