Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Adding predefined project folders creation in PM #2030

Merged
merged 6 commits into from
Sep 22, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 49 additions & 4 deletions openpype/tools/project_manager/project_manager/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
from openpype.widgets import PasswordDialog

from openpype import resources
from openpype.api import (
get_project_basic_paths,
create_project_folders,
Logger
)
from avalon.api import AvalonMongoDB


Expand All @@ -24,10 +29,15 @@ class ProjectManagerWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super(ProjectManagerWindow, self).__init__(parent)

self.log = Logger.get_logger(self.__class__.__name__)

self._initial_reset = False
self._password_dialog = None
self._user_passed = False

# keep track of the current project PM is viewing
self._current_project = None
iLLiCiTiT marked this conversation as resolved.
Show resolved Hide resolved

self.setWindowTitle("OpenPype Project Manager")
self.setWindowIcon(QtGui.QIcon(resources.pype_icon_filepath()))

Expand Down Expand Up @@ -57,12 +67,18 @@ def __init__(self, parent=None):
create_project_btn = QtWidgets.QPushButton(
"Create project...", project_widget
)
create_folders_btn = QtWidgets.QPushButton(
ResourceCache.get_icon("asset", "default"),
"Create Starting Folders",
project_widget
)

project_layout = QtWidgets.QHBoxLayout(project_widget)
project_layout.setContentsMargins(0, 0, 0, 0)
project_layout.addWidget(project_combobox, 0)
project_layout.addWidget(refresh_projects_btn, 0)
project_layout.addWidget(create_project_btn, 0)
project_layout.addWidget(create_folders_btn)
project_layout.addStretch(1)

# Helper buttons
Expand Down Expand Up @@ -124,6 +140,7 @@ def __init__(self, parent=None):

refresh_projects_btn.clicked.connect(self._on_project_refresh)
create_project_btn.clicked.connect(self._on_project_create)
create_folders_btn.clicked.connect(self._on_create_folders)
project_combobox.currentIndexChanged.connect(self._on_project_change)
save_btn.clicked.connect(self._on_save_click)
add_asset_btn.clicked.connect(self._on_add_asset)
Expand All @@ -139,6 +156,7 @@ def __init__(self, parent=None):
self._refresh_projects_btn = refresh_projects_btn
self._project_combobox = project_combobox
self._create_project_btn = create_project_btn
self._create_folders_btn = create_folders_btn

self._add_asset_btn = add_asset_btn
self._add_task_btn = add_task_btn
Expand Down Expand Up @@ -179,7 +197,9 @@ def refresh_projects(self, project_name=None):
self._set_project(self._project_combobox.currentText())

def _on_project_change(self):
self._set_project(self._project_combobox.currentText())
if self._project_combobox.currentIndex() != 0:
self._current_project = self._project_combobox.currentText()
self._set_project(self._current_project)

def _on_project_refresh(self):
self.refresh_projects()
Expand All @@ -193,6 +213,29 @@ def _on_add_asset(self):
def _on_add_task(self):
self.hierarchy_view.add_task()

def _on_create_folders(self):
if not self._current_project:
return

qm = QtWidgets.QMessageBox
ans = qm.question(self,
"OpenPype Project Manager",
"Confirm to create starting project folders?",
qm.Yes | qm.No)
if ans == qm.Yes:
try:
# Get paths based on presets
basic_paths = get_project_basic_paths(self._current_project)
if not basic_paths:
pass
# Invoking OpenPype API to create the project folders
create_project_folders(basic_paths, self._current_project)
except Exception as exc:
icyvapor marked this conversation as resolved.
Show resolved Hide resolved
self.log.warning(
"Cannot create starting folders: {}".format(exc),
exc_info=True
)

def show_message(self, message):
# TODO add nicer message pop
self.message_label.setText(message)
Expand All @@ -203,9 +246,11 @@ def _on_project_create(self):
if dialog.result() != 1:
return

project_name = dialog.project_name
self.show_message("Created project \"{}\"".format(project_name))
self.refresh_projects(project_name)
self._current_project = dialog.project_name
self.show_message(
"Created project \"{}\"".format(self._current_project)
)
self.refresh_projects(self._current_project)

def _show_password_dialog(self):
if self._password_dialog:
Expand Down