Blender
V3.3
source
blender
windowmanager
intern
wm_menu_type.c
Go to the documentation of this file.
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
9
#include <stdio.h>
10
11
#include "
BLI_sys_types.h
"
12
13
#include "
DNA_windowmanager_types.h
"
14
#include "
DNA_workspace_types.h
"
15
16
#include "
MEM_guardedalloc.h
"
17
18
#include "
BLI_ghash.h
"
19
#include "
BLI_utildefines.h
"
20
21
#include "
BKE_context.h
"
22
#include "
BKE_screen.h
"
23
#include "
BKE_workspace.h
"
24
25
#include "
WM_api.h
"
26
#include "
WM_types.h
"
27
28
static
GHash
*
menutypes_hash
=
NULL
;
29
30
MenuType
*
WM_menutype_find
(
const
char
*idname,
bool
quiet)
31
{
32
if
(idname[0]) {
33
MenuType
*mt =
BLI_ghash_lookup
(
menutypes_hash
, idname);
34
if
(mt) {
35
return
mt;
36
}
37
}
38
39
if
(!quiet) {
40
printf(
"search for unknown menutype %s\n"
, idname);
41
}
42
43
return
NULL
;
44
}
45
46
void
WM_menutype_iter
(
GHashIterator
*ghi)
47
{
48
BLI_ghashIterator_init
(ghi,
menutypes_hash
);
49
}
50
51
bool
WM_menutype_add
(
MenuType
*mt)
52
{
53
BLI_assert
((mt->
description
==
NULL
) || (mt->
description
[0]));
54
BLI_ghash_insert
(
menutypes_hash
, mt->
idname
, mt);
55
return
true
;
56
}
57
58
void
WM_menutype_freelink
(
MenuType
*mt)
59
{
60
bool
ok =
BLI_ghash_remove
(
menutypes_hash
, mt->
idname
,
NULL
,
MEM_freeN
);
61
62
BLI_assert
(ok);
63
UNUSED_VARS_NDEBUG
(ok);
64
}
65
66
void
WM_menutype_init
(
void
)
67
{
68
/* reserve size is set based on blender default setup */
69
menutypes_hash
=
BLI_ghash_str_new_ex
(
"menutypes_hash gh"
, 512);
70
}
71
72
void
WM_menutype_free
(
void
)
73
{
74
GHashIterator
gh_iter;
75
76
GHASH_ITER
(gh_iter,
menutypes_hash
) {
77
MenuType
*mt =
BLI_ghashIterator_getValue
(&gh_iter);
78
if
(mt->
rna_ext
.
free
) {
79
mt->
rna_ext
.
free
(mt->
rna_ext
.
data
);
80
}
81
}
82
83
BLI_ghash_free
(
menutypes_hash
,
NULL
,
MEM_freeN
);
84
menutypes_hash
=
NULL
;
85
}
86
87
bool
WM_menutype_poll
(
bContext
*
C
,
MenuType
*mt)
88
{
89
/* If we're tagged, only use compatible. */
90
if
(mt->
owner_id
[0] !=
'\0'
) {
91
const
WorkSpace
*workspace =
CTX_wm_workspace
(
C
);
92
if
(
BKE_workspace_owner_id_check
(workspace, mt->
owner_id
) ==
false
) {
93
return
false
;
94
}
95
}
96
97
if
(mt->
poll
!=
NULL
) {
98
return
mt->
poll
(
C
, mt);
99
}
100
return
true
;
101
}
102
103
void
WM_menutype_idname_visit_for_search
(
const
bContext
*
UNUSED
(
C
),
104
PointerRNA
*
UNUSED
(
ptr
),
105
PropertyRNA
*
UNUSED
(prop),
106
const
char
*
UNUSED
(edit_text),
107
StringPropertySearchVisitFunc
visit_fn,
108
void
*visit_user_data)
109
{
110
GHashIterator
gh_iter;
111
GHASH_ITER
(gh_iter,
menutypes_hash
) {
112
MenuType
*mt =
BLI_ghashIterator_getValue
(&gh_iter);
113
114
StringPropertySearchVisitParams
visit_params = {
NULL
};
115
visit_params.
text
= mt->
idname
;
116
visit_params.
info
= mt->
label
;
117
visit_fn(visit_user_data, &visit_params);
118
}
119
}
BKE_context.h
CTX_wm_workspace
struct WorkSpace * CTX_wm_workspace(const bContext *C)
Definition:
context.c:728
BKE_screen.h
BKE_workspace.h
BKE_workspace_owner_id_check
bool BKE_workspace_owner_id_check(const struct WorkSpace *workspace, const char *owner_id) ATTR_NONNULL()
BLI_assert
#define BLI_assert(a)
Definition:
BLI_assert.h:46
BLI_ghash.h
BLI_ghash_str_new_ex
GHash * BLI_ghash_str_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
Definition:
BLI_ghash_utils.c:198
BLI_ghashIterator_getValue
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition:
BLI_ghash.h:302
GHASH_ITER
#define GHASH_ITER(gh_iter_, ghash_)
Definition:
BLI_ghash.h:321
BLI_ghash_lookup
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
Definition:
BLI_ghash.c:734
BLI_ghash_remove
bool BLI_ghash_remove(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition:
BLI_ghash.c:790
BLI_ghash_insert
void BLI_ghash_insert(GHash *gh, void *key, void *val)
Definition:
BLI_ghash.c:710
BLI_ghash_free
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition:
BLI_ghash.c:863
BLI_ghashIterator_init
void BLI_ghashIterator_init(GHashIterator *ghi, GHash *gh)
Definition:
BLI_ghash.c:898
BLI_sys_types.h
BLI_utildefines.h
UNUSED_VARS_NDEBUG
#define UNUSED_VARS_NDEBUG(...)
Definition:
BLI_utildefines.h:736
UNUSED
#define UNUSED(x)
Definition:
BLI_utildefines.h:671
DNA_windowmanager_types.h
DNA_workspace_types.h
MEM_guardedalloc.h
Read Guarded memory(de)allocation.
StringPropertySearchVisitFunc
void(* StringPropertySearchVisitFunc)(void *visit_user_data, const StringPropertySearchVisitParams *params)
Definition:
RNA_types.h:568
C
#define C
Definition:
RandGen.cpp:25
WM_api.h
WM_types.h
NULL
return NULL
Definition:
bmesh_operator_api_inline.h:205
MEM_freeN
void(* MEM_freeN)(void *vmemh)
Definition:
mallocn.c:27
ExtensionRNA::data
void * data
Definition:
RNA_types.h:765
ExtensionRNA::free
StructFreeFunc free
Definition:
RNA_types.h:768
GHashIterator
Definition:
BLI_ghash.h:44
GHash
Definition:
BLI_ghash.c:83
MenuType
Definition:
BKE_screen.h:358
MenuType::description
const char * description
Definition:
BKE_screen.h:365
MenuType::owner_id
char owner_id[BKE_ST_MAXNAME]
Definition:
BKE_screen.h:364
MenuType::label
char label[BKE_ST_MAXNAME]
Definition:
BKE_screen.h:362
MenuType::rna_ext
ExtensionRNA rna_ext
Definition:
BKE_screen.h:373
MenuType::idname
char idname[BKE_ST_MAXNAME]
Definition:
BKE_screen.h:361
MenuType::poll
bool(* poll)(const struct bContext *C, struct MenuType *mt)
Definition:
BKE_screen.h:368
PointerRNA
Definition:
RNA_types.h:35
PropertyRNA
Definition:
rna_internal_types.h:282
StringPropertySearchVisitParams
Definition:
RNA_types.h:540
StringPropertySearchVisitParams::text
const char * text
Definition:
RNA_types.h:542
StringPropertySearchVisitParams::info
const char * info
Definition:
RNA_types.h:544
WorkSpace
Definition:
DNA_workspace_types.h:109
bContext
Definition:
context.c:56
ptr
PointerRNA * ptr
Definition:
wm_files.c:3480
WM_menutype_iter
void WM_menutype_iter(GHashIterator *ghi)
Definition:
wm_menu_type.c:46
WM_menutype_idname_visit_for_search
void WM_menutype_idname_visit_for_search(const bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), const char *UNUSED(edit_text), StringPropertySearchVisitFunc visit_fn, void *visit_user_data)
Definition:
wm_menu_type.c:103
WM_menutype_find
MenuType * WM_menutype_find(const char *idname, bool quiet)
Definition:
wm_menu_type.c:30
WM_menutype_free
void WM_menutype_free(void)
Definition:
wm_menu_type.c:72
WM_menutype_add
bool WM_menutype_add(MenuType *mt)
Definition:
wm_menu_type.c:51
WM_menutype_init
void WM_menutype_init(void)
Definition:
wm_menu_type.c:66
WM_menutype_poll
bool WM_menutype_poll(bContext *C, MenuType *mt)
Definition:
wm_menu_type.c:87
WM_menutype_freelink
void WM_menutype_freelink(MenuType *mt)
Definition:
wm_menu_type.c:58
menutypes_hash
static GHash * menutypes_hash
Definition:
wm_menu_type.c:28
Generated on Tue Oct 22 2024 13:18:25 for Blender by
doxygen
1.9.1