59# include <AUD_Special.h>
84 if (fcurves_src ==
nullptr) {
117 const char *filepath,
125 const char *scene_name =
"copybuffer_vse_scene";
129 copy_buffer.id_create(
ID_SCE,
133 PartialWriteContext::IDAddOperations::SET_FAKE_USER |
134 PartialWriteContext::IDAddOperations::SET_CLIPBOARD_MARK)}));
137 scene_dst->
ed = MEM_cnew<Editing>(__func__);
148 if (active_seq_src) {
156 ListBase fcurves_dst = {
nullptr,
nullptr};
157 ListBase drivers_dst = {
nullptr,
nullptr};
167 ID_AC, scene_name,
nullptr, {PartialWriteContext::IDAddOperations::SET_FAKE_USER}));
182#define VSE_COPYBUFFER_IDTYPES ID_SO, ID_MC, ID_IM, ID_TXT, ID_VF, ID_AC
183 auto add_scene_ids_dependencies_cb = [©_buffer,
185 ID *id_src = *cb_data->id_pointer;
206 ID *id_dst =
nullptr;
207 const ID_Type id_type =
GS((id_src)->name);
218 const ID_Type id_type =
GS((id_deps_src)->name);
222 return PartialWriteContext::IDAddOperations::ADD_DEPENDENCIES;
224 return PartialWriteContext::IDAddOperations::CLEAR_DEPENDENCIES;
226 id_dst = copy_buffer.id_add(id_src,
227 {PartialWriteContext::IDAddOperations::NOP},
228 partial_write_dependencies_filter_cb);
230 *cb_data->id_pointer = id_dst;
234 nullptr, &scene_dst->
id, add_scene_ids_dependencies_cb,
nullptr,
IDWALK_NOP);
235#undef VSE_COPYBUFFER_IDTYPES
239 const bool retval = copy_buffer.write(filepath, reports);
265 op->
reports,
RPT_INFO,
"Copied the selected Video Sequencer strips to internal clipboard");
281 if (scene_dst->
adt !=
nullptr && scene_dst->
adt->
action !=
nullptr) {
307 if (bfd ==
nullptr) {
316 Scene *scene_src =
nullptr;
320 scene_src = scene_iter;
325 if (!scene_src || !scene_src->
ed) {
332 if (num_strips_to_paste == 0) {
347 int min_seq_startdisp = INT_MAX;
354 ofs = scene_dst->
r.
cfra - min_seq_startdisp;
358 std::string active_seq_name;
359 if (prev_active_seq) {
360 active_seq_name.assign(prev_active_seq->
name);
381 ListBase nseqbase = {
nullptr,
nullptr};
385 scene_src, scene_dst, &nseqbase, &scene_src->
ed->
seqbase, 0, 0);
398 nseqbase.
first = iseq_first;
401 if (iseq->name == active_seq_name) {
Functions to work with AnimData.
AnimData * BKE_animdata_ensure_id(ID *id)
const char * BKE_tempdir_base() ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
BlendFileData * BKE_blendfile_read(const char *filepath, const BlendFileReadParams *params, BlendFileReadReport *reports)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
FCurve * BKE_fcurve_copy(const FCurve *fcu)
void BKE_id_delete(Main *bmain, void *idv) ATTR_NONNULL()
@ IDWALK_CB_EMBEDDED_NOT_OWNING
void BKE_library_foreach_ID_link(Main *bmain, ID *id, blender::FunctionRef< LibraryIDLinkCallback > callback, void *user_data, int flag)
void BKE_main_merge(Main *bmain_dst, Main **r_bmain_src, MainMergeReport &reports)
void BKE_main_free(Main *bmain)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
#define GSET_FOREACH_END()
#define GSET_FOREACH_BEGIN(type, var, what)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void void void void void void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1
void void void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define BLI_path_join(...)
external readfile function prototypes.
void BLO_blendfiledata_free(BlendFileData *bfd)
external writefile.cc function prototypes.
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ ID_RECALC_SEQUENCER_STRIPS
void ED_outliner_select_sync_from_sequence_tag(bContext *C)
bool ED_sequencer_deselect_all(Scene *scene)
Read Guarded memory(de)allocation.
void SEQ_animation_backup_original(Scene *scene, SeqAnimationBackup *backup)
bool SEQ_animation_drivers_exist(Scene *scene)
bool SEQ_animation_curves_exist(Scene *scene)
GSet * SEQ_fcurves_by_strip_get(const Sequence *seq, ListBase *fcurve_base)
void SEQ_animation_restore_original(Scene *scene, SeqAnimationBackup *backup)
bAction * id_action_ensure(Main *bmain, ID *id)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void SEQ_ensure_unique_name(Sequence *seq, Scene *scene)
void SEQ_sequence_base_dupli_recursive(const Scene *scene_src, Scene *scene_dst, ListBase *nseqbase, const ListBase *seqbase, int dupe_flag, const int flag)
Editing * SEQ_editing_ensure(Scene *scene)
Editing * SEQ_editing_get(const Scene *scene)
#define VSE_COPYBUFFER_IDTYPES
static bool sequencer_paste_animation(Main *bmain_dst, Scene *scene_dst, Scene *scene_src)
static bool sequencer_write_copy_paste_file(Main *bmain_src, Scene *scene_src, const char *filepath, ReportList &reports)
static void sequencer_copy_animation(Scene *scene_src, ListBase *fcurves_dst, ListBase *drivers_dst, Sequence *seq_dst)
int sequencer_clipboard_paste_exec(bContext *C, wmOperator *op)
static void sequencer_copy_animation_listbase(Scene *scene_src, Sequence *seq_dst, ListBase *clipboard_dst, ListBase *fcurve_base_src)
int sequencer_clipboard_copy_exec(bContext *C, wmOperator *op)
static void sequencer_copybuffer_filepath_get(char filepath[FILE_MAX], size_t filepath_maxncpy)
void SEQ_select_active_set(Scene *scene, Sequence *seq)
Sequence * SEQ_select_active_get(const Scene *scene)
int SEQ_time_left_handle_frame_get(const Scene *, const Sequence *seq)
ListBase * displayed_channels
struct ReportList * reports
void WM_event_add_notifier(const bContext *C, uint type, void *reference)