[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21685] branches/blender2.5/blender: operator macro playback (run operator reports in the console)

Campbell Barton ideasman42 at gmail.com
Sun Jul 19 02:49:44 CEST 2009


Revision: 21685
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21685
Author:   campbellbarton
Date:     2009-07-19 02:49:44 +0200 (Sun, 19 Jul 2009)

Log Message:
-----------
operator macro playback (run operator reports in the console)
- reports can be selected with RMB, Border (bkey) and (de)select all.
- delete reports (X key)
- run operators in the console (R key)
- copy reports (Ctrl+C), can be pasted in the text editor an run with alt+p

Details
- Added "selected_editable_objects" and "selected_editable_bases" to screen_context.c, use the scene layers, this was needed for duplicate to run outside the 3D view.
- RNA_property_as_string converted an array of 1 into "(num)" need a comma so python sees it as a tuple - "(num,)"
- add flag to reports, use for seletion atm.

opens a new world of context bugs :)

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/space_console.py
    branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
    branches/blender2.5/blender/source/blender/editors/include/ED_object.h
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_context.c
    branches/blender2.5/blender/source/blender/editors/space_console/console_draw.c
    branches/blender2.5/blender/source/blender/editors/space_console/console_intern.h
    branches/blender2.5/blender/source/blender/editors/space_console/console_ops.c
    branches/blender2.5/blender/source/blender/editors/space_console/space_console.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_scene_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/editors/space_console/console_report.c

Modified: branches/blender2.5/blender/release/ui/space_console.py
===================================================================
--- branches/blender2.5/blender/release/ui/space_console.py	2009-07-18 23:12:42 UTC (rev 21684)
+++ branches/blender2.5/blender/release/ui/space_console.py	2009-07-19 00:49:44 UTC (rev 21685)
@@ -15,19 +15,29 @@
 
 		layout.template_header()
 
-		if context.area.show_menus:
-			row = layout.row()
-			row.itemM("CONSOLE_MT_console")
-		
 		row = layout.row()
-		row.scale_x = 0.9
 		row.itemR(sc, "type", expand=True)
+
 		if sc.type == 'REPORT':
-			row.itemR(sc, "show_report_debug")
-			row.itemR(sc, "show_report_info")
-			row.itemR(sc, "show_report_operator")
-			row.itemR(sc, "show_report_warn")
-			row.itemR(sc, "show_report_error")
+			
+			if context.area.show_menus:
+				row = layout.row()
+				row.itemM("CONSOLE_MT_report")
+			
+			row.itemR(sc, "show_report_debug", text="Debug")
+			row.itemR(sc, "show_report_info", text="Info")
+			row.itemR(sc, "show_report_operator", text="Operators")
+			row.itemR(sc, "show_report_warn", text="Warnings")
+			row.itemR(sc, "show_report_error", text="Errors")
+			
+			row = layout.row()
+			row.enabled = sc.show_report_operator
+			row.itemO("console.report_replay")
+		
+		else:
+			if context.area.show_menus:
+				row = layout.row()
+				row.itemM("CONSOLE_MT_console")
 
 
 class CONSOLE_MT_console(bpy.types.Menu):
@@ -41,6 +51,20 @@
 		layout.column()
 		layout.itemO("console.clear")
 
+class CONSOLE_MT_report(bpy.types.Menu):
+	__space_type__ = "CONSOLE"
+	__label__ = "Report"
+
+	def draw(self, context):
+		layout = self.layout
+		sc = context.space_data
+
+		layout.column()
+		layout.itemO("console.select_all_toggle")
+		layout.itemO("console.select_border")
+		layout.itemO("console.report_delete")
+		layout.itemO("console.report_copy")
+
 def add_scrollback(text, text_type):
 	for l in text.split('\n'):
 		bpy.ops.console.scrollback_append(text=l.replace('\t', '    '), type=text_type)
