[Bf-blender-cvs] [632c29f] master: UI: communicate external data autopack better in the UI.

Simon Repp noreply at git.blender.org
Mon Dec 23 18:56:31 CET 2013


Commit: 632c29fef3a566d6aac9ea35e7875f08f3d1cf74
Author: Simon Repp
Date:   Mon Dec 23 18:35:32 2013 +0100
http://developer.blender.org/rB632c29fef3a566d6aac9ea35e7875f08f3d1cf74

UI: communicate external data autopack better in the UI.

Previously there was no way to see if autopack was enabled. Now the external
data menu has 3 entries instead of 2:

* Automatically Pack Into .blend (with checkbox to indicate autopack on/off)
* Pack All Into .blend
* Unpack All Into Files

Fixes T37608, includes modifications by Brecht from the original patch.

Reviewed By: brecht

Differential Revision: http://developer.blender.org/D118

===================================================================

M	release/scripts/startup/bl_ui/space_info.py
M	source/blender/editors/space_info/info_intern.h
M	source/blender/editors/space_info/info_ops.c
M	source/blender/editors/space_info/space_info.c
M	source/blender/makesrna/intern/rna_main.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py
index 9da525d..989b0a0 100644
--- a/release/scripts/startup/bl_ui/space_info.py
+++ b/release/scripts/startup/bl_ui/space_info.py
@@ -161,8 +161,18 @@ class INFO_MT_file_external_data(Menu):
     def draw(self, context):
         layout = self.layout
 
-        layout.operator("file.pack_all", text="Pack into .blend file")
-        layout.operator("file.unpack_all", text="Unpack into Files")
+        icon = 'CHECKBOX_HLT' if bpy.data.use_autopack else 'CHECKBOX_DEHLT'
+        layout.operator("file.autopack_toggle", icon=icon)
+
+        layout.separator()
+
+        pack_all = layout.row()
+        pack_all.operator("file.pack_all")
+        pack_all.active = not bpy.data.use_autopack
+
+        unpack_all = layout.row()
+        unpack_all.operator("file.unpack_all")
+        unpack_all.active = not bpy.data.use_autopack
 
         layout.separator()
 
diff --git a/source/blender/editors/space_info/info_intern.h b/source/blender/editors/space_info/info_intern.h
index b5426fe..967bcec 100644
--- a/source/blender/editors/space_info/info_intern.h
+++ b/source/blender/editors/space_info/info_intern.h
@@ -37,6 +37,7 @@ struct SpaceInfo;
 struct wmOperatorType;
 struct ReportList;
 
