diff options
author | Ian Thompson <quornian@googlemail.com> | 2008-08-09 22:11:40 +0400 |
---|---|---|
committer | Ian Thompson <quornian@googlemail.com> | 2008-08-09 22:11:40 +0400 |
commit | 83bcb9deffb5eef2cbbb883c21f700840175d3fc (patch) | |
tree | 608a86dcbfc124ec5b8d18d357088be7b0079b24 /source/blender | |
parent | 4c89ee7838c3162bca9045db857593b05fb42419 (diff) |
Python errors originating in the active text are now displayed at the top of the text area. Errors in other files/scripts still pop up a message as before and all errors are still printed to the console. This removes the need to switch to the console for local errors.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/python/BPY_extern.h | 1 | ||||
-rw-r--r-- | source/blender/python/BPY_interface.c | 28 | ||||
-rw-r--r-- | source/blender/src/drawtext.c | 20 |
3 files changed, 45 insertions, 4 deletions
diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index 3d9b45051fb..a8b9cb48c16 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -89,6 +89,7 @@ extern "C" { int BPY_Err_getLinenumber( void ); const char *BPY_Err_getFilename( void ); + const char *BPY_Err_getMessage( void ); int BPY_txt_do_python_Text( struct Text *text ); int BPY_menu_do_python( short menutype, int event ); diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c index 05ea2d77ab9..635bdfe2d3c 100644 --- a/source/blender/python/BPY_interface.c +++ b/source/blender/python/BPY_interface.c @@ -145,9 +145,11 @@ static struct _inittab BPy_Inittab_Modules[] = { * Structure definitions **************************************************************************/ #define FILENAME_LENGTH 24 +#define MESSAGE_LENGTH 256 typedef struct _ScriptError { char filename[FILENAME_LENGTH]; + char message[MESSAGE_LENGTH+1]; int lineno; } ScriptError; @@ -508,6 +510,15 @@ const char *BPY_Err_getFilename( void ) } /*****************************************************************************/ +/* Description: This function will return the short message of the error */ +/* that has occured in the python script. */ +/*****************************************************************************/ +const char *BPY_Err_getMessage( void ) +{ + return g_script_error.message; +} + +/*****************************************************************************/ /* Description: Return PyString filename from a traceback object */ /*****************************************************************************/ PyObject *traceback_getFilename( PyObject * tb ) @@ -566,6 +577,15 @@ void BPY_Err_Handle( char *script_name ) } else { g_script_error.lineno = -1; } + v = PyObject_GetAttrString( err, "text" ); + if ( v && PyString_Check(v) ) { + strcpy(g_script_error.message, "Invalid syntax: "); + strncpy(g_script_error.message+16, PyString_AS_STRING( v ), MESSAGE_LENGTH-16); + g_script_error.message[MESSAGE_LENGTH]= '\0'; + Py_DECREF( v ); + } else { + strcpy(g_script_error.message, "Invalid Syntax"); + } /* this avoids an abort in Python 2.3's garbage collecting: */ PyErr_Clear( ); return; @@ -612,6 +632,14 @@ void BPY_Err_Handle( char *script_name ) FILENAME_LENGTH ); Py_DECREF(v); } + v = PyObject_GetAttrString( err, "message" ); + if ( v && PyString_Check(v) ) { + strncpy(g_script_error.message, PyString_AS_STRING( v ), MESSAGE_LENGTH); + g_script_error.message[MESSAGE_LENGTH]= '\0'; + Py_DECREF( v ); + } else { + g_script_error.message[0] = '\0'; + } Py_DECREF( tb ); } diff --git a/source/blender/src/drawtext.c b/source/blender/src/drawtext.c index ccb5767d7e7..bc30a52f126 100644 --- a/source/blender/src/drawtext.c +++ b/source/blender/src/drawtext.c @@ -2014,6 +2014,18 @@ void txt_find_panel(SpaceText *st, int again, int flags) } } +static void txt_print_error(SpaceText *st, char* str) +{ + if (curarea->spacetype != SPACE_TEXT) return; + drawtextspace(curarea, st); + glColor3ub(128, 16, 16); + glRecti(22, curarea->winy-2, curarea->winx-2, curarea->winy-st->lheight-3); + glColor3ub(255, 32, 32); + glRasterPos2i(22, curarea->winy-st->lheight); + BMF_DrawString(spacetext_get_font(st), str); + curarea->win_swap= WIN_BACK_OK; +} + void run_python_script(SpaceText *st) { char *py_filename; @@ -2029,16 +2041,17 @@ void run_python_script(SpaceText *st) if (!st->text) return; if (!strcmp(py_filename, st->text->id.name+2)) { - error_pyscript( ); + //error_pyscript( ); if (lineno >= 0) { txt_move_toline(text, lineno-1, 0); txt_sel_line(text); pop_space_text(st); - } + } + txt_print_error(st, BPY_Err_getMessage()); } else { error("Error in other (possibly external) file, "\ "check console"); - } + } } } @@ -2862,7 +2875,6 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt) case PKEY: if (G.qual == LR_ALTKEY) { run_python_script(st); - do_draw= 1; } break; /* BREAK P */ case QKEY: |