UI: Asset Shelf (Experimental Feature) #104831
|
@ -86,9 +86,9 @@ static bool ui_drop_material_poll(bContext *C, wmDrag *drag, const wmEvent * /*e
|
|||
return WM_drag_is_ID_type(drag, ID_MA) && !RNA_pointer_is_null(&mat_slot);
|
||||
}
|
||||
|
||||
static void ui_drop_material_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||
static void ui_drop_material_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
const ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, ID_MA);
|
||||
const ID *id = WM_drag_get_local_ID_or_import_from_asset(C, drag, ID_MA);
|
||||
RNA_int_set(drop->ptr, "session_uuid", int(id->session_uuid));
|
||||
}
|
||||
|
||||
|
|
|
@ -691,23 +691,23 @@ static bool node_mask_drop_poll(bContext * /*C*/, wmDrag *drag, const wmEvent *
|
|||
return WM_drag_is_ID_type(drag, ID_MSK);
|
||||
}
|
||||
|
||||
static void node_group_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||
static void node_group_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, 0);
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(C, drag, 0);
|
||||
|
||||
RNA_int_set(drop->ptr, "session_uuid", int(id->session_uuid));
|
||||
}
|
||||
|
||||
static void node_id_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||
static void node_id_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, 0);
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(C, drag, 0);
|
||||
|
||||
RNA_int_set(drop->ptr, "session_uuid", int(id->session_uuid));
|
||||
}
|
||||
|
||||
static void node_id_path_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||
static void node_id_path_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, 0);
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(C, drag, 0);
|
||||
|
||||
if (id) {
|
||||
RNA_int_set(drop->ptr, "session_uuid", int(id->session_uuid));
|
||||
|
|
|
@ -221,7 +221,7 @@ static float update_overlay_strip_position_data(bContext *C, const int mval[2])
|
|||
|
||||
static void sequencer_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, 0);
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(C, drag, 0);
|
||||
/* ID dropped. */
|
||||
if (id != nullptr) {
|
||||
const ID_Type id_type = GS(id->name);
|
||||
|
@ -316,9 +316,9 @@ static void sequencer_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
|||
}
|
||||
}
|
||||
|
||||
static void get_drag_path(wmDrag *drag, char r_path[FILE_MAX])
|
||||
static void get_drag_path(const bContext *C, wmDrag *drag, char r_path[FILE_MAX])
|
||||
{
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, 0);
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(C, drag, 0);
|
||||
/* ID dropped. */
|
||||
if (id != nullptr) {
|
||||
const ID_Type id_type = GS(id->name);
|
||||
|
@ -456,7 +456,7 @@ static void draw_seq_in_view(bContext *C, wmWindow * /*win*/, wmDrag *drag, cons
|
|||
char strip_duration_text[16];
|
||||
int len_text_arr = 0;
|
||||
|
||||
get_drag_path(drag, path);
|
||||
get_drag_path(C, drag, path);
|
||||
|
||||
if (sseq->timeline_overlay.flag & SEQ_TIMELINE_SHOW_STRIP_NAME) {
|
||||
BLI_path_split_file_part(path, filename, FILE_MAX);
|
||||
|
@ -590,7 +590,7 @@ static void start_audio_video_job(bContext *C, wmDrag *drag, bool only_audio)
|
|||
|
||||
DropJobData *job_data = (DropJobData *)MEM_mallocN(sizeof(DropJobData),
|
||||
"SeqDragDropPreviewData");
|
||||
get_drag_path(drag, job_data->path);
|
||||
get_drag_path(C, drag, job_data->path);
|
||||
|
||||
job_data->only_audio = only_audio;
|
||||
job_data->scene_fps = FPS;
|
||||
|
|
|
@ -820,7 +820,7 @@ static void view3d_ob_drop_copy_local_id(bContext * /*C*/, wmDrag *drag, wmDropB
|
|||
|
||||
/* Mostly the same logic as #view3d_collection_drop_copy_external_asset(), just different enough to
|
||||
* make sharing code a bit difficult. */
|
||||
static void view3d_ob_drop_copy_external_asset(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||
static void view3d_ob_drop_copy_external_asset(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
/* NOTE(@ideasman42): Selection is handled here, de-selecting objects before append,
|
||||
* using auto-select to ensure the new objects are selected.
|
||||
|
@ -829,13 +829,12 @@ static void view3d_ob_drop_copy_external_asset(bContext * /*C*/, wmDrag *drag, w
|
|||
BLI_assert(drag->type == WM_DRAG_ASSET);
|
||||
|
||||
wmDragAsset *asset_drag = WM_drag_get_asset_data(drag, 0);
|
||||
bContext *C = asset_drag->evil_C;
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
|
||||
BKE_view_layer_base_deselect_all(scene, view_layer);
|
||||
|
||||
ID *id = WM_drag_asset_id_import(asset_drag, FILE_AUTOSELECT);
|
||||
ID *id = WM_drag_asset_id_import(C, asset_drag, FILE_AUTOSELECT);
|
||||
|
||||
/* TODO(sergey): Only update relations for the current scene. */
|
||||
DEG_relations_tag_update(CTX_data_main(C));
|
||||
|
@ -870,20 +869,17 @@ static void view3d_collection_drop_copy_local_id(bContext * /*C*/, wmDrag *drag,
|
|||
|
||||
/* Mostly the same logic as #view3d_ob_drop_copy_external_asset(), just different enough to make
|
||||
* sharing code a bit difficult. */
|
||||
static void view3d_collection_drop_copy_external_asset(bContext * /*C*/,
|
||||
wmDrag *drag,
|
||||
wmDropBox *drop)
|
||||
static void view3d_collection_drop_copy_external_asset(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
BLI_assert(drag->type == WM_DRAG_ASSET);
|
||||
|
||||
wmDragAsset *asset_drag = WM_drag_get_asset_data(drag, 0);
|
||||
bContext *C = asset_drag->evil_C;
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
|
||||
BKE_view_layer_base_deselect_all(scene, view_layer);
|
||||
|
||||
ID *id = WM_drag_asset_id_import(asset_drag, FILE_AUTOSELECT);
|
||||
ID *id = WM_drag_asset_id_import(C, asset_drag, FILE_AUTOSELECT);
|
||||
Collection *collection = (Collection *)id;
|
||||
|
||||
/* TODO(sergey): Only update relations for the current scene. */
|
||||
|
@ -909,24 +905,24 @@ static void view3d_collection_drop_copy_external_asset(bContext * /*C*/,
|
|||
ED_undo_push(C, "Collection_Drop");
|
||||
}
|
||||
|
||||
static void view3d_id_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||
static void view3d_id_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, 0);
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(C, drag, 0);
|
||||
|
||||
WM_operator_properties_id_lookup_set_from_id(drop->ptr, id);
|
||||
}
|
||||
|
||||
static void view3d_id_drop_copy_with_type(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||
static void view3d_id_drop_copy_with_type(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, 0);
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(C, drag, 0);
|
||||
|
||||
RNA_enum_set(drop->ptr, "type", GS(id->name));
|
||||
WM_operator_properties_id_lookup_set_from_id(drop->ptr, id);
|
||||
}
|
||||
|
||||
static void view3d_id_path_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
|
||||
static void view3d_id_path_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, 0);
|
||||
ID *id = WM_drag_get_local_ID_or_import_from_asset(C, drag, 0);
|
||||
|
||||
if (id) {
|
||||
WM_operator_properties_id_lookup_set_from_id(drop->ptr, id);
|
||||
|
|
|
@ -1455,7 +1455,7 @@ ListBase *WM_dropboxmap_find(const char *idname, int spaceid, int regionid);
|
|||
/**
|
||||
* \param flag_extra: Additional linking flags (from #eFileSel_Params_Flag).
|
||||
*/
|
||||
ID *WM_drag_asset_id_import(wmDragAsset *asset_drag, int flag_extra);
|
||||
ID *WM_drag_asset_id_import(const struct bContext *C, wmDragAsset *asset_drag, int flag_extra);
|
||||
bool WM_drag_asset_will_import_linked(const wmDrag *drag);
|
||||
void WM_drag_add_local_ID(struct wmDrag *drag, struct ID *id, struct ID *from_parent);
|
||||
struct ID *WM_drag_get_local_ID(const struct wmDrag *drag, short idcode);
|
||||
|
@ -1483,7 +1483,9 @@ struct AssetMetaData *WM_drag_get_asset_meta_data(const struct wmDrag *drag, int
|
|||
* Use #WM_drag_free_imported_drag_ID() as cancel callback of the drop-box, so that the asset
|
||||
* import is rolled back if the drop operator fails.
|
||||
*/
|
||||
struct ID *WM_drag_get_local_ID_or_import_from_asset(const struct wmDrag *drag, int idcode);
|
||||
struct ID *WM_drag_get_local_ID_or_import_from_asset(const struct bContext *C,
|
||||
const struct wmDrag *drag,
|
||||
int idcode);
|
||||
|
||||
/**
|
||||
* \brief Free asset ID imported for canceled drop.
|
||||
|
|
|
@ -1111,13 +1111,6 @@ typedef struct wmDragID {
|
|||
typedef struct wmDragAsset {
|
||||
int import_method; /* eAssetImportType */
|
||||
const AssetRepresentationHandle *asset;
|
||||
|
||||
/* FIXME: This is temporary evil solution to get scene/view-layer/etc in the copy callback of the
|
||||
* #wmDropBox.
|
||||
* TODO: Handle link/append in operator called at the end of the drop process, and NOT in its
|
||||
* copy callback.
|
||||
* */
|
||||
struct bContext *evil_C;
|
||||
} wmDragAsset;
|
||||
|
||||
typedef struct wmDragAssetCatalog {
|
||||
|
|
|
@ -618,7 +618,7 @@ AssetMetaData *WM_drag_get_asset_meta_data(const wmDrag *drag, int idcode)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
ID *WM_drag_asset_id_import(wmDragAsset *asset_drag, const int flag_extra)
|
||||
ID *WM_drag_asset_id_import(const bContext *C, wmDragAsset *asset_drag, const int flag_extra)
|
||||
{
|
||||
/* Only support passing in limited flags. */
|
||||
BLI_assert(flag_extra == (flag_extra & FILE_AUTOSELECT));
|
||||
|
@ -633,10 +633,10 @@ ID *WM_drag_asset_id_import(wmDragAsset *asset_drag, const int flag_extra)
|
|||
/* FIXME: Link/Append should happens in the operator called at the end of drop process, not from
|
||||
* here. */
|
||||
|
||||
Main *bmain = CTX_data_main(asset_drag->evil_C);
|
||||
Scene *scene = CTX_data_scene(asset_drag->evil_C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(asset_drag->evil_C);
|
||||
View3D *view3d = CTX_wm_view3d(asset_drag->evil_C);
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
View3D *view3d = CTX_wm_view3d(C);
|
||||
|
||||
switch (eAssetImportMethod(asset_drag->import_method)) {
|
||||
case ASSET_IMPORT_LINK:
|
||||
|
@ -685,7 +685,7 @@ bool WM_drag_asset_will_import_linked(const wmDrag *drag)
|
|||
return asset_drag->import_method == ASSET_IMPORT_LINK;
|
||||
}
|
||||
|
||||
ID *WM_drag_get_local_ID_or_import_from_asset(const wmDrag *drag, int idcode)
|
||||
ID *WM_drag_get_local_ID_or_import_from_asset(const bContext *C, const wmDrag *drag, int idcode)
|
||||
{
|
||||
if (!ELEM(drag->type, WM_DRAG_ASSET, WM_DRAG_ID)) {
|
||||
return nullptr;
|
||||
|
@ -701,7 +701,7 @@ ID *WM_drag_get_local_ID_or_import_from_asset(const wmDrag *drag, int idcode)
|
|||
}
|
||||
|
||||
/* Link/append the asset. */
|
||||
return WM_drag_asset_id_import(asset_drag, 0);
|
||||
return WM_drag_asset_id_import(C, asset_drag, 0);
|
||||
}
|
||||
|
||||
void WM_drag_free_imported_drag_ID(Main *bmain, wmDrag *drag, wmDropBox *drop)
|
||||
|
|
Loading…
Reference in New Issue