Rearchitecture Project Manager Screens Workflow and Create Project Settings Ctrl

* Renamed UX screen files and classes to include screen in the name

* Changed screens to emit a screen change request a controller can connect to

* Made ScreensCtrl that owns and manages screens and their changing and history

* Made Project Settings Control managing back and next buttons

* Add Project Setting Model and moved New Project Settings Ui into Screen file

* Goto previous screen always works

* Removed unnecessary QObject namespace from connect calls

* Merged ProjectSettingsModel into ProjectInfo
This commit is contained in:
AMZN-nggieber
2021-05-13 10:47:49 -07:00
committed by GitHub
parent 67a1e4dc4f
commit 7ecd1b1761
34 changed files with 679 additions and 453 deletions
@@ -30,7 +30,11 @@ namespace O3DE::ProjectManager
m_pythonBindings = AZStd::make_unique<PythonBindings>(engineRootPath);
ConnectSlotsAndSignals();
m_screensCtrl = new ScreensCtrl();
m_ui->verticalLayout->addWidget(m_screensCtrl);
connect(m_ui->projectsMenu, &QMenu::aboutToShow, this, &ProjectManagerWindow::HandleProjectsMenu);
connect(m_ui->engineMenu, &QMenu::aboutToShow, this, &ProjectManagerWindow::HandleEngineMenu);
QDir rootDir = QString::fromUtf8(engineRootPath.Native().data(), aznumeric_cast<int>(engineRootPath.Native().size()));
const auto pathOnDisk = rootDir.absoluteFilePath("Code/Tools/ProjectManager/Resources");
@@ -39,9 +43,16 @@ namespace O3DE::ProjectManager
AzQtComponents::StyleManager::setStyleSheet(this, QStringLiteral("projectlauncherwindow:ProjectManagerWindow.qss"));
BuildScreens();
ChangeToScreen(ProjectManagerScreen::FirstTimeUse);
QVector<ProjectManagerScreen> screenEnums =
{
ProjectManagerScreen::FirstTimeUse,
ProjectManagerScreen::NewProjectSettingsCore,
ProjectManagerScreen::ProjectsHome,
ProjectManagerScreen::ProjectSettings,
ProjectManagerScreen::EngineSettings
};
m_screensCtrl->BuildScreens(screenEnums);
m_screensCtrl->ForceChangeToScreen(ProjectManagerScreen::FirstTimeUse, false);
}
ProjectManagerWindow::~ProjectManagerWindow()
@@ -49,61 +60,13 @@ namespace O3DE::ProjectManager
m_pythonBindings.reset();
}
void ProjectManagerWindow::BuildScreens()
{
// Basically just iterate over the ProjectManagerScreen enum creating each screen
// Could add some fancy to do this but there are few screens right now
ResetScreen(ProjectManagerScreen::FirstTimeUse);
ResetScreen(ProjectManagerScreen::NewProjectSettings);
ResetScreen(ProjectManagerScreen::GemCatalog);
ResetScreen(ProjectManagerScreen::ProjectsHome);
ResetScreen(ProjectManagerScreen::ProjectSettings);
ResetScreen(ProjectManagerScreen::EngineSettings);
}
QStackedWidget* ProjectManagerWindow::GetScreenStack()
{
return m_ui->stackedScreens;
}
void ProjectManagerWindow::ChangeToScreen(ProjectManagerScreen screen)
{
int index = aznumeric_cast<int, ProjectManagerScreen>(screen);
m_ui->stackedScreens->setCurrentIndex(index);
}
void ProjectManagerWindow::ResetScreen(ProjectManagerScreen screen)
{
int index = aznumeric_cast<int, ProjectManagerScreen>(screen);
// Fine the old screen if it exists and get rid of it so we can start fresh
QWidget* oldScreen = m_ui->stackedScreens->widget(index);
if (oldScreen)
{
m_ui->stackedScreens->removeWidget(oldScreen);
oldScreen->deleteLater();
}
// Add new screen
QWidget* newScreen = BuildScreen(this, screen);
m_ui->stackedScreens->insertWidget(index, newScreen);
}
void ProjectManagerWindow::ConnectSlotsAndSignals()
{
QObject::connect(m_ui->projectsMenu, &QMenu::aboutToShow, this, &ProjectManagerWindow::HandleProjectsMenu);
QObject::connect(m_ui->engineMenu, &QMenu::aboutToShow, this, &ProjectManagerWindow::HandleEngineMenu);
}
void ProjectManagerWindow::HandleProjectsMenu()
{
ChangeToScreen(ProjectManagerScreen::ProjectsHome);
m_screensCtrl->ChangeToScreen(ProjectManagerScreen::ProjectsHome);
}
void ProjectManagerWindow::HandleEngineMenu()
{
ChangeToScreen(ProjectManagerScreen::EngineSettings);
m_screensCtrl->ChangeToScreen(ProjectManagerScreen::EngineSettings);
}
} // namespace O3DE::ProjectManager