X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fundostack.h;h=8c39d8be71455a2490986a7b467af735e0b98c18;hb=b402ed7f93de4c98e6651483eb8561cf1c37ec9a;hp=9fbbd0052ea680d5572a1f4015dafffcd31e4d9e;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/undostack.h b/cinelerra-5.1/cinelerra/undostack.h index 9fbbd005..8c39d8be 100644 --- a/cinelerra-5.1/cinelerra/undostack.h +++ b/cinelerra-5.1/cinelerra/undostack.h @@ -2,21 +2,21 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef UNDOSTACK_H @@ -31,11 +31,56 @@ #define UNDOLEVELS 500 #define UNDO_KEY_INTERVAL 100 -// The undo stack is a series of key undo buffers and -// incremental undo buffers. The incremental buffers -// store the differences in the most compact way possible: -// a series of offsets, sizes and values. This should allow -// a huge number of undo updates. + +#define hash_sz2 8 +#define hash_sz (1< +{ +public: + UndoVersion(int v) { ver = v; } + ~UndoVersion() { remove_all_objects(); } + int ver; + + void scan_lines(UndoHashTable *hash, char *sp, char *ep); +}; class UndoStackItem : public ListItem @@ -56,19 +101,15 @@ public: // The string must be deleted by the user. char* get_data(); char* get_filename(); - int has_data(); int get_size(); int is_key(); uint64_t get_flags(); - - -// Get pointer to incremental data for use in an apply_difference command. - char* get_incremental_data(); - int get_incremental_size(); void set_creator(void *creator); void* get_creator(); + void save(FILE *fp); + void load(FILE *fp); private: // command description for the menu item char *description; @@ -78,7 +119,7 @@ private: // type of modification uint64_t load_flags; - + // data after the modification for redos char *data; int data_size; @@ -94,22 +135,24 @@ class UndoStack : public List public: UndoStack(); ~UndoStack(); - + +// get current undo/redo stack item + UndoStackItem *get_current_undo(); + UndoStackItem *get_current_redo(); + // Create a new undo entry and put on the stack. // The current pointer points to the new entry. // delete future undos if in the middle // delete undos older than UNDOLEVELS if last UndoStackItem* push(); -// move to the previous undo entry - void pull(); - - // move to the next undo entry for a redo UndoStackItem* pull_next(); + void save(FILE *fp); + void load(FILE *fp); void dump(FILE *fp=stdout); - + UndoStackItem* current; };