Revision: 20319
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20319
Author:   blendix
Date:     2009-05-21 17:34:09 +0200 (Thu, 21 May 2009)

Log Message:
-----------
2.5 UI: Modifier Template

* template_modifier creates the modifier box, and returns a layout
  to put the buttons in.
* Only the armature modifier is now done with python code, all other
  modifiers use C code. To convert a modifier to python, remove the
  corresponding C code and create a function in DATA_PT_modifiers.
* Some modifiers still require some RNA work to get it working well,
  especially to make pointers editable. Mostly that is a matter of
  defining an own _set callback and put some of the modifier C code
  into it.
* Still various buttons that don't work, like for hooks or mesh
  deform binding.
* Fix for crashing decimate modifier (still disabled).

* Removed UI_BUT_NO_HILITE, HMENU.
* Make uiLayoutBox work with align.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_data_modifier.py
    branches/blender2.5/blender/source/blender/blenkernel/BKE_object.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.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/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_api.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
    
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/object/object_modifier.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_modifier.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_ui.c

Modified: branches/blender2.5/blender/release/ui/buttons_data_modifier.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_modifier.py     
2009-05-21 14:11:12 UTC (rev 20318)
+++ branches/blender2.5/blender/release/ui/buttons_data_modifier.py     
2009-05-21 15:34:09 UTC (rev 20319)
@@ -21,27 +21,17 @@
                if not ob:
                        return
 
-               layout.row()
-               layout.item_menu_enumO("OBJECT_OT_modifier_add", "type")
+               row = layout.row()
+               row.item_menu_enumO("OBJECT_OT_modifier_add", "type")
+               row.itemL();
 
                for md in ob.modifiers:
-                       sub = layout.box()
+                       box = layout.template_modifier(context, md)
 
-                       row = sub.row()
-                       row.itemR(md, "expanded", text="")
-                       row.itemR(md, "name", text="")
-
-                       row.itemR(md, "render", text="")
-                       row.itemR(md, "realtime", text="")
-                       row.itemR(md, "editmode", text="")
-                       row.itemR(md, "on_cage", text="")
-
                        if md.expanded:
-                               sub.itemS()
+                               if md.type == 'ARMATURE':
+                                       self.armature(box, md)
 
-                               if (md.type == 'ARMATURE'):
-                                       self.armature(sub, md)
-
        def armature(self, layout, md):
                layout.itemR(md, "object")
                row = layout.row()
@@ -51,9 +41,7 @@
                flow.itemR(md, "use_vertex_groups")
                flow.itemR(md, "use_bone_envelopes")
                flow.itemR(md, "quaternion")
-               flow.itemR(md, "b_bone_rest")
                flow.itemR(md, "multi_modifier")
                
 bpy.types.register(DATA_PT_modifiers)
 
-

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_object.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_object.h  
2009-05-21 14:11:12 UTC (rev 20318)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_object.h  
2009-05-21 15:34:09 UTC (rev 20319)
@@ -85,6 +85,7 @@
 struct Object *copy_object(struct Object *ob);
 void expand_local_object(struct Object *ob);
 void make_local_object(struct Object *ob);
+int object_data_is_libdata(struct Object *ob);
 void set_mblur_offs(float blur);
 void set_field_offs(float field);
 void disable_speed_curve(int val);

Modified: 
branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c     
2009-05-21 14:11:12 UTC (rev 20318)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c     
2009-05-21 15:34:09 UTC (rev 20319)
@@ -4058,17 +4058,15 @@
        tdmd->percent = dmd->percent;
 }
 
-//XXX
-#if 0 
 static DerivedMesh *decimateModifier_applyModifier(
                ModifierData *md, Object *ob, DerivedMesh *derivedData,
   int useRenderParams, int isFinalCalc)
 {
-       DecimateModifierData *dmd = (DecimateModifierData*) md;
+       // DecimateModifierData *dmd = (DecimateModifierData*) md;
        DerivedMesh *dm = derivedData, *result = NULL;
        MVert *mvert;
        MFace *mface;
-       LOD_Decimation_Info lod;
+       // LOD_Decimation_Info lod;
        int totvert, totface;
        int a, numTris;
 
@@ -4090,6 +4088,8 @@
                goto exit;
        }
 
