Project Manager - Barebones UI Made for All Screens with Basic Flow (#507)

* Created all barebone screens, a screen factory, and connected basic transitions between screens

* Changed ProjectManager namespace to O3DE::ProjectManager, removed empty new lines, switch to aznumberic_cast usage

* Project Manager - Moved Qt directory into source
main
AMZN-nggieber 5 years ago committed by GitHub
parent 2d043431bc
commit 83e2ec6800
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -38,4 +38,4 @@ ly_add_target(
AZ::AzFramework
AZ::AzToolsFramework
AZ::AzQtComponents
)
)

@ -1,49 +0,0 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Qt/ProjectManagerWindow.h>
#include <Qt/FirstTimeUse.h>
#include <AzQtComponents/Components/StyleManager.h>
#include <AzCore/IO/Path/Path.h>
#include <QDir>
#include <Qt/ui_ProjectManagerWindow.h>
namespace ProjectManager
{
ProjectManagerWindow::ProjectManagerWindow(QWidget* parent, const AZ::IO::PathView& engineRootPath)
: QMainWindow(parent)
, m_ui(new Ui::ProjectManagerWindowClass())
{
m_ui->setupUi(this);
QDir rootDir = QString::fromUtf8(engineRootPath.Native().data(), aznumeric_cast<int>(engineRootPath.Native().size()));
const auto pathOnDisk = rootDir.absoluteFilePath("Code/Tools/ProjectManager/Resources");
const auto qrcPath = QStringLiteral(":/ProjectManagerWindow");
AzQtComponents::StyleManager::addSearchPaths("projectmanagerwindow", pathOnDisk, qrcPath, engineRootPath);
AzQtComponents::StyleManager::setStyleSheet(this, QStringLiteral("projectlauncherwindow:ProjectManagerWindow.qss"));
FirstTimeUse* firstTimeUse = new FirstTimeUse(m_ui->centralwidget);
firstTimeUse->show();
}
ProjectManagerWindow::~ProjectManagerWindow()
{
}
//#include <Qt/moc_ProjectManagerWindow.cpp>
} // namespace ProjectManager

@ -12,10 +12,29 @@
set(FILES
project_manager.qrc
source/main.cpp
Qt/FirstTimeUse.h
Qt/FirstTimeUse.cpp
Qt/FirstTimeUse.ui
Qt/ProjectManagerWindow.h
Qt/ProjectManagerWindow.cpp
Qt/ProjectManagerWindow.ui
)
source/ScreenDefs.h
source/ScreenFactory.h
source/ScreenFactory.cpp
source/Qt/ScreenWidget.h
source/Qt/FirstTimeUse.h
source/Qt/FirstTimeUse.cpp
source/Qt/FirstTimeUse.ui
source/Qt/ProjectManagerWindow.h
source/Qt/ProjectManagerWindow.cpp
source/Qt/ProjectManagerWindow.ui
source/Qt/NewProjectSettings.h
source/Qt/NewProjectSettings.cpp
source/Qt/NewProjectSettings.ui
source/Qt/GemCatalog.h
source/Qt/GemCatalog.cpp
source/Qt/GemCatalog.ui
source/Qt/ProjectsHome.h
source/Qt/ProjectsHome.cpp
source/Qt/ProjectsHome.ui
source/Qt/ProjectSettings.h
source/Qt/ProjectSettings.cpp
source/Qt/ProjectSettings.ui
source/Qt/EngineSettings.h
source/Qt/EngineSettings.cpp
source/Qt/EngineSettings.ui
)

@ -0,0 +1,35 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Qt/EngineSettings.h>
#include <Qt/ui_EngineSettings.h>
namespace O3DE::ProjectManager
{
EngineSettings::EngineSettings(ProjectManagerWindow* window)
: ScreenWidget(window)
, m_ui(new Ui::EngineSettingsClass())
{
m_ui->setupUi(this);
}
EngineSettings::~EngineSettings()
{
}
void EngineSettings::ConnectSlotsAndSignals()
{
// Do nothing for now
}
} // namespace O3DE::ProjectManager

