[Bf-blender-cvs] [78bfaf1a4fe] master: File Browser: Manual auto-increase name support for output filepaths

Dalai Felinto noreply at git.blender.org
Wed Sep 21 11:18:06 CEST 2022


Commit: 78bfaf1a4fe1a71408e4dab7268b1af1ed1b88f4
Author: Dalai Felinto
Date:   Wed Sep 21 10:57:36 2022 +0200
Branches: master
https://developer.blender.org/rB78bfaf1a4fe1a71408e4dab7268b1af1ed1b88f4

File Browser: Manual auto-increase name support for output filepaths

This functionality was present until Blender 2.80.  Basically it adds back the
"+" and "-" buttons in the file browser when it stores an output filepath.

This is useful for someone rendering multiple versions of an animation (or a
composition) to compare.

At the moment this is used for the render output, and the File Output node in
the compositor.

Differential Revision: https://developer.blender.org/D15968

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

M	source/blender/editors/space_buttons/buttons_ops.c
M	source/blender/makesrna/RNA_types.h
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/makesrna/intern/rna_rna.c
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/windowmanager/intern/wm_operator_props.c

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

diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c
index 10fb008049d..a9ce9a3d723 100644
--- a/source/blender/editors/space_buttons/buttons_ops.c
+++ b/source/blender/editors/space_buttons/buttons_ops.c
@@ -337,6 +337,12 @@ static int file_browse_invoke(bContext *C, wmOperator *op, const wmEvent *event)
   RNA_string_set(op->ptr, path_prop, str);
   MEM_freeN(str);
 
+  PropertyRNA *prop_check_existing = RNA_struct_find_property(op->ptr, "check_existing");
+  if (!RNA_property_is_set(op->ptr, prop_check_existing)) {
+    const bool is_output_path = (RNA_property_flag(prop) & PROP_PATH_OUTPUT) != 0;
+    RNA_property_boolean_set(op->ptr, prop_check_existing, is_output_path);
+  }
+
   WM_event_add_fileselect(C, op);
 
   return OPERATOR_RUNNING_MODAL;
diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h
index 353b2903fb1..b9556a411cf 100644
--- a/source/blender/makesrna/RNA_types.h
+++ b/source/blender/makesrna/RNA_types.h
@@ -179,7 +179,7 @@ typedef enum PropertySubType {
 
 /* Make sure enums are updated with these */
 /* HIGHEST FLAG IN USE: 1 << 31
- * FREE FLAGS: 2, 9, 11, 13, 14, 15. */
+ * FREE FLAGS: 9, 11, 13, 14, 15. */
 typedef enum PropertyFlag {
   /**
    * Editable means the property is editable in the user
@@ -299,6 +299,12 @@ typedef enum PropertyFlag {
    * properties which denotes whether modifier panel is collapsed or not.
    */
   PROP_NO_DEG_UPDATE = (1 << 30),
+
+  /**
+   * Filepaths that refer to output get a special treatment such
+   * as having the +/- operators available in the file browser.
+   **/
+  PROP_PATH_OUTPUT = (1 << 2),
 } PropertyFlag;
 
 /**
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 971043158e1..892d523bdcf 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -7060,6 +7060,7 @@ static void def_cmp_output_file(BlenderRNA *brna, StructRNA *srna)
   prop = RNA_def_property(srna, "base_path", PROP_STRING, PROP_FILEPATH);
   RNA_def_property_string_sdna(prop, NULL, "base_path");
   RNA_def_property_ui_text(prop, "Base Path", "Base output path for the image");
+  RNA_def_property_flag(prop, PROP_PATH_OUTPUT);
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
 
   prop = RNA_def_property(srna, "active_input_index", PROP_INT, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c
index 57f75fe892c..8d5e82cbfa8 100644
--- a/source/blender/makesrna/intern/rna_rna.c
+++ b/source/blender/makesrna/intern/rna_rna.c
@@ -160,6 +160,7 @@ const EnumPropertyItem rna_enum_property_flag_items[] = {
      0,
      "Update on every keystroke in textedit 'mode'",
      ""},
+    {PROP_PATH_OUTPUT, "OUTPUT_PATH", 0, "Output Path", ""},
     {0, NULL, 0, NULL, NULL},
 };
 
@@ -729,6 +730,12 @@ static bool rna_Property_is_library_editable_flag_get(PointerRNA *ptr)
   return (prop->flag & PROP_LIB_EXCEPTION) != 0;
 }
 
+static bool rna_Property_is_path_output_flag_get(PointerRNA *ptr)
+{
+  PropertyRNA *prop = (PropertyRNA *)ptr->data;
+  return (prop->flag & PROP_PATH_OUTPUT) != 0;
+}
+
 static int rna_Property_tags_get(PointerRNA *ptr)
 {
   return RNA_property_tags(ptr->data);
@@ -3023,6 +3030,12 @@ static void rna_def_property(BlenderRNA *brna)
   RNA_def_property_ui_text(
       prop, "Library Editable", "Property is editable from linked instances (changes not saved)");
 
+  prop = RNA_def_property(srna, "is_path_output", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+  RNA_def_property_boolean_funcs(prop, "rna_Property_is_path_output_flag_get", NULL);
+  RNA_def_property_ui_text(
+      prop, "Path Output", "Property is a filename, filepath or directory output");
+
   prop = RNA_def_property(srna, "tags", PROP_ENUM, PROP_NONE);
   RNA_def_property_clear_flag(prop, PROP_EDITABLE);
   RNA_def_property_enum_items(prop, dummy_prop_tags);
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 27cfe766eef..a1612159806 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -6553,6 +6553,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
                            "Output Path",
                            "Directory/name to save animations, # characters defines the position "
                            "and length of frame numbers");
+  RNA_def_property_flag(prop, PROP_PATH_OUTPUT);
   RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
 
   /* Render result EXR cache. */
diff --git a/source/blender/windowmanager/intern/wm_operator_props.c b/source/blender/windowmanager/intern/wm_operator_props.c
index 71c948dfbb9..bd3322a8023 100644
--- a/source/blender/windowmanager/intern/wm_operator_props.c
+++ b/source/blender/windowmanager/intern/wm_operator_props.c
@@ -120,16 +120,14 @@ void WM_operator_properties_filesel(wmOperatorType *ot,
     RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
   }
 
-  if (action == FILE_SAVE) {
-    /* NOTE: this is only used to check if we should highlight the filename area red when the
-     * filepath is an existing file. */
-    prop = RNA_def_boolean(ot->srna,
-                           "check_existing",
-                           true,
-                           "Check Existing",
-                           "Check and warn on overwriting existing files");
-    RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
-  }
+  /* NOTE: this is only used to check if we should highlight the filename area red when the
+   * filepath is an existing file. */
+  prop = RNA_def_boolean(ot->srna,
+                         "check_existing",
+                         action == FILE_SAVE,
+                         "Check Existing",
+                         "Check and warn on overwriting existing files");
+  RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
 
   prop = RNA_def_boolean(
       ot->srna, "filter_blender", (filter & FILE_TYPE_BLENDER) != 0, "Filter .blend files", "");



More information about the Bf-blender-cvs mailing list