Blender V4.3
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
9#include <cstdio>
10#include <cstring>
11
12#include "MEM_guardedalloc.h"
13
14#include "BLI_blenlib.h"
15#include "BLI_utildefines.h"
16
17#include "BKE_context.hh"
18#include "BKE_lib_query.hh"
19#include "BKE_screen.hh"
20
21#include "ED_screen.hh"
22#include "ED_space_api.hh"
23
24#include "WM_api.hh"
25
26#include "UI_resources.hh"
27#include "UI_view2d.hh"
28
29#include "BLO_read_write.hh"
30
31#include "script_intern.hh" /* own include */
32
33// static script_run_python(char *funcname, )
34
35/* ******************** default callbacks for script space ***************** */
36
37static SpaceLink *script_create(const ScrArea * /*area*/, const Scene * /*scene*/)
38{
39 ARegion *region;
40 SpaceScript *sscript;
41
42 sscript = static_cast<SpaceScript *>(MEM_callocN(sizeof(SpaceScript), "initscript"));
43 sscript->spacetype = SPACE_SCRIPT;
44
45 /* header */
46 region = static_cast<ARegion *>(MEM_callocN(sizeof(ARegion), "header for script"));
47
48 BLI_addtail(&sscript->regionbase, region);
49 region->regiontype = RGN_TYPE_HEADER;
50 region->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_BOTTOM : RGN_ALIGN_TOP;
51
52 /* main region */
53 region = static_cast<ARegion *>(MEM_callocN(sizeof(ARegion), "main region for script"));
54
55 BLI_addtail(&sscript->regionbase, region);
56 region->regiontype = RGN_TYPE_WINDOW;
57
58 /* channel list region XXX */
59
60 return (SpaceLink *)sscript;
61}
62
63/* Doesn't free the space-link itself. */
64static void script_free(SpaceLink *sl)
65{
66 SpaceScript *sscript = (SpaceScript *)sl;
67
68#ifdef WITH_PYTHON
69 /* Free buttons references. */
70 if (sscript->but_refs) {
71 sscript->but_refs = nullptr;
72 }
73#endif
74 sscript->script = nullptr;
75}
76
77/* spacetype; init callback */
78static void script_init(wmWindowManager * /*wm*/, ScrArea * /*area*/) {}
79
81{
82 SpaceScript *sscriptn = static_cast<SpaceScript *>(MEM_dupallocN(sl));
83
84 /* clear or remove stuff from old */
85
86 return (SpaceLink *)sscriptn;
87}
88
89/* add handlers, stuff you only do once or on area/region changes */
91{
92 wmKeyMap *keymap;
93
94 UI_view2d_region_reinit(&region->v2d, V2D_COMMONVIEW_STANDARD, region->winx, region->winy);
95
96 /* own keymap */
98 WM_event_add_keymap_handler_v2d_mask(&region->handlers, keymap);
99}
100
101static void script_main_region_draw(const bContext *C, ARegion *region)
102{
103 /* draw entirely, view changes should be handled here */
105 View2D *v2d = &region->v2d;
106
107 /* clear and setup matrix */
109
111
112 /* data... */
113 // BPY_script_exec(C, "/root/blender-svn/blender25/test.py", nullptr);
114
115#ifdef WITH_PYTHON
116 if (sscript->script) {
117 // BPY_run_script_space_draw(C, sscript);
118 }
119#else
120 (void)sscript;
121#endif
122
123 /* reset view matrix */
125
126 /* scrollers? */
127}
128
129/* add handlers, stuff you only do once or on area/region changes */
131{
132 ED_region_header_init(region);
133}
134
135static void script_header_region_draw(const bContext *C, ARegion *region)
136{
137 ED_region_header(C, region);
138}
139
141{
142/* XXX: Todo, need the ScriptSpace accessible to get the python script to run. */
143#if 0
144 BPY_run_script_space_listener()
145#endif
146}
147
148static void script_foreach_id(SpaceLink *space_link, LibraryForeachIDData *data)
149{
150 SpaceScript *scpt = reinterpret_cast<SpaceScript *>(space_link);
152}
153
155 ID * /*parent_id*/,
156 SpaceLink *sl)
157{
158 SpaceScript *scpt = reinterpret_cast<SpaceScript *>(sl);
159
160 /*scpt->script = nullptr; - 2.45 set to null, better re-run the script */
161 if (scpt->script) {
162 SCRIPT_SET_NULL(scpt->script);
163 }
164}
165
167{
168 SpaceScript *scr = (SpaceScript *)sl;
169 scr->but_refs = nullptr;
170 BLO_write_struct(writer, SpaceScript, sl);
171}
172
174{
175 std::unique_ptr<SpaceType> st = std::make_unique<SpaceType>();
176 ARegionType *art;
177
178 st->spaceid = SPACE_SCRIPT;
179 STRNCPY(st->name, "Script");
180
181 st->create = script_create;
182 st->free = script_free;
183 st->init = script_init;
184 st->duplicate = script_duplicate;
185 st->operatortypes = script_operatortypes;
186 st->keymap = script_keymap;
187 st->foreach_id = script_foreach_id;
188 st->blend_read_after_liblink = script_space_blend_read_after_liblink;
189 st->blend_write = script_space_blend_write;
190
191 /* regions: main window */
192 art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype script region"));
197 /* XXX: Need to further test this ED_KEYMAP_UI is needed for button interaction. */
199
200 BLI_addhead(&st->regiontypes, art);
201
202 /* regions: header */
203 art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype script region"));
205 art->prefsizey = HEADERY;
207
210
211 BLI_addhead(&st->regiontypes, art);
212
213 BKE_spacetype_register(std::move(st));
214}
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:268
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:90
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:110
#define STRNCPY(dst, src)
Definition BLI_string.h:593
#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:3646
void ED_region_header_init(ARegion *region)
Definition area.cc:3661
@ ED_KEYMAP_UI
Definition ED_screen.hh:725
@ ED_KEYMAP_HEADER
Definition ED_screen.hh:731
@ ED_KEYMAP_VIEW2D
Definition ED_screen.hh:728
@ ED_KEYMAP_FRAMES
Definition ED_screen.hh:730
Read Guarded memory(de)allocation.
@ TH_BACK
void UI_ThemeClearColor(int colorid)
void UI_view2d_view_restore(const bContext *C)
Definition view2d.cc:1158
void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
Definition view2d.cc:212
void UI_view2d_view_ortho(const View2D *v2d)
Definition view2d.cc:1091
@ V2D_COMMONVIEW_STANDARD
Definition UI_view2d.hh:33
unsigned int U
Definition btGjkEpa3.h:78
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
void *(* MEM_dupallocN)(const void *vmemh)
Definition mallocn.cc:39
void script_operatortypes()
Definition script_ops.cc:18
void script_keymap(wmKeyConfig *keyconf)
Definition script_ops.cc:24
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)
Definition DNA_ID.h:413
struct Script * script
ListBase regionbase
struct wmKeyConfig * defaultconf
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:897