Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[goodguy/history.git] / cinelerra-5.1 / cinelerra / nestededls.C
diff --git a/cinelerra-5.1/cinelerra/nestededls.C b/cinelerra-5.1/cinelerra/nestededls.C
new file mode 100644 (file)
index 0000000..4c7c64a
--- /dev/null
@@ -0,0 +1,99 @@
+#include "bcsignals.h"
+#include "edl.h"
+#include "filexml.h"
+#include "indexstate.h"
+#include "nestededls.h"
+
+
+NestedEDLs::NestedEDLs()
+{
+}
+
+NestedEDLs::~NestedEDLs()
+{
+       for(int i = 0; i < nested_edls.size(); i++)
+               nested_edls.get(i)->Garbage::remove_user();
+       nested_edls.remove_all();
+}
+
+int NestedEDLs::size()
+{
+       return nested_edls.size();
+}
+
+EDL* NestedEDLs::get(int number)
+{
+       return nested_edls.get(number);
+}
+
+EDL* NestedEDLs::get_copy(EDL *src)
+{
+       if(!src) return 0;
+       for(int i = 0; i < nested_edls.size(); i++)
+       {
+               EDL *dst = nested_edls.get(i);
+               if(!strcmp(dst->path, src->path))
+                       return dst;
+       }
+
+       EDL *dst = new EDL;
+       dst->create_objects();
+       dst->copy_all(src);
+       nested_edls.append(dst);
+       return dst;
+}
+
+EDL* NestedEDLs::get(char *path)
+{
+       for(int i = 0; i < nested_edls.size(); i++)
+       {
+               EDL *dst = nested_edls.get(i);
+               if(!strcmp(dst->path, path))
+                       return dst;
+       }
+
+       EDL *dst = new EDL;
+       dst->create_objects();
+       FileXML xml_file;
+       xml_file.read_from_file(path);
+//printf("NestedEDLs::get %d %s\n", __LINE__, path);
+       dst->load_xml(&xml_file, LOAD_ALL);
+
+// Override path EDL was saved to with the path it was loaded from.
+       dst->set_path(path);
+       nested_edls.append(dst);
+       return dst;
+}
+
+void NestedEDLs::clear()
+{
+       for(int i = 0; i < nested_edls.size(); i++)
+               nested_edls.get(i)->Garbage::remove_user();
+       nested_edls.remove_all();
+}
+
+
+void NestedEDLs::update_index(EDL *nested_edl)
+{
+       for(int i = 0; i < nested_edls.size(); i++)
+       {
+               EDL *current = nested_edls.get(i);
+               if(!strcmp(current->path, nested_edl->path))
+               {
+// printf("NestedEDLs::update_index %d %p %d\n", 
+// __LINE__, 
+// current->index_state,
+// nested_edl->index_state->index_status);
+                       current->update_index(nested_edl);
+               }
+       }
+}
+
+void NestedEDLs::remove_edl(EDL *nested_edl)
+{
+       nested_edls.remove(nested_edl);
+       nested_edl->Garbage::remove_user();
+}
+
+
+