[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50037] trunk/blender/source/blender: Sequencer: Python API for sequence modifiers

Sergey Sharybin sergey.vfx at gmail.com
Mon Aug 20 12:15:32 CEST 2012


Revision: 50037
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50037
Author:   nazgul
Date:     2012-08-20 10:15:32 +0000 (Mon, 20 Aug 2012)
Log Message:
-----------
Sequencer: Python API for sequence modifiers

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/seqmodifier.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_modifier.c
    trunk/blender/source/blender/makesrna/RNA_enum_types.h
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2012-08-20 10:15:32 UTC (rev 50037)
@@ -384,7 +384,9 @@
 
 struct SequenceModifierTypeInfo *BKE_sequence_modifier_type_info_get(int type);
 
-void BKE_sequence_modifier_new(struct Sequence *seq, int type);
+struct SequenceModifierData *BKE_sequence_modifier_new(struct Sequence *seq, const char *name, int type);
+int BKE_sequence_modifier_remove(struct Sequence *seq, struct SequenceModifierData *smd);
+void BKE_sequence_modifier_clear(struct Sequence *seq);
 void BKE_sequence_modifier_free(struct SequenceModifierData *smd);
 void BKE_sequence_modifier_unique_name(struct Sequence *seq, struct SequenceModifierData *smd);
 struct SequenceModifierData *BKE_sequence_modifier_find_by_name(struct Sequence *seq, char *name);

Modified: trunk/blender/source/blender/blenkernel/intern/seqmodifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/seqmodifier.c	2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/blenkernel/intern/seqmodifier.c	2012-08-20 10:15:32 UTC (rev 50037)
@@ -417,7 +417,7 @@
 	return modifiersTypes[type];
 }
 
-void BKE_sequence_modifier_new(Sequence *seq, int type)
+SequenceModifierData *BKE_sequence_modifier_new(Sequence *seq, const char *name, int type)
 {
 	SequenceModifierData *smd;
 	SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(type);
@@ -427,7 +427,10 @@
 	smd->type = type;
 	smd->flag |= SEQUENCE_MODIFIER_EXPANDED;
 
-	BLI_strncpy(smd->name, smti->name, sizeof(smd->name));
+	if (!name || !name[0])
+		BLI_strncpy(smd->name, smti->name, sizeof(smd->name));
+	else
+		BLI_strncpy(smd->name, name, sizeof(smd->name));
 
 	BLI_addtail(&seq->modifiers, smd);
 
@@ -435,8 +438,33 @@
 
 	if (smti->init_data)
 		smti->init_data(smd);
+
+	return smd;
 }
 
+int BKE_sequence_modifier_remove(Sequence *seq, SequenceModifierData *smd)
+{
+	if (BLI_findindex(&seq->modifiers, smd) == -1)
+		return FALSE;
+
+	BLI_remlink(&seq->modifiers, smd);
+	BKE_sequence_modifier_free(smd);
+
+	return TRUE;
+}
+
+void BKE_sequence_modifier_clear(Sequence *seq)
+{
+	SequenceModifierData *smd, *smd_next;
+
+	for (smd = seq->modifiers.first; smd; smd = smd_next) {
+		smd_next = smd->next;
+		BKE_sequence_modifier_free(smd);
+	}
+
+	seq->modifiers.first = seq->modifiers.last = NULL;
+}
+
 void BKE_sequence_modifier_free(SequenceModifierData *smd)
 {
 	SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(smd->type);

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2012-08-20 10:15:32 UTC (rev 50037)
@@ -205,15 +205,8 @@
 	}
 
 	/* free modifiers */
