[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20591] branches/blender2.5/blender/source /blender/editors: UI:

Brecht Van Lommel brecht at blender.org
Wed Jun 3 02:09:30 CEST 2009


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




More information about the Bf-blender-cvs mailing list