+void FILE_OT_autopack_toggle(struct wmOperatorType *ot);
 void FILE_OT_pack_all(struct wmOperatorType *ot);
 void FILE_OT_unpack_all(struct wmOperatorType *ot);
 void FILE_OT_unpack_item(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_info/info_ops.c b/source/blender/editors/space_info/info_ops.c
index 6c76ba6..6690d1c 100644
--- a/source/blender/editors/space_info/info_ops.c
+++ b/source/blender/editors/space_info/info_ops.c
@@ -70,7 +70,7 @@
 
 #include "info_intern.h"
 
-/********************* pack blend file libararies operator *********************/
+/********************* pack blend file libaries operator *********************/
 
 static int pack_libraries_exec(bContext *C, wmOperator *op)
 {
@@ -124,6 +124,36 @@ void FILE_OT_unpack_libraries(wmOperatorType *ot)
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
+/********************* toogle auto-pack operator *********************/
+
+static int autopack_toggle_exec(bContext *C, wmOperator *op)
+{
+	Main *bmain = CTX_data_main(C);
+
+	if(G.fileflags & G_AUTOPACK) {
+		G.fileflags &= ~G_AUTOPACK;		
+	}
+	else {
+		packAll(bmain, op->reports);
+		G.fileflags |= G_AUTOPACK;
+	}
+	
+	return OPERATOR_FINISHED;
+}
+
+void FILE_OT_autopack_toggle(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Automatically Pack Into .blend";
+	ot->idname = "FILE_OT_autopack_toggle";
+	ot->description = "Automatically pack all external files into the .blend file";
+	
+	/* api callbacks */
+	ot->exec = autopack_toggle_exec;
+	
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
 
 /********************* pack all operator *********************/
 
@@ -168,7 +198,7 @@ static int pack_all_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(ev
 void FILE_OT_pack_all(wmOperatorType *ot)
 {
 	/* identifiers */
-	ot->name = "Pack All";
+	ot->name = "Pack All Into .blend";
 	ot->idname = "FILE_OT_pack_all";
 	ot->description = "Pack all used external files into the .blend";
 	
@@ -214,7 +244,7 @@ static int unpack_all_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(
 	count = countPackedFiles(bmain);
 	
 	if (!count) {
-		BKE_report(op->reports, RPT_WARNING, "No packed files (auto-pack disabled)");
+		BKE_report(op->reports, RPT_WARNING, "No packed files to unpack");
 		G.fileflags &= ~G_AUTOPACK;
 		return OPERATOR_CANCELLED;
 	}
@@ -238,7 +268,7 @@ static int unpack_all_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(
 void FILE_OT_unpack_all(wmOperatorType *ot)
 {
 	/* identifiers */
-	ot->name = "Unpack All";
+	ot->name = "Unpack All Into Files";
 	ot->idname = "FILE_OT_unpack_all";
 	ot->description = "Unpack all files packed into this .blend to external ones";
 	
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
index 96e0de1..c029a4b 100644
--- a/source/blender/editors/space_info/space_info.c
+++ b/source/blender/editors/space_info/space_info.c
@@ -179,6 +179,7 @@ static void info_main_area_draw(const bContext *C, ARegion *ar)
 
 static void info_operatortypes(void)
 {
+	WM_operatortype_append(FILE_OT_autopack_toggle);
 	WM_operatortype_append(FILE_OT_pack_all);
 	WM_operatortype_append(FILE_OT_pack_libraries);
 	WM_operatortype_append(FILE_OT_unpack_all);
diff --git a/source/blender/makesrna/intern/rna_main.c b/source/blender/makesrna/intern/rna_main.c
index 6a43fed..b7b793e 100644
--- a/source/blender/makesrna/intern/rna_main.c
+++ b/source/blender/makesrna/intern/rna_main.c
@@ -42,6 +42,22 @@
 
 /* all the list begin functions are added manually here, Main is not in SDNA */
 
+static int rna_Main_use_autopack_get(PointerRNA *UNUSED(ptr))
+{
+	if (G.fileflags & G_AUTOPACK)
+		return 1;
+
+	return 0;
+}
+
+static void rna_Main_use_autopack_set(PointerRNA *UNUSED(ptr), int value)
+{
+	if (value)
+		G.fileflags |= G_AUTOPACK;
+	else
+		G.fileflags &= ~G_AUTOPACK;
+}
+
 static int rna_Main_is_saved_get(PointerRNA *UNUSED(ptr))
 {
 	return G.relbase_valid;
@@ -356,6 +372,10 @@ void RNA_def_main(BlenderRNA *brna)
 	RNA_def_property_boolean_funcs(prop, "rna_Main_is_saved_get", NULL);
 	RNA_def_property_ui_text(prop, "File is Saved", "Has the current session been saved to disk as a .blend file");
 
+	prop = RNA_def_property(srna, "use_autopack", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_funcs(prop, "rna_Main_use_autopack_get", "rna_Main_use_autopack_set");
+	RNA_def_property_ui_text(prop, "Use Autopack", "Automatically pack all external data into .blend file");
+
 	for (i = 0; lists[i].name; i++) {
 		prop = RNA_def_property(srna, lists[i].identifier, PROP_COLLECTION, PROP_NONE);
 		RNA_def_property_struct_type(prop, lists[i].type);




More information about the Bf-blender-cvs mailing list