summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-05-24 12:23:29 +0100
committerCarl Hetherington <cth@carlh.net>2017-05-24 12:23:59 +0100
commit5d00c2f6e25c15a7699167f4f135257281c4b218 (patch)
tree67e9b194a166342f57792ea2da052fc66191c730 /src
parente6874d3e34a919917fa19025cafdb0c64cb855a9 (diff)
Keep model up to date when reordering KDMs.
Diffstat (limited to 'src')
-rw-r--r--src/lib/dkdm_wrapper.cc12
-rw-r--r--src/lib/dkdm_wrapper.h2
-rw-r--r--src/tools/dcpomatic_kdm.cc6
3 files changed, 14 insertions, 6 deletions
diff --git a/src/lib/dkdm_wrapper.cc b/src/lib/dkdm_wrapper.cc
index 809739e06..76f9217aa 100644
--- a/src/lib/dkdm_wrapper.cc
+++ b/src/lib/dkdm_wrapper.cc
@@ -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 ()));
}
diff --git a/src/lib/dkdm_wrapper.h b/src/lib/dkdm_wrapper.h
index d3ee2a095..9c65dd172 100644
--- a/src/lib/dkdm_wrapper.h
+++ b/src/lib/dkdm_wrapper.h
@@ -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:
diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc
index 0ee8a0786..35bad5958 100644
--- a/src/tools/dcpomatic_kdm.cc
+++ b/src/tools/dcpomatic_kdm.cc
@@ -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.
*/