87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
# SPDX-FileCopyrightText: 2021 Blender Studio Tools Authors
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
import os
|
|
import bpy
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
import bpy
|
|
|
|
|
|
def addon_prefs_get(context: bpy.types.Context) -> bpy.types.AddonPreferences:
|
|
"""
|
|
Shortcut to get addon preferences.
|
|
"""
|
|
if not context:
|
|
context = bpy.context
|
|
from . import __package__ as base_package
|
|
if base_package.startswith('bl_ext'):
|
|
# 4.2
|
|
return context.preferences.addons[base_package].preferences
|
|
else:
|
|
return context.preferences.addons[base_package.split(".")[0]].preferences
|
|
|
|
|
|
class CS_AddonPreferences(bpy.types.AddonPreferences):
|
|
bl_idname = __package__
|
|
|
|
contactsheet_dir: bpy.props.StringProperty( # type: ignore
|
|
name="Contactsheet Output Directory",
|
|
description="The contactsheet scene will use this directory to compose the output filepath",
|
|
default="",
|
|
subtype="DIR_PATH",
|
|
)
|
|
|
|
contactsheet_scale_factor: bpy.props.FloatProperty(
|
|
name="Contactsheet Scale Factor",
|
|
description="This value controls how much space there is between the individual cells of the contactsheet",
|
|
min=0.1,
|
|
max=1.0,
|
|
step=5,
|
|
default=0.9,
|
|
)
|
|
|
|
def draw(self, context: bpy.types.Context) -> None:
|
|
layout = self.layout
|
|
box = layout.box()
|
|
box.label(text="Filepaths", icon="FILEBROWSER")
|
|
|
|
# Contactsheet settings.
|
|
box.row().prop(self, "contactsheet_dir")
|
|
box.row().prop(self, "contactsheet_scale_factor")
|
|
|
|
@property
|
|
def contactsheet_dir_path(self) -> Optional[Path]:
|
|
if not self.is_contactsheet_dir_valid:
|
|
return None
|
|
return Path(os.path.abspath(bpy.path.abspath(self.contactsheet_dir)))
|
|
|
|
@property
|
|
def is_contactsheet_dir_valid(self) -> bool:
|
|
|
|
# Check if file is saved.
|
|
if not self.contactsheet_dir:
|
|
return False
|
|
|
|
if not bpy.data.filepath and self.contactsheet_dir.startswith("//"):
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
# ---------REGISTER ----------.
|
|
|
|
classes = [CS_AddonPreferences]
|
|
|
|
|
|
def register():
|
|
for cls in classes:
|
|
bpy.utils.register_class(cls)
|
|
|
|
|
|
def unregister():
|
|
for cls in reversed(classes):
|
|
bpy.utils.unregister_class(cls)
|