28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140 | class ToolsBtnsWidget(QtWidgets.QWidget):
"""Widget containing buttons which are clickable."""
tool_required = QtCore.Signal(str)
def __init__(self, parent=None):
super(ToolsBtnsWidget, self).__init__(parent)
self._console = None
current_context_string = (
f"Context: {get_current_task_name()} - "
f"{get_current_folder_path()}"
)
self.context_btn = QtWidgets.QPushButton(current_context_string, self)
self.context_btn.setToolTip(
"Open context dialog to set up current project, task and folder."
)
load_btn = QtWidgets.QPushButton("Load...", self)
publish_btn = QtWidgets.QPushButton("Publish...", self)
manage_btn = QtWidgets.QPushButton("Manage...", self)
render_btn = QtWidgets.QPushButton("Render...", self)
sequence_btn = QtWidgets.QPushButton(
"Build sequence hierarchy...", self)
console_btn = QtWidgets.QPushButton("Console...", self)
experimental_tools_btn = QtWidgets.QPushButton(
"Experimental tools...", self
)
layout = QtWidgets.QVBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self.context_btn, 0)
layout.addSpacing(4)
layout.addWidget(load_btn, 0)
layout.addWidget(manage_btn, 0)
layout.addWidget(render_btn, 0)
layout.addWidget(publish_btn, 0)
layout.addWidget(sequence_btn, 0)
layout.addWidget(console_btn, 0)
layout.addWidget(experimental_tools_btn, 0)
layout.addStretch(1)
load_btn.clicked.connect(self._on_load)
manage_btn.clicked.connect(self._on_manage)
render_btn.clicked.connect(self._on_render)
publish_btn.clicked.connect(self._on_publish)
sequence_btn.clicked.connect(self._on_sequence)
console_btn.clicked.connect(self._show_console)
experimental_tools_btn.clicked.connect(self._on_experimental)
self.context_btn.clicked.connect(self._on_context_change)
def _show_console(self):
if self._console is not None:
if self._console.isVisible():
# Closing also saves the scripts directly.
# Thus we prefer to close instead of hide here
self._console.close()
return
else:
self._console.show()
self._console.raise_()
return
widget = ConsoleInterpreterWindow(parent=self)
widget.setWindowTitle("Python Script Editor - Unreal Engine")
widget.setWindowFlags(widget.windowFlags() |
QtCore.Qt.Dialog |
QtCore.Qt.WindowMinimizeButtonHint)
widget.show()
widget.raise_()
self._widget = widget
unreal.parent_external_window_to_slate(widget.winId())
def _on_create(self):
self.tool_required.emit("creator")
def _on_load(self):
self.tool_required.emit("loader")
def _on_publish(self):
self.tool_required.emit("publisher")
def _on_manage(self):
self.tool_required.emit("sceneinventory")
def _on_render(self):
rendering.start_rendering()
def _on_sequence(self):
hierarchy.build_sequence_hierarchy()
def _on_experimental(self):
self.tool_required.emit("experimental_tools")
def _on_context_change(self):
"""Open a context dialog to change the current context."""
context = context_dialog.ask_for_context(strict=False)
if context is None:
return
folder_entity = ayon_api.get_folder_by_id(
context["project_name"], folder_id=context["folder_id"])
task_entity = ayon_api.get_task_by_id(
context["project_name"], task_id=context["task_id"])
new_context = change_current_context(
folder_entity=folder_entity,
task_entity=task_entity,
)
unreal.log(f"Context changed to: {new_context}")
self.context_btn.setText(
f"Context: {new_context['task_name']} - "
f"{new_context['folder_path']}"
)
|