def check_inventory(): if not lib.any_outdated(): return host = api.registered_host() outdated_containers = [] for container in host.ls(): representation = container['representation'] representation_doc = io.find_one( { "_id": io.ObjectId(representation), "type": "representation" }, projection={"parent": True}) if representation_doc and not lib.is_latest(representation_doc): outdated_containers.append(container) # Warn about outdated containers. print("Starting new QApplication..") app = Qt.QtWidgets.QApplication(sys.argv) message_box = Qt.QtWidgets.QMessageBox() message_box.setIcon(Qt.QtWidgets.QMessageBox.Warning) msg = "There are outdated containers in the scene." message_box.setText(msg) message_box.exec_() # Garbage collect QApplication. del app
def on_open(*args): avalon.logger.info("Running callback on open..") if any_outdated(): from ..widgets import popup log.warning("Scene has outdated content.") # Get main window parent = hou.ui.mainQtWindow() if parent is None: log.info("Skipping outdated content pop-up " "because Maya window can't be found.") else: # Show outdated pop-up def _on_show_inventory(): import avalon.tools.sceneinventory as tool tool.show(parent=parent) dialog = popup.Popup(parent=parent) dialog.setWindowTitle("Maya scene has outdated content") dialog.setMessage("There are outdated containers in " "your Maya scene.") dialog.on_show.connect(_on_show_inventory) dialog.show()
def check_inventory(): """Check is scene contains outdated containers. If it does it will colorize outdated nodes and display warning message in Harmony. """ if not lib.any_outdated(): return host = avalon.api.registered_host() outdated_containers = [] for container in host.ls(): representation = container['representation'] representation_doc = io.find_one( { "_id": io.ObjectId(representation), "type": "representation" }, projection={"parent": True}) if representation_doc and not lib.is_latest(representation_doc): outdated_containers.append(container) # Colour nodes. outdated_nodes = [] for container in outdated_containers: if container["loader"] == "ImageSequenceLoader": outdated_nodes.append( harmony.find_node_by_name(container["name"], "READ")) harmony.send({"function": "PypeHarmony.setColor", "args": outdated_nodes}) # Warn about outdated containers. msg = "There are outdated containers in the scene." harmony.send({"function": "PypeHarmony.message", "args": msg})
def check_inventory(): if not lib.any_outdated(): return host = avalon.api.registered_host() outdated_containers = [] for container in host.ls(): representation = container['representation'] representation_doc = io.find_one( { "_id": io.ObjectId(representation), "type": "representation" }, projection={"parent": True} ) if representation_doc and not lib.is_latest(representation_doc): outdated_containers.append(container) # Colour nodes. func = """function func(args){ for( var i =0; i <= args[0].length - 1; ++i) { var red_color = new ColorRGBA(255, 0, 0, 255); node.setColor(args[0][i], red_color); } } func """ outdated_nodes = [] for container in outdated_containers: if container["loader"] == "ImageSequenceLoader": outdated_nodes.append( harmony.find_node_by_name(container["name"], "READ") ) harmony.send({"function": func, "args": [outdated_nodes]}) # Warn about outdated containers. print("Starting new QApplication..") app = Qt.QtWidgets.QApplication(sys.argv) message_box = Qt.QtWidgets.QMessageBox() message_box.setIcon(Qt.QtWidgets.QMessageBox.Warning) msg = "There are outdated containers in the scene." message_box.setText(msg) message_box.exec_() # Garbage collect QApplication. del app
def on_open(_): """On scene open let's assume the containers have changed.""" from avalon.vendor.Qt import QtWidgets from pype.widgets import popup cmds.evalDeferred("from pype.hosts.maya.api import lib;" "lib.remove_render_layer_observer()") cmds.evalDeferred("from pype.hosts.maya.api import lib;" "lib.add_render_layer_observer()") cmds.evalDeferred("from pype.hosts.maya.api import lib;" "lib.add_render_layer_change_observer()") # # Update current task for the current scene # update_task_from_path(cmds.file(query=True, sceneName=True)) # Validate FPS after update_task_from_path to # ensure it is using correct FPS for the asset lib.validate_fps() lib.fix_incompatible_containers() if any_outdated(): log.warning("Scene has outdated content.") # Find maya main window top_level_widgets = { w.objectName(): w for w in QtWidgets.QApplication.topLevelWidgets() } parent = top_level_widgets.get("MayaWindow", None) if parent is None: log.info("Skipping outdated content pop-up " "because Maya window can't be found.") else: # Show outdated pop-up def _on_show_inventory(): import avalon.tools.sceneinventory as tool tool.show(parent=parent) dialog = popup.Popup(parent=parent) dialog.setWindowTitle("Maya scene has outdated content") dialog.setMessage("There are outdated containers in " "your Maya scene.") dialog.on_show.connect(_on_show_inventory) dialog.show()