}
-PluginSet& PluginSet::operator=(PluginSet& plugins)
-{
-printf("PluginSet::operator= 1\n");
- copy_from(&plugins);
- return *this;
-}
-
void PluginSet::copy_from(PluginSet *src)
{
while(last) delete last;
Plugin *new_plugin;
append(new_plugin = (Plugin*)create_edit());
new_plugin->copy_from(current);
+// update gui_id when copying edl
+ new_plugin->gui_id = current->gui_id;
}
this->record = src->record;
}
}
Plugin* PluginSet::insert_plugin(const char *title,
- int64_t unit_position,
- int64_t unit_length,
- int plugin_type,
- SharedLocation *shared_location,
- KeyFrame *default_keyframe,
+ int64_t unit_position, int64_t unit_length, int plugin_type,
+ SharedLocation *shared_location, KeyFrame *default_keyframe,
int do_optimize)
{
Plugin *plugin = (Plugin*)create_silence(unit_position, unit_position + unit_length);
- if(title) strcpy(plugin->title, title);
- if(shared_location) plugin->shared_location = *shared_location;
- plugin->plugin_type = plugin_type;
-
- if(default_keyframe)
- *plugin->keyframes->default_auto = *default_keyframe;
- plugin->keyframes->default_auto->position = unit_position;
-
+ plugin->init(title, unit_position, unit_length, plugin_type,
+ shared_location, default_keyframe);
// May delete the plugin we just added so not desirable while loading.
- if(do_optimize) optimize();
+ if( do_optimize ) optimize();
return plugin;
}
}
}
+void PluginSet::paste_silence(int64_t start, int64_t end, int edit_autos)
+{
+ Plugin *new_plugin = (Plugin *) insert_new_edit(start);
+ int64_t length = end - start;
+ new_plugin->length = length;
+ while( (new_plugin=(Plugin *)new_plugin->next) != 0 ) {
+ new_plugin->startproject += length;
+ if( !edit_autos ) continue;
+ new_plugin->keyframes->default_auto->position += length;
+ new_plugin->keyframes->paste_silence(start, end);
+ }
+}
+
void PluginSet::copy(int64_t start, int64_t end, FileXML *file)
{
file->tag.set_title("PLUGINSET");
int result = 1;
Plugin *current_edit;
+// trim plugins before position 0
+ while( first && first->startproject+first->length < 0 )
+ delete first;
+ if( first && first->startproject < 0 ) {
+ first->length += first->startproject;
+ first->startproject = 0;
+ }
// Delete keyframes out of range
for(current_edit = (Plugin*)first;
source;
source = (KeyFrame*)source->next) {
KeyFrame *dest = new KeyFrame(edl, current_edit->keyframes);
- *dest = *source;
+ dest->copy_from(source);
current_edit->keyframes->append(dest);
}
remove(next_edit);