-	if (seq->modifiers.first) {
-		SequenceModifierData *smd, *smd_next;
+	BKE_sequence_modifier_clear(seq);
 
-		for (smd = seq->modifiers.first; smd; smd = smd_next) {
-			smd_next = smd->next;
-			BKE_sequence_modifier_free(smd);
-		}
-	}
-
 	BKE_sequencer_cache_cleanup_sequence(seq);
 	BKE_sequencer_preprocessed_cache_cleanup_sequence(seq);
 

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_modifier.c	2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_modifier.c	2012-08-20 10:15:32 UTC (rev 50037)
@@ -84,7 +84,7 @@
 	Sequence *seq = BKE_sequencer_active_get(scene);
 	int type = RNA_enum_get(op->ptr, "type");
 
-	BKE_sequence_modifier_new(seq, type);
+	BKE_sequence_modifier_new(seq, NULL, type);
 
 	BKE_sequence_invalidate_cache(scene, seq);
 	WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
@@ -96,14 +96,6 @@
 {
 	PropertyRNA *prop;
 
-	/* TODO: de-duplicate from RNA */
-	static EnumPropertyItem sequence_modifier_type_items[] = {
-		{seqModifierType_ColorBalance, "COLOR_BALANCE", ICON_NONE, "Color Balance", ""},
-		{seqModifierType_Curves, "CURVES", ICON_NONE, "Curves", ""},
-		{seqModifierType_HueCorrect,"HUE_CORRECT", ICON_NONE, "Hue Correct", ""},
-		{0, NULL, 0, NULL, NULL}
-	};
-
 	/* identifiers */
 	ot->name = "Add Strip Modifier";
 	ot->idname = "SEQUENCER_OT_strip_modifier_add";

Modified: trunk/blender/source/blender/makesrna/RNA_enum_types.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_enum_types.h	2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/makesrna/RNA_enum_types.h	2012-08-20 10:15:32 UTC (rev 50037)
@@ -52,6 +52,7 @@
 extern EnumPropertyItem modifier_type_items[];
 extern EnumPropertyItem constraint_type_items[];
 extern EnumPropertyItem boidrule_type_items[];
+extern EnumPropertyItem sequence_modifier_type_items[];
 
 extern EnumPropertyItem image_type_items[];
 extern EnumPropertyItem image_color_mode_items[];

Modified: trunk/blender/source/blender/makesrna/intern/rna_object.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object.c	2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/makesrna/intern/rna_object.c	2012-08-20 10:15:32 UTC (rev 50037)
@@ -1768,7 +1768,7 @@
 	func = RNA_def_function(srna, "new", "rna_Object_modifier_new");
 	RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
 	RNA_def_function_ui_description(func, "Add a new modifier");
-	parm = RNA_def_string(func, "name", "Name", 0, "", "New name for the bone");
+	parm = RNA_def_string(func, "name", "Name", 0, "", "New name for the modifier");
 	RNA_def_property_flag(parm, PROP_REQUIRED);
 	/* modifier to add */
 	parm = RNA_def_enum(func, "type", modifier_type_items, 1, "", "Modifier type to add");

Modified: trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sequencer.c	2012-08-20 10:14:11 UTC (rev 50036)
+++ trunk/blender/source/blender/makesrna/intern/rna_sequencer.c	2012-08-20 10:15:32 UTC (rev 50037)
@@ -30,6 +30,7 @@
 
 #include "RNA_access.h"
 #include "RNA_define.h"
+#include "RNA_enum_types.h"
 
 #include "rna_internal.h"
 
@@ -58,8 +59,20 @@
 	int supports_mask;
 } EffectInfo;
 
+EnumPropertyItem sequence_modifier_type_items[] = {
+	{seqModifierType_ColorBalance, "COLOR_BALANCE", ICON_NONE, "Color Balance", ""},
+	{seqModifierType_Curves, "CURVES", ICON_NONE, "Curves", ""},
+	{seqModifierType_HueCorrect,"HUE_CORRECT", ICON_NONE, "Hue Correct", ""},
+	{0, NULL, 0, NULL, NULL}
+};
+
 #ifdef RNA_RUNTIME
 
