Blender V4.3
wm_panel_type.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
15#include <cstdio>
16
17#include "BLI_sys_types.h"
18
20
21#include "BLI_ghash.h"
22#include "BLI_utildefines.h"
23
24#include "BKE_screen.hh"
25
26#include "WM_api.hh"
27
28static GHash *g_paneltypes_hash = nullptr;
29
30PanelType *WM_paneltype_find(const char *idname, bool quiet)
31{
32 if (idname[0]) {
33 PanelType *pt = static_cast<PanelType *>(BLI_ghash_lookup(g_paneltypes_hash, idname));
34 if (pt) {
35 return pt;
36 }
37 }
38
39 if (!quiet) {
40 printf("search for unknown paneltype %s\n", idname);
41 }
42
43 return nullptr;
44}
45
47{
49 return true;
50}
51
53{
54 const bool ok = BLI_ghash_remove(g_paneltypes_hash, pt->idname, nullptr, nullptr);
55
56 BLI_assert(ok);
58}
59
61{
62 /* Reserve size is set based on blender default setup. */
63 g_paneltypes_hash = BLI_ghash_str_new_ex("g_paneltypes_hash gh", 512);
64}
65
67{
68 BLI_ghash_free(g_paneltypes_hash, nullptr, nullptr);
69}
70
72 const bContext * /*C*/,
73 PointerRNA * /*ptr*/,
74 PropertyRNA * /*prop*/,
75 const char * /*edit_text*/,
77{
78 GHashIterator gh_iter;
79 GHASH_ITER (gh_iter, g_paneltypes_hash) {
80 PanelType *pt = static_cast<PanelType *>(BLI_ghashIterator_getValue(&gh_iter));
81
83 visit_params.text = pt->idname;
84 visit_params.info = pt->label;
85 visit_fn(visit_params);
86 }
87}
#define BLI_assert(a)
Definition BLI_assert.h:50
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.h:303
#define GHASH_ITER(gh_iter_, ghash_)
Definition BLI_ghash.h:322
GHash * BLI_ghash_str_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_remove(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition BLI_ghash.c:787
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
Definition BLI_ghash.c:731
void BLI_ghash_insert(GHash *gh, void *key, void *val)
Definition BLI_ghash.c:707
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
Definition BLI_ghash.c:860
#define UNUSED_VARS_NDEBUG(...)
#define printf
char idname[BKE_ST_MAXNAME]
char label[BKE_ST_MAXNAME]
static GHash * g_paneltypes_hash
bool WM_paneltype_add(PanelType *pt)
void WM_paneltype_init()
void WM_paneltype_remove(PanelType *pt)
PanelType * WM_paneltype_find(const char *idname, bool quiet)
void WM_paneltype_idname_visit_for_search(const bContext *, PointerRNA *, PropertyRNA *, const char *, blender::FunctionRef< void(StringPropertySearchVisitParams)> visit_fn)
void WM_paneltype_clear()