[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20656] branches/blender2.5/blender/source /blender: Blender file selector support for setting multiple selected files /dirs which operators can use.

Campbell Barton ideasman42 at gmail.com
Fri Jun 5 18:11:38 CEST 2009


Revision: 20656
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20656
Author:   campbellbarton
Date:     2009-06-05 18:11:35 +0200 (Fri, 05 Jun 2009)

Log Message:
-----------
Blender file selector support for setting multiple selected files/dirs which operators can use.
This allows the sequencers Add-Image strip to work like it does in 2.4x.

- as well as setting the "filename" operator property, operators can have collections called "files" and "dirs" which are set when available.
- RNA_OperatorFileListElement as new collection type, its a bit redundant since each item only has a "name" property but its needed since we don't have a string array type.
- the file selector now prints operators it runs.

Tested with python, adding a list of images works to the sequencer works.
bpy.ops.SEQUENCER_OT_image_strip_add(name="MyImages", start_frame=54, channel=2, filename="/somedir/", replace_sel=True, files=[{"name":"test1.png"}, {"name":"test2.png"}])

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
    branches/blender2.5/blender/source/blender/makesrna/RNA_access.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_wm.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_interface.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c	2009-06-05 16:11:18 UTC (rev 20655)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c	2009-06-05 16:11:35 UTC (rev 20656)
@@ -480,6 +480,36 @@
 		strcat(name, sfile->params->file);
 		RNA_string_set(op->ptr, "filename", name);
 		
+		/* some ops have multiple files to select */
+		{
+			PointerRNA itemptr;
+			int i, numfiles = filelist_numfiles(sfile->files);
+			struct direntry *file;
+			if(RNA_struct_find_property(op->ptr, "files")) {
+				for (i=0; i<numfiles; i++) {
+					file = filelist_file(sfile->files, i);
+					if(file->flags & ACTIVE) {
+						if ((file->type & S_IFDIR)==0) {
+							RNA_collection_add(op->ptr, "files", &itemptr);
+							RNA_string_set(&itemptr, "name", file->relname);
+						}
+					}
+				}
+			}
+			
+			if(RNA_struct_find_property(op->ptr, "dirs")) {
+				for (i=0; i<numfiles; i++) {
+					file = filelist_file(sfile->files, i);
+					if(file->flags & ACTIVE) {
+						if ((file->type & S_IFDIR)) {
+							RNA_collection_add(op->ptr, "dirs", &itemptr);
+							RNA_string_set(&itemptr, "name", file->relname);
+						}
+					}
+				}
+			}
+		}
+		
 		fsmenu_insert_entry(fsmenu_get(), FS_CATEGORY_RECENT, sfile->params->dir,0, 1);
 		BLI_make_file_string(G.sce, name, BLI_gethome(), ".Bfs");
 		fsmenu_write_file(fsmenu_get(), name);

Modified: branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c	2009-06-05 16:11:18 UTC (rev 20655)
+++ branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c	2009-06-05 16:11:35 UTC (rev 20656)
@@ -423,10 +423,8 @@
 	Scene *scene= CTX_data_scene(C);
 	Editing *ed= seq_give_editing(scene, TRUE);
 
+	int tot_images;
 
-	int tot_images= 1; //XXX FIXME, we need string arrays!
-	//int a;
-
 	char filename[FILE_MAX];
 
 	Sequence *seq;	/* generic strip vars */
@@ -440,26 +438,30 @@
 	
 	RNA_string_get(op->ptr, "filename", filename);
 
-	seq = alloc_sequence(ed->seqbasep, start_frame, channel);
-	
+	seq = alloc_sequence(ed->seqbasep, start_frame, channel);	
 	seq->type= SEQ_IMAGE;
 	
 	/* basic defaults */
 	seq->strip= strip= MEM_callocN(sizeof(Strip), "strip");
-	strip->len = seq->len = tot_images;	
+	BLI_split_dirfile_basic(filename, strip->dir, NULL);
+	
+	tot_images= RNA_property_collection_length(op->ptr, RNA_struct_find_property(op->ptr, "files"));
+	
+	strip->len = seq->len = tot_images?tot_images:1;
 	strip->us= 1;
 	
 	strip->stripdata= se= MEM_callocN(seq->len*sizeof(StripElem), "stripelem");
 	