+       // XXX
+#if 0
        lod.vertex_buffer= MEM_mallocN(3*sizeof(float)*totvert, "vertices");
        lod.vertex_normal_buffer= MEM_mallocN(3*sizeof(float)*totvert, 
"normals");
        lod.triangle_index_buffer= MEM_mallocN(3*sizeof(int)*numTris, "trias");
@@ -4174,11 +4174,14 @@
        MEM_freeN(lod.vertex_buffer);
        MEM_freeN(lod.vertex_normal_buffer);
        MEM_freeN(lod.triangle_index_buffer);
+#else
+       modifier_setError(md, "Modifier not working yet in 2.5.");
+       goto exit;
+#endif
 
 exit:
                return result;
 }
-#endif
 
 /* Smooth */
 
@@ -8271,7 +8274,7 @@
                mti->flags = eModifierTypeFlag_AcceptsMesh;
                mti->initData = decimateModifier_initData;
                mti->copyData = decimateModifier_copyData;
-               //XXX mti->applyModifier = decimateModifier_applyModifier;
+               mti->applyModifier = decimateModifier_applyModifier;
 
                mti = INIT_TYPE(Smooth);
                mti->type = eModifierTypeType_OnlyDeform;

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/object.c       
2009-05-21 14:11:12 UTC (rev 20318)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/object.c       
2009-05-21 15:34:09 UTC (rev 20319)
@@ -1320,6 +1320,18 @@
        expand_local_object(ob);
 }
 
+/* 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;
+       if(ob->proxy) return 0;
+       if(ob->id.lib) return 1;
+       if(!ob->data) return 0;
+       if(((ID *)ob->data)->lib) return 1;
+
+       return 0;
+}
+
 /* *************** PROXY **************** */
 
 /* when you make proxy, ensure the exposed layers are extern */

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_object.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_object.h      
2009-05-21 14:11:12 UTC (rev 20318)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_object.h      
2009-05-21 15:34:09 UTC (rev 20319)
@@ -39,6 +39,7 @@
 struct Lattice;
 struct Mesh;
 struct Curve;
+struct ReportList;
 
 /* object_edit.c */
 void ED_operatortypes_object(void);
@@ -86,7 +87,13 @@
 void key_to_curve(struct KeyBlock *kb, struct Curve  *cu, struct ListBase 
*nurb);
 void curve_to_key(struct Curve *cu, struct KeyBlock *kb, struct ListBase 
*nurb);
 
+/* object_modifier.c */
+int ED_object_modifier_delete(struct ReportList *reports, struct Object *ob, 
struct ModifierData *md);
+int ED_object_modifier_move_down(struct ReportList *reports, struct Object 
*ob, struct ModifierData *md);
+int ED_object_modifier_move_up(struct ReportList *reports, struct Object *ob, 
struct ModifierData *md);
+int ED_object_modifier_convert(struct ReportList *reports, struct Scene 
*scene, struct Object *ob, struct ModifierData *md);
+int ED_object_modifier_apply(struct ReportList *reports, struct Scene *scene, 
struct Object *ob, struct ModifierData *md);
+int ED_object_modifier_copy(struct ReportList *reports, struct Object *ob, 
struct ModifierData *md);
 
-
 #endif /* ED_OBJECT_H */
 

Modified: 
branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-05-21 14:11:12 UTC (rev 20318)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-05-21 15:34:09 UTC (rev 20319)
@@ -86,7 +86,7 @@
 #define UI_BLOCK_NUMSELECT             8
 #define UI_BLOCK_ENTER_OK              16
 #define UI_BLOCK_NOSHADOW              32
-#define UI_BLOCK_NO_HILITE             64              /* XXX 2.5 not 
implemented */
+#define UI_BLOCK_UNUSED                        64
 #define UI_BLOCK_MOVEMOUSE_QUIT        128
 #define UI_BLOCK_KEEP_OPEN             256
 #define UI_BLOCK_POPUP                 512
@@ -127,8 +127,7 @@
 #define UI_BUT_ALIGN_DOWN      (1<<17)
 
 #define UI_BUT_DISABLED                (1<<18)