@ -0,0 +1,39 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#if !defined(Q_MOC_RUN)
#include <Qt/ScreenWidget.h>
#endif
namespace Ui
{
class EngineSettingsClass;
}
namespace O3DE::ProjectManager
{
class EngineSettings
: public ScreenWidget
{
public:
explicit EngineSettings(ProjectManagerWindow* window);
~EngineSettings();
protected:
void ConnectSlotsAndSignals() override;
private:
QScopedPointer<Ui::EngineSettingsClass> m_ui;
};
} // namespace O3DE::ProjectManager

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EngineSettingsClass</class>
<widget class="QWidget" name="EngineSettingsClass">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>839</width>
<height>597</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>O3DE Settings</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Engine Version</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>v1.01</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>3rd Party Software Folder</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit"/>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>Restricted Folder</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_2"/>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>Default Gems Folder</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_3"/>
</item>
<item>
<widget class="QLabel" name="label_7">
<property name="text">
<string>Default Project Templates Folder</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_4"/>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,47 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Qt/FirstTimeUse.h>
#include <Qt/ui_FirstTimeUse.h>
namespace O3DE::ProjectManager
{
FirstTimeUse::FirstTimeUse(ProjectManagerWindow* window)
: ScreenWidget(window)
, m_ui(new Ui::FirstTimeUseClass())
{
m_ui->setupUi(this);
ConnectSlotsAndSignals();
}
FirstTimeUse::~FirstTimeUse()
{
}
void FirstTimeUse::ConnectSlotsAndSignals()
{
QObject::connect(m_ui->createProjectButton, &QPushButton::pressed, this, &FirstTimeUse::HandleNewProjectButton);
QObject::connect(m_ui->openProjectButton, &QPushButton::pressed, this, &FirstTimeUse::HandleOpenProjectButton);
}
void FirstTimeUse::HandleNewProjectButton()
{
m_projectManagerWindow->ChangeToScreen(ProjectManagerScreen::NewProjectSettings);
}
void FirstTimeUse::HandleOpenProjectButton()
{
m_projectManagerWindow->ChangeToScreen(ProjectManagerScreen::ProjectsHome);
}
} // namespace O3DE::ProjectManager

@ -12,7 +12,7 @@
#pragma once
#if !defined(Q_MOC_RUN)
#include <QWidget>
#include <Qt/ScreenWidget.h>
#endif
namespace Ui
@ -20,17 +20,24 @@ namespace Ui
class FirstTimeUseClass;
}
namespace ProjectManager
namespace O3DE::ProjectManager
{
class FirstTimeUse : public QWidget
class FirstTimeUse
: public ScreenWidget
{
public:
explicit FirstTimeUse(QWidget* parent);
explicit FirstTimeUse(ProjectManagerWindow* window);
~FirstTimeUse();
protected:
void ConnectSlotsAndSignals() override;
protected slots:
void HandleNewProjectButton();
void HandleOpenProjectButton();
private:
QScopedPointer<Ui::FirstTimeUseClass> m_ui;
};
} // namespace ProjectManager
} // namespace O3DE::ProjectManager

@ -0,0 +1,47 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Qt/GemCatalog.h>
#include <Qt/ui_GemCatalog.h>
namespace O3DE::ProjectManager
{
GemCatalog::GemCatalog(ProjectManagerWindow* window)
: ScreenWidget(window)
, m_ui(new Ui::GemCatalogClass())
{
m_ui->setupUi(this);
ConnectSlotsAndSignals();
}
GemCatalog::~GemCatalog()
{
}
void GemCatalog::ConnectSlotsAndSignals()
{
QObject::connect(m_ui->backButton, &QPushButton::pressed, this, &GemCatalog::HandleBackButton);
QObject::connect(m_ui->confirmButton, &QPushButton::pressed, this, &GemCatalog::HandleConfirmButton);
}
void GemCatalog::HandleBackButton()
{
m_projectManagerWindow->ChangeToScreen(ProjectManagerScreen::NewProjectSettings);
}
void GemCatalog::HandleConfirmButton()
{
m_projectManagerWindow->ChangeToScreen(ProjectManagerScreen::ProjectsHome);
}
} // namespace O3DE::ProjectManager

