Blender  V3.3
rna_workspace_api.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <time.h>
11 
12 #include "BLI_utildefines.h"
13 
14 #include "RNA_define.h"
15 
16 #include "DNA_object_types.h"
18 #include "DNA_workspace_types.h"
19 
20 #include "RNA_enum_types.h" /* own include */
21 
22 #include "rna_internal.h" /* own include */
23 
24 #ifdef RNA_RUNTIME
25 
26 # include "BKE_paint.h"
27 
28 # include "ED_screen.h"
29 
30 static void rna_WorkSpaceTool_setup(ID *id,
31  bToolRef *tref,
32  bContext *C,
33  const char *idname,
34  /* Args for: 'bToolRef_Runtime'. */
35  int cursor,
36  const char *keymap,
37  const char *gizmo_group,
38  const char *data_block,
39  const char *op_idname,
40  int index,
41  int options,
42  const char *idname_fallback,
43  const char *keymap_fallback)
44 {
45  bToolRef_Runtime tref_rt = {0};
46 
47  tref_rt.cursor = cursor;
48  STRNCPY(tref_rt.keymap, keymap);
49  STRNCPY(tref_rt.gizmo_group, gizmo_group);
50  STRNCPY(tref_rt.data_block, data_block);
51  STRNCPY(tref_rt.op, op_idname);
52  tref_rt.index = index;
53  tref_rt.flag = options;
54 
55  /* While it's logical to assign both these values from setup,
56  * it's useful to stored this in DNA for re-use, exceptional case: write to the 'tref'. */
57  STRNCPY(tref->idname_fallback, idname_fallback);
58  STRNCPY(tref_rt.keymap_fallback, keymap_fallback);
59 
60  WM_toolsystem_ref_set_from_runtime(C, (WorkSpace *)id, tref, &tref_rt, idname);
61 }
62 
63 static void rna_WorkSpaceTool_refresh_from_context(ID *id, bToolRef *tref, Main *bmain)
64 {
66 }
67 
68 static PointerRNA rna_WorkSpaceTool_operator_properties(bToolRef *tref,
69  ReportList *reports,
70  const char *idname)
71 {
72  wmOperatorType *ot = WM_operatortype_find(idname, true);
73 
74  if (ot != NULL) {
77  return ptr;
78  }
79  else {
80  BKE_reportf(reports, RPT_ERROR, "Operator '%s' not found!", idname);
81  }
82  return PointerRNA_NULL;
83 }
84 
85 static PointerRNA rna_WorkSpaceTool_gizmo_group_properties(bToolRef *tref,
86  ReportList *reports,
87  const char *idname)
88 {
89  wmGizmoGroupType *gzgt = WM_gizmogrouptype_find(idname, false);
90  if (gzgt != NULL) {
93  return ptr;
94  }
95  else {
96  BKE_reportf(reports, RPT_ERROR, "Gizmo group '%s' not found!", idname);
97  }
98  return PointerRNA_NULL;
99 }
100 
101 #else
102 
104 {
105  FunctionRNA *func;
106  PropertyRNA *parm;
107 
108  func = RNA_def_function(srna, "status_text_set_internal", "ED_workspace_status_text");
111  func, "Set the status bar text, typically key shortcuts for modal operators");
112  parm = RNA_def_string(
113  func, "text", NULL, 0, "Text", "New string for the status bar, None clears the text");
116 }
117 
119 {
120  PropertyRNA *parm;
121  FunctionRNA *func;
122 
123  static EnumPropertyItem options_items[] = {
124  {TOOLREF_FLAG_FALLBACK_KEYMAP, "KEYMAP_FALLBACK", 0, "Fallback", ""},
125  {0, NULL, 0, NULL, NULL},
126  };
127 
128  func = RNA_def_function(srna, "setup", "rna_WorkSpaceTool_setup");
130  RNA_def_function_ui_description(func, "Set the tool settings");
131 
132  parm = RNA_def_string(func, "idname", NULL, MAX_NAME, "Identifier", "");
134 
135  /* 'bToolRef_Runtime' */
136  parm = RNA_def_property(func, "cursor", PROP_ENUM, PROP_NONE);
138  RNA_def_string(func, "keymap", NULL, KMAP_MAX_NAME, "Key Map", "");
139  RNA_def_string(func, "gizmo_group", NULL, MAX_NAME, "Gizmo Group", "");
140  RNA_def_string(func, "data_block", NULL, MAX_NAME, "Data Block", "");
141  RNA_def_string(func, "operator", NULL, MAX_NAME, "Operator", "");
142  RNA_def_int(func, "index", 0, INT_MIN, INT_MAX, "Index", "", INT_MIN, INT_MAX);
143  RNA_def_enum_flag(func, "options", options_items, 0, "Tool Options", "");
144 
145  RNA_def_string(func, "idname_fallback", NULL, MAX_NAME, "Fallback Identifier", "");
146  RNA_def_string(func, "keymap_fallback", NULL, KMAP_MAX_NAME, "Fallback Key Map", "");
147 
148  /* Access tool operator options (optionally create). */
149  func = RNA_def_function(srna, "operator_properties", "rna_WorkSpaceTool_operator_properties");
151  parm = RNA_def_string(func, "operator", NULL, 0, "", "");
153  /* return */
154  parm = RNA_def_pointer(func, "result", "OperatorProperties", "", "");
156  RNA_def_function_return(func, parm);
157 
158  /* Access gizmo-group options (optionally create). */
159  func = RNA_def_function(
160  srna, "gizmo_group_properties", "rna_WorkSpaceTool_gizmo_group_properties");
162  parm = RNA_def_string(func, "group", NULL, 0, "", "");
164  /* return */
165  parm = RNA_def_pointer(func, "result", "GizmoGroupProperties", "", "");
167  RNA_def_function_return(func, parm);
168 
169  func = RNA_def_function(srna, "refresh_from_context", "rna_WorkSpaceTool_refresh_from_context");
171 }
172 
173 #endif
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
#define STRNCPY(dst, src)
Definition: BLI_string.h:483
#define MAX_NAME
Definition: DNA_defs.h:48
Object is a sort of wrapper for general info.
#define KMAP_MAX_NAME
@ TOOLREF_FLAG_FALLBACK_KEYMAP
@ PARM_RNAPTR
Definition: RNA_types.h:354
@ PARM_REQUIRED
Definition: RNA_types.h:352
@ FUNC_USE_REPORTS
Definition: RNA_types.h:663
@ FUNC_NO_SELF
Definition: RNA_types.h:656
@ FUNC_USE_MAIN
Definition: RNA_types.h:661
@ FUNC_USE_CONTEXT
Definition: RNA_types.h:662
@ FUNC_USE_SELF_ID
Definition: RNA_types.h:650
@ PROP_ENUM
Definition: RNA_types.h:63
@ PROP_NEVER_NULL
Definition: RNA_types.h:239
@ PROP_NONE
Definition: RNA_types.h:126
#define C
Definition: RandGen.cpp:25
#define WM_toolsystem_ref_properties_ensure_from_gizmo_group(tref, gzgroup, r_ptr)
#define WM_toolsystem_ref_properties_ensure_from_operator(tref, ot, r_ptr)
CCL_NAMESPACE_BEGIN struct Options options
const PointerRNA PointerRNA_NULL
Definition: rna_access.c:61
PropertyRNA * RNA_def_enum_flag(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
Definition: rna_define.c:3806
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
Definition: rna_define.c:4170
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
Definition: rna_define.c:4312
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
Definition: rna_define.c:4273
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
Definition: rna_define.c:1872
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
Definition: rna_define.c:4347
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
Definition: rna_define.c:1257
void RNA_def_function_flag(FunctionRNA *func, int flag)
Definition: rna_define.c:4342
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1495
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen, const char *ui_name, const char *ui_description)
Definition: rna_define.c:3687
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, int default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax)
Definition: rna_define.c:3597
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
Definition: rna_define.c:1518
const EnumPropertyItem rna_enum_window_cursor_items[]
Definition: rna_wm_api.c:32
void RNA_api_workspace_tool(StructRNA *srna)
void RNA_api_workspace(StructRNA *srna)
Definition: DNA_ID.h:368
Definition: BKE_main.h:121
char idname_fallback[64]
PointerRNA * ptr
Definition: wm_files.c:3480
wmOperatorType * ot
Definition: wm_files.c:3479
wmGizmoGroupType * WM_gizmogrouptype_find(const char *idname, bool quiet)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_toolsystem_ref_sync_from_context(Main *bmain, WorkSpace *workspace, bToolRef *tref)
void WM_toolsystem_ref_set_from_runtime(struct bContext *C, struct WorkSpace *workspace, bToolRef *tref, const bToolRef_Runtime *tref_rt, const char *idname)