]> git.lyx.org Git - lyx.git/blobdiff - src/InsetList.C
more cursor dispatch
[lyx.git] / src / InsetList.C
index 43027b3b9189d8fee4e3fdc14e004478cd106aa2..d9d90d5591d2a2852729d633f8ed4c2461de2939 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "buffer.h"
 #include "bufferparams.h"
+#include "BranchList.h"
 #include "BufferView.h"
 #include "debug.h"
 
@@ -28,19 +29,19 @@ using std::lower_bound;
 
 namespace {
 
-struct MatchIt {
-       /// used by lower_bound
-       inline
-       int operator()(InsetList::InsetTable const & a,
-                      InsetList::InsetTable const & b) const
+typedef InsetList::InsetTable Table;
+
+struct InsetTablePosLess : public std::binary_function<Table, Table, bool> {
+       bool operator()(Table const & t1, Table const & t2) const
        {
-               return a.pos < b.pos;
+               return t1.pos < t2.pos;
        }
 };
 
 } // namespace anon
 
 
+
 InsetList::~InsetList()
 {
        // If we begin storing a shared_ptr in the List
@@ -56,18 +57,20 @@ InsetList::~InsetList()
 InsetList::iterator InsetList::insetIterator(pos_type pos)
 {
        InsetTable search_elem(pos, 0);
-       return lower_bound(list.begin(), list.end(), search_elem, MatchIt());
+       return lower_bound(list.begin(), list.end(), search_elem,
+                          InsetTablePosLess());
 }
 
 
 InsetList::const_iterator InsetList::insetIterator(pos_type pos) const
 {
        InsetTable search_elem(pos, 0);
-       return lower_bound(list.begin(), list.end(), search_elem, MatchIt());
+       return lower_bound(list.begin(), list.end(), search_elem,
+                          InsetTablePosLess());
 }
 
 
-void InsetList::insert(InsetOld * inset, lyx::pos_type pos)
+void InsetList::insert(InsetBase * inset, lyx::pos_type pos)
 {
        List::iterator end = list.end();
        List::iterator it = insetIterator(pos);
@@ -91,12 +94,12 @@ void InsetList::erase(pos_type pos)
 }
 
 
-InsetOld * InsetList::release(pos_type pos)
+InsetBase * InsetList::release(pos_type pos)
 {
        List::iterator end = list.end();
        List::iterator it = insetIterator(pos);
        if (it != end && it->pos == pos) {
-               InsetOld * tmp = it->inset;
+               InsetBase * tmp = it->inset;
                it->inset = 0;
                return tmp;
        }
@@ -104,7 +107,7 @@ InsetOld * InsetList::release(pos_type pos)
 }
 
 
-InsetOld * InsetList::get(pos_type pos) const
+InsetBase * InsetList::get(pos_type pos) const
 {
        List::const_iterator end = list.end();
        List::const_iterator it = insetIterator(pos);
@@ -139,13 +142,16 @@ void InsetList::insetsOpenCloseBranch(Buffer const & buf)
        List::iterator it = list.begin();
        List::iterator end = list.end();
        for (; it != end; ++it) {
-               if (it->inset && it->inset->lyxCode() == InsetOld::BRANCH_CODE) {
-                       InsetBranch * inset = static_cast<InsetBranch *>(it->inset);
-                       if (buf.params().branchlist().selected(inset->params().branch)) {
-                               inset->open();
-                       } else {
-                               inset->close();
-                       }
+               if (!it->inset)
+                       continue;
+               if (it->inset->lyxCode() != InsetBase::BRANCH_CODE)
+                       continue;
+
+               InsetBranch * inset = static_cast<InsetBranch *>(it->inset);
+               if (inset->isBranchSelected(buf.params().branchlist())) {
+                       inset->open();
+               } else {
+                       inset->close();
                }
        }
 }