1*d7461887SJonas Sundström #ifndef _K_UNDOBUFFER_H 2*d7461887SJonas Sundström #define _K_UNDOBUFFER_H 3*d7461887SJonas Sundström 4*d7461887SJonas Sundström 50995b563SAxel Dörfler #include <List.h> 60995b563SAxel Dörfler 7*d7461887SJonas Sundström 80995b563SAxel Dörfler enum undo_type{ 9*d7461887SJonas Sundström K_INSERTED, 10*d7461887SJonas Sundström K_DELETED, 11*d7461887SJonas Sundström K_REPLACED 120995b563SAxel Dörfler }; 130995b563SAxel Dörfler 14*d7461887SJonas Sundström 150995b563SAxel Dörfler class KUndoItem 160995b563SAxel Dörfler { 170995b563SAxel Dörfler public: 18*d7461887SJonas Sundström KUndoItem(const char* text, int32 length, 19*d7461887SJonas Sundström int32 offset, undo_type history, 200995b563SAxel Dörfler int32 cursor_pos); 210995b563SAxel Dörfler ~KUndoItem(); 22*d7461887SJonas Sundström 230995b563SAxel Dörfler void Merge(const char* text, int32 length); 240995b563SAxel Dörfler status_t InitCheck(); 250995b563SAxel Dörfler 26*d7461887SJonas Sundström int32 Offset; 27*d7461887SJonas Sundström int32 Length; 28*d7461887SJonas Sundström char* RedoText; 29*d7461887SJonas Sundström undo_type History; 30*d7461887SJonas Sundström int32 CursorPos; 310995b563SAxel Dörfler 320995b563SAxel Dörfler private: 33*d7461887SJonas Sundström status_t fStatus; 340995b563SAxel Dörfler }; 350995b563SAxel Dörfler 36*d7461887SJonas Sundström 370995b563SAxel Dörfler class KUndoBuffer : public BList 380995b563SAxel Dörfler { 390995b563SAxel Dörfler public: 400995b563SAxel Dörfler KUndoBuffer(); 410995b563SAxel Dörfler ~KUndoBuffer(); 420995b563SAxel Dörfler 430995b563SAxel Dörfler bool AddItem(KUndoItem* item, int32 index); 440995b563SAxel Dörfler bool AddItem(KUndoItem* item); 450995b563SAxel Dörfler void MakeEmpty(void); 460995b563SAxel Dörfler KUndoItem* RemoveItem(int32 index); 470995b563SAxel Dörfler KUndoItem* ItemAt(int32 index) const; 480995b563SAxel Dörfler 49*d7461887SJonas Sundström status_t AddUndo(const char* redo_text, int32 length, 50*d7461887SJonas Sundström int32 offset, undo_type history, 510995b563SAxel Dörfler int32 cursor_pos); 52*d7461887SJonas Sundström 530995b563SAxel Dörfler status_t MakeNewUndoItem(); 54*d7461887SJonas Sundström 55*d7461887SJonas Sundström status_t Undo(char** text, int32* length, int32* offset, 56*d7461887SJonas Sundström undo_type* history, int32* cursor_pos); 57*d7461887SJonas Sundström 58*d7461887SJonas Sundström status_t Redo(char** text, int32* length, int32* offset, 59*d7461887SJonas Sundström undo_type* history, int32* cursor_pos, 600995b563SAxel Dörfler bool* replaced); 610995b563SAxel Dörfler 620995b563SAxel Dörfler void PrintToStream(); 630995b563SAxel Dörfler void On(); 640995b563SAxel Dörfler void Off(); 650995b563SAxel Dörfler 660995b563SAxel Dörfler private: 67*d7461887SJonas Sundström int32 fIndex; 68*d7461887SJonas Sundström bool fNewItem; 69*d7461887SJonas Sundström bool fNoTouch; 700995b563SAxel Dörfler 71*d7461887SJonas Sundström status_t NewUndo(const char* text, int32 length, 72*d7461887SJonas Sundström int32 offset, undo_type history, 730995b563SAxel Dörfler int32 cursor_pos); 740995b563SAxel Dörfler }; 75*d7461887SJonas Sundström 76*d7461887SJonas Sundström 77*d7461887SJonas Sundström #endif // _K_UNDOBUFFER_H 78*d7461887SJonas Sundström 79