VSE: Support drag and drop for datablocks
For using the Outliner and/or the Asset Browser as scene independent tools to organize a/v source material is necessary for the users to be able to drag and drop data blocks into the VSE. This was also an unfulfilled design target for the Outliner Gsoc project. Datablocks won't be used directly. Path to file will be passed to strip add operator instead. Reviewed By: ISS Differential Revision: https://developer.blender.org/D13304
This commit is contained in:
parent
d1a4e043bd
commit
b42494cf6b
|
@ -28,6 +28,7 @@
|
|||
#include "DNA_gpencil_types.h"
|
||||
#include "DNA_mask_types.h"
|
||||
#include "DNA_scene_types.h"
|
||||
#include "DNA_sound_types.h"
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
|
@ -400,7 +401,7 @@ static bool image_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return WM_drag_is_ID_type(drag, ID_IM);
|
||||
}
|
||||
|
||||
static bool movie_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
|
||||
|
@ -416,7 +417,8 @@ static bool movie_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
|
|||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
return WM_drag_is_ID_type(drag, ID_MC);
|
||||
}
|
||||
|
||||
static bool sound_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
|
||||
|
@ -432,27 +434,54 @@ static bool sound_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
|
|||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
return WM_drag_is_ID_type(drag, ID_SO);
|
||||
}
|
||||
|
||||
static void sequencer_drop_copy(wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
/* Copy drag path to properties. */
|
||||
if (RNA_struct_find_property(drop->ptr, "filepath")) {
|
||||
RNA_string_set(drop->ptr, "filepath", drag->path);
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, 0);
|
||||
/* ID dropped. */
|
||||
if (id != NULL) {
|
||||
const ID_Type id_type = GS(id->name);
|
||||
if (id_type == ID_IM) {
|
||||
Image *ima = (Image *)id;
|
||||
PointerRNA itemptr;
|
||||
char dir[FILE_MAX], file[FILE_MAX];
|
||||
BLI_split_dirfile(ima->filepath, dir, file, sizeof(dir), sizeof(file));
|
||||
RNA_string_set(drop->ptr, "directory", dir);
|
||||
RNA_collection_clear(drop->ptr, "files");
|
||||
RNA_collection_add(drop->ptr, "files", &itemptr);
|
||||
RNA_string_set(&itemptr, "name", file);
|
||||
}
|
||||
else if (id_type == ID_MC) {
|
||||
MovieClip *clip = (MovieClip *)id;
|
||||
RNA_string_set(drop->ptr, "filepath", clip->filepath);
|
||||
RNA_struct_property_unset(drop->ptr, "name");
|
||||
}
|
||||
else if (id_type == ID_SO) {
|
||||
bSound *sound = (bSound *)id;
|
||||
RNA_string_set(drop->ptr, "filepath", sound->filepath);
|
||||
RNA_struct_property_unset(drop->ptr, "name");
|
||||
}
|
||||
}
|
||||
/* Path dropped. */
|
||||
else if (drag->path[0]) {
|
||||
if (RNA_struct_find_property(drop->ptr, "filepath")) {
|
||||
RNA_string_set(drop->ptr, "filepath", drag->path);
|
||||
}
|
||||
if (RNA_struct_find_property(drop->ptr, "directory")) {
|
||||
PointerRNA itemptr;
|
||||
char dir[FILE_MAX], file[FILE_MAX];
|
||||
|
||||
if (RNA_struct_find_property(drop->ptr, "directory")) {
|
||||
PointerRNA itemptr;
|
||||
char dir[FILE_MAX], file[FILE_MAX];
|
||||
BLI_split_dirfile(drag->path, dir, file, sizeof(dir), sizeof(file));
|
||||
|
||||
BLI_split_dirfile(drag->path, dir, file, sizeof(dir), sizeof(file));
|
||||
RNA_string_set(drop->ptr, "directory", dir);
|
||||
|
||||
RNA_string_set(drop->ptr, "directory", dir);
|
||||
|
||||
RNA_collection_clear(drop->ptr, "files");
|
||||
RNA_collection_add(drop->ptr, "files", &itemptr);
|
||||
RNA_string_set(&itemptr, "name", file);
|
||||
RNA_collection_clear(drop->ptr, "files");
|
||||
RNA_collection_add(drop->ptr, "files", &itemptr);
|
||||
RNA_string_set(&itemptr, "name", file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue