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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to