diff options
| author | Carl Hetherington <cth@carlh.net> | 2017-05-24 12:23:29 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2017-05-24 12:23:59 +0100 |
| commit | 5d00c2f6e25c15a7699167f4f135257281c4b218 (patch) | |
| tree | 67e9b194a166342f57792ea2da052fc66191c730 /src | |
| parent | e6874d3e34a919917fa19025cafdb0c64cb855a9 (diff) | |
Keep model up to date when reordering KDMs.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/dkdm_wrapper.cc | 12 | ||||
| -rw-r--r-- | src/lib/dkdm_wrapper.h | 2 | ||||
| -rw-r--r-- | src/tools/dcpomatic_kdm.cc | 6 |
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. */ |
