base of tray publisher tool

This commit is contained in:
Jakub Trllo 2022-02-21 17:03:30 +01:00
parent ae4c7a3ab4
commit 0f3879e41c
3 changed files with 160 additions and 0 deletions

View file

@ -0,0 +1,6 @@
from .window import main
__all__ = (
"main",
)

View file

@ -0,0 +1,148 @@
from Qt import QtWidgets, QtCore
import avalon.api
from avalon import io
from avalon.api import AvalonMongoDB
from openpype.tools.publisher import PublisherWindow
from openpype.tools.utils.constants import PROJECT_NAME_ROLE
from openpype.tools.utils.models import (
ProjectModel,
ProjectSortFilterProxy
)
class StandaloneOverlayWidget(QtWidgets.QFrame):
project_selected = QtCore.Signal(str)
def __init__(self, publisher_window):
super(StandaloneOverlayWidget, self).__init__(publisher_window)
self.setObjectName("OverlayFrame")
# Create db connection for projects model
dbcon = AvalonMongoDB()
dbcon.install()
header_label = QtWidgets.QLabel("Choose project", self)
header_label.setObjectName("ChooseProjectLabel")
# Create project models and view
projects_model = ProjectModel(dbcon)
projects_proxy = ProjectSortFilterProxy()
projects_proxy.setSourceModel(projects_model)
projects_view = QtWidgets.QListView(self)
projects_view.setModel(projects_proxy)
projects_view.setEditTriggers(
QtWidgets.QAbstractItemView.NoEditTriggers
)
confirm_btn = QtWidgets.QPushButton("Choose", self)
btns_layout = QtWidgets.QHBoxLayout()
btns_layout.addStretch(1)
btns_layout.addWidget(confirm_btn, 0)
layout = QtWidgets.QGridLayout(self)
layout.addWidget(header_label, 0, 1, alignment=QtCore.Qt.AlignCenter)
layout.addWidget(projects_view, 1, 1)
layout.addLayout(btns_layout, 2, 1)
layout.setColumnStretch(0, 1)
layout.setColumnStretch(1, 0)
layout.setColumnStretch(2, 1)
layout.setRowStretch(0, 0)
layout.setRowStretch(1, 1)
layout.setRowStretch(2, 0)
projects_view.doubleClicked.connect(self._on_double_click)
confirm_btn.clicked.connect(self._on_confirm_click)
self._projects_view = projects_view
self._projects_model = projects_model
self._confirm_btn = confirm_btn
self._publisher_window = publisher_window
def showEvent(self, event):
self._projects_model.refresh()
super(StandaloneOverlayWidget, self).showEvent(event)
def _on_double_click(self):
self.set_selected_project()
def _on_confirm_click(self):
self.set_selected_project()
def set_selected_project(self):
index = self._projects_view.currentIndex()
project_name = index.data(PROJECT_NAME_ROLE)
if not project_name:
return
traypublisher.set_project_name(project_name)
self.setVisible(False)
self.project_selected.emit(project_name)
class TrayPublishWindow(PublisherWindow):
def __init__(self, *args, **kwargs):
super(TrayPublishWindow, self).__init__(reset_on_show=False)
overlay_widget = StandaloneOverlayWidget(self)
btns_widget = QtWidgets.QWidget(self)
back_to_overlay_btn = QtWidgets.QPushButton(
"Change project", btns_widget
)
save_btn = QtWidgets.QPushButton("Save", btns_widget)
# TODO implement save mechanism of tray publisher
save_btn.setVisible(False)
btns_layout = QtWidgets.QHBoxLayout(btns_widget)
btns_layout.setContentsMargins(0, 0, 0, 0)
btns_layout.addWidget(save_btn, 0)
btns_layout.addWidget(back_to_overlay_btn, 0)
self._header_layout.addWidget(btns_widget, 0)
overlay_widget.project_selected.connect(self._on_project_select)
back_to_overlay_btn.clicked.connect(self._on_back_to_overlay)
save_btn.clicked.connect(self._on_tray_publish_save)
self._back_to_overlay_btn = back_to_overlay_btn
self._overlay_widget = overlay_widget
def _on_back_to_overlay(self):
self._overlay_widget.setVisible(True)
self._resize_overlay()
def _resize_overlay(self):
self._overlay_widget.resize(
self.width(),
self.height()
)
def resizeEvent(self, event):
super(TrayPublishWindow, self).resizeEvent(event)
self._resize_overlay()
def _on_project_select(self, project_name):
self.controller.save_changes()
self.controller.reset_project_data_cache()
io.Session["AVALON_PROJECT"] = project_name
io.install()
self.reset()
if not self.controller.instances:
self._on_create_clicked()
def _on_tray_publish_save(self):
self.controller.save_changes()
print("NOT YET IMPLEMENTED")
def main():
app = QtWidgets.QApplication([])
window = TrayPublishWindow()
window.show()
app.exec_()