@@ -97,7 +121,7 @@
 	Operator documentatuon text, will be used for the operator tooltip and python docs.
 	'''
 	__label__ = "Console Execute"
-	__register__ = True
+	__register__ = False
 	
 	# Both prompts must be the same length
 	PROMPT = '>>> ' 
@@ -373,7 +397,7 @@
 	Operator documentatuon text, will be used for the operator tooltip and python docs.
 	'''
 	__label__ = "Console Autocomplete"
-	__register__ = True
+	__register__ = False
 	
 	def poll(self, context):
 		return context.space_data.type == 'PYTHON'
@@ -423,6 +447,7 @@
 
 bpy.types.register(CONSOLE_HT_header)
 bpy.types.register(CONSOLE_MT_console)
+bpy.types.register(CONSOLE_MT_report)
 
 bpy.ops.add(CONSOLE_OT_exec)
 bpy.ops.add(CONSOLE_OT_autocomplete)

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c	2009-07-18 23:12:42 UTC (rev 21684)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c	2009-07-19 00:49:44 UTC (rev 21685)
@@ -101,7 +101,7 @@
 	/* First find the highest level of subdivision */
 	base = FIRSTBASE;
 	while(base) {
-		if(TESTBASELIB_BGMODE(base) && base->object->type==OB_MESH) {
+		if(TESTBASELIB_BGMODE(v3d, base) && base->object->type==OB_MESH) {
 			ModifierData *md;
 			for(md = base->object->modifiers.first; md; md = md->next) {
 				if(md->type == eModifierType_Multires) {
@@ -124,7 +124,7 @@
 	/* Subdivide all the displacements to the highest level */
 	base = FIRSTBASE;
 	while(base) {
-		if(TESTBASELIB_BGMODE(base) && base->object->type==OB_MESH) {
+		if(TESTBASELIB_BGMODE(v3d, base) && base->object->type==OB_MESH) {
 			ModifierData *md = NULL;
 			MultiresModifierData *mmd = NULL;
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/object.c	2009-07-18 23:12:42 UTC (rev 21684)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/object.c	2009-07-19 00:49:44 UTC (rev 21685)
@@ -1323,7 +1323,18 @@
 	expand_local_object(ob);
 }
 
-/* returns true if the Object data is a from an external blend file (libdata) */
+/*
+ * Returns true if the Object is a from an external blend file (libdata)
+ */
+int object_is_libdata(Object *ob)
+{
+	if (!ob) return 0;
+	if (ob->proxy) return 0;
+	if (ob->id.lib) return 1;
+	return 0;
+}
+
+/* Returns true if the Object data is a from an external blend file (libdata) */
 int object_data_is_libdata(Object *ob)
 {
 	if(!ob) return 0;

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_object.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_object.h	2009-07-18 23:12:42 UTC (rev 21684)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_object.h	2009-07-19 00:49:44 UTC (rev 21685)
@@ -70,6 +70,7 @@
 void ED_object_base_init_from_view(struct bContext *C, struct Base *base);
 
 /* cleanup */
+int object_is_libdata(struct Object *ob);
 int object_data_is_libdata(struct Object *ob);
 
 /* constraints */

Modified: branches/blender2.5/blender/source/blender/editors/object/object_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-07-18 23:12:42 UTC (rev 21684)
+++ branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-07-19 00:49:44 UTC (rev 21685)
@@ -747,7 +747,7 @@
 	
 	/* XXX check object pointers */
 	for(base= FIRSTBASE; base; base= base->next) {
-		if(TESTBASELIB(v3d, base)) {
+		if(TESTBASELIB_BGMODE(v3d, base)) {
 			ob= base->object;
 			relink_constraints(&ob->constraints);
 			if (ob->pose){

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_context.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_context.c	2009-07-18 23:12:42 UTC (rev 21684)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_context.c	2009-07-19 00:49:44 UTC (rev 21685)
@@ -44,7 +44,9 @@
 
 	if(CTX_data_dir(member)) {
 		static const char *dir[] = {
-			"scene", "selected_objects", "selected_bases", "active_base",
+			"scene", "selected_objects", "selected_bases",
+			"selected_editable_objects", "selected_editable_bases"
+			"active_base",
 			"active_object", "edit_object", NULL};
 
 		CTX_data_dir_set(result, dir);
@@ -68,6 +70,24 @@
 
 		return 1;
 	}
+	else if(CTX_data_equals(member, "selected_editable_objects") || CTX_data_equals(member, "selected_editable_bases")) {
+		int selected_editable_objects= CTX_data_equals(member, "selected_editable_objects");
+
+		for(base=scene->base.first; base; base=base->next) {
+			if((base->flag & SELECT) && (base->lay & scene->lay)) {
+				if((base->object->restrictflag & OB_RESTRICT_VIEW)==0) {
+					if(0==object_is_libdata(base->object)) {
+						if(selected_editable_objects)
+							CTX_data_id_list_add(result, &base->object->id);
+						else
+							CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base);
+					}
+				}
+			}
+		}
+
+		return 1;
+	}
 	else if(CTX_data_equals(member, "active_base")) {
 		if(scene->basact)
 			CTX_data_pointer_set(result, &scene->id, &RNA_UnknownType, &scene->basact);

Modified: branches/blender2.5/blender/source/blender/editors/space_console/console_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_console/console_draw.c	2009-07-18 23:12:42 UTC (rev 21684)
+++ branches/blender2.5/blender/source/blender/editors/space_console/console_draw.c	2009-07-19 00:49:44 UTC (rev 21685)
@@ -31,6 +31,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <limits.h>
 
 #include "MEM_guardedalloc.h"
 
@@ -53,6 +54,8 @@
 #include "BIF_glutil.h"
 
 #include "ED_datafiles.h"
+#include "ED_types.h"
+
 #include "UI_interface.h"
 #include "UI_resources.h"
 
@@ -89,7 +92,7 @@
 	}
 }
 
-static void console_report_color(unsigned char *fg, 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; }
@@ -99,8 +102,30 @@
 	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;
+		}
+	}
 
-	fg[0]=0; fg[1]=0; fg[2]=0;
+	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;
+		}
+
+	}
+
+
+
 }
 
 
@@ -180,14 +205,14 @@
 #define CONSOLE_DRAW_MARGIN 4
 #define CONSOLE_DRAW_SCROLL 16
 
-static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int draw)
+static int console_text_main__internal(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int draw, int mouse_y, void **mouse_pick)
 {
 	View2D *v2d= &ar->v2d;
 
 	ConsoleLine *cl= sc->history.last;
 	
 	int x_orig=CONSOLE_DRAW_MARGIN, y_orig=CONSOLE_DRAW_MARGIN;
-	int x,y;
+	int x,y, y_prev;
 	int cwidth;
 	int console_width; /* number of characters that fit into the width of the console (fixed width) */
 	unsigned char fg[3];
@@ -200,6 +225,10 @@
 	
 	x= x_orig; y= y_orig;
 	
+	if(mouse_y != INT_MAX)
+		mouse_y += (v2d->cur.ymin+CONSOLE_DRAW_MARGIN);
+
+
 	if(sc->type==CONSOLE_TYPE_PYTHON) {
 		int prompt_len;
 		
@@ -228,6 +257,7 @@
 		y += sc->lheight;
 		
 		for(cl= sc->scrollback.last; cl; cl= cl->prev) {
+			y_prev= y;
 
 			if(draw)
 				console_line_color(fg, cl->type);
@@ -235,7 +265,7 @@
 			if(!console_draw_string(	cl->line, cl->len,
 										console_width, sc->lheight,
 										fg, NULL,
-										ar->winx-CONSOLE_DRAW_MARGIN,
+										ar->winx-(CONSOLE_DRAW_MARGIN+CONSOLE_DRAW_SCROLL),
 										v2d->cur.ymin, v2d->cur.ymax,
 										&x, &y, draw))
 			{
@@ -244,37 +274,39 @@
 					break; /* past the y limits */
 				}
 			}
+
+			if((mouse_y != INT_MAX) && (mouse_y >= y_prev && mouse_y <= y)) {
+				*mouse_pick= (void *)cl;
+				break;
+			}
 		}
 	}
 	else { 
 		Report *report;
 		int report_mask= 0;
 		int bool= 0;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list