@ -0,0 +1,44 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#if !defined(Q_MOC_RUN)
#include <Qt/ScreenWidget.h>
#endif
namespace Ui
{
class GemCatalogClass;
}
namespace O3DE::ProjectManager
{
class GemCatalog
: public ScreenWidget
{
public:
explicit GemCatalog(ProjectManagerWindow* window);
~GemCatalog();
protected:
void ConnectSlotsAndSignals() override;
protected slots:
void HandleBackButton();
void HandleConfirmButton();
private:
QScopedPointer<Ui::GemCatalogClass> m_ui;
};
} // namespace O3DE::ProjectManager

@ -0,0 +1,231 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GemCatalogClass</class>
<widget class="QWidget" name="GemCatalogClass">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>806</width>
<height>566</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Gem Catalog</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="toolButton">
<property name="text">
<string>Cart</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="toolButton_2">
<property name="text">
<string>Hamburger Menu</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton">
<property name="text">
<string>RadioButton</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_2">
<property name="text">
<string>RadioButton</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_3">
<property name="text">
<string>RadioButton</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>CheckBox</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_2">
<property name="text">
<string>CheckBox</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_3">
<property name="text">
<string>CheckBox</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QListWidget" name="listWidget_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="listWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Atom</string>
</property>
</item>
<item>
<property name="text">
<string>Audio</string>
</property>
</item>
<item>
<property name="text">
<string>Camera</string>
</property>
</item>
<item>
<property name="text">
<string>PhysX</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="backButton">
<property name="text">
<string>Back</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="confirmButton">
<property name="text">
<string>Create Project</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,47 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Qt/NewProjectSettings.h>
#include <Qt/ui_NewProjectSettings.h>
namespace O3DE::ProjectManager
{
NewProjectSettings::NewProjectSettings(ProjectManagerWindow* window)
: ScreenWidget(window)
, m_ui(new Ui::NewProjectSettingsClass())
{
m_ui->setupUi(this);
ConnectSlotsAndSignals();
}
NewProjectSettings::~NewProjectSettings()
{
}
void NewProjectSettings::ConnectSlotsAndSignals()
{
QObject::connect(m_ui->backButton, &QPushButton::pressed, this, &NewProjectSettings::HandleBackButton);
QObject::connect(m_ui->nextButton, &QPushButton::pressed, this, &NewProjectSettings::HandleNextButton);
}
void NewProjectSettings::HandleBackButton()
{
m_projectManagerWindow->ChangeToScreen(ProjectManagerScreen::FirstTimeUse);
}
void NewProjectSettings::HandleNextButton()
{
m_projectManagerWindow->ChangeToScreen(ProjectManagerScreen::GemCatalog);
}
} // namespace O3DE::ProjectManager

