Accessor for ClosedCaptionsDialog.
[dcpomatic.git] / src / lib / dkdm_wrapper.cc
index 316a0581ee058418291a164345b19b702fff9ae6..0dd37b464c6db6453a1bfc2d56459b48321dca9a 100644 (file)
@@ -34,6 +34,10 @@ DKDMBase::read (cxml::ConstNodePtr node)
 {
        if (node->name() == "DKDM") {
                return shared_ptr<DKDM> (new DKDM (dcp::EncryptedKDM (node->content ())));
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       } else if (node->name() == "ECinemaDKDM") {
+               return shared_ptr<ECinemaDKDM> (new ECinemaDKDM(EncryptedECinemaKDM(node->content())));
+#endif
        } else if (node->name() == "DKDMGroup") {
                shared_ptr<DKDMGroup> group (new DKDMGroup (node->string_attribute ("Name")));
                BOOST_FOREACH (cxml::ConstNodePtr i, node->node_children()) {
@@ -60,6 +64,20 @@ DKDM::as_xml (xmlpp::Element* node) const
        node->add_child("DKDM")->add_child_text (_dkdm.as_xml ());
 }
 
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+string
+ECinemaDKDM::name () const
+{
+       return String::compose ("%1 (%2)", _dkdm.name(), _dkdm.id());
+}
+
+void
+ECinemaDKDM::as_xml (xmlpp::Element* node) const
+{
+       node->add_child("ECinemaDKDM")->add_child_text (_dkdm.as_xml());
+}
+#endif
+
 void
 DKDMGroup::as_xml (xmlpp::Element* node) const
 {
@@ -71,10 +89,19 @@ 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 ()));
 }
 
 void
@@ -83,6 +110,7 @@ DKDMGroup::remove (shared_ptr<DKDMBase> child)
        for (list<shared_ptr<DKDMBase> >::iterator i = _children.begin(); i != _children.end(); ++i) {
                if (*i == child) {
                        _children.erase (i);
+                       child->set_parent (shared_ptr<DKDMGroup> ());
                        return;
                }
                shared_ptr<DKDMGroup> g = dynamic_pointer_cast<DKDMGroup> (*i);