-       /* dont draw hilite on mouse over */
-#define UI_NO_HILITE           (1<<19)
+#define UI_BUT_UNUSED          (1<<19)
 #define UI_BUT_ANIMATED                (1<<20)
 #define UI_BUT_ANIMATED_KEY    (1<<21)
 #define UI_BUT_DRIVEN          (1<<22)
@@ -188,8 +187,7 @@
 #define ICONTOGN (34<<9)
 #define FTPREVIEW (35<<9)
 #define NUMABS (36<<9)
-#define HMENU  (37<<9)
-#define TOGBUT  (38<<9)
+#define TOGBUT  (37<<9)
 #define BUTTYPE        (63<<9)
 
 /* Drawing
@@ -560,6 +558,7 @@
 void uiTemplateHeader(uiLayout *layout, struct bContext *C);
 void uiTemplateHeaderID(uiLayout *layout, struct bContext *C, struct 
PointerRNA *ptr, char *propname,
        char *newop, char *openop, char *unlinkop);
+uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct 
PointerRNA *ptr);
 
 /* items */
 void uiItemO(uiLayout *layout, char *name, int icon, char *opname);

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c    
2009-05-21 14:11:12 UTC (rev 20318)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c    
2009-05-21 15:34:09 UTC (rev 20319)
@@ -1987,7 +1987,7 @@
 
 int ui_but_can_align(uiBut *but)
 {
-       return !ELEM(but->type, LABEL, ROUNDBOX);
+       return (but->type != LABEL);
 }
 
 static void ui_block_do_align_but(uiBlock *block, uiBut *first, int nr)
@@ -2221,8 +2221,6 @@
        }
 
        but->flag |= (block->flag & UI_BUT_ALIGN);
-       if(block->flag & UI_BLOCK_NO_HILITE)
-               but->flag |= UI_NO_HILITE;
 
        if (but->lock) {
                if (but->lockstr) {
@@ -2230,12 +2228,7 @@
                }
        }
 
-       if(but->type == ROUNDBOX) {
-               but->flag |= UI_NO_HILITE;
-               BLI_addhead(&block->buttons, but);
-       }
-       else
-               BLI_addtail(&block->buttons, but);
+       BLI_addtail(&block->buttons, but);
        
        if(block->curlayout)
                ui_layout_add_but(block->curlayout, but);
@@ -2999,7 +2992,7 @@
 
 uiBut *uiDefMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, char 
*str, short x1, short y1, short x2, short y2, char *tip)
 {
-       uiBut *but= ui_def_but(block, HMENU, 0, str, x1, y1, x2, y2, arg, 0.0, 
0.0, 0.0, 0.0, tip);
+       uiBut *but= ui_def_but(block, PULLDOWN, 0, str, x1, y1, x2, y2, arg, 
0.0, 0.0, 0.0, 0.0, tip);
        but->menu_create_func= func;
        ui_check_but(but);
        return but;
@@ -3007,7 +3000,7 @@
 
 uiBut *uiDefIconTextMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, 
int icon, char *str, short x1, short y1, short x2, short y2, char *tip)
 {
-       uiBut *but= ui_def_but(block, HMENU, 0, str, x1, y1, x2, y2, arg, 0.0, 
0.0, 0.0, 0.0, tip);
+       uiBut *but= ui_def_but(block, PULLDOWN, 0, str, x1, y1, x2, y2, arg, 
0.0, 0.0, 0.0, 0.0, tip);
 
        but->icon= (BIFIconID) icon;
        but->flag|= UI_HAS_ICON;

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_api.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_api.c    
    2009-05-21 14:11:12 UTC (rev 20318)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_api.c    
    2009-05-21 15:34:09 UTC (rev 20319)
@@ -189,5 +189,13 @@
        RNA_def_string(func, "new", "", 0, "", "Operator identifier to create a 
new ID block.");
        RNA_def_string(func, "open", "", 0, "", "Operator identifier to open a 
new ID block.");
        RNA_def_string(func, "unlink", "", 0, "", "Operator identifier to 
unlink the ID block.");
+
+       func= RNA_def_function(srna, "template_modifier", "uiTemplateModifier");
+       parm= RNA_def_pointer(func, "context", "Context", "", "Current 
context.");

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