Window: basic binding of bufffer undo feature

This commit is contained in:
Maxime Coste 2011-09-06 18:52:52 +00:00
parent 1e87fe17c6
commit f88d1dbe06
2 changed files with 19 additions and 0 deletions

View File

@ -15,6 +15,7 @@ Window::Window(const std::shared_ptr<Buffer> buffer)
void Window::erase() void Window::erase()
{ {
m_buffer->begin_undo_group();
if (m_selections.empty()) if (m_selections.empty())
{ {
BufferIterator cursor = iterator_at(m_cursor); BufferIterator cursor = iterator_at(m_cursor);
@ -26,6 +27,7 @@ void Window::erase()
m_buffer->erase(sel->begin, sel->end); m_buffer->erase(sel->begin, sel->end);
sel->end = sel->begin; sel->end = sel->begin;
} }
m_buffer->end_undo_group();
} }
static WindowCoord measure_string(const Window::String& string) static WindowCoord measure_string(const Window::String& string)
@ -46,6 +48,7 @@ static WindowCoord measure_string(const Window::String& string)
void Window::insert(const String& string) void Window::insert(const String& string)
{ {
m_buffer->begin_undo_group();
if (m_selections.empty()) if (m_selections.empty())
{ {
m_buffer->insert(iterator_at(m_cursor), string); m_buffer->insert(iterator_at(m_cursor), string);
@ -58,10 +61,12 @@ void Window::insert(const String& string)
sel->begin += string.length(); sel->begin += string.length();
sel->end += string.length(); sel->end += string.length();
} }
m_buffer->end_undo_group();
} }
void Window::append(const String& string) void Window::append(const String& string)
{ {
m_buffer->begin_undo_group();
if (m_selections.empty()) if (m_selections.empty())
{ {
move_cursor(WindowCoord(0 , 1)); move_cursor(WindowCoord(0 , 1));
@ -72,6 +77,17 @@ void Window::append(const String& string)
{ {
m_buffer->insert(sel->end, string); m_buffer->insert(sel->end, string);
} }
m_buffer->end_undo_group();
}
bool Window::undo()
{
return m_buffer->undo();
}
bool Window::redo()
{
return m_buffer->redo();
} }
BufferCoord Window::window_to_buffer(const WindowCoord& window_pos) const BufferCoord Window::window_to_buffer(const WindowCoord& window_pos) const

View File

@ -66,6 +66,9 @@ public:
void update_display_buffer(); void update_display_buffer();
bool undo();
bool redo();
private: private:
void scroll_to_keep_cursor_visible_ifn(); void scroll_to_keep_cursor_visible_ifn();