Revision: 20591
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20591
Author:   blendix
Date:     2009-06-03 02:09:30 +0200 (Wed, 03 Jun 2009)

Log Message:
-----------
UI:
* Make modifier and constraint templates use left/right alignment for
  buttons in the header.
* Added mdef bind operator as an example of how to use local context
  for a modifier, and add some code I forgot to commit last time to
  make this system actually work.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/ED_object.h
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    branches/blender2.5/blender/source/blender/editors/object/object_intern.h
    branches/blender2.5/blender/source/blender/editors/object/object_modifier.c
    branches/blender2.5/blender/source/blender/editors/object/object_ops.c

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_object.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_object.h      
2009-06-03 00:04:48 UTC (rev 20590)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_object.h      
2009-06-03 00:09:30 UTC (rev 20591)
@@ -56,7 +56,7 @@
 
 void ED_object_apply_obmat(struct Object *ob);
        /* single object duplicate, if dupflag==0, fully linked, else it uses 
U.dupflag */
-Base *ED_object_add_duplicate(struct Scene *scene, struct Base *base, int 
usedupflag);
+struct Base *ED_object_add_duplicate(struct Scene *scene, struct Base *base, 
int usedupflag);
 
 
 /* bitflags for enter/exit editmode */

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c    
2009-06-03 00:04:48 UTC (rev 20590)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c    
2009-06-03 00:09:30 UTC (rev 20591)
@@ -537,10 +537,17 @@
                /* temp? Proper check for greying out */
                if(but->optype) {
                        wmOperatorType *ot= but->optype;
+
+                       if(but->context)
+                               CTX_store_set((bContext*)C, but->context);
+
                        if(ot==NULL || (ot->poll && ot->poll((bContext 
*)C)==0)) {
                                but->flag |= UI_BUT_DISABLED;
                                but->lock = 1;
                        }
+
+                       if(but->context)
+                               CTX_store_set((bContext*)C, NULL);
                }
 
                /* only update soft range while not editing */

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
   2009-06-03 00:04:48 UTC (rev 20590)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
   2009-06-03 00:09:30 UTC (rev 20591)
@@ -160,6 +160,8 @@
 
        PointerRNA rnapoin;
        PropertyRNA *rnaprop;
+
+       bContextStore *context;
 } uiAfterFunc;
 
 static void button_activate_state(bContext *C, uiBut *but, uiHandleButtonState 
state);
@@ -252,6 +254,9 @@
                after->rnapoin= but->rnapoin;
                after->rnaprop= but->rnaprop;
 
+               if(but->context)
+                       after->context= CTX_store_copy(but->context);
+
                but->optype= NULL;
                but->opcontext= 0;
                but->opptr= NULL;
@@ -273,6 +278,9 @@
                after= *afterf; /* copy to avoid memleak on exit() */
                BLI_freelinkN(&funcs, afterf);
 
+               if(after.context)
+                       CTX_store_set(C, after.context);
+
                if(after.func)
                        after.func(C, after.func_arg1, after.func_arg2);
                if(after.funcN)
@@ -292,6 +300,11 @@
 
                if(after.rnapoin.data)
                        RNA_property_update(C, &after.rnapoin, after.rnaprop);
+
+               if(after.context) {
+                       CTX_store_set(C, NULL);
+                       CTX_store_free(after.context);
+               }
        }
 }
 

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
  2009-06-03 00:04:48 UTC (rev 20590)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
  2009-06-03 00:09:30 UTC (rev 20591)
@@ -240,33 +240,16 @@
 
 #define ERROR_LIBDATA_MESSAGE "Can't edit external libdata"
 
-#define B_NOP                          0
-#define B_MODIFIER_RECALC      1
-#define B_MODIFIER_REDRAW      2
-#define B_CHANGEDEP                    3
-#define B_ARM_RECALCDATA       4
-
 #include <string.h>
 
-#include "DNA_armature_types.h"
-#include "DNA_curve_types.h"
 #include "DNA_object_force.h"
 #include "DNA_object_types.h"
-#include "DNA_mesh_types.h"
-#include "DNA_meshdata_types.h"
 #include "DNA_modifier_types.h"
-#include "DNA_particle_types.h"
 #include "DNA_scene_types.h"
 