@ -0,0 +1,43 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#if !defined(Q_MOC_RUN)
#include <Qt/ScreenWidget.h>
#endif
namespace Ui
{
class NewProjectSettingsClass;
}
namespace O3DE::ProjectManager
{
class NewProjectSettings
: public ScreenWidget
{
public:
explicit NewProjectSettings(ProjectManagerWindow* window);
~NewProjectSettings();
protected:
void ConnectSlotsAndSignals() override;
protected slots:
void HandleBackButton();
void HandleNextButton();
private:
QScopedPointer<Ui::NewProjectSettingsClass> m_ui;
};
} // namespace O3DE::ProjectManager

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>NewProjectSettingsClass</class>
<widget class="QWidget" name="NewProjectSettingsClass">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>880</width>
<height>546</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="projectNameLabel">
<property name="text">
<string>Project Name</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="projectNameLineEdit"/>
</item>
<item>
<widget class="QLabel" name="projectPathLabel">
<property name="text">
<string>Project Path</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="projectPathLineEdit"/>
</item>
<item>
<widget class="QLabel" name="projectTemplateLabel">
<property name="text">
<string>Project Template</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QRadioButton" name="projectTemplateStandardRadioButton">
<property name="text">
<string>Standard (Recommened)</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="projectTemplateStandardEmptyButton">
<property name="text">
<string>Empty</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="backButton">
<property name="text">
<string>Back</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="nextButton">
<property name="text">
<string>Next</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,106 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Qt/ProjectManagerWindow.h>
#include <ScreenFactory.h>
#include <AzQtComponents/Components/StyleManager.h>
#include <AzCore/IO/Path/Path.h>
#include <QDir>
#include <Qt/ui_ProjectManagerWindow.h>
namespace O3DE::ProjectManager
{
ProjectManagerWindow::ProjectManagerWindow(QWidget* parent, const AZ::IO::PathView& engineRootPath)
: QMainWindow(parent)
, m_ui(new Ui::ProjectManagerWindowClass())
{
m_ui->setupUi(this);
ConnectSlotsAndSignals();
QDir rootDir = QString::fromUtf8(engineRootPath.Native().data(), aznumeric_cast<int>(engineRootPath.Native().size()));
const auto pathOnDisk = rootDir.absoluteFilePath("Code/Tools/ProjectManager/Resources");
const auto qrcPath = QStringLiteral(":/ProjectManagerWindow");
AzQtComponents::StyleManager::addSearchPaths("projectmanagerwindow", pathOnDisk, qrcPath, engineRootPath);
AzQtComponents::StyleManager::setStyleSheet(this, QStringLiteral("projectlauncherwindow:ProjectManagerWindow.qss"));
BuildScreens();
ChangeToScreen(ProjectManagerScreen::FirstTimeUse);
}
ProjectManagerWindow::~ProjectManagerWindow()
{
}
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);
}
void ProjectManagerWindow::HandleEngineMenu()
{
ChangeToScreen(ProjectManagerScreen::EngineSettings);
}
} // namespace O3DE::ProjectManager

@ -12,7 +12,10 @@
#pragma once
#if !defined(Q_MOC_RUN)
#include <ScreenDefs.h>
#include <QMainWindow>
#include <QStackedWidget>
#include <AzCore/IO/Path/Path_fwd.h>
#endif
@ -22,17 +25,33 @@ namespace Ui
class ProjectManagerWindowClass;
}
namespace ProjectManager
namespace O3DE::ProjectManager
{
class ProjectManagerWindow : public QMainWindow
class ProjectManagerWindow
: public QMainWindow
{
Q_OBJECT
public:
explicit ProjectManagerWindow(QWidget* parent, const AZ::IO::PathView& engineRootPath);
~ProjectManagerWindow();
void BuildScreens();
QStackedWidget* GetScreenStack();
public slots:
void ChangeToScreen(ProjectManagerScreen screen);
void ResetScreen(ProjectManagerScreen screen);
protected:
void ConnectSlotsAndSignals();
protected slots:
void HandleProjectsMenu();
void HandleEngineMenu();
private:
QScopedPointer<Ui::ProjectManagerWindowClass> m_ui;
};
} // namespace ProjectManager
} // namespace O3DE::ProjectManager

@ -13,8 +13,12 @@
<property name="windowTitle">
<string>O3DE Project Manager</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout"/>
<widget class="QWidget" name="centralWidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QStackedWidget" name="stackedScreens"/>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
@ -30,7 +34,7 @@
<pointsize>16</pointsize>
</font>
</property>
<widget class="QMenu" name="menuIcon">
<widget class="QMenu" name="iconMenu">
<property name="title">
<string>Icon</string>
</property>
@ -39,19 +43,19 @@
<normaloff>:/Resources/o3de_editor.ico</normaloff>:/Resources/o3de_editor.ico</iconset>
</property>
</widget>
<widget class="QMenu" name="menuProjects">
<widget class="QMenu" name="projectsMenu">
<property name="title">
<string>Projects</string>
</property>
</widget>
<widget class="QMenu" name="menuSettings">
<widget class="QMenu" name="engineMenu">
<property name="title">
<string>Engine</string>
</property>
</widget>
<addaction name="menuIcon"/>
<addaction name="menuProjects"/>
<addaction name="menuSettings"/>
<addaction name="iconMenu"/>
<addaction name="projectsMenu"/>
<addaction name="engineMenu"/>
</widget>
</widget>
<resources>

