From fd0ff8235281d88bf25a9d7ffad7121c960efc4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 19 May 2022 16:15:13 +0200 Subject: [PATCH] Use new job setting visibility rules Update the Blender add-on, web interface, and job compiler script to use the new visibility settings of job settings. --- addon/flamenco/gui.py | 11 ++++++++++- .../scripts/simple_blender_render.js | 18 +++++++++--------- web/app/src/components/JobDetails.vue | 7 ++++++- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/addon/flamenco/gui.py b/addon/flamenco/gui.py index e506ac79..47577b98 100644 --- a/addon/flamenco/gui.py +++ b/addon/flamenco/gui.py @@ -85,7 +85,7 @@ class FLAMENCO_PT_job_submission(bpy.types.Panel): propgroup: JobTypePropertyGroup, setting: _AvailableJobSetting, ) -> None: - if not setting.get("visible", True): + if not self.setting_is_visible(setting): return row = layout.row(align=True) @@ -102,6 +102,15 @@ class FLAMENCO_PT_job_submission(bpy.types.Panel): op = row.operator("flamenco3.explore_file_path", text="", icon="WINDOW") op.path = getattr(propgroup, setting.key) + @staticmethod + def setting_is_visible(setting: _AvailableJobSetting) -> bool: + try: + visibility = setting.visible + except AttributeError: + # The default is 'visible'. + return True + return str(visibility) in {"visible", "submission"} + def draw_setting_editable( self, layout: bpy.types.UILayout, diff --git a/internal/manager/job_compilers/scripts/simple_blender_render.js b/internal/manager/job_compilers/scripts/simple_blender_render.js index 6902bdab..bd5f6f59 100644 --- a/internal/manager/job_compilers/scripts/simple_blender_render.js +++ b/internal/manager/job_compilers/scripts/simple_blender_render.js @@ -9,30 +9,30 @@ const JOB_TYPE = { { key: "chunk_size", type: "int32", default: 1, description: "Number of frames to render in one Blender render task" }, // render_output_root + add_path_components determine the value of render_output_path. - { key: "render_output_root", type: "string", subtype: "dir_path", required: true, + { key: "render_output_root", type: "string", subtype: "dir_path", required: true, visible: "submission", description: "Base directory of where render output is stored. Will have some job-specific parts appended to it"}, - { key: "add_path_components", type: "int32", required: true, default: 0, propargs: {min: 0, max: 32}, + { key: "add_path_components", type: "int32", required: true, default: 0, propargs: {min: 0, max: 32}, visible: "submission", description: "Number of path components of the current blend file to use in the render output path"}, { key: "render_output_path", type: "string", subtype: "file_path", editable: false, eval: "str(Path(settings.render_output_root) / last_n_dir_parts(settings.add_path_components) / jobname / '{timestamp}' / '######')", description: "Final file path of where render output will be saved"}, // Automatically evaluated settings: - { key: "blender_cmd", type: "string", default: "{blender}", visible: false }, - { key: "blendfile", type: "string", required: true, description: "Path of the Blend file to render", visible: false }, - { key: "fps", type: "float", eval: "C.scene.render.fps / C.scene.render.fps_base", visible: false }, + { key: "blender_cmd", type: "string", default: "{blender}", visible: "hidden" }, + { key: "blendfile", type: "string", required: true, description: "Path of the Blend file to render", visible: "hidden" }, + { key: "fps", type: "float", eval: "C.scene.render.fps / C.scene.render.fps_base", visible: "hidden" }, { key: "images_or_video", type: "string", required: true, choices: ["images", "video"], - visible: false, + visible: "hidden", eval: "'video' if C.scene.render.image_settings.file_format in {'FFMPEG', 'AVI_RAW', 'AVI_JPEG'} else 'images'" }, - { key: "format", type: "string", required: true, eval: "C.scene.render.image_settings.file_format", visible: false }, - { key: "image_file_extension", type: "string", required: true, eval: "C.scene.render.file_extension", visible: false, + { key: "format", type: "string", required: true, eval: "C.scene.render.image_settings.file_format", visible: "web" }, + { key: "image_file_extension", type: "string", required: true, eval: "C.scene.render.file_extension", visible: "hidden", description: "File extension used when rendering images; ignored when images_or_video='video'" }, - { key: "video_container_format", type: "string", required: true, eval: "C.scene.render.ffmpeg.format", visible: false, + { key: "video_container_format", type: "string", required: true, eval: "C.scene.render.ffmpeg.format", visible: "hidden", description: "Container format used when rendering video; ignored when images_or_video='images'" }, ] }; diff --git a/web/app/src/components/JobDetails.vue b/web/app/src/components/JobDetails.vue index d0e56297..b2d7cc88 100644 --- a/web/app/src/components/JobDetails.vue +++ b/web/app/src/components/JobDetails.vue @@ -147,6 +147,11 @@ export default { return; } + // Construct a set of `setting.visible` values that should make the + // setting visible here in the web interface. + const v = new API.AvailableJobSettingVisibility(); + const visible = new Set([undefined, v.visible, v.web]); + const filtered = {}; for (let key in newJobSettings) { const setting = this.jobTypeSettings[key]; @@ -156,7 +161,7 @@ export default { // or when the submission system simply added custom settings. continue; } - if (setting.visible !== false) { + if (visible.has(setting.visible)) { filtered[key] = newJobSettings[key]; } }