clipboard import

This commit is contained in:
“christopheseux”
2023-05-04 18:45:17 +02:00
parent ec4212740c
commit 38b3e7b504
5 changed files with 264 additions and 110 deletions
+40 -2
View File
@@ -10,7 +10,7 @@ import vse_toolbox
from vse_toolbox.bl_utils import (get_addon_prefs, get_scene_settings)
from vse_toolbox.file_utils import (read_file, )
from vse_toolbox.file_utils import (read_file, norm_str)
@@ -50,9 +50,12 @@ class VSETB_OT_load_settings(Operator):
addon_config['trackers'] = addon_config.get('trackers')
trackers = addon_config.pop('trackers')
addon_config['spreadsheet_export'] = addon_config.get('spreadsheet_export')
addon_config['spreadsheet_export'] = addon_config.get('spreadsheet_export', {})
spreadsheet_export_config = addon_config.pop('spreadsheet_export')
addon_config['spreadsheet_import'] = addon_config.get('spreadsheet_import', {})
spreadsheet_import_config = addon_config.pop('spreadsheet_import')
project_name = addon_config.get('project_name')
if project_name:
settings.project_name = project_name
@@ -93,6 +96,41 @@ class VSETB_OT_load_settings(Operator):
except Exception:
print(f'Could not set option {k} with value {v} to spreadsheet')
import_cells = project.spreadsheet_import.cells
if spreadsheet_import_config:
import_cells.clear()
cell_names = project.get_cell_names()
for k, v in spreadsheet_import_config.items():
if k == 'cells':
for i, cell_data in enumerate(v):
if not 'name' in cell_data:
print(f'cell_data {cell_data} need to have a attribute name')
continue
cell = import_cells.add()
cell.name = cell_data['name']
norm_import_name = norm_str(cell_data.get('import_name', cell_data['name']))
import_name = next((c for c in cell_names if norm_str(c) == norm_import_name), None)
if import_name is None:
print(f'import_name {norm_import_name} not in {cell_names}')
else:
cell.import_name = import_name
if 'enabled' in cell_data:
try:
cell.enabled = cell_data['enabled']
except TypeError as e:
print(e)
else:
try:
setattr(project.spreadsheet_import, k, v)
except Exception:
print(f'Could not set option {k} with value {v} to spreadsheet')
return {'FINISHED'}
-2
View File
@@ -258,8 +258,6 @@ class VSETB_OT_paste_casting(Operator):
casting_datas = json.loads(CASTING_BUFFER.read_text())
for strip in context.selected_sequences:
strip_settings = strip.vsetb_strip_settings
strip.vsetb_strip_settings.casting.clear()
+162 -88
View File
@@ -92,6 +92,165 @@ class VSETB_OT_spreadsheet_cell_move(Operator):
return {"FINISHED"}
class VSETB_OT_spreadsheet_from_file(Operator):
bl_idname = "vse_toolbox.spreadsheet_from_file"
bl_label = "Read Spreadsheet Column"
bl_description = "Read Spreadsheet Column"
bl_options = {"REGISTER", "UNDO"}
filepath : StringProperty()
def execute(self, context):
scn = context.scene
project = get_scene_settings().active_project
if not self.filepath:
self.report({'ERROR'}, 'No filepath provided')
return {'CANCELLED'}
if not Path(self.filepath).exists():
self.report({'ERROR'}, f'Filepath {self.filepath} not exists')
return {'CANCELLED'}
filepath = Path(self.filepath)
if filepath.suffix.lower() == '.csv':
with open(filepath, newline='') as csvfile:
reader = csv.reader(csvfile)
next(reader)
data = dict(reader)
elif filepath.suffix.lower() == '.xlsx':
raise Exception('Not Supported')
workbook = openpyxl.load_workbook(filepath, read_only=True)
sheet = next((ws for ws in workbook.worksheets if ws.title.lower() == 'export'), None)
else:
self.report({'ERROR'}, f'File extension {filepath.suffix} should be in [.csv, .xlsx]')
return {'CANCELLED'}
return {"FINISHED"}
class VSETB_OT_spreadsheet_from_clipboard(Operator):
bl_idname = "vse_toolbox.spreadsheet_from_clipboard"
bl_label = "Read Spreadsheet from clipboard"
bl_description = "Read Spreadsheet from clipboard"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
scn = context.scene
project = get_scene_settings().active_project
spreadsheet = context.window_manager.clipboard
reader = list(csv.reader(spreadsheet.splitlines(), delimiter='\t'))
header = reader[0]
print(header)
return {"FINISHED"}
class VSETB_OT_import_spreadsheet(Operator):
bl_idname = "vse_toolbox.import_spreadsheet"
bl_label = "Import Spreadsheet"
bl_description = "Create strips from nb frames with casting and custom data"
bl_options = {"REGISTER", "UNDO"}
directory : StringProperty(subtype='DIR_PATH')
filepath: StringProperty(
name="File Path",
description="Filepath used for importing the file",
maxlen=1024,
subtype='FILE_PATH',
)
files : CollectionProperty(type=OperatorFileListElement)
@classmethod
def poll(cls, context):
settings = get_scene_settings()
return settings.active_project
def invoke(self, context, event):
settings = get_scene_settings()
project = settings.active_project
context.window_manager.fileselect_add(self)
return {'RUNNING_MODAL'}
def draw(self, context):
scn = context.scene
settings = get_scene_settings()
project = settings.active_project
spreadsheet = project.spreadsheet_import
#options = project.spreadsheet_options
layout = self.layout
row = layout.row(align=True)
row.label(text='Source')
#row.alignment='RIGHT'
row.operator("vse_toolbox.spreadsheet_from_clipboard", text='Clipboard', icon='PASTEDOWN')
row.operator("vse_toolbox.spreadsheet_from_file", text='File', icon='FILE')
row = layout.row(align=True)
row.prop(spreadsheet, 'use_custom_cells', text='Custom Cells')
col = layout.column(align=False)
col.enabled = spreadsheet.use_custom_cells
row = col.row(align=True, heading='Custom Asset Name')
row.use_property_split = True
row.use_property_decorate = False
row.prop(spreadsheet, 'use_custom_name', text='')
sub = row.row(align=False)
sub.enabled = spreadsheet.use_custom_name
sub.prop(spreadsheet, 'custom_name', text='')
sub.label(icon='BLANK1')
row = layout.row()
row.enabled = spreadsheet.use_custom_cells
row.template_list("VSETB_UL_spreadsheet_import", "spreadsheet_import", spreadsheet, "cells", spreadsheet, "cell_index", rows=8)
col_tool = row.column(align=True)
#bpy.types.VSETB_PT_presets.draw_panel_header(col_tool)
#col_tool.operator('wm.call_menu', icon="PRESET").name = 'VSETB_MT_spreadsheet_presets'
#col_tool.operator('vse_toolbox.load_spreadsheet_preset', icon='PRESET', text="")
op = col_tool.operator('wm.call_panel', icon="PRESET", emboss=False, text='')
op.name = 'VSETB_PT_presets'
op.keep_open = False
#col_tool.separator()
#col_tool.operator('vse_toolbox.spreadsheet_move', icon='TRIA_UP', text="").direction = 'UP'
#col_tool.operator('vse_toolbox.spreadsheet_move', icon='TRIA_DOWN', text="").direction = 'DOWN'
col = layout.column()
col.use_property_split = True
col.use_property_decorate = False
#col.separator()
row = col.row(align=False)
col.prop(spreadsheet, "separator", expand=True, text='Separator')
if self.filepath.endswith('.csv'):
col.prop(spreadsheet, "delimiter", expand=True, text='Delimiter')
col.prop(spreadsheet, 'import_casting', text='Import Casting')
col.prop(spreadsheet, 'import_custom_data', text='Import Custom Data')
col.prop(spreadsheet, 'update_edit', text='Update Edit')
col.separator()
def execute(self, context):
return {"FINISHED"}
class VSETB_OT_export_spreadsheet(Operator):
bl_idname = "vse_toolbox.export_spreadsheet"
bl_label = "Export Spreadsheet"
@@ -133,7 +292,7 @@ class VSETB_OT_export_spreadsheet(Operator):
sub.label(icon='BLANK1')
row = col.row()
row.template_list("VSETB_UL_spreadsheet", "spreadsheet_export", spreadsheet, "cells", spreadsheet, "cell_index", rows=8)
row.template_list("VSETB_UL_spreadsheet_export", "spreadsheet_export", spreadsheet, "cells", spreadsheet, "cell_index", rows=8)
col_tool = row.column(align=True)
@@ -276,98 +435,13 @@ class VSETB_OT_export_spreadsheet(Operator):
open_file(export_path, select=True)
return {"FINISHED"}
class VSETB_OT_import_spreadsheet(Operator):
bl_idname = "vse_toolbox.import_spreadsheet"
bl_label = "Import Spreadsheet"
bl_description = "Create strips from nb frames with casting and custom data"
bl_options = {"REGISTER", "UNDO"}
directory : StringProperty(subtype='DIR_PATH')
filepath: StringProperty(
name="File Path",
description="Filepath used for importing the file",
maxlen=1024,
subtype='FILE_PATH',
)
files : CollectionProperty(type=OperatorFileListElement)
@classmethod
def poll(cls, context):
settings = get_scene_settings()
return settings.active_project
def invoke(self, context, event):
settings = get_scene_settings()
project = settings.active_project
context.window_manager.fileselect_add(self)
return {'RUNNING_MODAL'}
def draw(self, context):
scn = context.scene
settings = get_scene_settings()
project = settings.active_project
spreadsheet = project.spreadsheet_import
#options = project.spreadsheet_options
layout = self.layout
row = layout.row(align=True)
row.prop(spreadsheet, 'use_custom_cells', text='Custom Cells')
col = layout.column(align=False)
col.enabled = spreadsheet.use_custom_cells
row = col.row(align=True, heading='Custom Asset Name')
row.use_property_split = True
row.use_property_decorate = False
row.prop(spreadsheet, 'use_custom_name', text='')
sub = row.row(align=False)
sub.enabled = spreadsheet.use_custom_name
sub.prop(spreadsheet, 'custom_name', text='')
sub.label(icon='BLANK1')
row = layout.row()
row.enabled = spreadsheet.use_custom_cells
row.template_list("VSETB_UL_spreadsheet", "spreadsheet_import", spreadsheet, "cells", spreadsheet, "cell_index", rows=8)
col_tool = row.column(align=True)
#bpy.types.VSETB_PT_presets.draw_panel_header(col_tool)
#col_tool.operator('wm.call_menu', icon="PRESET").name = 'VSETB_MT_spreadsheet_presets'
#col_tool.operator('vse_toolbox.load_spreadsheet_preset', icon='PRESET', text="")
op = col_tool.operator('wm.call_panel', icon="PRESET", emboss=False, text='')
op.name = 'VSETB_PT_presets'
op.keep_open = False
col_tool.separator()
col_tool.operator('vse_toolbox.spreadsheet_move', icon='TRIA_UP', text="").direction = 'UP'
col_tool.operator('vse_toolbox.spreadsheet_move', icon='TRIA_DOWN', text="").direction = 'DOWN'
col = layout.column()
col.use_property_split = True
row.use_property_decorate = False
#col.separator()
row = col.row(align=False)
col.prop(spreadsheet, "separator", expand=True, text='Separator')
if self.filepath.endwith('.csv'):
col.prop(spreadsheet, "delimiter", expand=True, text='Delimiter')
col.separator()
def execute(self, context):
return {"FINISHED"}
classes = (
VSETB_OT_add_export_spreadsheet_preset,
VSETB_MT_export_spreadsheet_presets,
VSETB_OT_spreadsheet_from_file,
VSETB_OT_spreadsheet_from_clipboard,
VSETB_OT_spreadsheet_cell_move,
VSETB_OT_export_spreadsheet,
VSETB_OT_import_spreadsheet