move report/operator view out of the 'Console' into the 'Info' space (file menu).

Ton will work on moving the File menu out of the Info space before release.

notes.
- reply Operator isn't working anymore.
- UI for reports is commented out so its not mixed with the file menu.
This commit is contained in:
Campbell Barton 2010-11-11 13:36:57 +00:00
parent c1a74d9bd6
commit 43f396218f
Notes: blender-bot 2023-02-14 09:44:56 +01:00
Referenced by issue #68656, Info Editor's Replay fails (needs [modal?] ability to select area/region to execute in)
25 changed files with 552 additions and 416 deletions

View File

@ -110,9 +110,6 @@ def execute(context):
except:
return {'CANCELLED'}
if sc.console_type != 'PYTHON':
return {'CANCELLED'}
console, stdout, stderr = get_console(hash(context.region))
# redirect output
@ -200,9 +197,6 @@ def autocomplete(context):
if not console:
return {'CANCELLED'}
if sc.console_type != 'PYTHON':
return {'CANCELLED'}
# dont allow the stdin to be used, can lock blender.
# note: unlikely stdin would be used for autocomp. but its possible.
stdin_backup = sys.stdin

View File

@ -34,29 +34,10 @@ class CONSOLE_HT_header(bpy.types.Header):
if context.area.show_menus:
sub = row.row(align=True)
sub.menu("CONSOLE_MT_console")
if sc.console_type == 'REPORT':
sub.menu("CONSOLE_MT_report")
else:
sub.menu("CONSOLE_MT_console")
layout.separator()
layout.prop(sc, "console_type", expand=True)
if sc.console_type == 'REPORT':
row = layout.row(align=True)
row.prop(sc, "show_report_debug", text="Debug")
row.prop(sc, "show_report_info", text="Info")
row.prop(sc, "show_report_operator", text="Operators")
row.prop(sc, "show_report_warning", text="Warnings")
row.prop(sc, "show_report_error", text="Errors")
row = layout.row()
row.enabled = sc.show_report_operator
row.operator("console.report_replay")
else:
row = layout.row(align=True)
row.operator("console.autocomplete", text="Autocomplete")
row = layout.row(align=True)
row.operator("console.autocomplete", text="Autocomplete")
class CONSOLE_MT_console(bpy.types.Menu):
@ -76,18 +57,6 @@ class CONSOLE_MT_console(bpy.types.Menu):
layout.operator("screen.screen_full_area")
class CONSOLE_MT_report(bpy.types.Menu):
bl_label = "Report"
def draw(self, context):
layout = self.layout
layout.column()
layout.operator("console.select_all_toggle")
layout.operator("console.select_border")
layout.operator("console.report_delete")
layout.operator("console.report_copy")
class CONSOLE_MT_language(bpy.types.Menu):
bl_label = "Languages..."
@ -138,10 +107,6 @@ class ConsoleAutocomplete(bpy.types.Operator):
bl_idname = "console.autocomplete"
bl_label = "Console Autocomplete"
@classmethod
def poll(cls, context):
return context.space_data.console_type != 'REPORT'
def execute(self, context):
sc = context.space_data
module = __import__("console_" + sc.language)

View File

@ -28,6 +28,7 @@ class INFO_HT_header(bpy.types.Header):
wm = context.window_manager
window = context.window
sinfo = context.space_data
scene = context.scene
rd = scene.render
@ -69,6 +70,35 @@ class INFO_HT_header(bpy.types.Header):
layout.operator("wm.window_fullscreen_toggle", icon='FULLSCREEN_ENTER', text="")
# XXX: BEFORE RELEASE, MOVE FILE MENU OUT OF INFO!!!
"""
row = layout.row(align=True)
row.prop(sinfo, "show_report_debug", text="Debug")
row.prop(sinfo, "show_report_info", text="Info")
row.prop(sinfo, "show_report_operator", text="Operators")
row.prop(sinfo, "show_report_warning", text="Warnings")
row.prop(sinfo, "show_report_error", text="Errors")
row = layout.row()
row.enabled = sinfo.show_report_operator
row.operator("info.report_replay")
row.menu("INFO_MT_report")
"""
class INFO_MT_report(bpy.types.Menu):
bl_label = "Report"
def draw(self, context):
layout = self.layout
layout.column()
layout.operator("console.select_all_toggle")
layout.operator("console.select_border")
layout.operator("console.report_delete")
layout.operator("console.report_copy")
class INFO_MT_file(bpy.types.Menu):
bl_label = "File"

View File

@ -11112,6 +11112,35 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
{
bScreen *sc;
for (sc= main->screen.first; sc; sc= sc->id.next) {
ScrArea *sa;
for (sa= sc->areabase.first; sa; sa= sa->next) {
SpaceLink *sl;
for (sl= sa->spacedata.first; sl; sl= sl->next) {
if (sl->spacetype == SPACE_INFO) {
SpaceInfo *sinfo= (SpaceInfo *)sl;
ARegion *ar;
sinfo->rpt_mask= INFO_RPT_OP;
for (ar= sa->regionbase.first; ar; ar= ar->next) {
if (ar->regiontype == RGN_TYPE_WINDOW) {
ar->v2d.scroll = (V2D_SCROLL_RIGHT);
ar->v2d.align = V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; /* align bottom left */
ar->v2d.keepofs = V2D_LOCKOFS_X;
ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT);
ar->v2d.keeptot= V2D_KEEPTOT_BOUNDS;
ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f;
}
}
}
}
}
}
}
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
/* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */

View File

@ -141,6 +141,9 @@ int ED_operator_sequencer_active(struct bContext *C);
int ED_operator_image_active(struct bContext *C);
int ED_operator_nla_active(struct bContext *C);
int ED_operator_logic_active(struct bContext *C);
int ED_operator_info_active(struct bContext *C);
int ED_operator_console_active(struct bContext *C);
int ED_operator_object_active(struct bContext *C);
int ED_operator_object_active_editable(struct bContext *C);

View File

@ -1165,7 +1165,7 @@ static char *editortype_pup(void)
"|%l"
"|Console %x18"
"|Python Console %x18"
);
}

View File

