xref: /haiku/src/kits/interface/textview_support/UndoBuffer.h (revision 8ab8c63d26d82df2226f531a915cf198e6f1eb36)
1b31b14e0SStefano Ceccherini /*
2*8ab8c63dSStephan Aßmus  * Copyright 2003-2008, Haiku, Inc. All Rights Reserved.
3b31b14e0SStefano Ceccherini  * Distributed under the terms of the MIT License.
4b31b14e0SStefano Ceccherini  *
5b31b14e0SStefano Ceccherini  * Authors:
6b31b14e0SStefano Ceccherini  *		Stefano Ceccherini (burton666@libero.it)
7b31b14e0SStefano Ceccherini  */
8b31b14e0SStefano Ceccherini 
9b31b14e0SStefano Ceccherini #ifndef __UNDOBUFFER_H
10b31b14e0SStefano Ceccherini #define __UNDOBUFFER_H
11b31b14e0SStefano Ceccherini 
12b31b14e0SStefano Ceccherini #include <TextView.h>
13b31b14e0SStefano Ceccherini 
14b31b14e0SStefano Ceccherini 
15b31b14e0SStefano Ceccherini class BClipboard;
16b31b14e0SStefano Ceccherini 
17*8ab8c63dSStephan Aßmus 
18*8ab8c63dSStephan Aßmus // UndoBuffer
19a682d981SStephan Aßmus class BTextView::UndoBuffer {
20b31b14e0SStefano Ceccherini public:
21*8ab8c63dSStephan Aßmus 								UndoBuffer(BTextView* view, undo_state state);
22a682d981SStephan Aßmus 	virtual						~UndoBuffer();
23b31b14e0SStefano Ceccherini 
24*8ab8c63dSStephan Aßmus 			void				Undo(BClipboard* clipboard);
25*8ab8c63dSStephan Aßmus 			undo_state			State(bool* _isRedo) const;
26b31b14e0SStefano Ceccherini 
27b31b14e0SStefano Ceccherini protected:
28*8ab8c63dSStephan Aßmus 	virtual	void				UndoSelf(BClipboard* clipboard);
29*8ab8c63dSStephan Aßmus 	virtual	void				RedoSelf(BClipboard* clipboard);
30b31b14e0SStefano Ceccherini 
31b31b14e0SStefano Ceccherini 			BTextView*			fTextView;
32b31b14e0SStefano Ceccherini 			int32				fStart;
33b31b14e0SStefano Ceccherini 			int32				fEnd;
34b31b14e0SStefano Ceccherini 
35b31b14e0SStefano Ceccherini 			char*				fTextData;
36b31b14e0SStefano Ceccherini 			int32				fTextLength;
37b31b14e0SStefano Ceccherini 			text_run_array*		fRunArray;
38b31b14e0SStefano Ceccherini 			int32				fRunArrayLength;
39b31b14e0SStefano Ceccherini 
40b31b14e0SStefano Ceccherini 			bool				fRedo;
41b31b14e0SStefano Ceccherini 
42b31b14e0SStefano Ceccherini private:
43b31b14e0SStefano Ceccherini 			undo_state			fState;
44b31b14e0SStefano Ceccherini };
45b31b14e0SStefano Ceccherini 
46b31b14e0SStefano Ceccherini 
47*8ab8c63dSStephan Aßmus // CutUndoBuffer
48*8ab8c63dSStephan Aßmus class BTextView::CutUndoBuffer : public BTextView::UndoBuffer {
49b31b14e0SStefano Ceccherini public:
50*8ab8c63dSStephan Aßmus 								CutUndoBuffer(BTextView* textView);
51*8ab8c63dSStephan Aßmus 	virtual						~CutUndoBuffer();
52b31b14e0SStefano Ceccherini 
53b31b14e0SStefano Ceccherini protected:
54*8ab8c63dSStephan Aßmus 	virtual	void				RedoSelf(BClipboard* clipboard);
55b31b14e0SStefano Ceccherini };
56b31b14e0SStefano Ceccherini 
57b31b14e0SStefano Ceccherini 
58*8ab8c63dSStephan Aßmus // PasteUndoBuffer
59*8ab8c63dSStephan Aßmus class BTextView::PasteUndoBuffer : public BTextView::UndoBuffer {
60b31b14e0SStefano Ceccherini public:
61*8ab8c63dSStephan Aßmus 								PasteUndoBuffer(BTextView* textView,
62*8ab8c63dSStephan Aßmus 									const char* text, int32 textLength,
63*8ab8c63dSStephan Aßmus 									text_run_array* runArray,
64*8ab8c63dSStephan Aßmus 									int32 runArrayLen);
65*8ab8c63dSStephan Aßmus 	virtual						~PasteUndoBuffer();
66b31b14e0SStefano Ceccherini 
67b31b14e0SStefano Ceccherini protected:
68*8ab8c63dSStephan Aßmus 	virtual	void				UndoSelf(BClipboard* clipboard);
69*8ab8c63dSStephan Aßmus 	virtual	void				RedoSelf(BClipboard* clipboard);
70b31b14e0SStefano Ceccherini 
71b31b14e0SStefano Ceccherini private:
72b31b14e0SStefano Ceccherini 			char*				fPasteText;
73b31b14e0SStefano Ceccherini 			int32				fPasteTextLength;
74b31b14e0SStefano Ceccherini 			text_run_array*		fPasteRunArray;
75b31b14e0SStefano Ceccherini };
76b31b14e0SStefano Ceccherini 
77b31b14e0SStefano Ceccherini 
78*8ab8c63dSStephan Aßmus // ClearUndoBuffer
79*8ab8c63dSStephan Aßmus class BTextView::ClearUndoBuffer : public BTextView::UndoBuffer {
80b31b14e0SStefano Ceccherini public:
81*8ab8c63dSStephan Aßmus 								ClearUndoBuffer(BTextView* textView);
82*8ab8c63dSStephan Aßmus 	virtual						~ClearUndoBuffer();
83b31b14e0SStefano Ceccherini 
84b31b14e0SStefano Ceccherini protected:
85*8ab8c63dSStephan Aßmus 	virtual	void				RedoSelf(BClipboard* clipboard);
86b31b14e0SStefano Ceccherini };
87b31b14e0SStefano Ceccherini 
88b31b14e0SStefano Ceccherini 
89*8ab8c63dSStephan Aßmus // DropUndoBuffer
90*8ab8c63dSStephan Aßmus class BTextView::DropUndoBuffer : public BTextView::UndoBuffer {
91b31b14e0SStefano Ceccherini public:
92*8ab8c63dSStephan Aßmus 								DropUndoBuffer(BTextView* textView,
93*8ab8c63dSStephan Aßmus 									char const* text, int32 textLength,
94*8ab8c63dSStephan Aßmus 									text_run_array* runArray,
95*8ab8c63dSStephan Aßmus 									int32 runArrayLength, int32 location,
96*8ab8c63dSStephan Aßmus 									bool internalDrop);
97*8ab8c63dSStephan Aßmus 	virtual						~DropUndoBuffer();
98b31b14e0SStefano Ceccherini 
99b31b14e0SStefano Ceccherini protected:
100*8ab8c63dSStephan Aßmus 	virtual	void				UndoSelf(BClipboard* clipboard);
101*8ab8c63dSStephan Aßmus 	virtual	void				RedoSelf(BClipboard* clipboard);
102b31b14e0SStefano Ceccherini 
103b31b14e0SStefano Ceccherini private:
104b31b14e0SStefano Ceccherini 			char*				fDropText;
105b31b14e0SStefano Ceccherini 			int32				fDropTextLength;
106b31b14e0SStefano Ceccherini 			text_run_array*		fDropRunArray;
107b31b14e0SStefano Ceccherini 
108b31b14e0SStefano Ceccherini 			int32				fDropLocation;
109b31b14e0SStefano Ceccherini 			bool				fInternalDrop;
110b31b14e0SStefano Ceccherini };
111b31b14e0SStefano Ceccherini 
112b31b14e0SStefano Ceccherini 
113*8ab8c63dSStephan Aßmus // TypingUndoBuffer
114*8ab8c63dSStephan Aßmus class BTextView::TypingUndoBuffer : public BTextView::UndoBuffer {
115b31b14e0SStefano Ceccherini public:
116*8ab8c63dSStephan Aßmus 								TypingUndoBuffer(BTextView* textView);
117*8ab8c63dSStephan Aßmus 	virtual						~TypingUndoBuffer();
118b31b14e0SStefano Ceccherini 
119*8ab8c63dSStephan Aßmus 			void				InputCharacter(int32 length);
120b31b14e0SStefano Ceccherini 			void				BackwardErase();
121b31b14e0SStefano Ceccherini 			void				ForwardErase();
122b31b14e0SStefano Ceccherini 
123b31b14e0SStefano Ceccherini protected:
124*8ab8c63dSStephan Aßmus 	virtual	void				RedoSelf(BClipboard* clipboard);
125*8ab8c63dSStephan Aßmus 	virtual	void				UndoSelf(BClipboard* clipboard);
126b31b14e0SStefano Ceccherini 
127b31b14e0SStefano Ceccherini private:
128*8ab8c63dSStephan Aßmus 			void				_Reset();
129b31b14e0SStefano Ceccherini 
130b31b14e0SStefano Ceccherini 			char*				fTypedText;
131b31b14e0SStefano Ceccherini 			int32				fTypedStart;
132b31b14e0SStefano Ceccherini 			int32				fTypedEnd;
133b31b14e0SStefano Ceccherini 			int32				fUndone;
134b31b14e0SStefano Ceccherini };
135b31b14e0SStefano Ceccherini 
136b31b14e0SStefano Ceccherini #endif //__UNDOBUFFER_H
137