summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-12-18 19:12:15 +0100
committerMaxime Coste <frrrwww@gmail.com>2012-12-18 19:12:15 +0100
commit6cc4ec796edfb62e693f4b582fdd90db5f2557a8 (patch)
tree11fcce20f9b9e879f7b67ad97e4606fb16318516 /src
parentcf7e6bdd078718f31c58127acd5b135886b3cd4f (diff)
editor: support select mode on select(BufferIterator)
Diffstat (limited to 'src')
-rw-r--r--src/editor.cc13
-rw-r--r--src/editor.hh3
2 files changed, 13 insertions, 3 deletions
diff --git a/src/editor.cc b/src/editor.cc
index 02baf5f5..9ed99a93 100644
--- a/src/editor.cc
+++ b/src/editor.cc
@@ -200,9 +200,18 @@ void Editor::remove_selection(int index)
m_selections.erase(m_selections.begin() + index);
}
-void Editor::select(const BufferIterator& iterator)
+void Editor::select(const BufferIterator& iterator, SelectMode mode)
{
- m_selections = SelectionList{ {iterator, iterator} };
+ if (mode == SelectMode::Replace)
+ m_selections = SelectionList{ {iterator, iterator} };
+ else if (mode == SelectMode::Extend)
+ {
+ for (auto& sel : m_selections)
+ sel.last() = iterator;
+ merge_overlapping(m_selections);
+ }
+ else if (mode == SelectMode::Append)
+ assert(false);
}
void Editor::select(SelectionList selections)
diff --git a/src/editor.hh b/src/editor.hh
index c1ea19d5..3ca639c2 100644
--- a/src/editor.hh
+++ b/src/editor.hh
@@ -62,7 +62,8 @@ public:
void flip_selections();
void keep_selection(int index);
void remove_selection(int index);
- void select(const BufferIterator& iterator);
+ void select(const BufferIterator& iterator,
+ SelectMode mode = SelectMode::Replace);
void select(const Selector& selector,
SelectMode mode = SelectMode::Replace);
void select(SelectionList selections);