-#include "BKE_bmesh.h"
-#include "BKE_curve.h"
 #include "BKE_depsgraph.h"
 #include "BKE_DerivedMesh.h"
-#include "BKE_displist.h"
 #include "BKE_global.h"
-#include "BKE_lattice.h"
-#include "BKE_main.h"
-#include "BKE_mesh.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
 #include "BKE_particle.h"
@@ -280,33 +263,20 @@
 
 #include "ED_object.h"
 
-void do_modifier_panels(bContext *C, void *arg, int event)
+static void modifiers_del(bContext *C, void *ob_v, void *md_v)
 {
        Scene *scene= CTX_data_scene(C);
-       Object *ob = CTX_data_active_object(C);
+       Object *ob= ob_v;
+       ReportList reports;
 
-       switch(event) {
-       case B_MODIFIER_REDRAW:
-               WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
-               break;
+       BKE_reports_init(&reports, RPT_STORE);
 
-       case B_MODIFIER_RECALC:
+       if(ED_object_modifier_delete(&reports, ob_v, md_v)) {
                WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
                DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
-               object_handle_update(scene, ob);
-               // XXX countall();
-               break;
-       }
-}
 
-static void modifiers_del(bContext *C, void *ob_v, void *md_v)
-{
-       ReportList reports;
-
-       BKE_reports_init(&reports, RPT_STORE);
-
-       if(ED_object_modifier_delete(&reports, ob_v, md_v))
                ED_undo_push(C, "Delete modifier");
+       }
        else
                uiPupMenuReports(C, &reports);
 
@@ -315,12 +285,18 @@
 
 static void modifiers_moveUp(bContext *C, void *ob_v, void *md_v)
 {
+       Scene *scene= CTX_data_scene(C);
+       Object *ob= ob_v;
        ReportList reports;
 
        BKE_reports_init(&reports, RPT_STORE);
 
-       if(ED_object_modifier_move_up(&reports, ob_v, md_v))
+       if(ED_object_modifier_move_up(&reports, ob_v, md_v)) {
+               WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
+               DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+
                ED_undo_push(C, "Move modifier");
+       }
        else
                uiPupMenuReports(C, &reports);
 
@@ -329,12 +305,18 @@
 
 static void modifiers_moveDown(bContext *C, void *ob_v, void *md_v)
 {
+       Scene *scene= CTX_data_scene(C);
+       Object *ob= ob_v;
        ReportList reports;
 
        BKE_reports_init(&reports, RPT_STORE);
 
-       if(ED_object_modifier_move_down(&reports, ob_v, md_v))
+       if(ED_object_modifier_move_down(&reports, ob_v, md_v)) {
+               WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
+               DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+
                ED_undo_push(C, "Move modifier");
+       }
        else
                uiPupMenuReports(C, &reports);
 
@@ -344,12 +326,17 @@
 static void modifiers_convertParticles(bContext *C, void *obv, void *mdv)
 {
        Scene *scene= CTX_data_scene(C);
+       Object *ob= obv;
        ReportList reports;
 
        BKE_reports_init(&reports, RPT_STORE);
 
-       if(ED_object_modifier_convert(&reports, scene, obv, mdv))
+       if(ED_object_modifier_convert(&reports, scene, obv, mdv)) {
+               WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
+               DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+
                ED_undo_push(C, "Convert particles to mesh object(s).");
+       }
        else
                uiPupMenuReports(C, &reports);
 
@@ -359,12 +346,17 @@
 static void modifiers_applyModifier(bContext *C, void *obv, void *mdv)
 {
        Scene *scene= CTX_data_scene(C);
+       Object *ob= obv;
        ReportList reports;
 
        BKE_reports_init(&reports, RPT_STORE);
 
-       if(ED_object_modifier_apply(&reports, scene, obv, mdv))
+       if(ED_object_modifier_apply(&reports, scene, obv, mdv)) {
+               WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
+               DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+
                ED_undo_push(C, "Apply modifier");
+       }
        else
                uiPupMenuReports(C, &reports);
 
@@ -373,12 +365,17 @@
 
 static void modifiers_copyModifier(bContext *C, void *ob_v, void *md_v)
 {
+       Scene *scene= CTX_data_scene(C);
+       Object *ob= ob_v;
        ReportList reports;
 
        BKE_reports_init(&reports, RPT_STORE);
 
-       if(ED_object_modifier_copy(&reports, ob_v, md_v))
+       if(ED_object_modifier_copy(&reports, ob_v, md_v)) {
+               WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
+               DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
                ED_undo_push(C, "Copy modifier");
+       }
        else
                uiPupMenuReports(C, &reports);
 
@@ -387,21 +384,27 @@
 
 static void modifiers_setOnCage(bContext *C, void *ob_v, void *md_v)
 {
+       Scene *scene= CTX_data_scene(C);
        Object *ob = ob_v;
        ModifierData *md;
        
        int i, cageIndex = modifiers_getCageIndex(ob, NULL );
 
-       for( i = 0, md=ob->modifiers.first; md; ++i, md=md->next )
-               if( md == md_v ) {
-                       if( i >= cageIndex )
+       for(i = 0, md=ob->modifiers.first; md; ++i, md=md->next) {
+               if(md == md_v) {
+                       if(i >= cageIndex)
                                md->mode ^= eModifierMode_OnCage;
                        break;
                }
+       }
+
+       WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
+       DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
 }
 
 static void modifiers_convertToReal(bContext *C, void *ob_v, void *md_v)
 {
+       Scene *scene= CTX_data_scene(C);
        Object *ob = ob_v;
        ModifierData *md = md_v;
        ModifierData *nmd = modifier_new(md->type);
@@ -413,170 +416,57 @@
 
        ob->partype = PAROBJECT;
 
+       WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
+       DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+
        ED_undo_push(C, "Modifier convert to real");
 }
 
-#if 0
-static void modifiers_clearHookOffset(bContext *C, void *ob_v, void *md_v)
+static int modifier_can_delete(ModifierData *md)
 {
-       Object *ob = ob_v;
-       ModifierData *md = md_v;
-       HookModifierData *hmd = (HookModifierData*) md;
-       
-       if (hmd->object) {
-               Mat4Invert(hmd->object->imat, hmd->object->obmat);
-               Mat4MulSerie(hmd->parentinv, hmd->object->imat, ob->obmat, 
NULL, NULL, NULL, NULL, NULL, NULL);
-               ED_undo_push(C, "Clear hook offset");
-       }
-}
+       // deletion over the deflection panel
+       // fluid particle modifier can't be deleted here
 
-static void modifiers_cursorHookCenter(bContext *C, void *ob_v, void *md_v)
-{
-       /* XXX 
-       Object *ob = ob_v;
-       ModifierData *md = md_v;
-       HookModifierData *hmd = (HookModifierData*) md;
+       if(md->type==eModifierType_Fluidsim)
+               return 0;
+       if(md->type==eModifierType_Collision)
+               return 0;
+       if(md->type==eModifierType_Surface)
+               return 0;
+       if(md->type == eModifierType_ParticleSystem)
+               if(((ParticleSystemModifierData *)md)->psys->part->type == 
PART_FLUID)
+                       return 0;
 
-       if(G.vd) {
-               float *curs = give_cursor();
-               float bmat[3][3], imat[3][3];
-
-               where_is_object(ob);
-       
-               Mat3CpyMat4(bmat, ob->obmat);
-               Mat3Inv(imat, bmat);
-
-               curs= give_cursor();
-               hmd->cent[0]= curs[0]-ob->obmat[3][0];
-               hmd->cent[1]= curs[1]-ob->obmat[3][1];
-               hmd->cent[2]= curs[2]-ob->obmat[3][2];
-               Mat3MulVecfl(imat, hmd->cent);
-
-               ED_undo_push(C, "Hook cursor center");
-       }*/
+       return 1;
 }
 
-static void modifiers_selectHook(bContext *C, void *ob_v, void *md_v)
-{
-       /* XXX ModifierData *md = md_v;
-       HookModifierData *hmd = (HookModifierData*) md;
-
-       hook_select(hmd);*/
-}
-
-static void modifiers_reassignHook(bContext *C, void *ob_v, void *md_v)
-{
-       /* XXX ModifierData *md = md_v;

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