[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41127] trunk/blender: debug build option WITH_PYTHON_UI_INFO, so you can right click and edit the python source for UI layout directly.

Campbell Barton ideasman42 at gmail.com
Thu Oct 20 02:48:03 CEST 2011


Revision: 41127
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41127
Author:   campbellbarton
Date:     2011-10-20 00:48:00 +0000 (Thu, 20 Oct 2011)
Log Message:
-----------
debug build option WITH_PYTHON_UI_INFO, so you can right click and edit the python source for UI layout directly.

Modified Paths:
--------------
    trunk/blender/CMakeLists.txt
    trunk/blender/source/blender/editors/interface/interface.c
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/editors/interface/interface_intern.h
    trunk/blender/source/blender/editors/space_text/space_text.c
    trunk/blender/source/blender/python/generic/py_capi_utils.c
    trunk/blender/source/blender/python/generic/py_capi_utils.h
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt	2011-10-20 00:19:21 UTC (rev 41126)
+++ trunk/blender/CMakeLists.txt	2011-10-20 00:48:00 UTC (rev 41127)
@@ -213,6 +213,10 @@
 option(WITH_ASSERT_ABORT "Call abort() when raising an assertion through BLI_assert()" OFF)
 mark_as_advanced(WITH_ASSERT_ABORT)
 
+option(WITH_PYTHON_UI_INFO "Allow navigating to UI source from the context menu" OFF)
+mark_as_advanced(WITH_PYTHON_UI_INFO)
+
+
 if(APPLE)
 	if(NOT CMAKE_OSX_ARCHITECTURES)
 		set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING
@@ -1326,6 +1330,10 @@
 	add_definitions(-DWITH_ASSERT_ABORT)
 endif()
 
+if(WITH_PYTHON_UI_INFO)
+	add_definitions(-DWITH_PYTHON_UI_INFO)
+endif()
+
 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
 

Modified: trunk/blender/source/blender/editors/interface/interface.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface.c	2011-10-20 00:19:21 UTC (rev 41126)
+++ trunk/blender/source/blender/editors/interface/interface.c	2011-10-20 00:48:00 UTC (rev 41127)
@@ -2559,6 +2559,24 @@
 	if(block->curlayout)
 		ui_layout_add_but(block->curlayout, but);
 
+#ifdef WITH_PYTHON_UI_INFO
+	{
+		extern void PyC_FileAndNum_Safe(const char **filename, int *lineno);
+
+		const char *fn;
+		int lineno= -1;
+		PyC_FileAndNum_Safe(&fn, &lineno);
+		if (lineno != -1) {
+			BLI_strncpy(but->py_dbg_fn, fn, sizeof(but->py_dbg_fn));
+			but->py_dbg_ln= lineno;
+		}
+		else {
+			but->py_dbg_fn[0]= '\0';
+			but->py_dbg_ln= -1;
+		}
+	}
+#endif /* WITH_PYTHON_UI_INFO */
+
 	return but;
 }
 

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2011-10-20 00:19:21 UTC (rev 41126)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2011-10-20 00:48:00 UTC (rev 41127)
@@ -4438,6 +4438,17 @@
 		}
 	}
 
+#ifdef WITH_PYTHON_UI_INFO
+	if (but->py_dbg_ln != -1) {
+		PointerRNA ptr_props;
+
+		WM_operator_properties_create(&ptr_props, "WM_OT_text_edit");
+		RNA_string_set(&ptr_props, "filepath", but->py_dbg_fn);
+		RNA_int_set(&ptr_props, "line", but->py_dbg_ln);
+		uiItemFullO(layout, "WM_OT_text_edit", "Edit Source", ICON_NONE, ptr_props.data, WM_OP_EXEC_DEFAULT, 0);
+	}
+#endif /* WITH_PYTHON_UI_INFO */
+
 	uiPupMenuEnd(C, pup);
 
 	return 1;

Modified: trunk/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_intern.h	2011-10-20 00:19:21 UTC (rev 41126)
+++ trunk/blender/source/blender/editors/interface/interface_intern.h	2011-10-20 00:48:00 UTC (rev 41127)
@@ -252,6 +252,11 @@
 	
 		/* pointer back */
 	uiBlock *block;
+
+#ifdef WITH_PYTHON_UI_INFO
+	char py_dbg_fn[240];
+	int py_dbg_ln;
+#endif
 };
 
 struct uiBlock {

Modified: trunk/blender/source/blender/editors/space_text/space_text.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/space_text.c	2011-10-20 00:19:21 UTC (rev 41126)
+++ trunk/blender/source/blender/editors/space_text/space_text.c	2011-10-20 00:48:00 UTC (rev 41127)
@@ -136,7 +136,12 @@
 
 			switch(wmn->data) {
 				case ND_DISPLAY:
+					ED_area_tag_redraw(sa);
+					break;
 				case ND_CURSOR:
+					if(st->text && st->text == wmn->reference)
+						text_scroll_to_cursor(st, sa);
+
 					ED_area_tag_redraw(sa);
 					break;
 			}

Modified: trunk/blender/source/blender/python/generic/py_capi_utils.c
===================================================================
--- trunk/blender/source/blender/python/generic/py_capi_utils.c	2011-10-20 00:19:21 UTC (rev 41126)
+++ trunk/blender/source/blender/python/generic/py_capi_utils.c	2011-10-20 00:48:00 UTC (rev 41127)
@@ -184,6 +184,15 @@
 	}
 }
 
