Blender  V3.3
space_script.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2008 Blender Foundation. All rights reserved. */
3 
8 #include <stdio.h>
9 #include <string.h>
10 
11 #include "MEM_guardedalloc.h"
12 
13 #include "BLI_blenlib.h"
14 #include "BLI_utildefines.h"
15 
16 #include "BKE_context.h"
17 #include "BKE_screen.h"
18 
19 #include "ED_screen.h"
20 #include "ED_space_api.h"
21 
22 #include "WM_api.h"
23 
24 #include "UI_resources.h"
25 #include "UI_view2d.h"
26 
27 #ifdef WITH_PYTHON
28 #endif
29 
30 #include "script_intern.h" /* own include */
31 
32 // static script_run_python(char *funcname, )
33 
34 /* ******************** default callbacks for script space ***************** */
35 
37 {
38  ARegion *region;
39  SpaceScript *sscript;
40 
41  sscript = MEM_callocN(sizeof(SpaceScript), "initscript");
42  sscript->spacetype = SPACE_SCRIPT;
43 
44  /* header */
45  region = MEM_callocN(sizeof(ARegion), "header for script");
46 
47  BLI_addtail(&sscript->regionbase, region);
48  region->regiontype = RGN_TYPE_HEADER;
50 
51  /* main region */
52  region = MEM_callocN(sizeof(ARegion), "main region for script");
53 
54  BLI_addtail(&sscript->regionbase, region);
55  region->regiontype = RGN_TYPE_WINDOW;
56 
57  /* channel list region XXX */
58 
59  return (SpaceLink *)sscript;
60 }
61 
62 /* not spacelink itself */
63 static 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 = NULL;
71  }
72 #endif
73  sscript->script = NULL;
74 }
75 
76 /* spacetype; init callback */
77 static void script_init(struct wmWindowManager *UNUSED(wm), ScrArea *UNUSED(area))
78 {
79 }
80 
82 {
83  SpaceScript *sscriptn = MEM_dupallocN(sl);
84 
85  /* clear or remove stuff from old */
86 
87  return (SpaceLink *)sscriptn;
88 }
89 
90 /* add handlers, stuff you only do once or on area/region changes */
92 {
93  wmKeyMap *keymap;
94 
95  UI_view2d_region_reinit(&region->v2d, V2D_COMMONVIEW_STANDARD, region->winx, region->winy);
96 
97  /* own keymap */
98  keymap = WM_keymap_ensure(wm->defaultconf, "Script", SPACE_SCRIPT, 0);
100 }
101 
102 static void script_main_region_draw(const bContext *C, ARegion *region)
103 {
104  /* draw entirely, view changes should be handled here */
106  View2D *v2d = &region->v2d;
107 
108  /* clear and setup matrix */
110 
112 
113  /* data... */
114  // BPY_script_exec(C, "/root/blender-svn/blender25/test.py", NULL);
115 
116 #ifdef WITH_PYTHON
117  if (sscript->script) {
118  // BPY_run_script_space_draw(C, sscript);
119  }
120 #else
121  (void)sscript;
122 #endif
123 
124  /* reset view matrix */
126 
127  /* scrollers? */
128 }
129 
130 /* add handlers, stuff you only do once or on area/region changes */
132 {
133  ED_region_header_init(region);
134 }
135 
136 static void script_header_region_draw(const bContext *C, ARegion *region)
137 {
138  ED_region_header(C, region);
139 }
140 
142 {
143 /* XXX: Todo, need the ScriptSpace accessible to get the python script to run. */
144 #if 0
145  BPY_run_script_space_listener()
146 #endif
147 }
148 
150 {
151  SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype script");
152  ARegionType *art;
153 
154  st->spaceid = SPACE_SCRIPT;
155  strncpy(st->name, "Script", BKE_ST_MAXNAME);
156 
157  st->create = script_create;
158  st->free = script_free;
159  st->init = script_init;
160  st->duplicate = script_duplicate;
161  st->operatortypes = script_operatortypes;
162  st->keymap = script_keymap;
163 
164  /* regions: main window */
165  art = MEM_callocN(sizeof(ARegionType), "spacetype script region");
166  art->regionid = RGN_TYPE_WINDOW;
170  /* XXX: Need to further test this ED_KEYMAP_UI is needed for button interaction. */
172 
173  BLI_addhead(&st->regiontypes, art);
174 
175  /* regions: header */
176  art = MEM_callocN(sizeof(ARegionType), "spacetype script region");
177  art->regionid = RGN_TYPE_HEADER;
178  art->prefsizey = HEADERY;
180 
183 
184  BLI_addhead(&st->regiontypes, art);
185 
187 }
struct SpaceLink * CTX_wm_space_data(const bContext *C)
Definition: context.c:743
#define BKE_ST_MAXNAME
Definition: BKE_screen.h:53
void BKE_spacetype_register(struct SpaceType *st)
Definition: screen.c:391
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:60
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:80
#define UNUSED(x)
#define HEADERY
@ RGN_TYPE_WINDOW
@ RGN_TYPE_HEADER
@ RGN_ALIGN_BOTTOM
@ RGN_ALIGN_TOP
@ SPACE_SCRIPT
@ USER_HEADER_BOTTOM
@ ED_KEYMAP_UI
Definition: ED_screen.h:691
@ ED_KEYMAP_HEADER
Definition: ED_screen.h:697
@ ED_KEYMAP_VIEW2D
Definition: ED_screen.h:694
@ ED_KEYMAP_FRAMES
Definition: ED_screen.h:696
void ED_region_header(const struct bContext *C, struct ARegion *region)
void ED_region_header_init(struct ARegion *region)
Definition: area.c:3417
Read Guarded memory(de)allocation.
#define C
Definition: RandGen.cpp:25
@ TH_BACK
Definition: UI_resources.h:39
void UI_ThemeClearColor(int colorid)
Definition: resources.c:1448
void UI_view2d_region_reinit(struct View2D *v2d, short type, int winx, int winy)
Definition: view2d.cc:217
void UI_view2d_view_restore(const struct bContext *C)
void UI_view2d_view_ortho(const struct View2D *v2d)
@ V2D_COMMONVIEW_STANDARD
Definition: UI_view2d.h:36
unsigned int U
Definition: btGjkEpa3.h:78
Scene scene
SyclQueue void void size_t num_bytes void
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void *(* MEM_dupallocN)(const void *vmemh)
Definition: mallocn.c:28
void *(* MEM_callocN)(size_t len, const char *str)
Definition: mallocn.c:31
static void area(int d1, int d2, int e1, int e2, float weights[2])
static const pxr::TfToken st("st", pxr::TfToken::Immortal)
void script_operatortypes(void)
Definition: script_ops.c:17
void script_keymap(struct wmKeyConfig *keyconf)
static void script_header_region_init(wmWindowManager *UNUSED(wm), ARegion *region)
Definition: space_script.c:131
static SpaceLink * script_duplicate(SpaceLink *sl)
Definition: space_script.c:81
static void script_free(SpaceLink *sl)
Definition: space_script.c:63
static void script_header_region_draw(const bContext *C, ARegion *region)
Definition: space_script.c:136
static void script_init(struct wmWindowManager *UNUSED(wm), ScrArea *UNUSED(area))
Definition: space_script.c:77
void ED_spacetype_script(void)
Definition: space_script.c:149
static void script_main_region_listener(const wmRegionListenerParams *UNUSED(params))
Definition: space_script.c:141
static SpaceLink * script_create(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
Definition: space_script.c:36
static void script_main_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_script.c:91
static void script_main_region_draw(const bContext *C, ARegion *region)
Definition: space_script.c:102
void(* draw)(const struct bContext *C, struct ARegion *region)
Definition: BKE_screen.h:151
void(* listener)(const wmRegionListenerParams *params)
Definition: BKE_screen.h:165
int keymapflag
Definition: BKE_screen.h:208
void(* init)(struct wmWindowManager *wm, struct ARegion *region)
Definition: BKE_screen.h:147
ListBase handlers
short alignment
short regiontype
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.c:852