X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fundo.h;h=d378dc7a73bb3b5c1fd4a4d4daf4d0230f31e28b;hb=82ce6a82ef2c1f1e52616e603914d4184a30e507;hp=fa3d0bc087bbf3bb7a14092dc1806eaaff80593c;hpb=0eccdd1c3613e5170deb77b22174dd0afde833e9;p=lyx.git diff --git a/src/undo.h b/src/undo.h index fa3d0bc087..d378dc7a73 100644 --- a/src/undo.h +++ b/src/undo.h @@ -4,19 +4,21 @@ * * LyX, The Document Processor * - * Copyright (C) 1995 Matthias Ettrich, 1995, 1996 LyX Team + * Copyright 1995 Matthias Ettrich + * Copyright 1995-2000 The LyX Team. * - *======================================================*/ -#ifndef _UNDO_H -#define _UNDO_H + * ====================================================== */ + +#ifndef UNDO_H +#define UNDO_H #ifdef __GNUG__ #pragma interface #endif -#include "definitions.h" #include "lyxparagraph.h" +#include /// class Undo { @@ -43,120 +45,43 @@ public: /// int cursor_pos; // valid if >= 0 /// - LyXParagraph* par; + 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; - } - } + LyXParagraph * par_arg); + /// + ~Undo(); }; -/// A limited Stack for the undo informations. Matthias 290496 +/// A limited Stack for the undo informations. class UndoStack{ private: /// - struct StackAtom{ - /// - StackAtom* previous; - /// - Undo* undo; - }; + typedef std::list Stakk; /// - StackAtom* current; + Stakk stakk; + /// the maximum number of undo steps stored. + Stakk::size_type limit; +public: /// - StackAtom *tmp; + UndoStack(); /// - int size; + Undo * pop(); /// - int limit; -public: + Undo * top(); + /// + bool empty() const; + /// + ~UndoStack(); + /// + void clear(); + /// + void SetStackLimit(Stakk::size_type l); /// - UndoStack(){ - current = 0; - // size must be initialised (thornley) - size = 0; - limit = 100; // the maximum number of undo steps stored. 0 means NO LIMIT. - // Limit can be changed with UndoStack::SetStackLimit(int) - } - /// - Undo *Pop(){ - Undo* result = 0; - if (current){ - result = current->undo; - tmp = current; - current = current->previous; - delete tmp; - size--; - } - else { - size = 0; // for safety... - } - return result; - } - /// - Undo* Top(){ - if (current) - return current->undo; - else - return 0; - } - /// - ~UndoStack(){ - Clear(); - } - /// - void Clear(){ - Undo* tmp_undo = Pop(); - while (tmp_undo){ - delete tmp_undo; - tmp_undo = Pop(); - } - } - /// - void SetStackLimit(int limit_arg) { - limit = limit_arg; - } - - /// - void Push(Undo* undo_arg){ - int i; - StackAtom* tmp2; - if (undo_arg){ - tmp = new StackAtom; - tmp->undo = undo_arg; - tmp->previous = current; - current = tmp; - size++; - if (limit && size > limit){ - for (i=0; iprevious; - while(tmp && tmp->previous){ - tmp2 = tmp->previous->previous; - delete tmp->previous; - size--; - tmp->previous = tmp2; - } - } - } - } + void push(Undo * undo_arg); }; #endif