xref: /haiku/src/apps/mail/KUndoBuffer.h (revision d74618871952e28f4550c4381bfdef3d14d6ef3f)
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