Blender
V5.0
source
blender
editors
interface
templates
interface_template_strip_modifiers.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2025 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
10
11
#include "
DNA_scene_types.h
"
12
#include "
DNA_sequence_types.h
"
13
14
#include "
BKE_context.hh
"
15
#include "
BKE_screen.hh
"
16
17
#include "
BLI_listbase.h
"
18
19
#include "
SEQ_modifier.hh
"
20
#include "
SEQ_select.hh
"
21
22
#include "
RNA_access.hh
"
23
#include "RNA_prototypes.hh"
24
25
#include "
UI_interface.hh
"
26
#include "
UI_interface_layout.hh
"
27
28
static
void
strip_modifier_panel_id
(
void
*smd_link,
char
*r_name)
29
{
30
StripModifierData
*smd =
reinterpret_cast<
StripModifierData
*
>
(smd_link);
31
blender::seq::modifier_type_panel_id
(
eStripModifierType
(smd->
type
), r_name);
32
}
33
34
void
uiTemplateStripModifiers
(
uiLayout
*
/*layout*/
,
bContext
*
C
)
35
{
36
using namespace
blender
;
37
ARegion
*region =
CTX_wm_region
(
C
);
38
39
Scene
*sequencer_scene =
CTX_data_sequencer_scene
(
C
);
40
if
(!sequencer_scene) {
41
return
;
42
}
43
Strip
*active_strip =
seq::select_active_get
(sequencer_scene);
44
BLI_assert
(active_strip !=
nullptr
);
45
ListBase
*modifiers = &active_strip->
modifiers
;
46
47
const
bool
panels_match =
UI_panel_list_matches_data
(region, modifiers,
strip_modifier_panel_id
);
48
49
if
(!panels_match) {
50
UI_panels_free_instanced
(
C
, region);
51
LISTBASE_FOREACH
(
StripModifierData
*, smd, modifiers) {
52
const
seq::StripModifierTypeInfo
*mti =
seq::modifier_type_info_get
(smd->type);
53
if
(mti->
panel_register
==
nullptr
) {
54
continue
;
55
}
56
57
char
panel_idname[
MAX_NAME
];
58
strip_modifier_panel_id
(smd, panel_idname);
59
60
/* Create custom data RNA pointer. */
61
PointerRNA
*md_ptr = MEM_new<PointerRNA>(__func__);
62
*md_ptr =
RNA_pointer_create_discrete
(&sequencer_scene->
id
, &RNA_StripModifier, smd);
63
64
UI_panel_add_instanced
(
C
, region, ®ion->
panels
, panel_idname, md_ptr);
65
}
66
}
67
else
{
68
/* Assuming there's only one group of instanced panels, update the custom data pointers. */
69
Panel
*panel =
static_cast<
Panel
*
>
(region->
panels
.
first
);
70
LISTBASE_FOREACH
(
StripModifierData
*, smd, modifiers) {
71
const
seq::StripModifierTypeInfo
*mti =
seq::modifier_type_info_get
(smd->type);
72
if
(mti->
panel_register
==
nullptr
) {
73
continue
;
74
}
75
76
/* Move to the next instanced panel corresponding to the next modifier. */
77
while
((panel->
type
==
nullptr
) || !(panel->
type
->
flag
&
PANEL_TYPE_INSTANCED
)) {
78
panel = panel->
next
;
79
/* There shouldn't be fewer panels than modifiers with UIs. */
80
BLI_assert
(panel !=
nullptr
);
81
}
82
83
PointerRNA
*md_ptr = MEM_new<PointerRNA>(__func__);
84
*md_ptr =
RNA_pointer_create_discrete
(&sequencer_scene->
id
, &RNA_StripModifier, smd);
85
UI_panel_custom_data_set
(panel, md_ptr);
86
87
panel = panel->
next
;
88
}
89
}
90
}
BKE_context.hh
CTX_wm_region
ARegion * CTX_wm_region(const bContext *C)
Definition
blenkernel/intern/context.cc:961
CTX_data_sequencer_scene
Scene * CTX_data_sequencer_scene(const bContext *C)
Definition
blenkernel/intern/context.cc:1320
BKE_screen.hh
PANEL_TYPE_INSTANCED
@ PANEL_TYPE_INSTANCED
Definition
BKE_screen.hh:394
BLI_assert
#define BLI_assert(a)
Definition
BLI_assert.h:46
BLI_listbase.h
LISTBASE_FOREACH
#define LISTBASE_FOREACH(type, var, list)
Definition
BLI_listbase.h:363
MAX_NAME
#define MAX_NAME
Definition
DNA_defs.h:50
DNA_scene_types.h
DNA_sequence_types.h
eStripModifierType
eStripModifierType
Definition
DNA_sequence_types.h:888
RNA_access.hh
C
#define C
Definition
RandGen.cpp:29
SEQ_modifier.hh
SEQ_select.hh
UI_interface.hh
UI_panels_free_instanced
void UI_panels_free_instanced(const bContext *C, ARegion *region)
Definition
interface_panel.cc:307
UI_panel_custom_data_set
void UI_panel_custom_data_set(Panel *panel, PointerRNA *custom_data)
Definition
interface_panel.cc:2749
UI_panel_list_matches_data
bool UI_panel_list_matches_data(ARegion *region, ListBase *data, uiListPanelIDFromDataFunc panel_idname_func)
Definition
interface_panel.cc:332
UI_panel_add_instanced
Panel * UI_panel_add_instanced(const bContext *C, ARegion *region, ListBase *panels, const char *panel_idname, PointerRNA *custom_data)
Definition
interface_panel.cc:257
UI_interface_layout.hh
strip_modifier_panel_id
static void strip_modifier_panel_id(void *smd_link, char *r_name)
Definition
interface_template_strip_modifiers.cc:28
uiTemplateStripModifiers
void uiTemplateStripModifiers(uiLayout *, bContext *C)
Definition
interface_template_strip_modifiers.cc:34
blender::seq::modifier_type_panel_id
void modifier_type_panel_id(eStripModifierType type, char *r_idname)
Definition
sequencer/intern/modifiers/modifier.cc:589
blender::seq::select_active_get
Strip * select_active_get(const Scene *scene)
Definition
strip_select.cc:21
blender::seq::modifier_type_info_get
const StripModifierTypeInfo * modifier_type_info_get(int type)
Definition
sequencer/intern/modifiers/modifier.cc:358
blender
Definition
ANIM_action.hh:36
RNA_pointer_create_discrete
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
Definition
rna_access.cc:194
ARegion
Definition
DNA_screen_types.h:509
ARegion::panels
ListBase panels
Definition
DNA_screen_types.h:545
ListBase
Definition
DNA_listBase.h:32
ListBase::first
void * first
Definition
DNA_listBase.h:33
PanelType::flag
int flag
Definition
BKE_screen.hh:343
Panel
Definition
DNA_screen_types.h:164
Panel::type
struct PanelType * type
Definition
DNA_screen_types.h:168
Panel::next
struct Panel * next
Definition
DNA_screen_types.h:165
PointerRNA
Definition
RNA_types.hh:50
Scene
Definition
DNA_scene_types.h:2120
Scene::id
ID id
Definition
DNA_scene_types.h:2126
StripModifierData
Definition
DNA_sequence_types.h:551
StripModifierData::type
int type
Definition
DNA_sequence_types.h:553
Strip
Definition
DNA_sequence_types.h:172
Strip::modifiers
ListBase modifiers
Definition
DNA_sequence_types.h:289
bContext
Definition
blenkernel/intern/context.cc:63
blender::seq::StripModifierTypeInfo
Definition
SEQ_modifier.hh:28
blender::seq::StripModifierTypeInfo::panel_register
void(* panel_register)(ARegionType *region_type)
Definition
SEQ_modifier.hh:60
uiLayout
Definition
UI_interface_layout.hh:102
Generated on
for Blender by
doxygen
1.16.1