-
-	BLI_split_dirfile_basic(filename, strip->dir, se->name); // XXX se->name assignment should be moved into the loop below
-
-#if 0 // XXX
-	for(a=0; a<seq->len; a++) {
-	   strncpy(se->name, name, FILE_MAXFILE-1);
-	   se++;
+	if(tot_images) {
+		RNA_BEGIN(op->ptr, itemptr, "files") {
+			RNA_string_get(&itemptr, "name", se->name);
+			se++;
+		}
+		RNA_END;
 	}
-#endif
+	else {
+		BLI_split_dirfile_basic(filename, NULL, se->name);
+	}
 
 	RNA_string_get(op->ptr, "name", seq->name);
 	
@@ -507,6 +509,8 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 	
 	sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILENAME);
+	
+	RNA_def_collection_runtime(ot->srna, "files", &RNA_OperatorFileListElement, "Files", "");
 }
 
 

Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_access.h	2009-06-05 16:11:18 UTC (rev 20655)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_access.h	2009-06-05 16:11:35 UTC (rev 20656)
@@ -196,6 +196,7 @@
 extern StructRNA RNA_Object;
 extern StructRNA RNA_ObstacleFluidSettings;
 extern StructRNA RNA_Operator;
+extern StructRNA RNA_OperatorFileListElement;
 extern StructRNA RNA_OperatorMousePath;
 extern StructRNA RNA_OperatorProperties;
 extern StructRNA RNA_OperatorStrokeElement;

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c	2009-06-05 16:11:18 UTC (rev 20655)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c	2009-06-05 16:11:35 UTC (rev 20656)
@@ -2214,7 +2214,6 @@
 		cstring = RNA_property_as_string(&iter.ptr, prop);
 		BLI_dynstr_appendf(dynstr, "\"%s\":%s", propname, cstring);
 		MEM_freeN(cstring);
-		first_time= 0;
 	}
 
 	RNA_property_collection_end(&iter);

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_wm.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_wm.c	2009-06-05 16:11:18 UTC (rev 20655)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_wm.c	2009-06-05 16:11:35 UTC (rev 20656)
@@ -133,6 +133,21 @@
 	RNA_def_property_ui_text(prop, "Time", "Time of mouse location.");
 }
 
+static void rna_def_operator_filelist_element(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	srna= RNA_def_struct(brna, "OperatorFileListElement", "IDPropertyGroup");
+	RNA_def_struct_ui_text(srna, "Operator File List Element", "");
+	
+	
+	prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+	RNA_def_property_flag(prop, PROP_IDPROPERTY);
+	RNA_def_property_ui_text(prop, "Name", "the name of a file or directory within a file list");
+}
+
+
 static void rna_def_windowmanager(BlenderRNA *brna)
 {
 	StructRNA *srna;
@@ -151,6 +166,7 @@
 {
 	rna_def_operator(brna);
 	rna_def_operator_utils(brna);
+	rna_def_operator_filelist_element(brna);
 	rna_def_windowmanager(brna);
 }
 

Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_interface.c	2009-06-05 16:11:18 UTC (rev 20655)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_interface.c	2009-06-05 16:11:35 UTC (rev 20656)
@@ -19,6 +19,7 @@
 #include "bpy_rna.h"
 #include "bpy_operator.h"
 #include "bpy_ui.h"
+#include "bpy_util.h"
 
 #include "DNA_anim_types.h"
 #include "DNA_space_types.h"

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-06-05 16:11:18 UTC (rev 20655)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-06-05 16:11:35 UTC (rev 20656)
@@ -826,7 +826,12 @@
 						uiPupMenuSaveOver(C, handler->op, path);
 					}
 					else {
-						handler->op->type->exec(C, handler->op);
+						int retval= handler->op->type->exec(C, handler->op);
+						
+						if (retval & OPERATOR_FINISHED)
+							if(G.f & G_DEBUG)
+								wm_operator_print(handler->op);
+						
 						WM_operator_free(handler->op);
 					}
 					





More information about the Bf-blender-cvs mailing list