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