@ -226,6 +226,17 @@ int ED_operator_logic_active(bContext *C)
return ed_spacetype_test(C, SPACE_LOGIC);
}
int ED_operator_info_active(bContext *C)
{
return ed_spacetype_test(C, SPACE_INFO);
}
int ED_operator_console_active(bContext *C)
{
return ed_spacetype_test(C, SPACE_CONSOLE);
}
int ED_operator_object_active(bContext *C)
{
Object *ob = ED_object_active_context(C);

View File

@ -34,7 +34,6 @@ SET(INC
SET(SRC
console_draw.c
console_ops.c
console_report.c
space_console.c
)

View File

@ -73,39 +73,6 @@ static void console_line_color(unsigned char fg[3], int type)
}
}
static void console_report_color(unsigned char *fg, unsigned char *bg, Report *report, int bool)
{
/*
if (type & RPT_ERROR_ALL) { fg[0]=220; fg[1]=0; fg[2]=0; }
else if (type & RPT_WARNING_ALL) { fg[0]=220; fg[1]=96; fg[2]=96; }
else if (type & RPT_OPERATOR_ALL) { fg[0]=96; fg[1]=128; fg[2]=255; }
else if (type & RPT_INFO_ALL) { fg[0]=0; fg[1]=170; fg[2]=0; }
else if (type & RPT_DEBUG_ALL) { fg[0]=196; fg[1]=196; fg[2]=196; }
else { fg[0]=196; fg[1]=196; fg[2]=196; }
*/
if(report->flag & SELECT) {
fg[0]=255; fg[1]=255; fg[2]=255;
if(bool) {
bg[0]=96; bg[1]=128; bg[2]=255;
}
else {
bg[0]=90; bg[1]=122; bg[2]=249;
}
}
else {
fg[0]=0; fg[1]=0; fg[2]=0;
if(bool) {
bg[0]=120; bg[1]=120; bg[2]=120;
}
else {
bg[0]=114; bg[1]=114; bg[2]=114;
}
}
}
typedef struct ConsoleDrawContext {
int cwidth;
int lheight;
@ -201,131 +168,50 @@ static int console_textview_line_color(struct TextViewContext *tvc, unsigned cha
}
/* reports! */
static int report_textview_begin(TextViewContext *tvc)
static int console_textview_main__internal(struct SpaceConsole *sc, struct ARegion *ar, ReportList *UNUSED(reports), int draw, int mval[2], void **mouse_pick, int *pos_pick)
{
SpaceConsole *sc= (SpaceConsole *)tvc->arg1;
ReportList *reports= (ReportList *)tvc->arg2;
tvc->lheight= sc->lheight;
tvc->sel_start= sc->sel_start;
tvc->sel_end= sc->sel_end;
ConsoleLine cl_dummy= {0};
int ret= 0;
/* iterator */
tvc->iter= reports->list.last;
glClearColor(120.0/255.0, 120.0/255.0, 120.0/255.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
return (tvc->iter != NULL);
}
View2D *v2d= &ar->v2d;
static void report_textview_end(TextViewContext *UNUSED(tvc))
{
/* pass */
}
TextViewContext tvc= {0};
tvc.begin= console_textview_begin;
tvc.end= console_textview_end;
static int report_textview_step(TextViewContext *tvc)
{
return ((tvc->iter= (void *)((Link *)tvc->iter)->prev) != NULL);
}
tvc.step= console_textview_step;
tvc.line_get= console_textview_line_get;
tvc.line_color= console_textview_line_color;
static int report_textview_line_get(struct TextViewContext *tvc, const char **line, int *len)
{
Report *report= (Report *)tvc->iter;
*line= report->message;
*len= report->len;
tvc.arg1= sc;
tvc.arg2= NULL;
return 1;
}
/* view */
tvc.sel_start= sc->sel_start;
tvc.sel_end= sc->sel_end;
tvc.lheight= sc->lheight;
tvc.ymin= v2d->cur.ymin;
tvc.ymax= v2d->cur.ymax;
tvc.winx= ar->winx;
static int report_textview_line_color(struct TextViewContext *tvc, unsigned char fg[3], unsigned char bg[3])
{
Report *report= (Report *)tvc->iter;
console_report_color(fg, bg, report, tvc->iter_index % 2);
return TVC_LINE_FG | TVC_LINE_BG;
console_scrollback_prompt_begin(sc, &cl_dummy);
ret= textview_draw(&tvc, draw, mval, mouse_pick, pos_pick);
console_scrollback_prompt_end(sc, &cl_dummy);
return ret;
}
static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int draw, int mval[2], void **mouse_pick, int *pos_pick)
{
if(sc->type==CONSOLE_TYPE_PYTHON) {
int ret= 0;
View2D *v2d= &ar->v2d;
TextViewContext tvc= {0};
tvc.begin= console_textview_begin;
tvc.end= console_textview_end;
tvc.step= console_textview_step;
tvc.line_get= console_textview_line_get;
tvc.line_color= console_textview_line_color;
tvc.arg1= sc;
tvc.arg2= NULL;
/* view */
tvc.sel_start= sc->sel_start;
tvc.sel_end= sc->sel_end;
tvc.lheight= sc->lheight;
tvc.ymin= v2d->cur.ymin;
tvc.ymax= v2d->cur.ymax;
tvc.winx= ar->winx;
{
ConsoleLine cl_dummy= {0};
console_scrollback_prompt_begin(sc, &cl_dummy);
ret= textview_draw(&tvc, draw, mval, mouse_pick, pos_pick);
console_scrollback_prompt_end(sc, &cl_dummy);
}
return ret;
}
else {
int ret= 0;
View2D *v2d= &ar->v2d;
TextViewContext tvc= {0};
tvc.begin= report_textview_begin;
tvc.end= report_textview_end;
tvc.step= report_textview_step;
tvc.line_get= report_textview_line_get;
tvc.line_color= report_textview_line_color;
tvc.arg1= sc;
tvc.arg2= reports;
/* view */
tvc.sel_start= sc->sel_start;
tvc.sel_end= sc->sel_end;
tvc.lheight= sc->lheight;
tvc.ymin= v2d->cur.ymin;
tvc.ymax= v2d->cur.ymax;
tvc.winx= ar->winx;
{
ret= textview_draw(&tvc, draw, mval, mouse_pick, pos_pick);
}
return ret;
}
}
void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports)
void console_textview_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports)
{
int mval[2] = {INT_MAX, INT_MAX};
console_text_main__internal(sc, ar, reports, 1, mval, NULL, NULL);
console_textview_main__internal(sc, ar, reports, 1, mval, NULL, NULL);
}
int console_text_height(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports)
int console_textview_height(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports)
{
int mval[2] = {INT_MAX, INT_MAX};
return console_text_main__internal(sc, ar, reports, 0, mval, NULL, NULL);
return console_textview_main__internal(sc, ar, reports, 0, mval, NULL, NULL);
}
void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int mouse_y)
@ -336,7 +222,7 @@ void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList
mval[0]= 0;
mval[1]= mouse_y;
console_text_main__internal(sc, ar, reports, 0, mval, &mouse_pick, NULL);
console_textview_main__internal(sc, ar, reports, 0, mval, &mouse_pick, NULL);
return (void *)mouse_pick;
}
@ -349,6 +235,6 @@ int console_char_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *r
mval_clamp[0]= CLAMPIS(mval[0], CONSOLE_DRAW_MARGIN, ar->winx-(CONSOLE_DRAW_SCROLL + CONSOLE_DRAW_MARGIN));
mval_clamp[1]= CLAMPIS(mval[1], CONSOLE_DRAW_MARGIN, ar->winy-CONSOLE_DRAW_MARGIN);
console_text_main__internal(sc, ar, reports, 0, mval_clamp, &mouse_pick, &pos_pick);
console_textview_main__internal(sc, ar, reports, 0, mval_clamp, &mouse_pick, &pos_pick);
return pos_pick;
}

View File