+#include "BKE_report.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
 typedef struct SequenceSearchData {
 	Sequence *seq;
 	void *data;
@@ -961,6 +974,52 @@
 	return TRUE;
 }
 
+static SequenceModifierData *rna_Sequence_modifier_new(Sequence *seq, bContext *C, ReportList *reports, const char *name, int type)
+{
+	if (!BKE_sequence_supports_modifiers(seq)) {
+		BKE_report(reports, RPT_ERROR, "Sequence type does not support modifiers");
+
+		return NULL;
+	}
+	else {
+		Scene *scene = CTX_data_scene(C);
+		SequenceModifierData *smd;
+
+		smd = BKE_sequence_modifier_new(seq, name, type);
+
+		BKE_sequence_invalidate_cache_for_modifier(scene, seq);
+
+		WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
+
+		return smd;
+	}
+}
+
+static void rna_Sequence_modifier_remove(Sequence *seq, bContext *C, ReportList *reports, SequenceModifierData *smd)
+{
+	Scene *scene = CTX_data_scene(C);
+
+	if (BKE_sequence_modifier_remove(seq, smd)) {
+		BKE_sequence_invalidate_cache_for_modifier(scene, seq);
+
+		WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
+	}
+	else {
+		BKE_report(reports, RPT_ERROR, "Modifier was not found in the stack");
+	}
+}
+
+static void rna_Sequence_modifier_clear(Sequence *seq, bContext *C)
+{
+	Scene *scene = CTX_data_scene(C);
+
+	BKE_sequence_modifier_clear(seq);
+
+	BKE_sequence_invalidate_cache_for_modifier(scene, seq);
+
+	WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
+}
+
 #else
 
 static void rna_def_strip_element(BlenderRNA *brna)
@@ -1210,12 +1269,39 @@
 {
 	StructRNA *srna;
 
+	FunctionRNA *func;
+	PropertyRNA *parm;
+
 	RNA_def_property_srna(cprop, "SequenceModifiers");
 	srna = RNA_def_struct(brna, "SequenceModifiers", NULL);
 	RNA_def_struct_sdna(srna, "Sequence");
 	RNA_def_struct_ui_text(srna, "Strip Modifiers", "Collection of strip modifiers");
 
-	/* TODO: implement new/remove/clear methods for modifier stack */
+	/* add modifier */
+	func = RNA_def_function(srna, "new", "rna_Sequence_modifier_new");
+	RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+	RNA_def_function_ui_description(func, "Add a new modifier");
+	parm = RNA_def_string(func, "name", "Name", 0, "", "New name for the modifier");
+	RNA_def_property_flag(parm, PROP_REQUIRED);
+	/* modifier to add */
+	parm = RNA_def_enum(func, "type", sequence_modifier_type_items, seqModifierType_ColorBalance, "", "Modifier type to add");
+	RNA_def_property_flag(parm, PROP_REQUIRED);
+	/* return type */
+	parm = RNA_def_pointer(func, "modifier", "SequenceModifier", "", "Newly created modifier");
+	RNA_def_function_return(func, parm);
+
+	/* remove modifier */
+	func = RNA_def_function(srna, "remove", "rna_Sequence_modifier_remove");
+	RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+	RNA_def_function_ui_description(func, "Remove an existing modifier from the sequence");
+	/* modifier to remove */
+	parm = RNA_def_pointer(func, "modifier", "SequenceModifier", "", "Modifier to remove");
+	RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
+
+	/* clear all modifiers */
+	func = RNA_def_function(srna, "clear", "rna_Sequence_modifier_clear");
+	RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+	RNA_def_function_ui_description(func, "Remove all modifiers from the sequence");
 }
 
 static void rna_def_sequence(BlenderRNA *brna)
@@ -2130,13 +2216,6 @@
 	StructRNA *srna;
 	PropertyRNA *prop;
 
-	static EnumPropertyItem sequence_modifier_type_items[] = {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list