This commit is contained in:
Christophe SEUX
2023-04-22 21:12:21 +02:00
parent d0230672f4
commit 5c35bae0e3
4 changed files with 159 additions and 53 deletions
+50 -42
View File
@@ -83,28 +83,12 @@ class VSETB_OT_tracker_connect(Operator):
return {"CANCELLED"}
def get_custom_name_items(self, context):
settings = get_scene_settings()
project = settings.active_project
return [(m.field_name, m.name, '') for m in project.metadata_types if m.entity_type=='ASSET']
class VSETB_OT_export_spreadsheet(Operator):
bl_idname = "vse_toolbox.export_spreadsheet"
bl_label = "Export Spreadsheet"
bl_description = "Export Shot data in a table as a csv or an xlsl"
bl_options = {"REGISTER", "UNDO"}
format : EnumProperty(items=[(i, i, '') for i in ('CSV', 'XLSX')])
separator : StringProperty(default='\\n')
delimiter : StringProperty(default=';')
export_path : StringProperty(default='//export')
use_custom_name : BoolProperty(default=False)
custom_name : EnumProperty(items=get_custom_name_items,
description='Use a custom name for asset using a metadata value')
open_folder : BoolProperty(default=False)
show_settings : BoolProperty(default=False)
@classmethod
def poll(cls, context):
settings = get_scene_settings()
@@ -120,6 +104,7 @@ class VSETB_OT_export_spreadsheet(Operator):
scn = context.scene
settings = get_scene_settings()
project = settings.active_project
options = project.spreadsheet_options
layout = self.layout
@@ -135,30 +120,31 @@ class VSETB_OT_export_spreadsheet(Operator):
row = col.row(align=True, heading='Custom Name')
#row.use_property_split = True
row.prop(self, 'use_custom_name', text='')
row.prop(options, 'use_custom_name', text='')
sub = row.row(align=True)
sub.enabled = self.use_custom_name
sub.prop(self, 'custom_name', text='')
sub.enabled = options.use_custom_name
sub.prop(options, 'custom_name', text='')
col.separator()
row = col.row(align=False)
row.prop(self, "format", expand=True, text='Format')
row.prop(self, 'show_settings', text='', icon='PREFERENCES')
if self.show_settings:
col.prop(self, "separator", expand=True, text='Separator')
if self.format == 'CSV':
col.prop(self, "delimiter", expand=True, text='Delimiter')
row.prop(options, "format", expand=True, text='Format')
row.prop(options, 'show_settings', text='', icon='PREFERENCES')
if options.show_settings:
col.prop(options, "separator", expand=True, text='Separator')
if options.format == 'CSV':
col.prop(options, "delimiter", expand=True, text='Delimiter')
col.separator()
col.prop(self, 'open_folder', text='Open Folder')
col.prop(self, 'export_path', text='Export Path')
col.prop(options, 'open_folder', text='Open Folder')
col.prop(options, 'export_path', text='Export Path')
def execute(self, context):
#self.report({'ERROR'}, f'Export not implemented yet.')
prefs = get_addon_prefs()
settings = get_scene_settings()
project = settings.active_project
options = project.spreadsheet_options
episode = settings.active_episode
cells = [cell for cell in project.spreadsheet if cell.enabled]
@@ -167,8 +153,8 @@ class VSETB_OT_export_spreadsheet(Operator):
# Header
rows.append([cell.export_name for cell in cells])
separator = self.separator.replace('\\n', '\n').replace('\\t', '\t').replace('\\r', '\r')
delimiter = self.delimiter.replace('\\n', '\n').replace('\\t', '\t').replace('\\r', '\r')
separator = options.separator.replace('\\n', '\n').replace('\\t', '\t').replace('\\r', '\r')
delimiter = options.delimiter.replace('\\n', '\n').replace('\\t', '\t').replace('\\r', '\r')
for strip in get_strips('Shots'):
row = []
@@ -182,11 +168,11 @@ class VSETB_OT_export_spreadsheet(Operator):
if not asset.asset_type == cell.name:
continue
if self.use_custom_name:
if asset.get('metadata', {}).get(self.custom_name):
asset_castings.append(asset['metadata'][self.custom_name])
if options.use_custom_name:
if asset.get('metadata', {}).get(options.custom_name):
asset_castings.append(asset['metadata'][options.custom_name])
else:
self.report({'ERROR'}, f'The asset {asset.tracker_name} has no data {self.custom_name}')
self.report({'ERROR'}, f'The asset {asset.tracker_name} has no data {options.custom_name}')
else:
asset_castings.append(asset.tracker_name)
@@ -206,7 +192,7 @@ class VSETB_OT_export_spreadsheet(Operator):
#print(rows)
export_path = Path(os.path.abspath(bpy.path.abspath(self.export_path)))
export_path = Path(os.path.abspath(bpy.path.abspath(options.export_path)))
export_name = export_path.name
if export_path.suffix or export_name.endswith('{ext}'):
@@ -221,7 +207,7 @@ class VSETB_OT_export_spreadsheet(Operator):
date = datetime.now().strftime('%Y_%m_%d')
project_name = project.name.replace(' ', '_').lower()
episode_name = episode.name.replace(' ', '_').lower() if episode else 'episode'
ext = self.format.lower()
ext = options.format.lower()
export_name = export_name.format(date=date, project=project_name,
episode=episode_name, tracker=settings.tracker_name.lower(), ext=ext)
@@ -231,14 +217,14 @@ class VSETB_OT_export_spreadsheet(Operator):
#2023_04_11_kitsu_boris_ep01_shots
export_path.parent.mkdir(parents=True, exist_ok=True)
if self.format == 'CSV':
if options.format == 'CSV':
print('Writing .csv file to', export_path)
with open(str(export_path), 'w', newline='\n', encoding='utf-8') as f:
writer = csv.writer(f, delimiter=self.delimiter)
writer = csv.writer(f, delimiter=options.delimiter)
for row in rows:
writer.writerow(row)
elif self.format == 'XLSX':
elif options.format == 'XLSX':
try:
import openpyxl
except ModuleNotFoundError():
@@ -259,7 +245,7 @@ class VSETB_OT_export_spreadsheet(Operator):
# Save the file
workbook.save(str(export_path))
if self.open_folder:
if options.open_folder:
open_file(export_path, select=True)
@@ -745,8 +731,8 @@ class VSETB_OT_rename(Operator):
bl_description = "Rename Strips"
bl_options = {"REGISTER", "UNDO"}
template : StringProperty(name="Strip Template Name", default="")
increment : IntProperty(name="Name Increment", default=0)
template : StringProperty(name="Strip Name", default="")
increment : IntProperty(name="Increment", default=0)
channel_name : StringProperty(name="Channel Name", default="")
#selected_only : BoolProperty(name="Selected Only", default=False)
start_number : IntProperty(name="Start Number", default=0, min=0)
@@ -838,6 +824,27 @@ class VSETB_OT_render(Operator):
return {"FINISHED"}
class VSETB_OT_show_waveform(Operator):
bl_idname = "vse_toolbox.show_waveform"
bl_label = "Show Waveform"
bl_description = "Show Waveform of all audio strips"
bl_options = {"REGISTER", "UNDO"}
enabled : BoolProperty(default=True)
@classmethod
def poll(cls, context):
return True
def execute(self, context):
scn = context.scene
for strip in get_strips(channel='Audio'):
strip.show_waveform = self.enabled
return {"FINISHED"}
class VSETB_OT_set_sequencer(Operator):
bl_idname = "vse_toolbox.set_sequencer"
bl_label = "Set Sequencer"
@@ -1193,7 +1200,8 @@ classes = (
VSETB_OT_set_sequencer,
VSETB_OT_tracker_connect,
VSETB_OT_set_stamps,
VSETB_OT_upload_to_tracker
VSETB_OT_upload_to_tracker,
VSETB_OT_show_waveform
)
def register():