+void PyC_FileAndNum_Safe(const char **filename, int *lineno)
+{
+	if(!PYC_INTERPRETER_ACTIVE) {
+		return;
+	}
+
+	PyC_FileAndNum(filename, lineno);
+}
+
 /* Would be nice if python had this built in */
 PyObject *PyC_Object_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...)
 {

Modified: trunk/blender/source/blender/python/generic/py_capi_utils.h
===================================================================
--- trunk/blender/source/blender/python/generic/py_capi_utils.h	2011-10-20 00:19:21 UTC (rev 41126)
+++ trunk/blender/source/blender/python/generic/py_capi_utils.h	2011-10-20 00:48:00 UTC (rev 41127)
@@ -36,6 +36,7 @@
 PyObject *		PyC_Object_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...);
 PyObject *		PyC_Err_Format_Prefix(PyObject *exception_type_prefix, const char *format, ...);
 void			PyC_FileAndNum(const char **filename, int *lineno);
+void			PyC_FileAndNum_Safe(const char **filename, int *lineno); /* checks python is running */
 int				PyC_AsArray(void *array, PyObject *value, const int length, const PyTypeObject *type, const short is_double, const char *error_prefix);
 
 /* follow http://www.python.org/dev/peps/pep-0383/ */

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2011-10-20 00:19:21 UTC (rev 41126)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2011-10-20 00:48:00 UTC (rev 41127)
@@ -105,6 +105,11 @@
 
 static GHash *global_ops_hash= NULL;
 
+#ifdef WITH_PYTHON_UI_INFO
+#  include "DNA_text_types.h"
+#  include "BKE_text.h"
+#endif
+
 /* ************ operator API, exported ********** */
 
 
@@ -3505,6 +3510,79 @@
 	MEM_freeN(ot);
 }
 
+#ifdef WITH_PYTHON_UI_INFO
+
+static ScrArea *biggest_text_view(bContext *C)
+{
+	bScreen *sc= CTX_wm_screen(C);
+	ScrArea *sa, *big= NULL;
+	int size, maxsize= 0;
+
+	for(sa= sc->areabase.first; sa; sa= sa->next) {
+		if(sa->spacetype==SPACE_TEXT) {
+			size= sa->winx * sa->winy;
+			if(size > maxsize) {
+				maxsize= size;
+				big= sa;
+			}
+		}
+	}
+	return big;
+}
+
+static int wm_text_edit_exec(bContext *C, wmOperator *op)
+{
+	Main *bmain= CTX_data_main(C);
+	Text *text;
+
+	char filepath[240];
+	int line= RNA_int_get(op->ptr, "line");
+	RNA_string_get(op->ptr, "filepath", filepath);
+
+	for (text=bmain->text.first; text; text=text->id.next) {
+		if (text->name && BLI_path_cmp(text->name, filepath) == 0) {
+			break;
+		}
+	}
+
+	if (text == NULL) {
+		text= add_text(filepath, bmain->name);
+	}
+
+	if (text == NULL) {
+		BKE_reportf(op->reports, RPT_WARNING, "file: '%s' can't be opened", filepath);
+		return OPERATOR_CANCELLED;
+	}
+	else {
+		/* naughty!, find text area to set, not good behavior
+		 * but since this is a dev tool lets allow it - campbell */
+		ScrArea *sa= biggest_text_view(C);
+		if(sa) {
+			SpaceText *st= sa->spacedata.first;
+			st->text= text;
+		}
+
+		txt_move_toline(text, line - 1, FALSE);
+		WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, text);
+	}
+
+	return OPERATOR_FINISHED;
+}
+
+static void WM_OT_text_edit(wmOperatorType *ot)
+{
+	ot->name= "Edit Text File";
+	ot->idname= "WM_OT_text_edit";
+
+	ot->exec= wm_text_edit_exec;
+
+	RNA_def_string_file_path(ot->srna, "filepath", "", FILE_MAX, "Path", "");
+	RNA_def_int(ot->srna, "line", 0, INT_MIN, INT_MAX, "Line", "", 0, INT_MAX);
+}
+
+#endif /* WITH_PYTHON_UI_INFO */
+
+
 /* ******************************************************* */
 /* called on initialize WM_exit() */
 void wm_operatortype_free(void)
@@ -3548,6 +3626,10 @@
 	WM_operatortype_append(WM_OT_collada_import);
 #endif
 
+#ifdef WITH_PYTHON_UI_INFO
+	WM_operatortype_append(WM_OT_text_edit);
+#endif
+
 }
 
 /* circleselect-like modal operators */




More information about the Bf-blender-cvs mailing list