+class WM_OT_studiolight_new(Operator):
+ """Save custom studio light from the studio light editor settings"""
+ bl_idname = 'wm.studiolight_new'
+ bl_label = "Save custom Studio light"
+
+ filename: StringProperty(
+ name="Name",
+ default="StudioLight",
+ )
+
+ ask_overide = False
+
+ def execute(self, context):
+ import pathlib
+ userpref = context.user_preferences
+ wm = context.window_manager
+
+ path_studiolights = bpy.utils.user_resource('DATAFILES')
+
+ if not path_studiolights:
+ self.report({'ERROR'}, "Failed to get Studio Light path")
+ return {'CANCELLED'}
+
+ path_studiolights = pathlib.Path(path_studiolights, "studiolights", "studio")
+ if not path_studiolights.exists():
+ try:
+ path_studiolights.mkdir(parents=True, exist_ok=True)
+ except:
+ traceback.print_exc()
+
+ finalpath = str(path_studiolights.joinpath(self.filename));
+ if pathlib.Path(finalpath + ".sl").is_file():
+ if not self.ask_overide:
+ self.ask_overide = True
+ return wm.invoke_props_dialog(self, width=600)
+ else:
+ for studio_light in userpref.studio_lights:
+ if studio_light.name == self.filename + ".sl":
+ bpy.ops.wm.studiolight_uninstall(index=studio_light.index)
+
+ userpref.studio_lights.new(path=finalpath)
+
+ # print message
+ msg = (
+ tip_("StudioLight Installed %r into %r") %
+ (self.filename, str(path_studiolights))
+ )
+ print(msg)
+ self.report({'INFO'}, msg)
+ return {'FINISHED'}
+
+ def draw(self, context):
+ layout = self.layout
+ if self.ask_overide:
+ layout.label(text="Warning, file already exists. Overwrite existing file?")
+ else:
+ layout.prop(self, "filename")
+
+ def invoke(self, context, event):
+ wm = context.window_manager
+ return wm.invoke_props_dialog(self, width=600)
+
+