summaryrefslogtreecommitdiff
path: root/src/editor.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-12-15 19:51:09 +0000
committerMaxime Coste <frrrwww@gmail.com>2013-12-15 20:23:02 +0000
commit8047cc97d3c30b53f8b701cebad9e7b838264db7 (patch)
treee9f101ee7047a74b2ea9e440b643680a1692c53a /src/editor.cc
parentcb9384f8a76d94d387278d679ece9a692316b547 (diff)
Move Editor::{undo,redo} to free functions in normal.cc
Diffstat (limited to 'src/editor.cc')
-rw-r--r--src/editor.cc66
1 files changed, 0 insertions, 66 deletions
diff --git a/src/editor.cc b/src/editor.cc
index 12c65096..3655c0b4 100644
--- a/src/editor.cc
+++ b/src/editor.cc
@@ -24,72 +24,6 @@ std::vector<String> Editor::selections_content() const
return contents;
}
-class ModifiedRangesListener : public BufferChangeListener_AutoRegister
-{
-public:
- ModifiedRangesListener(Buffer& buffer)
- : BufferChangeListener_AutoRegister(buffer) {}
-
- void on_insert(const Buffer& buffer, BufferCoord begin, BufferCoord end)
- {
- m_ranges.update_insert(buffer, begin, end);
- auto it = std::upper_bound(m_ranges.begin(), m_ranges.end(), begin,
- [](BufferCoord c, const Selection& sel)
- { return c < sel.min(); });
- m_ranges.emplace(it, begin, buffer.char_prev(end));
- }
-
- void on_erase(const Buffer& buffer, BufferCoord begin, BufferCoord end)
- {
- m_ranges.update_erase(buffer, begin, end);
- auto pos = std::min(begin, buffer.back_coord());
- auto it = std::upper_bound(m_ranges.begin(), m_ranges.end(), pos,
- [](BufferCoord c, const Selection& sel)
- { return c < sel.min(); });
- m_ranges.emplace(it, pos, pos);
- }
- SelectionList& ranges() { return m_ranges; }
-
-private:
- SelectionList m_ranges;
-};
-
-inline bool touches(const Buffer& buffer, const Range& lhs, const Range& rhs)
-{
- return lhs.min() <= rhs.min() ? buffer.char_next(lhs.max()) >= rhs.min()
- : lhs.min() <= buffer.char_next(rhs.max());
-}
-
-bool Editor::undo()
-{
- using namespace std::placeholders;
- ModifiedRangesListener listener(buffer());
- bool res = m_buffer->undo();
- if (res and not listener.ranges().empty())
- {
- m_selections = std::move(listener.ranges());
- m_selections.set_main_index(m_selections.size() - 1);
- m_selections.merge_overlapping(std::bind(touches, std::ref(buffer()), _1, _2));
- }
- check_invariant();
- return res;
-}
-
-bool Editor::redo()
-{
- using namespace std::placeholders;
- ModifiedRangesListener listener(buffer());
- bool res = m_buffer->redo();
- if (res and not listener.ranges().empty())
- {
- m_selections = std::move(listener.ranges());
- m_selections.set_main_index(m_selections.size() - 1);
- m_selections.merge_overlapping(std::bind(touches, std::ref(buffer()), _1, _2));
- }
- check_invariant();
- return res;
-}
-
void Editor::check_invariant() const
{
#ifdef KAK_DEBUG