52
56
#include "UI_resources.h"
53
57
#include "UI_interface.h"
58
#include "UI_view2d.h"
55
#include "info_intern.h" // own include
60
#include "info_intern.h" /* own include */
57
62
/* ******************** default callbacks for info space ***************** */
59
static SpaceLink *info_new(const bContext *C)
64
static SpaceLink *info_new(const bContext *UNUSED(C))
64
sinfo= MEM_callocN(sizeof(SpaceInfo), "initinfo");
65
sinfo->spacetype= SPACE_INFO;
69
sinfo = MEM_callocN(sizeof(SpaceInfo), "initinfo");
70
sinfo->spacetype = SPACE_INFO;
72
sinfo->rpt_mask = INFO_RPT_OP;
68
ar= MEM_callocN(sizeof(ARegion), "header for info");
75
ar = MEM_callocN(sizeof(ARegion), "header for info");
70
77
BLI_addtail(&sinfo->regionbase, ar);
71
ar->regiontype= RGN_TYPE_HEADER;
72
ar->alignment= RGN_ALIGN_BOTTOM;
78
ar->regiontype = RGN_TYPE_HEADER;
79
ar->alignment = RGN_ALIGN_BOTTOM;
75
ar= MEM_callocN(sizeof(ARegion), "main area for info");
82
ar = MEM_callocN(sizeof(ARegion), "main area for info");
77
84
BLI_addtail(&sinfo->regionbase, ar);
78
ar->regiontype= RGN_TYPE_WINDOW;
85
ar->regiontype = RGN_TYPE_WINDOW;
87
/* keep in sync with console */
88
ar->v2d.scroll |= (V2D_SCROLL_RIGHT);
89
ar->v2d.align |= V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_NEG_Y; /* align bottom left */
90
ar->v2d.keepofs |= V2D_LOCKOFS_X;
91
ar->v2d.keepzoom = (V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y | V2D_LIMITZOOM | V2D_KEEPASPECT);
92
ar->v2d.keeptot = V2D_KEEPTOT_BOUNDS;
93
ar->v2d.minzoom = ar->v2d.maxzoom = 1.0f;
95
/* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */
96
//ar->v2d.keepzoom= (V2D_KEEPASPECT|V2D_LIMITZOOM);
80
98
return (SpaceLink *)sinfo;
83
101
/* not spacelink itself */
84
static void info_free(SpaceLink *sl)
102
static void info_free(SpaceLink *UNUSED(sl))
86
104
// SpaceInfo *sinfo= (SpaceInfo*) sl;
108
126
/* add handlers, stuff you only do once or on area/region changes */
109
127
static void info_main_area_init(wmWindowManager *wm, ARegion *ar)
131
UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy);
134
keymap = WM_keymap_find(wm->defaultconf, "Info", SPACE_INFO, 0);
135
WM_event_add_keymap_handler(&ar->handlers, keymap);
138
static void info_textview_update_rect(const bContext *C, ARegion *ar)
140
SpaceInfo *sinfo = CTX_wm_space_info(C);
141
View2D *v2d = &ar->v2d;
143
UI_view2d_totRect_set(v2d, ar->winx - 1, info_textview_height(sinfo, ar, CTX_wm_reports(C)));
113
146
static void info_main_area_draw(const bContext *C, ARegion *ar)
148
/* draw entirely, view changes should be handled here */
149
SpaceInfo *sinfo = CTX_wm_space_info(C);
150
View2D *v2d = &ar->v2d;
151
View2DScrollers *scrollers;
116
153
/* clear and setup matrix */
117
154
UI_ThemeClearColor(TH_BACK);
118
155
glClear(GL_COLOR_BUFFER_BIT);
157
/* quick way to avoid drawing if not bug enough */
161
info_textview_update_rect(C, ar);
163
/* worlks best with no view2d matrix set */
164
UI_view2d_view_ortho(v2d);
166
info_textview_main(sinfo, ar, CTX_wm_reports(C));
168
/* reset view matrix */
169
UI_view2d_view_restore(C);
172
scrollers = UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_GRID_CLAMP);
173
UI_view2d_scrollers_draw(C, v2d, scrollers);
174
UI_view2d_scrollers_free(scrollers);
121
void info_operatortypes(void)
177
static void info_operatortypes(void)
123
179
WM_operatortype_append(FILE_OT_pack_all);
124
180
WM_operatortype_append(FILE_OT_unpack_all);
126
182
WM_operatortype_append(FILE_OT_make_paths_absolute);
127
183
WM_operatortype_append(FILE_OT_report_missing_files);
128
184
WM_operatortype_append(FILE_OT_find_missing_files);
130
185
WM_operatortype_append(INFO_OT_reports_display_update);
188
WM_operatortype_append(INFO_OT_select_pick);
189
WM_operatortype_append(INFO_OT_select_all_toggle);
190
WM_operatortype_append(INFO_OT_select_border);
192
WM_operatortype_append(INFO_OT_report_replay);
193
WM_operatortype_append(INFO_OT_report_delete);
194
WM_operatortype_append(INFO_OT_report_copy);
133
void info_keymap(struct wmKeyConfig *keyconf)
197
static void info_keymap(struct wmKeyConfig *keyconf)
135
wmKeyMap *keymap= WM_keymap_find(keyconf, "Window", 0, 0);
137
WM_keymap_verify_item(keymap, "INFO_OT_reports_display_update", TIMER, KM_ANY, KM_ANY, 0);
199
wmKeyMap *keymap = WM_keymap_find(keyconf, "Window", 0, 0);
201
WM_keymap_verify_item(keymap, "INFO_OT_reports_display_update", TIMERREPORT, KM_ANY, KM_ANY, 0);
204
keymap = WM_keymap_find(keyconf, "Info", SPACE_INFO, 0);
207
/* report selection */
208
WM_keymap_add_item(keymap, "INFO_OT_select_pick", SELECTMOUSE, KM_PRESS, 0, 0);
209
WM_keymap_add_item(keymap, "INFO_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
210
WM_keymap_add_item(keymap, "INFO_OT_select_border", BKEY, KM_PRESS, 0, 0);
212
WM_keymap_add_item(keymap, "INFO_OT_report_replay", RKEY, KM_PRESS, 0, 0);
213
WM_keymap_add_item(keymap, "INFO_OT_report_delete", XKEY, KM_PRESS, 0, 0);
214
WM_keymap_add_item(keymap, "INFO_OT_report_delete", DELKEY, KM_PRESS, 0, 0);
215
WM_keymap_add_item(keymap, "INFO_OT_report_copy", CKEY, KM_PRESS, KM_CTRL, 0);
140
218
/* add handlers, stuff you only do once or on area/region changes */
141
static void info_header_area_init(wmWindowManager *wm, ARegion *ar)
219
static void info_header_area_init(wmWindowManager *UNUSED(wm), ARegion *ar)
143
221
ED_region_header_init(ar);
151
229
static void info_main_area_listener(ARegion *ar, wmNotifier *wmn)
231
// SpaceInfo *sinfo= sa->spacedata.first;
153
233
/* context changes */
234
switch (wmn->category) {
236
if (wmn->data == ND_SPACE_INFO_REPORT) {
237
/* redraw also but only for report view, could do less redraws by checking the type */
238
ED_region_tag_redraw(ar);
156
244
static void info_header_listener(ARegion *ar, wmNotifier *wmn)
158
246
/* context changes */
159
switch(wmn->category) {
247
switch (wmn->category) {
161
if(ELEM(wmn->data, ND_SCREENCAST, ND_ANIMPLAY))
249
if (ELEM(wmn->data, ND_SCREENCAST, ND_ANIMPLAY))
162
250
ED_region_tag_redraw(ar);
165
if(wmn->data == ND_JOB)
253
if (wmn->data == ND_JOB)
166
254
ED_region_tag_redraw(ar);
169
if(wmn->data==ND_RENDER_RESULT)
257
if (wmn->data == ND_RENDER_RESULT)
170
258
ED_region_tag_redraw(ar);
173
if(wmn->data == ND_SPACE_INFO)
261
if (wmn->data == ND_SPACE_INFO)
174
262
ED_region_tag_redraw(ar);
177
if(wmn->action == NA_RENAME)
265
if (wmn->action == NA_RENAME)
178
266
ED_region_tag_redraw(ar);
183
static void recent_files_menu(const bContext *C, Menu *menu)
271
static void recent_files_menu_draw(const bContext *UNUSED(C), Menu *menu)
185
273
struct RecentFile *recent;
186
uiLayout *layout= menu->layout;
274
uiLayout *layout = menu->layout;
187
275
uiLayoutSetOperatorContext(layout, WM_OP_EXEC_REGION_WIN);
188
276
if (G.recent_files.first) {
189
for(recent = G.recent_files.first; (recent); recent = recent->next) {
277
for (recent = G.recent_files.first; (recent); recent = recent->next) {
190
278
uiItemStringO(layout, BLI_path_basename(recent->filepath), ICON_FILE_BLEND, "WM_OT_open_mainfile", "filepath", recent->filepath);
193
uiItemL(layout, "No Recent Files", 0);
282
uiItemL(layout, IFACE_("No Recent Files"), ICON_NONE);
197
void recent_files_menu_register()
286
static void recent_files_menu_register(void)
201
mt= MEM_callocN(sizeof(MenuType), "spacetype info menu recent files");
290
mt = MEM_callocN(sizeof(MenuType), "spacetype info menu recent files");
202
291
strcpy(mt->idname, "INFO_MT_file_open_recent");
203
strcpy(mt->label, "Open Recent...");
204
mt->draw= recent_files_menu;
292
strcpy(mt->label, N_("Open Recent..."));
293
mt->draw = recent_files_menu_draw;
205
294
WM_menutype_add(mt);
208
297
/* only called once, from space/spacetypes.c */
209
298
void ED_spacetype_info(void)
211
SpaceType *st= MEM_callocN(sizeof(SpaceType), "spacetype info");
300
SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype info");
212
301
ARegionType *art;
214
st->spaceid= SPACE_INFO;
303
st->spaceid = SPACE_INFO;
215
304
strncpy(st->name, "Info", BKE_ST_MAXNAME);
220
st->duplicate= info_duplicate;
221
st->operatortypes= info_operatortypes;
222
st->keymap= info_keymap;
307
st->free = info_free;
308
st->init = info_init;
309
st->duplicate = info_duplicate;
310
st->operatortypes = info_operatortypes;
311
st->keymap = info_keymap;
224
313
/* regions: main window */
225
art= MEM_callocN(sizeof(ARegionType), "spacetype info region");
314
art = MEM_callocN(sizeof(ARegionType), "spacetype info region");
226
315
art->regionid = RGN_TYPE_WINDOW;
227
art->init= info_main_area_init;
228
art->draw= info_main_area_draw;
229
art->listener= info_main_area_listener;
230
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
316
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D;
318
art->init = info_main_area_init;
319
art->draw = info_main_area_draw;
320
art->listener = info_main_area_listener;
232
322
BLI_addhead(&st->regiontypes, art);
234
324
/* regions: header */
235
art= MEM_callocN(sizeof(ARegionType), "spacetype info region");
325
art = MEM_callocN(sizeof(ARegionType), "spacetype info region");
236
326
art->regionid = RGN_TYPE_HEADER;
237
art->prefsizey= HEADERY;
327
art->prefsizey = HEADERY;
239
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES|ED_KEYMAP_HEADER;
240
art->listener= info_header_listener;
241
art->init= info_header_area_init;
242
art->draw= info_header_area_draw;
329
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_HEADER;
330
art->listener = info_header_listener;
331
art->init = info_header_area_init;
332
art->draw = info_header_area_draw;
244
334
BLI_addhead(&st->regiontypes, art);