Keep model up to date when reordering KDMs.
authorCarl Hetherington <cth@carlh.net>
Wed, 24 May 2017 11:23:29 +0000 (12:23 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 24 May 2017 11:23:59 +0000 (12:23 +0100)
src/lib/dkdm_wrapper.cc
src/lib/dkdm_wrapper.h
src/tools/dcpomatic_kdm.cc

index 809739e06fd471d14a564fbc1de468d6a1f93f59..76f9217aac4a64d3b6f589aa20290511a66ddad4 100644 (file)
@@ -71,10 +71,18 @@ DKDMGroup::as_xml (xmlpp::Element* node) const
 }
 
 void
-DKDMGroup::add (shared_ptr<DKDMBase> child)
+DKDMGroup::add (shared_ptr<DKDMBase> child, shared_ptr<DKDM> previous)
 {
        DCPOMATIC_ASSERT (child);
-       _children.push_back (child);
+       if (previous) {
+               list<shared_ptr<DKDMBase> >::iterator i = find (_children.begin(), _children.end(), previous);
+               if (i != _children.end ()) {
+                       ++i;
+               }
+               _children.insert (i, child);
+       } else {
+               _children.push_back (child);
+       }
        child->set_parent (dynamic_pointer_cast<DKDMGroup> (shared_from_this ()));
 }
 
index d3ee2a09566c34afaa48036fa8bff507ed6ccf9b..9c65dd172b8bde2fd6726756cd26759f1a69e7dd 100644 (file)
@@ -83,7 +83,7 @@ public:
                return _children;
        }
 
-       void add (boost::shared_ptr<DKDMBase> child);
+       void add (boost::shared_ptr<DKDMBase> child, boost::shared_ptr<DKDM> previous = boost::shared_ptr<DKDM> ());
         void remove (boost::shared_ptr<DKDMBase> child);
 
 private:
index 0ee8a07862a7f49ca57582a9912ddf569102d2f9..35bad59586bb4b0f8a9e3584b4e1aaa8d0d74e8f 100644 (file)
@@ -391,7 +391,7 @@ private:
                DCPOMATIC_ASSERT (from->second->parent ());
 
                from->second->parent()->remove (from->second);
-               add_dkdm_model (from->second, group);
+               add_dkdm_model (from->second, group, dynamic_pointer_cast<DKDM>(to->second));
 
                _dkdm->Delete (from->first);
                _dkdm_id.erase (from->first);
@@ -472,9 +472,9 @@ private:
        }
 
        /** @param group Group to add dkdm to */
-       void add_dkdm_model (shared_ptr<DKDMBase> dkdm, shared_ptr<DKDMGroup> group)
+       void add_dkdm_model (shared_ptr<DKDMBase> dkdm, shared_ptr<DKDMGroup> group, shared_ptr<DKDM> previous = shared_ptr<DKDM> ())
        {
-               group->add (dkdm);
+               group->add (dkdm, previous);
                /* We're messing with a Config-owned object here, so tell it that something has changed.
                   This isn't nice.
                */