@ -0,0 +1,42 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Qt/ProjectSettings.h>
#include <Qt/ui_ProjectSettings.h>
namespace O3DE::ProjectManager
{
ProjectSettings::ProjectSettings(ProjectManagerWindow* window)
: ScreenWidget(window)
, m_ui(new Ui::ProjectSettingsClass())
{
m_ui->setupUi(this);
ConnectSlotsAndSignals();
}
ProjectSettings::~ProjectSettings()
{
}
void ProjectSettings::ConnectSlotsAndSignals()
{
QObject::connect(m_ui->gemsButton, &QPushButton::pressed, this, &ProjectSettings::HandleGemsButton);
}
void ProjectSettings::HandleGemsButton()
{
m_projectManagerWindow->ChangeToScreen(ProjectManagerScreen::GemCatalog);
}
} // namespace O3DE::ProjectManager

@ -0,0 +1,42 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#if !defined(Q_MOC_RUN)
#include <Qt/ScreenWidget.h>
#endif
namespace Ui
{
class ProjectSettingsClass;
}
namespace O3DE::ProjectManager
{
class ProjectSettings
: public ScreenWidget
{
public:
explicit ProjectSettings(ProjectManagerWindow* window);
~ProjectSettings();
protected:
void ConnectSlotsAndSignals() override;
protected slots:
void HandleGemsButton();
private:
QScopedPointer<Ui::ProjectSettingsClass> m_ui;
};
} // namespace O3DE::ProjectManager

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ProjectSettingsClass</class>
<widget class="QWidget" name="ProjectSettingsClass">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>782</width>
<height>579</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="projectSettingsButton">
<property name="text">
<string>Project Settings</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="gemsButton">
<property name="text">
<string>Gems</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>761</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Project Name</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit"/>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Project Location</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_2"/>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Project Image Location</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_3"/>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>Project Background Image Location</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_4"/>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,52 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Qt/ProjectsHome.h>
#include <Qt/ui_ProjectsHome.h>
namespace O3DE::ProjectManager
{
ProjectsHome::ProjectsHome(ProjectManagerWindow* window)
: ScreenWidget(window)
, m_ui(new Ui::ProjectsHomeClass())
{
m_ui->setupUi(this);
ConnectSlotsAndSignals();
}
ProjectsHome::~ProjectsHome()
{
}
void ProjectsHome::ConnectSlotsAndSignals()
{
QObject::connect(m_ui->newProjectButton, &QPushButton::pressed, this, &ProjectsHome::HandleNewProjectButton);
QObject::connect(m_ui->addProjectButton, &QPushButton::pressed, this, &ProjectsHome::HandleAddProjectButton);
QObject::connect(m_ui->editProjectButton, &QPushButton::pressed, this, &ProjectsHome::HandleEditProjectButton);
}
void ProjectsHome::HandleNewProjectButton()
{
m_projectManagerWindow->ChangeToScreen(ProjectManagerScreen::NewProjectSettings);
}
void ProjectsHome::HandleAddProjectButton()
{
//Do nothing for now
}
void ProjectsHome::HandleEditProjectButton()
{
m_projectManagerWindow->ChangeToScreen(ProjectManagerScreen::ProjectSettings);
}
} // namespace O3DE::ProjectManager

@ -0,0 +1,45 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#if !defined(Q_MOC_RUN)
#include <Qt/ScreenWidget.h>
#endif
namespace Ui
{
class ProjectsHomeClass;
}
namespace O3DE::ProjectManager
{
class ProjectsHome
: public ScreenWidget
{
public:
explicit ProjectsHome(ProjectManagerWindow* window);
~ProjectsHome();
protected:
void ConnectSlotsAndSignals() override;
protected slots:
void HandleNewProjectButton();
void HandleAddProjectButton();
void HandleEditProjectButton();
private:
QScopedPointer<Ui::ProjectsHomeClass> m_ui;
};
} // namespace O3DE::ProjectManager

