Blender V5.0
space_script.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <cstring>
10
11#include "MEM_guardedalloc.h"
12
13#include "BLI_listbase.h"
14#include "BLI_string_utf8.h"
15
16#include "BKE_context.hh"
17#include "BKE_lib_query.hh"
18#include "BKE_screen.hh"
19
20#include "ED_screen.hh"
21#include "ED_space_api.hh"
22
23#include "WM_api.hh"
24
25#include "UI_resources.hh"
26#include "UI_view2d.hh"
27
28#include "BLO_read_write.hh"
29
30#include "script_intern.hh" /* own include */
31
32// static script_run_python(char *funcname, )
33
34/* ******************** default callbacks for script space ***************** */
35
36static SpaceLink *script_create(const ScrArea * /*area*/, const Scene * /*scene*/)
37{
38 ARegion *region;
39 SpaceScript *sscript;
40
41 sscript = MEM_callocN<SpaceScript>("initscript");
42 sscript->spacetype = SPACE_SCRIPT;
43
44 /* header */
45 region = BKE_area_region_new();
46
47 BLI_addtail(&sscript->regionbase, region);
50
51 /* main region */
52 region = BKE_area_region_new();
53
54 BLI_addtail(&sscript->regionbase, region);
56
57 /* channel list region XXX */
58
59 return (SpaceLink *)sscript;
60}
61
62/* Doesn't free the space-link itself. */
63static void script_free(SpaceLink *sl)
64{
65 SpaceScript *sscript = (SpaceScript *)sl;
66
67#ifdef WITH_PYTHON
68 /* Free buttons references. */
69 if (sscript->but_refs) {
70 sscript->but_refs = nullptr;
71 }
72#endif
73 sscript->script = nullptr;
74}
75
76/* spacetype; init callback */
77static void script_init(wmWindowManager * /*wm*/, ScrArea * /*area*/) {}
78
80{
81 SpaceScript *sscriptn = static_cast<SpaceScript *>(MEM_dupallocN(sl));
82
83 /* clear or remove stuff from old */
84
85 return (SpaceLink *)sscriptn;
86}
87
88/* add handlers, stuff you only do once or on area/region changes */
90{
91 wmKeyMap *keymap;
92
93 UI_view2d_region_reinit(&region->v2d, V2D_COMMONVIEW_STANDARD, region->winx, region->winy);
94
95 /* own keymap */
96 keymap = WM_keymap_ensure(wm->runtime->defaultconf, "Script", SPACE_SCRIPT, RGN_TYPE_WINDOW);
97 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
98}
99
100static void script_main_region_draw(const bContext *C, ARegion *region)
101{
102 /* draw entirely, view changes should be handled here */
104 View2D *v2d = &region->v2d;
105
106 /* clear and setup matrix */
108
110
111 /* data... */
112 // BPY_script_exec(C, "/root/blender-svn/blender25/test.py", nullptr);
113
114#ifdef WITH_PYTHON
115 if (sscript->script) {
116 // BPY_run_script_space_draw(C, sscript);
117 }
118#else
119 (void)sscript;
120#endif
121
122 /* reset view matrix */
124
125 /* scrollers? */
126}
127
128/* add handlers, stuff you only do once or on area/region changes */
130{
131 ED_region_header_init(region);
132}
133
134static void script_header_region_draw(const bContext *C, ARegion *region)
135{
136 ED_region_header(C, region);
137}
138
140{
141/* XXX: Todo, need the ScriptSpace accessible to get the python script to run. */
142#if 0
143 BPY_run_script_space_listener()
144#endif
145}
146
148{
149 SpaceScript *scpt = reinterpret_cast<SpaceScript *>(space_link);
151}
152
154 ID * /*parent_id*/,
155 SpaceLink *sl)
156{
157 SpaceScript *scpt = reinterpret_cast<SpaceScript *>(sl);
158
159 /*scpt->script = nullptr; - 2.45 set to null, better re-run the script */
160 if (scpt->script) {
161 SCRIPT_SET_NULL(scpt->script);
162 }
163}
164
166{
167 SpaceScript *scr = (SpaceScript *)sl;
168 scr->but_refs = nullptr;
169 BLO_write_struct(writer, SpaceScript, sl);
170}
171
173{
174 std::unique_ptr<SpaceType> st = std::make_unique<SpaceType>();
175 ARegionType *art;
176
177 st->spaceid = SPACE_SCRIPT;
178 STRNCPY_UTF8(st->name, "Script");
179
180 st->create = script_create;
181 st->free = script_free;
182 st->init = script_init;
183 st->duplicate = script_duplicate;
184 st->operatortypes = script_operatortypes;
185 st->keymap = script_keymap;
186 st->foreach_id = script_foreach_id;
187 st->blend_read_after_liblink = script_space_blend_read_after_liblink;
188 st->blend_write = script_space_blend_write;
189
190 /* regions: main window */
191 art = MEM_callocN<ARegionType>("spacetype script region");
196 /* XXX: Need to further test this ED_KEYMAP_UI is needed for button interaction. */
198
199 BLI_addhead(&st->regiontypes, art);
200
201 /* regions: header */
202 art = MEM_callocN<ARegionType>("spacetype script region");
204 art->prefsizey = HEADERY;
206
209
210 BLI_addhead(&st->regiontypes, art);
211
212 BKE_spacetype_register(std::move(st));
213}
SpaceLink * CTX_wm_space_data(const bContext *C)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
@ IDWALK_CB_DIRECT_WEAK_LINK
void BKE_spacetype_register(std::unique_ptr< SpaceType > st)
Definition screen.cc:282
ARegion * BKE_area_region_new()
Definition screen.cc:387
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:111
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:91
#define STRNCPY_UTF8(dst, src)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define HEADERY
@ RGN_ALIGN_BOTTOM
@ RGN_ALIGN_TOP
@ RGN_TYPE_WINDOW
@ RGN_TYPE_HEADER
@ SPACE_SCRIPT
#define SCRIPT_SET_NULL(_script)
@ USER_HEADER_BOTTOM
void ED_region_header(const bContext *C, ARegion *region)
Definition area.cc:3935
void ED_region_header_init(ARegion *region)
Definition area.cc:3950
@ ED_KEYMAP_UI
Definition ED_screen.hh:758
@ ED_KEYMAP_HEADER
Definition ED_screen.hh:764
@ ED_KEYMAP_VIEW2D
Definition ED_screen.hh:761
@ ED_KEYMAP_FRAMES
Definition ED_screen.hh:763
Read Guarded memory(de)allocation.
#define C
Definition RandGen.cpp:29
@ TH_BACK
void UI_ThemeClearColor(int colorid)
void UI_view2d_view_restore(const bContext *C)
Definition view2d.cc:1162
void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
Definition view2d.cc:221
void UI_view2d_view_ortho(const View2D *v2d)
Definition view2d.cc:1095
@ V2D_COMMONVIEW_STANDARD
Definition UI_view2d.hh:33
#define U
BMesh const char void * data
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
void * MEM_dupallocN(const void *vmemh)
Definition mallocn.cc:143
void script_operatortypes()
Definition script_ops.cc:17
void script_keymap(wmKeyConfig *keyconf)
Definition script_ops.cc:23
static void script_main_region_listener(const wmRegionListenerParams *)
static void script_free(SpaceLink *sl)
static void script_foreach_id(SpaceLink *space_link, LibraryForeachIDData *data)
static void script_header_region_init(wmWindowManager *, ARegion *region)
static void script_space_blend_write(BlendWriter *writer, SpaceLink *sl)
void ED_spacetype_script()
static SpaceLink * script_duplicate(SpaceLink *sl)
static void script_header_region_draw(const bContext *C, ARegion *region)
static SpaceLink * script_create(const ScrArea *, const Scene *)
static void script_main_region_init(wmWindowManager *wm, ARegion *region)
static void script_main_region_draw(const bContext *C, ARegion *region)
static void script_init(wmWindowManager *, ScrArea *)
static void script_space_blend_read_after_liblink(BlendLibReader *, ID *, SpaceLink *sl)
void(* listener)(const wmRegionListenerParams *params)
void(* draw)(const bContext *C, ARegion *region)
void(* init)(wmWindowManager *wm, ARegion *region)
ARegionRuntimeHandle * runtime
Definition DNA_ID.h:414
struct Script * script
ListBase regionbase
WindowManagerRuntimeHandle * runtime
wmEventHandler_Keymap * WM_event_add_keymap_handler_v2d_mask(ListBase *handlers, wmKeyMap *keymap)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
Definition wm_keymap.cc:895