xref: /haiku/src/apps/mail/KUndoBuffer.h (revision e81a954787e50e56a7f06f72705b7859b6ab06d1)
1 #ifndef _K_UNDOBUFFER_H
2 #define _K_UNDOBUFFER_H
3 
4 
5 #include <List.h>
6 
7 
8 enum undo_type{
9 	K_INSERTED,
10 	K_DELETED,
11 	K_REPLACED
12 };
13 
14 
15 class KUndoItem
16 {
17 public:
18 							KUndoItem(const char* text, int32 length,
19 								int32 offset, undo_type history,
20 								int32 cursor_pos);
21 							~KUndoItem();
22 
23 			void			Merge(const char* text, int32 length);
24 			status_t		InitCheck();
25 
26 			int32			Offset;
27 			int32			Length;
28 			char*			RedoText;
29 			undo_type		History;
30 			int32			CursorPos;
31 
32 private:
33 			status_t		fStatus;
34 };
35 
36 
37 class KUndoBuffer : public BList
38 {
39 public:
40 							KUndoBuffer();
41 							~KUndoBuffer();
42 
43 			bool			AddItem(KUndoItem* item, int32 index);
44 			bool			AddItem(KUndoItem* item);
45 			void			MakeEmpty(void);
46 			KUndoItem*		RemoveItem(int32 index);
47 			KUndoItem*		ItemAt(int32 index) const;
48 
49 			status_t		AddUndo(const char* redo_text, int32 length,
50 								int32 offset, undo_type history,
51 								int32 cursor_pos);
52 
53 			status_t		MakeNewUndoItem();
54 
55 			status_t		Undo(char** text, int32* length, int32* offset,
56 								undo_type* history, int32* cursor_pos);
57 
58 			status_t		Redo(char** text, int32* length, int32* offset,
59 								undo_type* history, int32* cursor_pos,
60 								bool* replaced);
61 
62 			void			PrintToStream();
63 			void			On();
64 			void			Off();
65 
66 private:
67 			int32			fIndex;
68 			bool			fNewItem;
69 			bool			fNoTouch;
70 
71 			status_t		NewUndo(const char* text, int32 length,
72 								int32 offset, undo_type history,
73 								int32 cursor_pos);
74 };
75 
76 
77 #endif	// _K_UNDOBUFFER_H
78 
79