@ -0,0 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ProjectsHomeClass</class>
<widget class="QWidget" name="ProjectsHomeClass">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>826</width>
<height>585</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>My Projects</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="currentProjectButton">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="newProjectButton">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../project_manager.qrc">
<normaloff>:/Resources/Add.svg</normaloff>:/Resources/Add.svg</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addProjectButton">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../project_manager.qrc">
<normaloff>:/Resources/Select_Folder.svg</normaloff>:/Resources/Select_Folder.svg</iconset>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QToolButton" name="editProjectButton">
<property name="text">
<string>Edit Project</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Open a Project</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources>
<include location="../project_manager.qrc"/>
</resources>
<connections/>
</ui>

@ -0,0 +1,38 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#if !defined(Q_MOC_RUN)
#include <Qt/ProjectManagerWindow.h>
#include <QWidget>
#endif
namespace O3DE::ProjectManager
{
class ScreenWidget
: public QWidget
{
public:
explicit ScreenWidget(ProjectManagerWindow* window)
: QWidget(window->GetScreenStack())
, m_projectManagerWindow(window)
{
}
protected:
virtual void ConnectSlotsAndSignals() = 0;
ProjectManagerWindow* m_projectManagerWindow;
};
} // namespace O3DE::ProjectManager

@ -9,23 +9,17 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#include <Qt/FirstTimeUse.h>
#include <Qt/ui_FirstTimeUse.h>
namespace ProjectManager
namespace O3DE::ProjectManager
{
FirstTimeUse::FirstTimeUse(QWidget* parent)
: QWidget(parent)
, m_ui(new Ui::FirstTimeUseClass())
enum class ProjectManagerScreen
{
m_ui->setupUi(this);
}
FirstTimeUse::~FirstTimeUse()
{
}
//#include <Qt/moc_FirstTimeUse.cpp>
} // namespace ProjectManager
FirstTimeUse,
NewProjectSettings,
GemCatalog,
ProjectsHome,
ProjectSettings,
EngineSettings
};
} // namespace O3DE::ProjectManager

@ -0,0 +1,43 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <ScreenFactory.h>
#include <Qt/FirstTimeUse.h>
#include <Qt/NewProjectSettings.h>
#include <Qt/GemCatalog.h>
#include <Qt/ProjectsHome.h>
#include <Qt/ProjectSettings.h>
#include <Qt/EngineSettings.h>
namespace O3DE::ProjectManager
{
QWidget* BuildScreen(ProjectManagerWindow* window, ProjectManagerScreen screen)
{
switch(screen)
{
case (ProjectManagerScreen::FirstTimeUse):
return new FirstTimeUse(window);
case (ProjectManagerScreen::NewProjectSettings):
return new NewProjectSettings(window);
case (ProjectManagerScreen::GemCatalog):
return new GemCatalog(window);
case (ProjectManagerScreen::ProjectsHome):
return new ProjectsHome(window);
case (ProjectManagerScreen::ProjectSettings):
return new ProjectSettings(window);
case (ProjectManagerScreen::EngineSettings):
return new EngineSettings(window);
default:
return new QWidget(window->GetScreenStack());
}
}
} // namespace O3DE::ProjectManager

@ -0,0 +1,24 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#include <ScreenDefs.h>
#include <Qt/ProjectManagerWindow.h>
#include <QWidget>
namespace O3DE::ProjectManager
{
QWidget* BuildScreen(ProjectManagerWindow* window, ProjectManagerScreen screen);
} // namespace O3DE::ProjectManager

@ -48,7 +48,7 @@ int main(int argc, char* argv[])
AzQtComponents::StyleManager styleManager(&app);
styleManager.initialize(&app, engineRootPath);
ProjectManager::ProjectManagerWindow window(nullptr, engineRootPath);
O3DE::ProjectManager::ProjectManagerWindow window(nullptr, engineRootPath);
window.show();
return app.exec();

Loading…
Cancel
Save