@ -32,8 +32,8 @@ struct ReportList;
struct bContext;
/* console_draw.c */
void console_text_main(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports);
int console_text_height(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); /* needed to calculate the scrollbar */
void console_textview_main(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports);
int console_textview_height(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); /* needed to calculate the scrollbar */
void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports, int mouse_y); /* needed for selection */
int console_char_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int mval[2]);
@ -64,19 +64,6 @@ void CONSOLE_OT_copy(struct wmOperatorType *ot);
void CONSOLE_OT_paste(struct wmOperatorType *ot);
void CONSOLE_OT_select_set(struct wmOperatorType *ot);
/* console_report.c */
void CONSOLE_OT_select_pick(struct wmOperatorType *ot); /* report selection */
void CONSOLE_OT_select_all_toggle(struct wmOperatorType *ot);
void CONSOLE_OT_select_border(struct wmOperatorType *ot);
void CONSOLE_OT_report_replay(struct wmOperatorType *ot);
void CONSOLE_OT_report_delete(struct wmOperatorType *ot);
void CONSOLE_OT_report_copy(struct wmOperatorType *ot);
enum { LINE_BEGIN, LINE_END, PREV_CHAR, NEXT_CHAR, PREV_WORD, NEXT_WORD };
enum { DEL_ALL, DEL_NEXT_CHAR, DEL_PREV_CHAR, DEL_SELECTION, DEL_NEXT_SEL, DEL_PREV_SEL };

View File

@ -259,22 +259,6 @@ static int console_line_insert(ConsoleLine *ci, char *str)
return len;
}
static int console_edit_poll(bContext *C)
{
SpaceConsole *sc= CTX_wm_space_console(C);
if(!sc || sc->type != CONSOLE_TYPE_PYTHON)
return 0;
return 1;
}
#if 0
static int console_poll(bContext *C)
{
return (CTX_wm_space_console(C) != NULL);
}
#endif
/* static funcs for text editing */
/* similar to the text editor, with some not used. keep compatible */
@ -356,7 +340,7 @@ void CONSOLE_OT_move(wmOperatorType *ot)
/* api callbacks */
ot->exec= move_exec;
ot->poll= console_edit_poll;
ot->poll= ED_operator_console_active;
/* properties */
RNA_def_enum(ot->srna, "type", move_type_items, LINE_BEGIN, "Type", "Where to move cursor to.");
@ -424,7 +408,7 @@ void CONSOLE_OT_insert(wmOperatorType *ot)
/* api callbacks */
ot->exec= insert_exec;
ot->invoke= insert_invoke;
ot->poll= console_edit_poll;
ot->poll= ED_operator_console_active;
/* properties */
RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position.");
@ -493,7 +477,7 @@ void CONSOLE_OT_delete(wmOperatorType *ot)
/* api callbacks */
ot->exec= delete_exec;
ot->poll= console_edit_poll;
ot->poll= ED_operator_console_active;
/* properties */
RNA_def_enum(ot->srna, "type", delete_type_items, DEL_NEXT_CHAR, "Type", "Which part of the text to delete.");
@ -534,7 +518,7 @@ void CONSOLE_OT_clear(wmOperatorType *ot)
/* api callbacks */
ot->exec= clear_exec;
ot->poll= console_edit_poll;
ot->poll= ED_operator_console_active;
/* properties */
RNA_def_boolean(ot->srna, "scrollback", 1, "Scrollback", "Clear the scrollback history");
@ -596,7 +580,7 @@ void CONSOLE_OT_history_cycle(wmOperatorType *ot)
/* api callbacks */
ot->exec= history_cycle_exec;
ot->poll= console_edit_poll;
ot->poll= ED_operator_console_active;
/* properties */
RNA_def_boolean(ot->srna, "reverse", 0, "Reverse", "reverse cycle history");
@ -644,7 +628,7 @@ void CONSOLE_OT_history_append(wmOperatorType *ot)
/* api callbacks */
ot->exec= history_append_exec;
ot->poll= console_edit_poll;
ot->poll= ED_operator_console_active;
/* properties */
RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position.");
@ -689,7 +673,7 @@ void CONSOLE_OT_scrollback_append(wmOperatorType *ot)
/* api callbacks */
ot->exec= scrollback_append_exec;
ot->poll= console_edit_poll;
ot->poll= ED_operator_console_active;
/* properties */
RNA_def_string(ot->srna, "text", "", 0, "Text", "Text to insert at the cursor position.");
@ -772,7 +756,7 @@ void CONSOLE_OT_copy(wmOperatorType *ot)
ot->idname= "CONSOLE_OT_copy";
/* api callbacks */
ot->poll= console_edit_poll;
ot->poll= ED_operator_console_active;
ot->exec= copy_exec;
/* properties */
@ -822,7 +806,7 @@ void CONSOLE_OT_paste(wmOperatorType *ot)
ot->idname= "CONSOLE_OT_paste";
/* api callbacks */
ot->poll= console_edit_poll;
ot->poll= ED_operator_console_active;
ot->exec= paste_exec;
/* properties */
@ -941,5 +925,5 @@ void CONSOLE_OT_select_set(wmOperatorType *ot)
ot->invoke= console_modal_select_invoke;
ot->modal= console_modal_select;
ot->cancel= console_modal_select_cancel;
ot->poll= console_edit_poll;
ot->poll= ED_operator_console_active;
}

View File

