[Bf-blender-cvs] [13a7516f436] master: Cleanup: factor out "set default filepath" into a ED_fileselect_ensure_default_filepath

Aras Pranckevicius noreply at git.blender.org
Wed Sep 7 12:27:33 CEST 2022


Commit: 13a7516f436597e7f60d0696afa16e8e6d6735fb
Author: Aras Pranckevicius
Date:   Wed Sep 7 13:27:27 2022 +0300
Branches: master
https://developer.blender.org/rB13a7516f436597e7f60d0696afa16e8e6d6735fb

Cleanup: factor out "set default filepath" into a ED_fileselect_ensure_default_filepath

Follow up to D15904, a bunch of places had exact same logic for
"is filepath set? if not, set some default one", so factor all that out
into a separate ED_fileselect_ensure_default_filepath function.

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

M	source/blender/editors/include/ED_fileselect.h
M	source/blender/editors/io/io_alembic.c
M	source/blender/editors/io/io_collada.c
M	source/blender/editors/io/io_gpencil_export.c
M	source/blender/editors/io/io_obj.c
M	source/blender/editors/io/io_usd.c
M	source/blender/editors/space_file/filesel.c
M	source/blender/editors/space_sequencer/sequencer_edit.c

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

diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h
index e9fcd2bd5fe..9d5d8dd54cb 100644
--- a/source/blender/editors/include/ED_fileselect.h
+++ b/source/blender/editors/include/ED_fileselect.h
@@ -175,6 +175,14 @@ struct ScrArea *ED_fileselect_handler_area_find(const struct wmWindow *win,
  */
 struct ScrArea *ED_fileselect_handler_area_find_any_with_op(const struct wmWindow *win);
 
+/**
+ * If filepath property is not set on the operator, sets it to
+ * the blend file path (or untitled if file is not saved yet) with the given extension.
+ */
+void ED_fileselect_ensure_default_filepath(struct bContext *C,
+                                           struct wmOperator *op,
+                                           const char *extension);
+
 /* TODO: Maybe we should move this to BLI?
  * On the other hand, it's using defines from space-file area, so not sure... */
 int ED_path_extension_type(const char *path);
diff --git a/source/blender/editors/io/io_alembic.c b/source/blender/editors/io/io_alembic.c
index 62b32d47678..d4855f470ff 100644
--- a/source/blender/editors/io/io_alembic.c
+++ b/source/blender/editors/io/io_alembic.c
@@ -39,6 +39,7 @@
 #  include "RNA_define.h"
 #  include "RNA_enum_types.h"
 
+#  include "ED_fileselect.h"
 #  include "ED_object.h"
 
 #  include "UI_interface.h"
@@ -75,20 +76,7 @@ static int wm_alembic_export_invoke(bContext *C, wmOperator *op, const wmEvent *
 
   RNA_boolean_set(op->ptr, "init_scene_frame_range", true);
 
-  if (!RNA_struct_property_is_set_ex(op->ptr, "filepath", false)) {
-    Main *bmain = CTX_data_main(C);
-    char filepath[FILE_MAX];
-
-    if (BKE_main_blendfile_path(bmain)[0] == '\0') {
-      BLI_strncpy(filepath, DATA_("untitled"), sizeof(filepath));
-    }
-    else {
-      BLI_strncpy(filepath, BKE_main_blendfile_path(bmain), sizeof(filepath));
-    }
-
-    BLI_path_extension_replace(filepath, sizeof(filepath), ".abc");
-    RNA_string_set(op->ptr, "filepath", filepath);
-  }
+  ED_fileselect_ensure_default_filepath(C, op, ".abc");
 
   WM_event_add_fileselect(C, op);
 
diff --git a/source/blender/editors/io/io_collada.c b/source/blender/editors/io/io_collada.c
index 7397138d8c5..3da7c00d5e2 100644
--- a/source/blender/editors/io/io_collada.c
+++ b/source/blender/editors/io/io_collada.c
@@ -19,6 +19,7 @@
 
 #  include "DEG_depsgraph.h"
 
+#  include "ED_fileselect.h"
 #  include "ED_object.h"
 
 #  include "RNA_access.h"
@@ -36,22 +37,7 @@
 
 static int wm_collada_export_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
 {
-  Main *bmain = CTX_data_main(C);
-
-  if (!RNA_struct_property_is_set_ex(op->ptr, "filepath", false)) {
-    char filepath[FILE_MAX];
-    const char *blendfile_path = BKE_main_blendfile_path(bmain);
-
-    if (blendfile_path[0] == '\0') {
-      BLI_strncpy(filepath, DATA_("untitled"), sizeof(filepath));
-    }
-    else {
-      BLI_strncpy(filepath, blendfile_path, sizeof(filepath));
-    }
-
-    BLI_path_extension_replace(filepath, sizeof(filepath), ".dae");
-    RNA_string_set(op->ptr, "filepath", filepath);
-  }
+  ED_fileselect_ensure_default_filepath(C, op, ".dae");
 
   WM_event_add_fileselect(C, op);
 
diff --git a/source/blender/editors/io/io_gpencil_export.c b/source/blender/editors/io/io_gpencil_export.c
index 6df56f1498a..12d87113a66 100644
--- a/source/blender/editors/io/io_gpencil_export.c
+++ b/source/blender/editors/io/io_gpencil_export.c
@@ -20,6 +20,8 @@
 
 #  include "BLT_translation.h"
 
+#  include "ED_fileselect.h"
+
 #  include "RNA_access.h"
 #  include "RNA_define.h"
 
@@ -71,24 +73,6 @@ static void gpencil_export_common_props_definition(wmOperatorType *ot)
                   "Normalize",
                   "Export strokes with constant thickness");
 }
-
-static void set_export_filepath(bContext *C, wmOperator *op, const char *extension)
-{
-  if (!RNA_struct_property_is_set_ex(op->ptr, "filepath", false)) {
-    Main *bmain = CTX_data_main(C);
-    char filepath[FILE_MAX];
-
-    if (BKE_main_blendfile_path(bmain)[0] == '\0') {
-      BLI_strncpy(filepath, DATA_("untitled"), sizeof(filepath));
-    }
-    else {
-      BLI_strncpy(filepath, BKE_main_blendfile_path(bmain), sizeof(filepath));
-    }
-
-    BLI_path_extension_replace(filepath, sizeof(filepath), extension);
-    RNA_string_set(op->ptr, "filepath", filepath);
-  }
-}
 #  endif
 
 /* <-------- SVG single frame export. --------> */
@@ -109,7 +93,7 @@ static bool wm_gpencil_export_svg_common_check(bContext *UNUSED(C), wmOperator *
 
 static int wm_gpencil_export_svg_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
 {
-  set_export_filepath(C, op, ".svg");
+  ED_fileselect_ensure_default_filepath(C, op, ".svg");
 
   WM_event_add_fileselect(C, op);
 
@@ -264,7 +248,7 @@ static bool wm_gpencil_export_pdf_common_check(bContext *UNUSED(C), wmOperator *
 
 static int wm_gpencil_export_pdf_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
 {
-  set_export_filepath(C, op, ".pdf");
+  ED_fileselect_ensure_default_filepath(C, op, ".pdf");
 
   WM_event_add_fileselect(C, op);
 
diff --git a/source/blender/editors/io/io_obj.c b/source/blender/editors/io/io_obj.c
index 2c1213d7a09..0c935a0e1da 100644
--- a/source/blender/editors/io/io_obj.c
+++ b/source/blender/editors/io/io_obj.c
@@ -18,6 +18,7 @@
 
 #  include "BLT_translation.h"
 
+#  include "ED_fileselect.h"
 #  include "ED_outliner.h"
 
 #  include "MEM_guardedalloc.h"
@@ -58,20 +59,7 @@ static const EnumPropertyItem io_obj_path_mode[] = {
 
 static int wm_obj_export_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
 {
-  if (!RNA_struct_property_is_set_ex(op->ptr, "filepath", false)) {
-    Main *bmain = CTX_data_main(C);
-    char filepath[FILE_MAX];
-
-    if (BKE_main_blendfile_path(bmain)[0] == '\0') {
-      BLI_strncpy(filepath, DATA_("untitled"), sizeof(filepath));
-    }
-    else {
-      BLI_strncpy(filepath, BKE_main_blendfile_path(bmain), sizeof(filepath));
-    }
-
-    BLI_path_extension_replace(filepath, sizeof(filepath), ".obj");
-    RNA_string_set(op->ptr, "filepath", filepath);
-  }
+  ED_fileselect_ensure_default_filepath(C, op, ".obj");
 
   WM_event_add_fileselect(C, op);
   return OPERATOR_RUNNING_MODAL;
diff --git a/source/blender/editors/io/io_usd.c b/source/blender/editors/io/io_usd.c
index 14b8c6e4184..74ce0cca16c 100644
--- a/source/blender/editors/io/io_usd.c
+++ b/source/blender/editors/io/io_usd.c
@@ -21,6 +21,7 @@
 
 #  include "BLT_translation.h"
 
+#  include "ED_fileselect.h"
 #  include "ED_object.h"
 
 #  include "MEM_guardedalloc.h"
@@ -84,21 +85,7 @@ static int wm_usd_export_invoke(bContext *C, wmOperator *op, const wmEvent *UNUS
   options->as_background_job = true;
   op->customdata = options;
 
-  if (!RNA_struct_property_is_set_ex(op->ptr, "filepath", false)) {
-    Main *bmain = CTX_data_main(C);
-    char filepath[FILE_MAX];
-    const char *main_blendfile_path = BKE_main_blendfile_path(bmain);
-
-    if (main_blendfile_path[0] == '\0') {
-      BLI_strncpy(filepath, DATA_("untitled"), sizeof(filepath));
-    }
-    else {
-      BLI_strncpy(filepath, main_blendfile_path, sizeof(filepath));
-    }
-
-    BLI_path_extension_replace(filepath, sizeof(filepath), ".usdc");
-    RNA_string_set(op->ptr, "filepath", filepath);
-  }
+  ED_fileselect_ensure_default_filepath(C, op, ".usdc");
 
   WM_event_add_fileselect(C, op);
 
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index e42e1e98660..c569a2b57a6 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -1385,3 +1385,24 @@ ScrArea *ED_fileselect_handler_area_find_any_with_op(const wmWindow *win)
 
   return NULL;
 }
+
+void ED_fileselect_ensure_default_filepath(struct bContext *C,
+                                           struct wmOperator *op,
+                                           const char *extension)
+{
+  if (!RNA_struct_property_is_set_ex(op->ptr, "filepath", false)) {
+    struct Main *bmain = CTX_data_main(C);
+    char filepath[FILE_MAX];
+    const char *blendfile_path = BKE_main_blendfile_path(bmain);
+
+    if (blendfile_path[0] == '\0') {
+      BLI_strncpy(filepath, DATA_("untitled"), sizeof(filepath));
+    }
+    else {
+      BLI_strncpy(filepath, blendfile_path, sizeof(filepath));
+    }
+
+    BLI_path_extension_replace(filepath, sizeof(filepath), extension);
+    RNA_string_set(op->ptr, "filepath", filepath);
+  }
+}
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 38d61f02607..415bb5898a9 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -54,6 +54,7 @@
 #include "RNA_prototypes.h"
 
 /* For menu, popup, icons, etc. */
+#include "ED_fileselect.h"
 #include "ED_keyframing.h"
 #include "ED_numinput.h"
 #include "ED_outliner.h"
@@ -3088,20 +3089,7 @@ static int sequencer_export_subtitles_invoke(bContext *C,
                                              wmOperator *op,
                                              const wmEvent *UNUSED(event))
 {
-  Main *bmain = CTX_data_main(C);
-  if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
-    char filepath[FILE_MAX];
-
-    if (BKE_main_blendfile_path(bmain)[0] == '\0') {
-      BLI_strncpy(filepath, DATA_("untitled"), sizeof(filepath));
-    }
-    else {
-      BLI_strncpy(filepath, BKE_main_blendfile_path(bmain), sizeof(filepath));
-    }
-
-    BLI_path_extension_replace(filepath, sizeof(filepath), ".srt");
-    RNA_string_set(op->ptr, "filepath", filepath);
-  }
+  ED_fileselect_ensure_default_filepath(C, op, ".srt");
 
   WM_event_add_fileselect(C, op);
 
@@ -3136,7 +3124,7 @@ static int sequencer_export_subtitles_exec(bContext *C, wmOperator *op)
   FILE *file;
   char filepath[FILE_MAX];
 
-  if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
+  if (!RNA_struct_property_is_set_ex(op->ptr, "filepath", false)) {
     BKE_report(op->reports, RPT_ERROR, "No filename given");
     return OPERATOR_CANCELLED;
   }



More information about the Bf-blender-cvs mailing list