2025-12-01
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
# SPDX-FileCopyrightText: 2021 Blender Studio Tools Authors
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from typing import Set, Union, Optional, List, Dict, Any
|
||||
|
||||
import bpy
|
||||
|
||||
from .ops import (
|
||||
RR_OT_sqe_create_review_session,
|
||||
RR_OT_setup_review_workspace,
|
||||
RR_OT_sqe_inspect_exr_sequence,
|
||||
RR_OT_sqe_clear_exr_inspect,
|
||||
RR_OT_sqe_approve_render,
|
||||
RR_OT_sqe_update_sequence_statuses,
|
||||
RR_OT_open_path,
|
||||
RR_OT_sqe_push_to_edit,
|
||||
)
|
||||
from . import opsdata
|
||||
from .. import prefs
|
||||
|
||||
|
||||
class RR_PT_render_review(bpy.types.Panel):
|
||||
""" """
|
||||
|
||||
bl_category = "Render Review"
|
||||
bl_label = "Render Review"
|
||||
bl_space_type = "SEQUENCE_EDITOR"
|
||||
bl_region_type = "UI"
|
||||
bl_order = 10
|
||||
|
||||
def draw(self, context: bpy.types.Context) -> None:
|
||||
|
||||
addon_prefs = prefs.addon_prefs_get(context)
|
||||
|
||||
# Create box.
|
||||
layout = self.layout
|
||||
box = layout.box()
|
||||
|
||||
# Label and setup workspace.
|
||||
row = box.row(align=True)
|
||||
row.label(text="Review", icon="CAMERA_DATA")
|
||||
row.operator(RR_OT_setup_review_workspace.bl_idname, text="", icon="WINDOW")
|
||||
|
||||
# Render dir prop.
|
||||
row = box.row(align=True)
|
||||
row.prop(context.scene.rr, "render_dir")
|
||||
|
||||
# Create session.
|
||||
render_dir = context.scene.rr.render_dir_path
|
||||
text = f"Invalid Render Directory"
|
||||
if render_dir:
|
||||
if opsdata.is_sequence_dir(render_dir):
|
||||
text = f"Review Sequence: {render_dir.name}"
|
||||
elif opsdata.is_shot_dir(render_dir):
|
||||
text = f"Review Shot: {render_dir.stem}"
|
||||
|
||||
row = box.row(align=True)
|
||||
row.operator(RR_OT_sqe_create_review_session.bl_idname, text=text, icon="PLAY")
|
||||
row = box.row(align = True)
|
||||
row.prop(addon_prefs, 'match_latest_length')
|
||||
row = box.row(align=True)
|
||||
row.prop(addon_prefs, 'use_video')
|
||||
if addon_prefs.use_video:
|
||||
row.prop(addon_prefs, 'use_video_latest_only')
|
||||
row = box.row(align = False)
|
||||
row.prop(addon_prefs, 'shot_name_filter')
|
||||
|
||||
# Warning if kitsu on but not logged in.
|
||||
if not prefs.session_auth(context):
|
||||
row = box.split(align=True, factor=0.7)
|
||||
row.label(text="Kitsu enabled but not logged in", icon="ERROR")
|
||||
row.operator("kitsu.session_start", text="Login")
|
||||
|
||||
elif not opsdata.is_active_project():
|
||||
row = box.row(align=True)
|
||||
row.label(text="Kitsu enabled but no active project", icon="ERROR")
|
||||
|
||||
sqe = context.scene.sequence_editor
|
||||
if not sqe:
|
||||
return
|
||||
active_strip = sqe.active_strip
|
||||
if active_strip and active_strip.rr.is_render:
|
||||
# Create box.
|
||||
layout = self.layout
|
||||
box = layout.box()
|
||||
box.label(text=f"Render: {active_strip.rr.shot_name}", icon="RESTRICT_RENDER_OFF")
|
||||
box.separator()
|
||||
|
||||
# Render dir name label and open file op.
|
||||
row = box.row(align=True)
|
||||
directory = opsdata.get_strip_folder(active_strip)
|
||||
row.label(text=f"Folder: {directory.name}")
|
||||
row.operator(
|
||||
RR_OT_open_path.bl_idname, icon="FILEBROWSER", text="", emboss=False
|
||||
).filepath = bpy.path.abspath(directory.as_posix())
|
||||
|
||||
# Nr of frames.
|
||||
box.row(align=True).label(text=f"Frames: {active_strip.rr.frames_found_text}")
|
||||
|
||||
# Inspect exr.
|
||||
text = "Inspect EXR"
|
||||
icon = "VIEWZOOM"
|
||||
if not opsdata.get_image_editor(context):
|
||||
text = "Inspect EXR: Needs Image Editor"
|
||||
icon = "ERROR"
|
||||
|
||||
row = box.row(align=True)
|
||||
row.operator(RR_OT_sqe_inspect_exr_sequence.bl_idname, icon=icon, text=text)
|
||||
row.operator(RR_OT_sqe_clear_exr_inspect.bl_idname, text="", icon="X")
|
||||
|
||||
# Approve render & udpate approved.
|
||||
row = box.row(align=True)
|
||||
|
||||
text = "Push To Edit & Approve Render"
|
||||
if active_strip.rr.is_pushed_to_edit:
|
||||
text = "Approve Render"
|
||||
row.operator(RR_OT_sqe_approve_render.bl_idname, icon="CHECKMARK", text=text)
|
||||
row.operator(RR_OT_sqe_update_sequence_statuses.bl_idname, text="", icon="FILE_REFRESH")
|
||||
|
||||
# Push to edit.
|
||||
if not addon_prefs.shot_playblast_root_dir:
|
||||
shot_previews_dir = "" # ops handle invalid path
|
||||
else:
|
||||
shot_previews_dir = Path(opsdata.get_shot_previews_path(active_strip)).as_posix()
|
||||
|
||||
row = box.row(align=True)
|
||||
row.operator(RR_OT_sqe_push_to_edit.bl_idname, icon="EXPORT")
|
||||
row.operator(RR_OT_open_path.bl_idname, icon="FILEBROWSER", text="").filepath = (
|
||||
shot_previews_dir
|
||||
)
|
||||
|
||||
# Push strip to Kitsu.
|
||||
box.row().operator('kitsu.sqe_push_shot', icon='URL')
|
||||
|
||||
|
||||
def RR_topbar_file_new_draw_handler(self: Any, context: bpy.types.Context) -> None:
|
||||
layout = self.layout
|
||||
op = layout.operator(RR_OT_setup_review_workspace.bl_idname, text="Render Review")
|
||||
|
||||
|
||||
# ----------------REGISTER--------------.
|
||||
|
||||
classes = [
|
||||
RR_PT_render_review,
|
||||
]
|
||||
|
||||
|
||||
def register():
|
||||
|
||||
for cls in classes:
|
||||
bpy.utils.register_class(cls)
|
||||
|
||||
# Append to topbar file new.
|
||||
bpy.types.TOPBAR_MT_file_new.append(RR_topbar_file_new_draw_handler)
|
||||
|
||||
|
||||
def unregister():
|
||||
|
||||
# Remove to topbar file new.
|
||||
bpy.types.TOPBAR_MT_file_new.remove(RR_topbar_file_new_draw_handler)
|
||||
|
||||
for cls in reversed(classes):
|
||||
bpy.utils.unregister_class(cls)
|
||||
Reference in New Issue
Block a user