@ -53,12 +53,12 @@
#include "console_intern.h" // own include
static void console_update_rect(const bContext *C, ARegion *ar)
static void console_textview_update_rect(const bContext *C, ARegion *ar)
{
SpaceConsole *sc= CTX_wm_space_console(C);
View2D *v2d= &ar->v2d;
UI_view2d_totRect_set(v2d, ar->winx-1, console_text_height(sc, ar, CTX_wm_reports(C)));
UI_view2d_totRect_set(v2d, ar->winx-1, console_textview_height(sc, ar, CTX_wm_reports(C)));
}
/* ******************** default callbacks for console space ***************** */
@ -72,8 +72,6 @@ static SpaceLink *console_new(const bContext *UNUSED(C))
sconsole->spacetype= SPACE_CONSOLE;
sconsole->lheight= 14;
sconsole->type= CONSOLE_TYPE_PYTHON;
sconsole->rpt_mask= CONSOLE_RPT_OP; /* ? - not sure whats a good default here?*/
/* header */
ar= MEM_callocN(sizeof(ARegion), "header for console");
@ -89,7 +87,7 @@ static SpaceLink *console_new(const bContext *UNUSED(C))
BLI_addtail(&sconsole->regionbase, ar);
ar->regiontype= RGN_TYPE_WINDOW;
/* keep in sync with info */
ar->v2d.scroll |= (V2D_SCROLL_RIGHT);
ar->v2d.align |= V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; /* align bottom left */
ar->v2d.keepofs |= V2D_LOCKOFS_X;
@ -158,12 +156,11 @@ static void console_main_area_init(wmWindowManager *wm, ARegion *ar)
/* ************* dropboxes ************* */
static int id_drop_poll(bContext *C, wmDrag *drag, wmEvent *UNUSED(event))
static int id_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event))
{
SpaceConsole *sc= CTX_wm_space_console(C);
if(sc->type==CONSOLE_TYPE_PYTHON)
if(drag->type==WM_DRAG_ID)
return 1;
// SpaceConsole *sc= CTX_wm_space_console(C);
if(drag->type==WM_DRAG_ID)
return 1;
return 0;
}
@ -178,12 +175,11 @@ static void id_drop_copy(wmDrag *drag, wmDropBox *drop)
RNA_string_set(drop->ptr, "text", text);
}
static int path_drop_poll(bContext *C, wmDrag *drag, wmEvent *UNUSED(event))
static int path_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event))
{
SpaceConsole *sc= CTX_wm_space_console(C);
if(sc->type==CONSOLE_TYPE_PYTHON)
if(drag->type==WM_DRAG_PATH)
return 1;
// SpaceConsole *sc= CTX_wm_space_console(C);
if(drag->type==WM_DRAG_PATH)
return 1;
return 0;
}
@ -213,14 +209,14 @@ static void console_main_area_draw(const bContext *C, ARegion *ar)
View2D *v2d= &ar->v2d;
View2DScrollers *scrollers;
if((sc->type==CONSOLE_TYPE_PYTHON) && (sc->scrollback.first==NULL))
if(sc->scrollback.first==NULL)
WM_operator_name_call((bContext *)C, "CONSOLE_OT_banner", WM_OP_EXEC_DEFAULT, NULL);
/* clear and setup matrix */
UI_ThemeClearColor(TH_BACK);
glClear(GL_COLOR_BUFFER_BIT);
console_update_rect(C, ar);
console_textview_update_rect(C, ar);
/* worlks best with no view2d matrix set */
UI_view2d_view_ortho(v2d);
@ -228,7 +224,7 @@ static void console_main_area_draw(const bContext *C, ARegion *ar)
/* data... */
console_history_verify(C); /* make sure we have some command line */
console_text_main(sc, ar, CTX_wm_reports(C));
console_textview_main(sc, ar, CTX_wm_reports(C));
/* reset view matrix */
UI_view2d_view_restore(C);
@ -255,15 +251,6 @@ void console_operatortypes(void)
WM_operatortype_append(CONSOLE_OT_copy);
WM_operatortype_append(CONSOLE_OT_paste);
WM_operatortype_append(CONSOLE_OT_select_set);
/* console_report.c */
WM_operatortype_append(CONSOLE_OT_select_pick);
WM_operatortype_append(CONSOLE_OT_select_all_toggle);
WM_operatortype_append(CONSOLE_OT_select_border);
WM_operatortype_append(CONSOLE_OT_report_replay);
WM_operatortype_append(CONSOLE_OT_report_delete);
WM_operatortype_append(CONSOLE_OT_report_copy);
}
void console_keymap(struct wmKeyConfig *keyconf)
@ -331,16 +318,6 @@ void console_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", SPACEKEY, KM_PRESS, KM_CTRL, 0); /* python operator - space_text.py */
#endif
/* report selection */
WM_keymap_add_item(keymap, "CONSOLE_OT_select_pick", SELECTMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "CONSOLE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "CONSOLE_OT_select_border", BKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "CONSOLE_OT_report_replay", RKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "CONSOLE_OT_report_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "CONSOLE_OT_report_delete", DELKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "CONSOLE_OT_report_copy", CKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "CONSOLE_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "CONSOLE_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0);
#ifdef __APPLE__
@ -367,19 +344,15 @@ static void console_header_area_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
static void console_main_area_listener(ScrArea *sa, wmNotifier *wmn)
static void console_main_area_listener(ARegion *ar, wmNotifier *wmn)
{
SpaceConsole *sc= sa->spacedata.first;
// SpaceInfo *sinfo= sa->spacedata.first;
/* context changes */
switch(wmn->category) {
case NC_SPACE:
if(wmn->data == ND_SPACE_CONSOLE) { /* generic redraw request */
ED_area_tag_redraw(sa);
}
else if(wmn->data == ND_SPACE_CONSOLE_REPORT && sc->type==CONSOLE_TYPE_REPORT) {
/* redraw also but only for report view, could do less redraws by checking the type */
ED_area_tag_redraw(sa);
ED_region_tag_redraw(ar);
}
break;
}
@ -401,7 +374,6 @@ void ED_spacetype_console(void)
st->operatortypes= console_operatortypes;
st->keymap= console_keymap;
st->dropboxes= console_dropboxes;
st->listener= console_main_area_listener;
/* regions: main window */
art= MEM_callocN(sizeof(ARegionType), "spacetype console region");
@ -410,7 +382,7 @@ void ED_spacetype_console(void)
art->init= console_main_area_init;
art->draw= console_main_area_draw;
art->listener= console_main_area_listener;

View File

@ -34,6 +34,8 @@ SET(INC
SET(SRC
info_ops.c
info_stats.c
info_draw.c
info_report.c
textview.c
space_info.c
)

View File

@ -0,0 +1,192 @@
/**
* $Id: info_ops.c 32551 2010-10-18 06:41:16Z campbellbarton $
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2010 Blender Foundation.
* All rights reserved.
*
* Contributor(s): Blender Foundation
*
* ***** END GPL LICENSE BLOCK *****
*/
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <limits.h>
#include "BLF_api.h"
#include "BLI_blenlib.h"
#include "DNA_space_types.h"
#include "DNA_screen_types.h"
// #include "BKE_suggestions.h"
#include "BKE_report.h"
#include "BKE_utildefines.h"
#include "MEM_guardedalloc.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "ED_datafiles.h"
#include "ED_types.h"
#include "UI_resources.h"
#include "../space_info/textview.h"
static void info_report_color(unsigned char *fg, unsigned char *bg, Report *report, int bool)
{
/*
if (type & RPT_ERROR_ALL) { fg[0]=220; fg[1]=0; fg[2]=0; }
else if (type & RPT_WARNING_ALL) { fg[0]=220; fg[1]=96; fg[2]=96; }
else if (type & RPT_OPERATOR_ALL) { fg[0]=96; fg[1]=128; fg[2]=255; }
else if (type & RPT_INFO_ALL) { fg[0]=0; fg[1]=170; fg[2]=0; }
else if (type & RPT_DEBUG_ALL) { fg[0]=196; fg[1]=196; fg[2]=196; }
else { fg[0]=196; fg[1]=196; fg[2]=196; }
*/
if(report->flag & SELECT) {
fg[0]=255; fg[1]=255; fg[2]=255;
if(bool) {
bg[0]=96; bg[1]=128; bg[2]=255;
}
else {
bg[0]=90; bg[1]=122; bg[2]=249;
}
}
else {
fg[0]=0; fg[1]=0; fg[2]=0;
if(bool) {
bg[0]=120; bg[1]=120; bg[2]=120;
}
else {
bg[0]=114; bg[1]=114; bg[2]=114;
}
}
}
/* reports! */
static int report_textview_begin(TextViewContext *tvc)
{
// SpaceConsole *sc= (SpaceConsole *)tvc->arg1;
ReportList *reports= (ReportList *)tvc->arg2;
tvc->lheight= 14; //sc->lheight;
tvc->sel_start= 0;
tvc->sel_end= 0;
/* iterator */
tvc->iter= reports->list.last;
glClearColor(120.0/255.0, 120.0/255.0, 120.0/255.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
return (tvc->iter != NULL);
}
static void report_textview_end(TextViewContext *UNUSED(tvc))
{
/* pass */
}
static int report_textview_step(TextViewContext *tvc)
{
return ((tvc->iter= (void *)((Link *)tvc->iter)->prev) != NULL);
}
static int report_textview_line_get(struct TextViewContext *tvc, const char **line, int *len)
{
Report *report= (Report *)tvc->iter;
*line= report->message;
*len= report->len;
return 1;
}
static int report_textview_line_color(struct TextViewContext *tvc, unsigned char fg[3], unsigned char bg[3])
{
Report *report= (Report *)tvc->iter;
info_report_color(fg, bg, report, tvc->iter_index % 2);
return TVC_LINE_FG | TVC_LINE_BG;
}
static int info_textview_main__internal(struct SpaceInfo *sinfo, struct ARegion *ar, ReportList *reports, int draw, int mval[2], void **mouse_pick, int *pos_pick)
{
int ret= 0;
View2D *v2d= &ar->v2d;
TextViewContext tvc= {0};
tvc.begin= report_textview_begin;
tvc.end= report_textview_end;
tvc.step= report_textview_step;
tvc.line_get= report_textview_line_get;
tvc.line_color= report_textview_line_color;
tvc.arg1= sinfo;
tvc.arg2= reports;
/* view */
tvc.sel_start= 0;
tvc.sel_end= 0;
tvc.lheight= 14; //sc->lheight;
tvc.ymin= v2d->cur.ymin;
tvc.ymax= v2d->cur.ymax;
tvc.winx= ar->winx;
ret= textview_draw(&tvc, draw, mval, mouse_pick, pos_pick);
return ret;
}
void *info_text_pick(struct SpaceInfo *sinfo, struct ARegion *ar, ReportList *reports, int mouse_y)
{
void *mouse_pick= NULL;
int mval[2];
mval[0]= 0;
mval[1]= mouse_y;
info_textview_main__internal(sinfo, ar, reports, 0, mval, &mouse_pick, NULL);
return (void *)mouse_pick;
}
int info_textview_height(struct SpaceInfo *sinfo, struct ARegion *ar, ReportList *reports)
{
int mval[2] = {INT_MAX, INT_MAX};
return info_textview_main__internal(sinfo, ar, reports, 0, mval, NULL, NULL);
}
void info_textview_main(struct SpaceInfo *sinfo, struct ARegion *ar, ReportList *reports)
{
int mval[2] = {INT_MAX, INT_MAX};
info_textview_main__internal(sinfo, ar, reports, 1, mval, NULL, NULL);
}

View File

@ -30,7 +30,9 @@
/* internal exports only */
struct SpaceInfo;
struct wmOperatorType;
struct ReportList;
void FILE_OT_pack_all(struct wmOperatorType *ot);
void FILE_OT_unpack_all(struct wmOperatorType *ot);
@ -41,5 +43,19 @@ void FILE_OT_find_missing_files(struct wmOperatorType *ot);
void INFO_OT_reports_display_update(struct wmOperatorType *ot);
#endif /* ED_INFO_INTERN_H */
/* info_draw.c */
void *info_text_pick(struct SpaceInfo *sinfo, struct ARegion *ar, ReportList *reports, int mouse_y);
int info_textview_height(struct SpaceInfo *sinfo, struct ARegion *ar, struct ReportList *reports);
void info_textview_main(struct SpaceInfo *sinfo, struct ARegion *ar, struct ReportList *reports);
/* info_report.c */
/* console_report.c */
void INFO_OT_select_pick(struct wmOperatorType *ot); /* report selection */
void INFO_OT_select_all_toggle(struct wmOperatorType *ot);
void INFO_OT_select_border(struct wmOperatorType *ot);
void INFO_OT_report_replay(struct wmOperatorType *ot);
void INFO_OT_report_delete(struct wmOperatorType *ot);
void INFO_OT_report_copy(struct wmOperatorType *ot);
#endif /* ED_INFO_INTERN_H */

View File

@ -395,3 +395,5 @@ void INFO_OT_reports_display_update(wmOperatorType *ot)
/* properties */
}
/* report operators */

View File

@ -24,6 +24,7 @@
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include "MEM_guardedalloc.h"
@ -42,38 +43,30 @@
#include "RNA_access.h"
#include "RNA_define.h"
#include "console_intern.h"
#include "info_intern.h"
int console_report_mask(SpaceConsole *sc)
int info_report_mask(SpaceInfo *sinfo)
{
int report_mask = 0;
if(sc->rpt_mask & CONSOLE_RPT_DEBUG) report_mask |= RPT_DEBUG_ALL;
if(sc->rpt_mask & CONSOLE_RPT_INFO) report_mask |= RPT_INFO_ALL;
if(sc->rpt_mask & CONSOLE_RPT_OP) report_mask |= RPT_OPERATOR_ALL;
if(sc->rpt_mask & CONSOLE_RPT_WARN) report_mask |= RPT_WARNING_ALL;
if(sc->rpt_mask & CONSOLE_RPT_ERR) report_mask |= RPT_ERROR_ALL;
if(sinfo->rpt_mask & INFO_RPT_DEBUG) report_mask |= RPT_DEBUG_ALL;
if(sinfo->rpt_mask & INFO_RPT_INFO) report_mask |= RPT_INFO_ALL;
if(sinfo->rpt_mask & INFO_RPT_OP) report_mask |= RPT_OPERATOR_ALL;
if(sinfo->rpt_mask & INFO_RPT_WARN) report_mask |= RPT_WARNING_ALL;
if(sinfo->rpt_mask & INFO_RPT_ERR) report_mask |= RPT_ERROR_ALL;
return report_mask;
}
static int console_report_poll(bContext *C)
{
SpaceConsole *sc= CTX_wm_space_console(C);
if(!sc || sc->type != CONSOLE_TYPE_REPORT)
return 0;
return 1;
}
// TODO, get this working again!
static int report_replay_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceConsole *sc= CTX_wm_space_console(C);
ReportList *reports= CTX_wm_reports(C);
int report_mask= console_report_mask(sc);
Report *report;
// SpaceInfo *sc= CTX_wm_space_info(C);
// ReportList *reports= CTX_wm_reports(C);
// int report_mask= info_report_mask(sc);
// Report *report;
#if 0
sc->type= CONSOLE_TYPE_PYTHON;
for(report=reports->list.last; report; report=report->prev) {
@ -86,21 +79,21 @@ static int report_replay_exec(bContext *C, wmOperator *UNUSED(op))
}
sc->type= CONSOLE_TYPE_REPORT;
#endif
ED_area_tag_redraw(CTX_wm_area(C));
return OPERATOR_FINISHED;
}
void CONSOLE_OT_report_replay(wmOperatorType *ot)
void INFO_OT_report_replay(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Replay Operators";
ot->description= "Replay selected reports";
ot->idname= "CONSOLE_OT_report_replay";
ot->idname= "INFO_OT_report_replay";
/* api callbacks */
ot->poll= console_report_poll;
ot->poll= ED_operator_info_active;
ot->exec= report_replay_exec;
/* flags */
@ -126,12 +119,12 @@ static int select_report_pick_exec(bContext *C, wmOperator *op)
static int select_report_pick_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceConsole *sc= CTX_wm_space_console(C);
SpaceInfo *sinfo= CTX_wm_space_info(C);
ARegion *ar= CTX_wm_region(C);
ReportList *reports= CTX_wm_reports(C);
Report *report;
report= console_text_pick(sc, ar, reports, event->mval[1]);
report= info_text_pick(sinfo, ar, reports, event->mval[1]);
RNA_int_set(op->ptr, "report_index", BLI_findindex(&reports->list, report));
@ -139,15 +132,15 @@ static int select_report_pick_invoke(bContext *C, wmOperator *op, wmEvent *event
}
void CONSOLE_OT_select_pick(wmOperatorType *ot)
void INFO_OT_select_pick(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Select report";
ot->description= "Select reports by index";
ot->idname= "CONSOLE_OT_select_pick";
ot->idname= "INFO_OT_select_pick";
/* api callbacks */
ot->poll= console_report_poll;
ot->poll= ED_operator_info_active;
ot->invoke= select_report_pick_invoke;
ot->exec= select_report_pick_exec;
@ -162,9 +155,9 @@ void CONSOLE_OT_select_pick(wmOperatorType *ot)
static int report_select_all_toggle_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceConsole *sc= CTX_wm_space_console(C);
SpaceInfo *sinfo= CTX_wm_space_info(C);
ReportList *reports= CTX_wm_reports(C);
int report_mask= console_report_mask(sc);
int report_mask= info_report_mask(sinfo);
int deselect= 0;
Report *report;
@ -193,15 +186,15 @@ static int report_select_all_toggle_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
void CONSOLE_OT_select_all_toggle(wmOperatorType *ot)
void INFO_OT_select_all_toggle(wmOperatorType *ot)
{
/* identifiers */
ot->name= "(De)Select All";
ot->description= "(de)select all reports";
ot->idname= "CONSOLE_OT_select_all_toggle";
ot->idname= "INFO_OT_select_all_toggle";
/* api callbacks */
ot->poll= console_report_poll;
ot->poll= ED_operator_info_active;
ot->exec= report_select_all_toggle_exec;
/* flags */
@ -213,10 +206,10 @@ void CONSOLE_OT_select_all_toggle(wmOperatorType *ot)
/* borderselect operator */
static int borderselect_exec(bContext *C, wmOperator *op)
{
SpaceConsole *sc= CTX_wm_space_console(C);
SpaceInfo *sinfo= CTX_wm_space_info(C);
ARegion *ar= CTX_wm_region(C);
ReportList *reports= CTX_wm_reports(C);
int report_mask= console_report_mask(sc);
int report_mask= info_report_mask(sinfo);
Report *report_min, *report_max, *report;
//View2D *v2d= UI_view2d_fromcontext(C);
@ -241,8 +234,8 @@ static int borderselect_exec(bContext *C, wmOperator *op)
UI_view2d_region_to_view(v2d, mval[0], mval[1], &rectf.xmax, &rectf.ymax);
*/
report_min= console_text_pick(sc, ar, reports, rect.ymax);
report_max= console_text_pick(sc, ar, reports, rect.ymin);
report_min= info_text_pick(sinfo, ar, reports, rect.ymax);
report_max= info_text_pick(sinfo, ar, reports, rect.ymin);
/* get the first report if none found */
if(report_min==NULL) {
@ -286,19 +279,19 @@ static int borderselect_exec(bContext *C, wmOperator *op)
/* ****** Border Select ****** */
void CONSOLE_OT_select_border(wmOperatorType *ot)
void INFO_OT_select_border(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Border Select";
ot->description= "Toggle border selection";
ot->idname= "CONSOLE_OT_select_border";
ot->idname= "INFO_OT_select_border";
/* api callbacks */
ot->invoke= WM_border_select_invoke;
ot->exec= borderselect_exec;
ot->modal= WM_border_select_modal;
ot->poll= console_report_poll;
ot->poll= ED_operator_info_active;
/* flags */
/* ot->flag= OPTYPE_REGISTER; */
@ -311,9 +304,9 @@ void CONSOLE_OT_select_border(wmOperatorType *ot)
static int report_delete_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceConsole *sc= CTX_wm_space_console(C);
SpaceInfo *sinfo= CTX_wm_space_info(C);
ReportList *reports= CTX_wm_reports(C);
int report_mask= console_report_mask(sc);
int report_mask= info_report_mask(sinfo);
Report *report, *report_next;
@ -336,15 +329,15 @@ static int report_delete_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
void CONSOLE_OT_report_delete(wmOperatorType *ot)
void INFO_OT_report_delete(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Delete Reports";
ot->description= "Delete selected reports";
ot->idname= "CONSOLE_OT_report_delete";
ot->idname= "INFO_OT_report_delete";
/* api callbacks */
ot->poll= console_report_poll;
ot->poll= ED_operator_info_active;
ot->exec= report_delete_exec;
/* flags */
@ -356,9 +349,9 @@ void CONSOLE_OT_report_delete(wmOperatorType *ot)
static int report_copy_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceConsole *sc= CTX_wm_space_console(C);
SpaceInfo *sinfo= CTX_wm_space_info(C);
ReportList *reports= CTX_wm_reports(C);
int report_mask= console_report_mask(sc);
int report_mask= info_report_mask(sinfo);
Report *report;
@ -381,15 +374,15 @@ static int report_copy_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
void CONSOLE_OT_report_copy(wmOperatorType *ot)
void INFO_OT_report_copy(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Copy Reports to Clipboard";
ot->description= "Copy selected reports to Clipboard";
ot->idname= "CONSOLE_OT_report_copy";
ot->idname= "INFO_OT_report_copy";
/* api callbacks */
ot->poll= console_report_poll;
ot->poll= ED_operator_info_active;
ot->exec= report_copy_exec;
/* flags */

View File

@ -49,6 +49,7 @@
#include "UI_resources.h"
#include "UI_interface.h"
#include "UI_view2d.h"
#include "info_intern.h" // own include
@ -62,7 +63,9 @@ static SpaceLink *info_new(const bContext *UNUSED(C))
sinfo= MEM_callocN(sizeof(SpaceInfo), "initinfo");
sinfo->spacetype= SPACE_INFO;
sinfo->rpt_mask= INFO_RPT_OP;
/* header */
ar= MEM_callocN(sizeof(ARegion), "header for info");
@ -76,6 +79,17 @@ static SpaceLink *info_new(const bContext *UNUSED(C))
BLI_addtail(&sinfo->regionbase, ar);
ar->regiontype= RGN_TYPE_WINDOW;
/* keep in sync with console */
ar->v2d.scroll |= (V2D_SCROLL_RIGHT);
ar->v2d.align |= V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y; /* align bottom left */
ar->v2d.keepofs |= V2D_LOCKOFS_X;
ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT);
ar->v2d.keeptot= V2D_KEEPTOT_BOUNDS;
ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f;
/* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */
//ar->v2d.keepzoom= (V2D_KEEPASPECT|V2D_LIMITZOOM);
return (SpaceLink *)sinfo;
}
@ -105,16 +119,54 @@ static SpaceLink *info_duplicate(SpaceLink *sl)
/* add handlers, stuff you only do once or on area/region changes */
static void info_main_area_init(wmWindowManager *UNUSED(wm), ARegion *UNUSED(ar))
static void info_main_area_init(wmWindowManager *wm, ARegion *ar)
{
wmKeyMap *keymap;
UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy);
/* own keymap */
keymap= WM_keymap_find(wm->defaultconf, "Info", SPACE_INFO, 0);
WM_event_add_keymap_handler(&ar->handlers, keymap);
}
static void info_main_area_draw(const bContext *UNUSED(C), ARegion *UNUSED(ar))
static void info_textview_update_rect(const bContext *C, ARegion *ar)
{
SpaceInfo *sinfo= CTX_wm_space_info(C);
View2D *v2d= &ar->v2d;
UI_view2d_totRect_set(v2d, ar->winx-1, info_textview_height(sinfo, ar, CTX_wm_reports(C)));
}
static void info_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
SpaceInfo *sinfo= CTX_wm_space_info(C);
View2D *v2d= &ar->v2d;
View2DScrollers *scrollers;
/* clear and setup matrix */
UI_ThemeClearColor(TH_BACK);
glClear(GL_COLOR_BUFFER_BIT);
/* quick way to avoid drawing if not bug enough */
if(ar->winy < 16)
return;
info_textview_update_rect(C, ar);
/* worlks best with no view2d matrix set */
UI_view2d_view_ortho(v2d);
info_textview_main(sinfo, ar, CTX_wm_reports(C));
/* reset view matrix */
UI_view2d_view_restore(C);
/* scrollers */
scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_GRID_CLAMP);
UI_view2d_scrollers_draw(C, v2d, scrollers);
UI_view2d_scrollers_free(scrollers);
}
void info_operatortypes(void)
@ -125,8 +177,16 @@ void info_operatortypes(void)
WM_operatortype_append(FILE_OT_make_paths_absolute);
WM_operatortype_append(FILE_OT_report_missing_files);
WM_operatortype_append(FILE_OT_find_missing_files);
WM_operatortype_append(INFO_OT_reports_display_update);
/* info_report.c */
WM_operatortype_append(INFO_OT_select_pick);
WM_operatortype_append(INFO_OT_select_all_toggle);
WM_operatortype_append(INFO_OT_select_border);
WM_operatortype_append(INFO_OT_report_replay);
WM_operatortype_append(INFO_OT_report_delete);
WM_operatortype_append(INFO_OT_report_copy);
}
void info_keymap(struct wmKeyConfig *keyconf)
@ -134,6 +194,20 @@ void info_keymap(struct wmKeyConfig *keyconf)
wmKeyMap *keymap= WM_keymap_find(keyconf, "Window", 0, 0);
WM_keymap_verify_item(keymap, "INFO_OT_reports_display_update", TIMER, KM_ANY, KM_ANY, 0);
/* info space */
keymap= WM_keymap_find(keyconf, "Info", SPACE_INFO, 0);
/* report selection */
WM_keymap_add_item(keymap, "INFO_OT_select_pick", SELECTMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "INFO_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "INFO_OT_select_border", BKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "INFO_OT_report_replay", RKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "INFO_OT_report_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "INFO_OT_report_delete", DELKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "INFO_OT_report_copy", CKEY, KM_PRESS, KM_CTRL, 0);
}
/* add handlers, stuff you only do once or on area/region changes */
@ -147,9 +221,19 @@ static void info_header_area_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
static void info_main_area_listener(ARegion *UNUSED(ar), wmNotifier *UNUSED(wmn))
static void info_main_area_listener(ARegion *ar, wmNotifier *wmn)
{
// SpaceInfo *sinfo= sa->spacedata.first;
/* context changes */
switch(wmn->category) {
case NC_SPACE:
if(wmn->data == ND_SPACE_INFO_REPORT) {
/* redraw also but only for report view, could do less redraws by checking the type */
ED_region_tag_redraw(ar);
}
break;
}
}
static void info_header_listener(ARegion *ar, wmNotifier *wmn)
@ -223,10 +307,11 @@ void ED_spacetype_info(void)
/* regions: main window */
art= MEM_callocN(sizeof(ARegionType), "spacetype info region");
art->regionid = RGN_TYPE_WINDOW;
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
art->init= info_main_area_init;
art->draw= info_main_area_draw;
art->listener= info_main_area_listener;
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
BLI_addhead(&st->regiontypes, art);
@ -246,4 +331,3 @@ void ED_spacetype_info(void)
BKE_spacetype_register(st);
}

View File

@ -84,11 +84,20 @@ typedef struct SpaceInfo {
short blockhandler[8]; /* XXX depricate this */
struct bScreen *screen; /* browse screen */
struct Scene *scene; /* browse scene */
char rpt_mask;
char pad[7];
} SpaceInfo;
/* SpaceInfo.rpt_mask */
enum {
INFO_RPT_DEBUG = 1<<0,
INFO_RPT_INFO = 1<<1,
INFO_RPT_OP = 1<<2,
INFO_RPT_WARN = 1<<3,
INFO_RPT_ERR = 1<<4,
};
/* 'Graph' Editor (formerly known as the IPO Editor) */
typedef struct SpaceIpo {
SpaceLink *next, *prev;
@ -505,21 +514,6 @@ enum {
CONSOLE_LINE_ERROR
};
/* SpaceConsole.rpt_mask */
enum {
CONSOLE_TYPE_PYTHON=0,
CONSOLE_TYPE_REPORT,
};
/* SpaceConsole.type see BKE_report.h */
enum {
CONSOLE_RPT_DEBUG = 1<<0,
CONSOLE_RPT_INFO = 1<<1,
CONSOLE_RPT_OP = 1<<2,
CONSOLE_RPT_WARN = 1<<3,
CONSOLE_RPT_ERR = 1<<4,
};
typedef struct SpaceConsole {
SpaceLink *next, *prev;
ListBase regionbase; /* storage of regions for inactive spaces */
@ -529,9 +523,7 @@ typedef struct SpaceConsole {
short blockhandler[8]; // XXX are these needed?
/* space vars */
int type; /* console/report/..? */
int rpt_mask; /* which reports to display */
int flag, lheight;
int lheight, pad;
ListBase scrollback; /* ConsoleLine; output */
ListBase history; /* ConsoleLine; command history, current edited line is the first */

View File

@ -62,7 +62,7 @@ EnumPropertyItem space_type_items[] = {
{SPACE_TIME, "TIMELINE", 0, "Timeline", ""},
{SPACE_NODE, "NODE_EDITOR", 0, "Node Editor", ""},
{SPACE_LOGIC, "LOGIC_EDITOR", 0, "Logic Editor", ""},
{SPACE_CONSOLE, "CONSOLE", 0, "Console", ""},
{SPACE_CONSOLE, "CONSOLE", 0, "Python Console", ""},
{SPACE_USERPREF, "USER_PREFERENCES", 0, "User Preferences", ""},
{0, NULL, 0, NULL, NULL}};
@ -2012,11 +2012,6 @@ static void rna_def_console_line(BlenderRNA *brna)
RNA_def_property_int_funcs(prop, NULL, NULL, "rna_ConsoleLine_cursor_index_range");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
}
static EnumPropertyItem console_type_items[] = {
{CONSOLE_TYPE_PYTHON, "PYTHON", 0, "Python", ""},
{CONSOLE_TYPE_REPORT, "REPORT", 0, "Report", ""},
{0, NULL, 0, NULL, NULL}};
static void rna_def_space_console(BlenderRNA *brna)
{
@ -2033,12 +2028,7 @@ static void rna_def_space_console(BlenderRNA *brna)
RNA_def_property_range(prop, 8, 32);
RNA_def_property_ui_text(prop, "Font Size", "Font size to use for displaying the text");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
prop= RNA_def_property(srna, "console_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type");
RNA_def_property_enum_items(prop, console_type_items);
RNA_def_property_ui_text(prop, "Type", "Console type");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
prop= RNA_def_property(srna, "select_start", PROP_INT, PROP_UNSIGNED); /* copied from text editor */
RNA_def_property_int_sdna(prop, NULL, "sel_start");
@ -2048,32 +2038,6 @@ static void rna_def_space_console(BlenderRNA *brna)
RNA_def_property_int_sdna(prop, NULL, "sel_end");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
/* reporting display */
prop= RNA_def_property(srna, "show_report_debug", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_DEBUG);
RNA_def_property_ui_text(prop, "Show Debug", "Display debug reporting info");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE_REPORT, NULL);
prop= RNA_def_property(srna, "show_report_info", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_INFO);
RNA_def_property_ui_text(prop, "Show Info", "Display general information");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE_REPORT, NULL);
prop= RNA_def_property(srna, "show_report_operator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_OP);
RNA_def_property_ui_text(prop, "Show Operator", "Display the operator log");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE_REPORT, NULL);
prop= RNA_def_property(srna, "show_report_warning", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_WARN);
RNA_def_property_ui_text(prop, "Show Warn", "Display warnings");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE_REPORT, NULL);
prop= RNA_def_property(srna, "show_report_error", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_ERR);
RNA_def_property_ui_text(prop, "Show Error", "Display error text");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE_REPORT, NULL);
prop= RNA_def_property(srna, "prompt", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Prompt", "Command line prompt");
@ -2225,10 +2189,37 @@ static void rna_def_space_filebrowser(BlenderRNA *brna)
static void rna_def_space_info(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
srna= RNA_def_struct(brna, "SpaceInfo", "Space");
RNA_def_struct_sdna(srna, "SpaceInfo");
RNA_def_struct_ui_text(srna, "Space Info", "Info space data");
/* reporting display */
prop= RNA_def_property(srna, "show_report_debug", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", INFO_RPT_DEBUG);
RNA_def_property_ui_text(prop, "Show Debug", "Display debug reporting info");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
prop= RNA_def_property(srna, "show_report_info", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", INFO_RPT_INFO);
RNA_def_property_ui_text(prop, "Show Info", "Display general information");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
prop= RNA_def_property(srna, "show_report_operator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", INFO_RPT_OP);
RNA_def_property_ui_text(prop, "Show Operator", "Display the operator log");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
prop= RNA_def_property(srna, "show_report_warning", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", INFO_RPT_WARN);
RNA_def_property_ui_text(prop, "Show Warn", "Display warnings");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
prop= RNA_def_property(srna, "show_report_error", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", INFO_RPT_ERR);
RNA_def_property_ui_text(prop, "Show Error", "Display error text");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
}
static void rna_def_space_userpref(BlenderRNA *brna)

View File

@ -1698,7 +1698,7 @@ static void rna_def_userdef_themes(BlenderRNA *brna)
{14, "USER_PREFERENCES", ICON_PREFERENCES, "User Preferences", ""},
{15, "INFO", ICON_INFO, "Info", ""},
{16, "FILE_BROWSER", ICON_FILESEL, "File Browser", ""},
{17, "CONSOLE", ICON_CONSOLE, "Console", ""},
{17, "CONSOLE", ICON_CONSOLE, "Python Console", ""},
{0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "Theme", NULL);

View File

@ -241,23 +241,23 @@ typedef struct wmNotifier {
/* NC_SPACE */
#define ND_SPACE_CONSOLE (1<<16) /* general redraw */
#define ND_SPACE_CONSOLE_REPORT (2<<16) /* update for reports, could specify type */
#define ND_SPACE_INFO (2<<16)
#define ND_SPACE_IMAGE (3<<16)
#define ND_SPACE_FILE_PARAMS (4<<16)
#define ND_SPACE_FILE_LIST (5<<16)
#define ND_SPACE_NODE (6<<16)
#define ND_SPACE_OUTLINER (7<<16)
#define ND_SPACE_VIEW3D (8<<16)
#define ND_SPACE_PROPERTIES (9<<16)
#define ND_SPACE_TEXT (10<<16)
#define ND_SPACE_TIME (11<<16)
#define ND_SPACE_GRAPH (12<<16)
#define ND_SPACE_DOPESHEET (13<<16)
#define ND_SPACE_NLA (14<<16)
#define ND_SPACE_SEQUENCER (15<<16)
#define ND_SPACE_NODE_VIEW (16<<16)
#define ND_SPACE_CHANGED (17<<16) /*sent to a new editor type after it's replaced an old one*/
#define ND_SPACE_INFO_REPORT (2<<16) /* update for reports, could specify type */
#define ND_SPACE_INFO (3<<16)
#define ND_SPACE_IMAGE (4<<16)
#define ND_SPACE_FILE_PARAMS (5<<16)
#define ND_SPACE_FILE_LIST (6<<16)
#define ND_SPACE_NODE (7<<16)
#define ND_SPACE_OUTLINER (8<<16)
#define ND_SPACE_VIEW3D (9<<16)
#define ND_SPACE_PROPERTIES (10<<16)
#define ND_SPACE_TEXT (11<<16)
#define ND_SPACE_TIME (12<<16)
#define ND_SPACE_GRAPH (13<<16)
#define ND_SPACE_DOPESHEET (14<<16)
#define ND_SPACE_NLA (15<<16)
#define ND_SPACE_SEQUENCER (16<<16)
#define ND_SPACE_NODE_VIEW (17<<16)
#define ND_SPACE_CHANGED (18<<16) /*sent to a new editor type after it's replaced an old one*/
/* subtype, 256 entries too */
#define NOTE_SUBTYPE 0x0000FF00

View File

@ -127,7 +127,7 @@ void wm_operator_register(bContext *C, wmOperator *op)
}
/* so the console is redrawn */
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_CONSOLE_REPORT, NULL);
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_INFO_REPORT, NULL);
WM_event_add_notifier(C, NC_WM|ND_HISTORY, NULL);
}

View File

@ -888,6 +888,10 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, char *opname)
else if (strstr(opname, "CONSOLE_OT")) {
km = WM_keymap_find_all(C, "Console", sl->spacetype, 0);
}
/* Console */
else if (strstr(opname, "INFO_OT")) {
km = WM_keymap_find_all(C, "Info", sl->spacetype, 0);
}
/* Transform */
else if (strstr(opname, "TRANSFORM_OT")) {

View File

@ -3286,7 +3286,7 @@ static void gesture_border_modal_keymap(wmKeyConfig *keyconf)
WM_modalkeymap_assign(keymap, "ACTION_OT_select_border");
WM_modalkeymap_assign(keymap, "ANIM_OT_channels_select_border");
WM_modalkeymap_assign(keymap, "ANIM_OT_previewrange_set");
WM_modalkeymap_assign(keymap, "CONSOLE_OT_select_border");
WM_modalkeymap_assign(keymap, "INFO_OT_select_border");
WM_modalkeymap_assign(keymap, "FILE_OT_select_border");
WM_modalkeymap_assign(keymap, "GRAPH_OT_select_border");
WM_modalkeymap_assign(keymap, "MARKER_OT_select_border");