diff --git a/openpype/hosts/nuke/api/__init__.py b/openpype/hosts/nuke/api/__init__.py index 25504aa12b..c80507e7ea 100644 --- a/openpype/hosts/nuke/api/__init__.py +++ b/openpype/hosts/nuke/api/__init__.py @@ -1,18 +1,12 @@ import os -import sys import nuke -from avalon import api as avalon -from openpype.tools import workfiles -from pyblish import api as pyblish -from openpype.api import Logger -import openpype.hosts.nuke +import avalon.api +import pyblish.api +import openpype from . import lib, menu - -self = sys.modules[__name__] -self.workfiles_launched = False -log = Logger().get_logger(__name__) +log = openpype.api.Logger().get_logger(__name__) AVALON_CONFIG = os.getenv("AVALON_CONFIG", "pype") HOST_DIR = os.path.dirname(os.path.abspath(openpype.hosts.nuke.__file__)) @@ -25,7 +19,7 @@ INVENTORY_PATH = os.path.join(PLUGINS_DIR, "inventory") # registering pyblish gui regarding settings in presets if os.getenv("PYBLISH_GUI", None): - pyblish.register_gui(os.getenv("PYBLISH_GUI", None)) + pyblish.api.register_gui(os.getenv("PYBLISH_GUI", None)) def reload_config(): @@ -61,15 +55,16 @@ def install(): ''' log.info("Registering Nuke plug-ins..") - pyblish.register_plugin_path(PUBLISH_PATH) - avalon.register_plugin_path(avalon.Loader, LOAD_PATH) - avalon.register_plugin_path(avalon.Creator, CREATE_PATH) - avalon.register_plugin_path(avalon.InventoryAction, INVENTORY_PATH) + pyblish.api.register_plugin_path(PUBLISH_PATH) + avalon.api.register_plugin_path(avalon.api.Loader, LOAD_PATH) + avalon.api.register_plugin_path(avalon.api.Creator, CREATE_PATH) + avalon.api.register_plugin_path(avalon.api.InventoryAction, INVENTORY_PATH) # Register Avalon event for workfiles loading. - avalon.on("workio.open_file", lib.check_inventory_versions) + avalon.api.on("workio.open_file", lib.check_inventory_versions) - pyblish.register_callback("instanceToggled", on_pyblish_instance_toggled) + pyblish.api.register_callback( + "instanceToggled", on_pyblish_instance_toggled) workfile_settings = lib.WorkfileSettings() # Disable all families except for the ones we explicitly want to see family_states = [ @@ -79,39 +74,27 @@ def install(): "gizmo" ] - avalon.data["familiesStateDefault"] = False - avalon.data["familiesStateToggled"] = family_states - - # Workfiles. - launch_workfiles = os.environ.get("WORKFILES_STARTUP") - - if launch_workfiles: - nuke.addOnCreate(launch_workfiles_app, nodeClass="Root") + avalon.api.data["familiesStateDefault"] = False + avalon.api.data["familiesStateToggled"] = family_states # Set context settings. nuke.addOnCreate(workfile_settings.set_context_settings, nodeClass="Root") - # nuke.addOnCreate(workfile_settings.set_favorites, nodeClass="Root") - + nuke.addOnCreate(workfile_settings.set_favorites, nodeClass="Root") + nuke.addOnCreate(lib.open_last_workfile, nodeClass="Root") + nuke.addOnCreate(lib.launch_workfiles_app, nodeClass="Root") menu.install() -def launch_workfiles_app(): - '''Function letting start workfiles after start of host - ''' - if not self.workfiles_launched: - self.workfiles_launched = True - workfiles.show(os.environ["AVALON_WORKDIR"]) - - def uninstall(): '''Uninstalling host's integration ''' log.info("Deregistering Nuke plug-ins..") - pyblish.deregister_plugin_path(PUBLISH_PATH) - avalon.deregister_plugin_path(avalon.Loader, LOAD_PATH) - avalon.deregister_plugin_path(avalon.Creator, CREATE_PATH) + pyblish.api.deregister_plugin_path(PUBLISH_PATH) + avalon.api.deregister_plugin_path(avalon.api.Loader, LOAD_PATH) + avalon.api.deregister_plugin_path(avalon.api.Creator, CREATE_PATH) - pyblish.deregister_callback("instanceToggled", on_pyblish_instance_toggled) + pyblish.api.deregister_callback( + "instanceToggled", on_pyblish_instance_toggled) reload_config() menu.uninstall() @@ -123,7 +106,7 @@ def on_pyblish_instance_toggled(instance, old_value, new_value): log.info("instance toggle: {}, old_value: {}, new_value:{} ".format( instance, old_value, new_value)) - from avalon.nuke import ( + from avalon.api.nuke import ( viewer_update_and_undo_stop, add_publish_knob ) diff --git a/openpype/hosts/nuke/api/lib.py b/openpype/hosts/nuke/api/lib.py index 8618b03cdc..d95af6ec4c 100644 --- a/openpype/hosts/nuke/api/lib.py +++ b/openpype/hosts/nuke/api/lib.py @@ -3,9 +3,14 @@ import re import sys from collections import OrderedDict + from avalon import api, io, lib +from avalon.tools import workfiles import avalon.nuke from avalon.nuke import lib as anlib +from avalon.nuke import ( + save_file, open_file +) from openpype.api import ( Logger, Anatomy, @@ -13,6 +18,7 @@ from openpype.api import ( get_anatomy_settings, get_hierarchy, get_asset, + get_current_project_settings, config, ApplicationManager ) @@ -25,8 +31,10 @@ log = Logger().get_logger(__name__) self = sys.modules[__name__] self._project = None +self.workfiles_launched = False self._node_tab_name = "{}".format(os.getenv("AVALON_LABEL") or "Avalon") + def get_node_imageio_setting(**kwarg): ''' Get preset data for dataflow (fileType, compression, bitDepth) ''' @@ -1616,3 +1624,41 @@ def find_free_space_to_paste_nodes( xpos = min(group_xpos) ypos = max(group_ypos) + abs(offset) return xpos, ypos + + +def launch_workfiles_app(): + '''Function letting start workfiles after start of host + ''' + # get state from settings + open_at_start = get_current_project_settings()["nuke"].get( + "general", {}).get("open_workfile_at_start") + + # return if none is defined + if not open_at_start: + return + + if not self.workfiles_launched: + self.workfiles_launched = True + workfiles.show(os.environ["AVALON_WORKDIR"]) + + +def open_last_workfile(): + # get state from settings + open_last_version = get_current_project_settings()["nuke"].get( + "general", {}).get("create_initial_workfile") + + log.info("Opening last workfile...") + last_workfile_path = os.environ.get("AVALON_LAST_WORKFILE") + + if not os.path.exists(last_workfile_path): + # return if none is defined + if not open_last_version: + return + + save_file(last_workfile_path) + else: + # to avoid looping of the callback, remove it! + nuke.removeOnCreate(open_last_workfile, nodeClass="Root") + + # open workfile + open_file(last_workfile_path) diff --git a/openpype/settings/defaults/project_settings/nuke.json b/openpype/settings/defaults/project_settings/nuke.json index 0173eb0a82..852e041805 100644 --- a/openpype/settings/defaults/project_settings/nuke.json +++ b/openpype/settings/defaults/project_settings/nuke.json @@ -6,7 +6,9 @@ "load": "ctrl+alt+l", "manage": "ctrl+alt+m", "build_workfile": "ctrl+alt+b" - } + }, + "open_workfile_at_start": false, + "create_initial_workfile": true }, "create": { "CreateWriteRender": { diff --git a/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json b/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json index 75ca5411a1..5022b75719 100644 --- a/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json +++ b/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json @@ -43,6 +43,16 @@ "label": "Build Workfile" } ] + }, + { + "type": "boolean", + "key": "open_workfile_at_start", + "label": "Open Workfile window at start of a Nuke session" + }, + { + "type": "boolean", + "key": "create_initial_workfile", + "label": "Create initial workfile version if none available" } ] }, @@ -87,7 +97,7 @@ "name": "schema_nuke_publish", "template_data": [] }, - { + { "type": "schema", "name": "schema_nuke_load", "template_data": [] @@ -101,4 +111,4 @@ "name": "schema_publish_gui_filter" } ] -} +} \ No newline at end of file