-
Notifications
You must be signed in to change notification settings - Fork 1
/
UndoBuffer.cpp
117 lines (115 loc) · 3.07 KB
/
UndoBuffer.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// UndoBuffer.cpp
#include "UndoBuffer.h"
#include <cassert>
//TextUndoAction::TextUndoAction( Type type, size_t pos, size_t length, size_t savedTextPos )
// : type( type )
// , pos( pos )
// , length( length )
// , savedTextPos( savedTextPos )
//{
//}
//
//TextUndoGroup::TextUndoGroup( const TextSelection& beforeSelection )
// : m_beforeSelection( beforeSelection )
//{
//}
//
//void TextUndoGroup::RecordInsertion( TextDocument&, size_t pos, size_t length, size_t savedTextPos )
//{
// if ( m_actions.empty()
// || m_actions.back().type != TextUndoAction::insertion
// || m_actions.back().pos + m_actions.back().length != pos )
// {
// m_actions.push_back( TextUndoAction( TextUndoAction::insertion, pos, length, savedTextPos ) );
// }
// else
// {
// assert( m_actions.back().savedTextPos + m_actions.back().length == savedTextPos );
// m_actions.back().length += length;
// }
//}
//
//void TextUndoGroup::RecordDeletion( TextDocument&, size_t pos, size_t length, size_t savedTextPos )
//{
// m_actions.push_back( TextUndoAction( TextUndoAction::deletion, pos, length, savedTextPos ) );
//}
//
//UndoChange TextUndoGroup::Undo( CharBuffer& charBuffer, UTF16Ref savedText ) const
//{
// UndoChange change;
//
// for ( auto it = m_actions.rbegin(); it != m_actions.rend(); ++it )
// change += ( it->type == TextUndoAction::insertion )
// ? charBuffer.Delete( it->pos, it->length )
// : charBuffer.Insert( it->pos, savedTextStart, it->length );
//
// return std::make_pair( change, m_beforeSelection );
//}
//
//TextChange TextUndoGroup::Redo( TextDocument& doc, UTF16Ref savedText ) const
//{
// TextChange change;
//
// for ( auto it = m_actions.begin(); it != m_actions.end(); ++it )
// change.AddChange( it->type == TextUndoAction::insertion
// ? doc.Insert( it->pos, UTF16Ref( savedText.begin() + it->savedTextPos, it->length ) )
// : doc.Delete( it->pos, it->length ) );
//
// return change;
//}
//
//UndoBuffer::UndoBuffer( CharBuffer& charBuffer )
// : m_charBuffer( charBuffer )
//{
//}
//
//void UndoBuffer::Update( CharBuffer& charBuffer, CharChange change )
//{
// m_groups.erase( m_groups.begin() + m_index, m_groups.end() );
//
// if ( m_endCurrentGroup || m_groups.empty() )
// m_groups.push_back( UndoGroup( m_selection ) );
//
// m_groups.back().Update( charBuffer, change );
// m_index = m_groups.size();
//
// m_endCurrentGroup = false;
//}
//
//bool UndoBuffer::CanUndo() const
//{
// return m_index > 0;
//}
//
//bool UndoBuffer::CanRedo() const
//{
// return m_index < m_groups.size();
//}
//
//UndoChange UndoBuffer::Undo( CharBuffer& charBuffer )
//{
// if ( !CanUndo() )
// return UndoChange();
//
// m_endCurrentGroup = true;
// return m_groups[--m_index].Undo( charBuffer );
//}
//
//CharChange UndoBuffer::Redo( CharBuffer& charBuffer )
//{
// if ( !CanRedo() )
// return CharChange();
//
// m_endCurrentGroup = true;
// return m_groups[m_index++].Redo( charBuffer );
//}
//
//void UndoBuffer::SetSelection( CharRange selection )
//{
// m_selection = selection;
//}
//
//void UndoBuffer::EndGroup()
//{
// m_endCurrentGroup = true;
//}