Merge pull request #1477 from aws-lumberyard-dev/LYN-2509b

Cherry picked from development
main
jjjoness 5 years ago committed by GitHub
commit 0aad6ad08d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -17,10 +17,7 @@
// Qt // Qt
#include <QtWidgets/QPushButton> #include <QtWidgets/QPushButton>
#include <QFileDialog>
#include <QMessageBox>
#include <QTimer> #include <QTimer>
#include <QToolButton>
// Editor // Editor
#include "NewTerrainDialog.h" #include "NewTerrainDialog.h"
@ -33,33 +30,11 @@ AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
// Folder in which levels are stored // Folder in which levels are stored
static const char kNewLevelDialog_LevelsFolder[] = "Levels"; static const char kNewLevelDialog_LevelsFolder[] = "Levels";
class LevelFolderValidator : public QValidator
{
public:
LevelFolderValidator(QObject* parent)
: QValidator(parent)
{
m_parentDialog = qobject_cast<CNewLevelDialog*>(parent);
}
QValidator::State validate([[maybe_unused]] QString& input, [[maybe_unused]] int& pos) const override
{
if (m_parentDialog->ValidateLevel())
{
return QValidator::Acceptable;
}
return QValidator::Intermediate;
}
private:
CNewLevelDialog* m_parentDialog;
};
// CNewLevelDialog dialog // CNewLevelDialog dialog
CNewLevelDialog::CNewLevelDialog(QWidget* pParent /*=NULL*/) CNewLevelDialog::CNewLevelDialog(QWidget* pParent /*=NULL*/)
: QDialog(pParent) : QDialog(pParent)
, m_ilevelFolders(0)
, m_bUpdate(false) , m_bUpdate(false)
, ui(new Ui::CNewLevelDialog) , ui(new Ui::CNewLevelDialog)
, m_initialized(false) , m_initialized(false)
@ -68,70 +43,46 @@ CNewLevelDialog::CNewLevelDialog(QWidget* pParent /*=NULL*/)
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
setWindowTitle(tr("New Level")); setWindowTitle(tr("New Level"));
setMaximumSize(QSize(430, 180)); setMaximumSize(QSize(320, 280));
adjustSize(); adjustSize();
m_bIsResize = false; // Default level folder is root (Levels/)
m_ilevelFolders = 0;
ui->TITLE->setText(tr("Assign a name and location to the new level.")); m_bIsResize = false;
ui->STATIC1->setText(tr("Location:"));
ui->STATIC2->setText(tr("Name:"));
// Level name only supports ASCII characters // Level name only supports ASCII characters
QRegExp rx("[_a-zA-Z0-9-]+"); QRegExp rx("[_a-zA-Z0-9-]+");
QValidator* validator = new QRegExpValidator(rx, this); QValidator* validator = new QRegExpValidator(rx, this);
ui->LEVEL->setValidator(validator); ui->LEVEL->setValidator(validator);
validator = new LevelFolderValidator(this); connect(ui->LEVEL_FOLDERS, SIGNAL(activated(int)), this, SLOT(OnCbnSelendokLevelFolders()));
ui->LEVEL_FOLDERS->lineEdit()->setValidator(validator);
ui->LEVEL_FOLDERS->setErrorToolTip(
QString("The location must be a folder underneath the current project's %1 folder. (%2)")
.arg(kNewLevelDialog_LevelsFolder)
.arg(GetLevelsFolder()));
ui->LEVEL_FOLDERS->setClearButtonEnabled(true);
QToolButton* clearButton = AzQtComponents::LineEdit::getClearButton(ui->LEVEL_FOLDERS->lineEdit());
assert(clearButton);
connect(clearButton, &QToolButton::clicked, this, &CNewLevelDialog::OnClearButtonClicked);
connect(ui->LEVEL_FOLDERS->lineEdit(), &QLineEdit::textEdited, this, &CNewLevelDialog::OnLevelNameChange);
connect(ui->LEVEL_FOLDERS, &AzQtComponents::BrowseEdit::attachedButtonTriggered, this, &CNewLevelDialog::PopupAssetPicker);
connect(ui->LEVEL, &QLineEdit::textChanged, this, &CNewLevelDialog::OnLevelNameChange); connect(ui->LEVEL, &QLineEdit::textChanged, this, &CNewLevelDialog::OnLevelNameChange);
m_levelFolders = GetLevelsFolder();
m_level = "";
// First of all, keyboard focus is related to widget tab order, and the default tab order is based on the order in which // First of all, keyboard focus is related to widget tab order, and the default tab order is based on the order in which
// widgets are constructed. Therefore, creating more widgets changes the keyboard focus. That is why setFocus() is called last. // widgets are constructed. Therefore, creating more widgets changes the keyboard focus. That is why setFocus() is called last.
// Secondly, using singleShot() allows setFocus() slot of the QLineEdit instance to be invoked right after the event system // Secondly, using singleShot() allows setFocus() slot of the QLineEdit instance to be invoked right after the event system
// is ready to do so. Therefore, it is better to use singleShot() than directly call setFocus(). // is ready to do so. Therefore, it is better to use singleShot() than directly call setFocus().
QTimer::singleShot(0, ui->LEVEL, SLOT(OnStartup())); QTimer::singleShot(0, ui->LEVEL, SLOT(setFocus()));
ReloadLevelFolder();
} }
CNewLevelDialog::~CNewLevelDialog() CNewLevelDialog::~CNewLevelDialog()
{ {
} }
void CNewLevelDialog::OnStartup()
{
UpdateData(false);
setFocus();
}
void CNewLevelDialog::UpdateData(bool fromUi) void CNewLevelDialog::UpdateData(bool fromUi)
{ {
if (fromUi) if (fromUi)
{ {
m_level = ui->LEVEL->text(); m_level = ui->LEVEL->text();
m_levelFolders = ui->LEVEL_FOLDERS->text(); m_levelFolders = ui->LEVEL_FOLDERS->currentText();
m_ilevelFolders = ui->LEVEL_FOLDERS->currentIndex();
} }
else else
{ {
ui->LEVEL->setText(m_level); ui->LEVEL->setText(m_level);
ui->LEVEL_FOLDERS->lineEdit()->setText(m_levelFolders); ui->LEVEL_FOLDERS->setCurrentText(m_levelFolders);
ui->LEVEL_FOLDERS->setCurrentIndex(m_ilevelFolders);
} }
} }
@ -139,7 +90,7 @@ void CNewLevelDialog::UpdateData(bool fromUi)
void CNewLevelDialog::OnInitDialog() void CNewLevelDialog::OnInitDialog()
{ {
ReloadLevelFolder(); ReloadLevelFolders();
// Disable OK until some text is entered // Disable OK until some text is entered
if (QPushButton* button = ui->buttonBox->button(QDialogButtonBox::Ok)) if (QPushButton* button = ui->buttonBox->button(QDialogButtonBox::Ok))
@ -153,67 +104,55 @@ void CNewLevelDialog::OnInitDialog()
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
void CNewLevelDialog::ReloadLevelFolder() void CNewLevelDialog::ReloadLevelFolders()
{ {
m_itemFolders.clear(); QString levelsFolder = QString(Path::GetEditingGameDataFolder().c_str()) + "/" + kNewLevelDialog_LevelsFolder;
ui->LEVEL_FOLDERS->lineEdit()->clear();
ui->LEVEL_FOLDERS->setText(QString(kNewLevelDialog_LevelsFolder) + '/');
}
QString CNewLevelDialog::GetLevelsFolder() const m_itemFolders.clear();
{ ui->LEVEL_FOLDERS->clear();
QDir projectDir = QDir(Path::GetEditingGameDataFolder().c_str()); ui->LEVEL_FOLDERS->addItem(QString(kNewLevelDialog_LevelsFolder) + '/');
QDir projectLevelsDir = QDir(QStringLiteral("%1/%2").arg(projectDir.absolutePath()).arg(kNewLevelDialog_LevelsFolder)); ReloadLevelFoldersRec(levelsFolder);
return projectLevelsDir.absolutePath();
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
QString CNewLevelDialog::GetLevel() const void CNewLevelDialog::ReloadLevelFoldersRec(const QString& currentFolder)
{ {
QString output = m_level; QDir dir(currentFolder);
QDir projectLevelsDir = QDir(GetLevelsFolder()); QFileInfoList infoList = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
if (!m_levelFolders.isEmpty()) foreach(const QFileInfo &fi, infoList)
{ {
output = m_levelFolders + "/" + m_level; m_itemFolders.push_back(fi.baseName());
ui->LEVEL_FOLDERS->addItem(QString(kNewLevelDialog_LevelsFolder) + '/' + fi.baseName());
} }
QString relativePath = projectLevelsDir.relativeFilePath(output);
return relativePath;
} }
bool CNewLevelDialog::ValidateLevel() //////////////////////////////////////////////////////////////////////////
QString CNewLevelDialog::GetLevel() const
{ {
// Check that the selected folder is in or below the project/LEVELS folder. QString output = m_level;
QDir projectLevelsDir = QDir(GetLevelsFolder());
QString selectedFolder = ui->LEVEL_FOLDERS->text();
QString absolutePath = QDir::cleanPath(projectLevelsDir.absoluteFilePath(selectedFolder));
QString relativePath = projectLevelsDir.relativeFilePath(absolutePath);
// Prevent saving to a different drive. if (m_itemFolders.size() > 0 && m_ilevelFolders > 0)
if (projectLevelsDir.absolutePath()[0] != absolutePath[0])
{ {
return false; output = m_itemFolders[m_ilevelFolders - 1] + "/" + m_level;
} }
if (relativePath.startsWith("..")) return output;
{
return false;
} }
return true; //////////////////////////////////////////////////////////////////////////
void CNewLevelDialog::OnCbnSelendokLevelFolders()
{
UpdateData();
} }
void CNewLevelDialog::OnLevelNameChange() void CNewLevelDialog::OnLevelNameChange()
{ {
UpdateData(true); m_level = ui->LEVEL->text();
// QRegExpValidator means the string will always be valid as long as it's not empty: // QRegExpValidator means the string will always be valid as long as it's not empty:
const bool valid = !m_level.isEmpty() && ValidateLevel(); const bool valid = !m_level.isEmpty();
// Use the validity to dynamically change the Ok button's enabled state // Use the validity to dynamically change the Ok button's enabled state
if (QPushButton* button = ui->buttonBox->button(QDialogButtonBox::Ok)) if (QPushButton* button = ui->buttonBox->button(QDialogButtonBox::Ok))
@ -222,24 +161,6 @@ void CNewLevelDialog::OnLevelNameChange()
} }
} }
void CNewLevelDialog::OnClearButtonClicked()
{
ui->LEVEL_FOLDERS->lineEdit()->setText(GetLevelsFolder());
UpdateData(true);
}
void CNewLevelDialog::PopupAssetPicker()
{
QString newPath = QFileDialog::getExistingDirectory(nullptr, QObject::tr("Choose Destination Folder"), GetLevelsFolder());
if (!newPath.isEmpty())
{
ui->LEVEL_FOLDERS->setText(newPath);
OnLevelNameChange();
}
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
void CNewLevelDialog::IsResize(bool bIsResize) void CNewLevelDialog::IsResize(bool bIsResize)
{ {

@ -34,7 +34,6 @@
#include <vector> #include <vector>
#include <QAbstractButton>
#include <QDialog> #include <QDialog>
#endif #endif
@ -51,29 +50,28 @@ public:
CNewLevelDialog(QWidget* pParent = nullptr); // standard constructor CNewLevelDialog(QWidget* pParent = nullptr); // standard constructor
~CNewLevelDialog(); ~CNewLevelDialog();
QString GetLevel() const; QString GetLevel() const;
void IsResize(bool bIsResize); void IsResize(bool bIsResize);
bool ValidateLevel();
protected: protected:
void UpdateData(bool fromUi = true); void UpdateData(bool fromUi = true);
void OnInitDialog(); void OnInitDialog();
void ReloadLevelFolder(); void ReloadLevelFolders();
void ReloadLevelFoldersRec(const QString& currentFolder);
void showEvent(QShowEvent* event); void showEvent(QShowEvent* event);
QString GetLevelsFolder() const;
protected slots: protected slots:
void OnCbnSelendokLevelFolders();
void OnLevelNameChange(); void OnLevelNameChange();
void OnClearButtonClicked();
void PopupAssetPicker();
void OnStartup();
public: public:
QString m_level; QString m_level;
QString m_levelFolders; QString m_levelFolders;
int m_ilevelFolders;
bool m_bIsResize; bool m_bIsResize;
bool m_bUpdate; bool m_bUpdate;

@ -6,59 +6,30 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>430</width> <width>320</width>
<height>180</height> <height>280</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QGridLayout" name="gridLayout">
<item> <item row="1" column="0" colspan="2">
<spacer name="topVerticalSpacer"> <widget class="QGroupBox" name="PLACEHOLDER_TRN">
<property name="orientation"> <layout class="QFormLayout" name="formLayout_2">
<enum>Qt::Vertical</enum> <property name="fieldGrowthPolicy">
</property> <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="TITLE">
<property name="text">
<string>Assign a name and location to the new level.</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property> </property>
</layout>
</widget> </widget>
</item> </item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2"> <item row="0" column="0" colspan="2">
<widget class="QGroupBox" name="STATIC_GROUP1"> <widget class="QGroupBox" name="STATIC_GROUP1">
<property name="styleSheet"> <property name="title">
<string notr="true">border: 0px;</string> <string>Level</string>
</property> </property>
<layout class="QFormLayout" name="formLayout"> <layout class="QFormLayout" name="formLayout">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="STATIC2"> <widget class="QLabel" name="STATIC2">
<property name="text"> <property name="text">
<string>Name</string> <string>Name:</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
@ -77,14 +48,8 @@
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="STATIC1"> <widget class="QLabel" name="STATIC1">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text"> <property name="text">
<string>Location</string> <string>Folder:</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
@ -95,28 +60,12 @@
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="AzQtComponents::BrowseEdit" name="LEVEL_FOLDERS" native="true"> <widget class="QComboBox" name="LEVEL_FOLDERS"/>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>
</item> </item>
</layout> <item row="2" column="0" colspan="2">
</item>
<item>
<spacer name="verticalSpacer2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</spacer>
</item>
<item row="1" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons"> <property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
@ -125,14 +74,6 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<customwidgets>
<customwidget>
<class>AzQtComponents::BrowseEdit</class>
<extends>QWidget</extends>
<header location="global">AzQtComponents/Components/Widgets/BrowseEdit.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/> <resources/>
<connections> <connections>
<connection> <connection>

@ -208,22 +208,9 @@ WelcomeScreenDialog QLabel
margin: 0; margin: 0;
} }
WelcomeScreenDialog QLabel#titleLabel WelcomeScreenDialog QLabel#currentProjectLabel
{ {
font-size: 22px; margin-top: 10px;
line-height: 32px;
}
WelcomeScreenDialog QLabel#bodyLabel
{
font-size: 14px;
line-height: 20px;
}
WelcomeScreenDialog QLabel[fontStyle="sectionTitle"], QLabel#titleLabel[fontStyle="sectionTitle"], QLabel#documentationLink
{
font-size: 16px;
line-height: 24px;
} }
WelcomeScreenDialog QPushButton WelcomeScreenDialog QPushButton
@ -232,36 +219,20 @@ WelcomeScreenDialog QPushButton
line-height: 16px; line-height: 16px;
} }
WelcomeScreenDialog QFrame#viewContainer
{
background-color: transparent;
}
WelcomeScreenDialog QFrame#viewContainer[articleStyle="pinned"]
{
background: rgba(180,139,255,5%);
border: 1px solid #B48BFF;
box-shadow: 0 0 4px 0 rgba(0,0,0,50%);
}
WelcomeScreenDialog QWidget#articleViewContainerRoot WelcomeScreenDialog QWidget#articleViewContainerRoot
{ {
background: #111111; background: #444444;
} }
WelcomeScreenDialog QScrollArea#previewArea WelcomeScreenDialog QWidget#levelViewFTUEContainer
{ {
background-color: transparent; background: #282828;
} }
WelcomeScreenDialog QWidget#articleViewContents QTableWidget#recentLevelTable::item {
{ background-color: rgb(64,64,64);
background-color: transparent; margin-bottom: 4px;
} margin-top: 4px;
WelcomeScreenDialog QFrame#imageFrame
{
background-color: transparent;
} }
/* Particle Editor */ /* Particle Editor */

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:263e95489560dac6e5944ef3caba13e598f83ddead324b943ad7735ba015e1a9
size 70727

@ -15,7 +15,8 @@
#include "WelcomeScreenDialog.h" #include "WelcomeScreenDialog.h"
// Qt // Qt
#include <QStringListModel> #include <QTableWidget>
#include <QTableWidgetItem>
#include <QToolTip> #include <QToolTip>
#include <QMenu> #include <QMenu>
#include <QDesktopServices> #include <QDesktopServices>
@ -24,6 +25,7 @@
#include <QScreen> #include <QScreen>
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QTimer> #include <QTimer>
#include <QDateTime>
#include <AzCore/Utils/Utils.h> #include <AzCore/Utils/Utils.h>
@ -74,65 +76,39 @@ static int GetSmallestScreenHeight()
WelcomeScreenDialog::WelcomeScreenDialog(QWidget* pParent) WelcomeScreenDialog::WelcomeScreenDialog(QWidget* pParent)
: QDialog(new WindowDecorationWrapper(WindowDecorationWrapper::OptionAutoAttach | WindowDecorationWrapper::OptionAutoTitleBarButtons, pParent), Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowTitleHint) : QDialog(new WindowDecorationWrapper(WindowDecorationWrapper::OptionAutoAttach | WindowDecorationWrapper::OptionAutoTitleBarButtons, pParent), Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowTitleHint)
, ui(new Ui::WelcomeScreenDialog) , ui(new Ui::WelcomeScreenDialog)
, m_pRecentListModel(new QStringListModel(this))
, m_pRecentList(nullptr) , m_pRecentList(nullptr)
{ {
ui->setupUi(this); ui->setupUi(this);
// Make our welcome screen checkboxes appear as toggle switches ui->recentLevelTable->setColumnCount(3);
AzQtComponents::CheckBox::applyToggleSwitchStyle(ui->autoLoadLevel); ui->recentLevelTable->setMouseTracking(true);
AzQtComponents::CheckBox::applyToggleSwitchStyle(ui->showOnStartup); ui->recentLevelTable->setContextMenuPolicy(Qt::CustomContextMenu);
ui->recentLevelTable->horizontalHeader()->hide();
ui->recentLevelTable->verticalHeader()->hide();
ui->recentLevelTable->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->recentLevelTable->setSelectionMode(QAbstractItemView::SingleSelection);
ui->recentLevelTable->setIconSize(QSize(20, 20));
installEventFilter(this);
ui->autoLoadLevel->setChecked(gSettings.bAutoloadLastLevelAtStartup);
ui->showOnStartup->setChecked(!gSettings.bShowDashboardAtStartup);
ui->recentLevelList->setModel(m_pRecentListModel);
ui->recentLevelList->setMouseTracking(true);
ui->recentLevelList->setContextMenuPolicy(Qt::CustomContextMenu);
auto currentProjectButtonMenu = new QMenu();
ui->currentProjectButton->setMenu(currentProjectButtonMenu);
auto projectName = AZ::Utils::GetProjectName(); auto projectName = AZ::Utils::GetProjectName();
ui->currentProjectButton->setText(projectName.c_str()); ui->currentProjectName->setText(projectName.c_str());
ui->currentProjectButton->adjustSize();
ui->currentProjectButton->setMinimumWidth(ui->currentProjectButton->width() + 40); ui->newLevelButton->setDefault(true);
ui->documentationLink->setCursor(Qt::PointingHandCursor); // Hide these buttons until the new functionality is added
ui->documentationLink->installEventFilter(this); ui->gridButton->hide();
ui->objectListButton->hide();
ui->switchProjectButton->hide();
connect(ui->recentLevelList, &QWidget::customContextMenuRequested, this, &WelcomeScreenDialog::OnShowContextMenu); connect(ui->recentLevelTable, &QWidget::customContextMenuRequested, this, &WelcomeScreenDialog::OnShowContextMenu);
connect(ui->recentLevelList, &QListView::entered, this, &WelcomeScreenDialog::OnShowToolTip); connect(ui->recentLevelTable, &QTableWidget::entered, this, &WelcomeScreenDialog::OnShowToolTip);
connect(ui->recentLevelList, &QListView::clicked, this, &WelcomeScreenDialog::OnRecentLevelListItemClicked); connect(ui->recentLevelTable, &QTableWidget::clicked, this, &WelcomeScreenDialog::OnRecentLevelTableItemClicked);
connect(ui->newLevelButton, &QPushButton::clicked, this, &WelcomeScreenDialog::OnNewLevelBtnClicked); connect(ui->newLevelButton, &QPushButton::clicked, this, &WelcomeScreenDialog::OnNewLevelBtnClicked);
connect(ui->levelFileLabel, &QLabel::linkActivated, this, &WelcomeScreenDialog::OnNewLevelLabelClicked);
connect(ui->openLevelButton, &QPushButton::clicked, this, &WelcomeScreenDialog::OnOpenLevelBtnClicked); connect(ui->openLevelButton, &QPushButton::clicked, this, &WelcomeScreenDialog::OnOpenLevelBtnClicked);
connect(ui->newSliceButton, &QPushButton::clicked, this, &WelcomeScreenDialog::OnNewSliceBtnClicked);
connect(ui->openSliceButton, &QPushButton::clicked, this, &WelcomeScreenDialog::OnOpenSliceBtnClicked);
connect(ui->documentationButton, &QPushButton::clicked, this, &WelcomeScreenDialog::OnDocumentationBtnClicked);
connect(ui->showOnStartup, &QCheckBox::clicked, this, &WelcomeScreenDialog::OnShowOnStartupBtnClicked);
connect(ui->autoLoadLevel, &QCheckBox::clicked, this, &WelcomeScreenDialog::OnAutoLoadLevelBtnClicked);
m_manifest = new News::ResourceManifest(
std::bind(&WelcomeScreenDialog::SyncSuccess, this),
std::bind(&WelcomeScreenDialog::SyncFail, this, std::placeholders::_1),
std::bind(&WelcomeScreenDialog::SyncUpdate, this, std::placeholders::_1, std::placeholders::_2));
m_articleViewContainer = new News::ArticleViewContainer(this, *m_manifest);
connect(m_articleViewContainer, &News::ArticleViewContainer::scrolled,
this, &WelcomeScreenDialog::previewAreaScrolled);
ui->articleViewContainerRoot->layout()->addWidget(m_articleViewContainer);
m_manifest->Sync();
#ifndef ENABLE_SLICE_EDITOR
ui->newSliceButton->hide();
ui->openSliceButton->hide();
#endif
// Adjust the height, if need be // Adjust the height, if need be
// Do it in the constructor so that the WindowDecoratorWrapper handles it correctly // Do it in the constructor so that the WindowDecoratorWrapper handles it correctly
int smallestHeight = GetSmallestScreenHeight(); int smallestHeight = GetSmallestScreenHeight();
@ -153,16 +129,10 @@ WelcomeScreenDialog::WelcomeScreenDialog(QWidget* pParent)
WelcomeScreenDialog::~WelcomeScreenDialog() WelcomeScreenDialog::~WelcomeScreenDialog()
{ {
delete ui; delete ui;
delete m_manifest;
} }
void WelcomeScreenDialog::done(int result) void WelcomeScreenDialog::done(int result)
{ {
if (m_waitingOnAsync)
{
m_manifest->Abort();
}
QDialog::done(result); QDialog::done(result);
} }
@ -173,13 +143,11 @@ const QString& WelcomeScreenDialog::GetLevelPath()
bool WelcomeScreenDialog::eventFilter(QObject *watched, QEvent *event) bool WelcomeScreenDialog::eventFilter(QObject *watched, QEvent *event)
{ {
if (watched == ui->documentationLink) if (event->type() == QEvent::Show)
{ {
if (event->type() == QEvent::MouseButtonRelease) ui->recentLevelTable->horizontalHeader()->resizeSection(0, ui->nameLabel->width());
{ ui->recentLevelTable->horizontalHeader()->resizeSection(1, ui->modifiedLabel->width());
OnDocumentationBtnClicked(false); ui->recentLevelTable->horizontalHeader()->resizeSection(2, ui->typeLabel->width());
return true;
}
} }
return QDialog::eventFilter(watched, event); return QDialog::eventFilter(watched, event);
@ -207,6 +175,8 @@ void WelcomeScreenDialog::SetRecentFileList(RecentFileList* pList)
int nCurDir = sCurDir.length(); int nCurDir = sCurDir.length();
int recentListSize = pList->GetSize(); int recentListSize = pList->GetSize();
int currentRow = 0;
ui->recentLevelTable->setRowCount(recentListSize);
for (int i = 0; i < recentListSize; ++i) for (int i = 0; i < recentListSize; ++i)
{ {
const QString& recentFile = pList->m_arrNames[i]; const QString& recentFile = pList->m_arrNames[i];
@ -218,7 +188,7 @@ void WelcomeScreenDialog::SetRecentFileList(RecentFileList* pList)
if (sCurEntryDir.compare(sCurDir, Qt::CaseInsensitive) == 0) if (sCurEntryDir.compare(sCurDir, Qt::CaseInsensitive) == 0)
{ {
QString fullPath = recentFile; QString fullPath = recentFile;
QString name = Path::GetFileName(fullPath); const QString name = Path::GetFile(fullPath);
Path::ConvertSlashToBackSlash(fullPath); Path::ConvertSlashToBackSlash(fullPath);
fullPath = Path::ToUnixPath(fullPath.toLower()); fullPath = Path::ToUnixPath(fullPath.toLower());
@ -226,18 +196,34 @@ void WelcomeScreenDialog::SetRecentFileList(RecentFileList* pList)
if (fullPath.contains(gamePath)) if (fullPath.contains(gamePath))
{ {
m_pRecentListModel->setStringList(m_pRecentListModel->stringList() << QString(name)); if (gSettings.prefabSystem)
{
QIcon icon;
icon.addFile(QString::fromUtf8(":/Level/level.svg"), QSize(), QIcon::Normal, QIcon::Off);
ui->recentLevelTable->setItem(currentRow, 0, new QTableWidgetItem(icon, name));
}
else
{
ui->recentLevelTable->setItem(currentRow, 0, new QTableWidgetItem(name));
}
QFileInfo file(recentFile);
QDateTime dateTime = file.lastModified();
QString date = QLocale::system().toString(dateTime.date(), QLocale::ShortFormat) + " " +
QLocale::system().toString(dateTime.time(), QLocale::LongFormat);
ui->recentLevelTable->setItem(currentRow, 1, new QTableWidgetItem(date));
ui->recentLevelTable->setItem(currentRow++, 2, new QTableWidgetItem(tr("Level")));
m_levels.push_back(std::make_pair(name, recentFile)); m_levels.push_back(std::make_pair(name, recentFile));
} }
} }
} }
} }
} }
ui->recentLevelTable->setRowCount(currentRow);
ui->recentLevelTable->setMinimumHeight(currentRow * ui->recentLevelTable->verticalHeader()->defaultSectionSize());
ui->recentLevelTable->setMaximumHeight(currentRow * ui->recentLevelTable->verticalHeader()->defaultSectionSize());
ui->levelFileLabel->setVisible(currentRow ? false : true);
ui->recentLevelList->setCurrentIndex(QModelIndex()); ui->recentLevelTable->setCurrentIndex(QModelIndex());
int rowSize = ui->recentLevelList->sizeHintForRow(0) + ui->recentLevelList->spacing() * 2;
ui->recentLevelList->setMinimumHeight(m_pRecentListModel->rowCount() * rowSize);
ui->recentLevelList->setMaximumHeight(m_pRecentListModel->rowCount() * rowSize);
} }
@ -245,7 +231,7 @@ void WelcomeScreenDialog::RemoveLevelEntry(int index)
{ {
TNamePathPair levelPath = m_levels[index]; TNamePathPair levelPath = m_levels[index];
m_pRecentListModel->removeRow(index); ui->recentLevelTable->removeRow(index);
m_levels.erase(m_levels.begin() + index); m_levels.erase(m_levels.begin() + index);
@ -284,21 +270,18 @@ void WelcomeScreenDialog::OnShowToolTip(const QModelIndex& index)
{ {
const QString& fullPath = m_levels[index.row()].second; const QString& fullPath = m_levels[index.row()].second;
//TEMPORARY:Begin This can be put back once the main window is in Qt QToolTip::showText(QCursor::pos(), QString("Open level: %1").arg(fullPath));
//QRect itemRect = ui->recentLevelList->visualRect(index);
QToolTip::showText(QCursor::pos(), QString("Open level: %1").arg(fullPath) /*, ui->recentLevelList, itemRect*/);
//TEMPORARY:END
} }
void WelcomeScreenDialog::OnShowContextMenu(const QPoint& pos) void WelcomeScreenDialog::OnShowContextMenu(const QPoint& pos)
{ {
QModelIndex index = ui->recentLevelList->indexAt(pos); QModelIndex index = ui->recentLevelTable->indexAt(pos);
if (index.isValid()) if (index.isValid())
{ {
QString level = m_pRecentListModel->data(index, 0).toString(); QString level = ui->recentLevelTable->itemAt(pos)->text();
QPoint globalPos = ui->recentLevelList->viewport()->mapToGlobal(pos); QPoint globalPos = ui->recentLevelTable->viewport()->mapToGlobal(pos);
QMenu contextMenu; QMenu contextMenu;
contextMenu.addAction(QString("Remove " + level + " from recent list")); contextMenu.addAction(QString("Remove " + level + " from recent list"));
@ -310,13 +293,16 @@ void WelcomeScreenDialog::OnShowContextMenu(const QPoint& pos)
} }
} }
void WelcomeScreenDialog::OnNewLevelBtnClicked([[maybe_unused]] bool checked) void WelcomeScreenDialog::OnNewLevelBtnClicked([[maybe_unused]] bool checked)
{ {
m_levelPath = "new"; m_levelPath = "new";
accept(); accept();
} }
void WelcomeScreenDialog::OnNewLevelLabelClicked([[maybe_unused]] const QString& path)
{
OnNewLevelBtnClicked(true);
}
void WelcomeScreenDialog::OnOpenLevelBtnClicked([[maybe_unused]] bool checked) void WelcomeScreenDialog::OnOpenLevelBtnClicked([[maybe_unused]] bool checked)
{ {
@ -329,27 +315,7 @@ void WelcomeScreenDialog::OnOpenLevelBtnClicked([[maybe_unused]] bool checked)
} }
} }
void WelcomeScreenDialog::OnNewSliceBtnClicked([[maybe_unused]] bool checked) void WelcomeScreenDialog::OnRecentLevelTableItemClicked(const QModelIndex& modelIndex)
{
m_levelPath = "new slice";
accept();
}
void WelcomeScreenDialog::OnOpenSliceBtnClicked(bool)
{
QString fileName = QFileDialog::getOpenFileName(MainWindow::instance(),
tr("Open Slice"),
Path::GetEditingGameDataFolder().c_str(),
tr("Slice (*.slice)"));
if (!fileName.isEmpty())
{
m_levelPath = fileName;
accept();
}
}
void WelcomeScreenDialog::OnRecentLevelListItemClicked(const QModelIndex& modelIndex)
{ {
int index = modelIndex.row(); int index = modelIndex.row();
@ -365,45 +331,6 @@ void WelcomeScreenDialog::OnCloseBtnClicked([[maybe_unused]] bool checked)
accept(); accept();
} }
void WelcomeScreenDialog::OnAutoLoadLevelBtnClicked(bool checked)
{
gSettings.bAutoloadLastLevelAtStartup = checked;
gSettings.Save();
}
void WelcomeScreenDialog::OnShowOnStartupBtnClicked(bool checked)
{
gSettings.bShowDashboardAtStartup = !checked;
gSettings.Save();
if (gSettings.bShowDashboardAtStartup == false)
{
QMessageBox msgBox(AzToolsFramework::GetActiveWindow());
msgBox.setWindowTitle(QObject::tr("Skip the Welcome dialog on startup"));
msgBox.setText(QObject::tr("You may re-enable the Welcome dialog at any time by going to Edit > Editor Settings > Global Preferences in the menu bar."));
msgBox.exec();
}
}
void WelcomeScreenDialog::OnDocumentationBtnClicked([[maybe_unused]] bool checked)
{
QString webLink = tr("https://aws.amazon.com/lumberyard/support/");
QDesktopServices::openUrl(QUrl(webLink));
}
void WelcomeScreenDialog::SyncFail([[maybe_unused]] News::ErrorCode error)
{
m_articleViewContainer->AddErrorMessage();
m_waitingOnAsync = false;
}
void WelcomeScreenDialog::SyncSuccess()
{
m_articleViewContainer->PopulateArticles();
m_waitingOnAsync = false;
}
void WelcomeScreenDialog::previewAreaScrolled() void WelcomeScreenDialog::previewAreaScrolled()
{ {
//this should only be reported once per session //this should only be reported once per session

@ -52,13 +52,9 @@ private:
Ui::WelcomeScreenDialog* ui; Ui::WelcomeScreenDialog* ui;
QString m_levelPath; QString m_levelPath;
QStringListModel* m_pRecentListModel;
TNameFullPathArray m_levels; TNameFullPathArray m_levels;
RecentFileList* m_pRecentList; RecentFileList* m_pRecentList;
News::ResourceManifest* m_manifest = nullptr;
News::ArticleViewContainer* m_articleViewContainer = nullptr;
const char* m_levelExtension = nullptr; const char* m_levelExtension = nullptr;
bool m_waitingOnAsync = true;
bool m_messageScrollReported = false; bool m_messageScrollReported = false;
void RemoveLevelEntry(int index); void RemoveLevelEntry(int index);
@ -66,19 +62,11 @@ private:
void OnShowToolTip(const QModelIndex& index); void OnShowToolTip(const QModelIndex& index);
void OnShowContextMenu(const QPoint& point); void OnShowContextMenu(const QPoint& point);
void OnNewLevelBtnClicked(bool checked); void OnNewLevelBtnClicked(bool checked);
void OnNewLevelLabelClicked(const QString& checked);
void OnOpenLevelBtnClicked(bool checked); void OnOpenLevelBtnClicked(bool checked);
void OnNewSliceBtnClicked(bool checked); void OnRecentLevelTableItemClicked(const QModelIndex& index);
void OnOpenSliceBtnClicked(bool checked);
void OnRecentLevelListItemClicked(const QModelIndex& index);
void OnGettingStartedBtnClicked(bool checked);
void OnTutorialsBtnClicked(bool checked);
void OnDocumentationBtnClicked(bool checked);
void OnForumsBtnClicked(bool checked);
void OnAutoLoadLevelBtnClicked(bool checked);
void OnShowOnStartupBtnClicked(bool checked);
void OnCloseBtnClicked(bool checked); void OnCloseBtnClicked(bool checked);
void SyncUpdate(const QString& /* message */, News::LogType /* logType */) {}
void SyncFail(News::ErrorCode error); void SyncFail(News::ErrorCode error);
void SyncSuccess(); void SyncSuccess();

@ -1,5 +1,5 @@
<RCC> <RCC>
<qresource prefix="WelcomeScreenDialog"> <qresource prefix="WelcomeScreenDialog">
<file>WelcomeScreenDialogHeader.png</file> <file>DefaultActiveProject.png</file>
</qresource> </qresource>
</RCC> </RCC>

@ -2,12 +2,15 @@
<ui version="4.0"> <ui version="4.0">
<class>WelcomeScreenDialog</class> <class>WelcomeScreenDialog</class>
<widget class="QWidget" name="WelcomeScreenDialog"> <widget class="QWidget" name="WelcomeScreenDialog">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>800</width> <width>945</width>
<height>600</height> <height>639</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -18,21 +21,21 @@
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>800</width> <width>945</width>
<height>600</height> <height>639</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>800</width> <width>945</width>
<height>16777215</height> <height>639</height>
</size> </size>
</property> </property>
<property name="focusPolicy"> <property name="focusPolicy">
<enum>Qt::TabFocus</enum> <enum>Qt::TabFocus</enum>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Welcome to Open 3D Engine</string> <string>Welcome to O3DE</string>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true"/> <string notr="true"/>
@ -54,127 +57,176 @@
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="QWidget" name="projectViewContainer" native="true"> <layout class="QHBoxLayout" name="bodyContainer">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="articleViewContainerRoot" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>183</width>
<height>36</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>16777215</width> <width>183</width>
<height>36</height> <height>16777215</height>
</size> </size>
</property> </property>
<layout class="QHBoxLayout" name="projectViewContainer_layout" stretch="0,0,1,0,0"> <layout class="QVBoxLayout" name="newsContainerLayout">
<property name="spacing"> <property name="spacing">
<number>10</number> <number>0</number>
</property> </property>
<property name="leftMargin"> <property name="leftMargin">
<number>16</number> <number>0</number>
</property> </property>
<property name="topMargin"> <property name="topMargin">
<number>0</number> <number>0</number>
</property> </property>
<property name="rightMargin"> <property name="rightMargin">
<number>12</number> <number>0</number>
</property> </property>
<property name="bottomMargin"> <property name="bottomMargin">
<number>10</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>15</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>10</number>
</property>
<property name="leftMargin">
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="QLabel" name="currentProjectLabel"> <widget class="QLabel" name="currentProjectLabel">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <property name="text">
<string>Current project:</string> <string>Active project</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="currentProjectButton"> <widget class="QLabel" name="activeProjectIcon">
<property name="text">
<string>Current Project Name</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize">
<size>
<width>126</width>
<height>167</height>
</size>
</property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>16777215</width> <width>126</width>
<height>1</height> <height>167</height>
</size> </size>
</property> </property>
<property name="styleSheet"> <property name="text">
<string notr="true">color: &quot;black&quot;</string> <string/>
</property> </property>
<property name="frameShadow"> <property name="pixmap">
<enum>QFrame::Plain</enum> <pixmap resource="WelcomeScreenDialog.qrc">:/WelcomeScreenDialog/DefaultActiveProject.png</pixmap>
</property> </property>
<property name="lineWidth"> <property name="alignment">
<number>0</number> <set>Qt::AlignCenter</set>
</property> </property>
<property name="orientation"> </widget>
<enum>Qt::Horizontal</enum> </item>
<item>
<widget class="QLabel" name="currentProjectName">
<property name="text">
<string>MyGame</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="bodyContainer"> <spacer name="verticalSpacer_3">
<property name="spacing"> <property name="orientation">
<number>0</number> <enum>Qt::Vertical</enum>
</property> </property>
<property name="leftMargin"> <property name="sizeHint" stdset="0">
<number>0</number> <size>
<width>20</width>
<height>40</height>
</size>
</property> </property>
<property name="topMargin"> </spacer>
<number>0</number> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>15</number>
</property> </property>
<property name="rightMargin"> <property name="rightMargin">
<number>0</number> <number>15</number>
</property> </property>
<property name="bottomMargin"> <item>
<number>0</number> <widget class="QPushButton" name="switchProjectButton">
<property name="text">
<string>Switch project...</string>
</property> </property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item> <item>
<widget class="QWidget" name="levelViewFTUEContainer" native="true"> <widget class="QWidget" name="levelViewFTUEContainer" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>762</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>320</width> <width>762</width>
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
@ -183,13 +235,13 @@
<number>0</number> <number>0</number>
</property> </property>
<property name="leftMargin"> <property name="leftMargin">
<number>0</number> <number>20</number>
</property> </property>
<property name="topMargin"> <property name="topMargin">
<number>0</number> <number>0</number>
</property> </property>
<property name="rightMargin"> <property name="rightMargin">
<number>0</number> <number>20</number>
</property> </property>
<property name="bottomMargin"> <property name="bottomMargin">
<number>0</number> <number>0</number>
@ -227,7 +279,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>Open or create a level</string> <string>Recent Files</string>
</property> </property>
<property name="indent"> <property name="indent">
<number>-1</number> <number>-1</number>
@ -255,16 +307,6 @@
<property name="bottomMargin"> <property name="bottomMargin">
<number>0</number> <number>0</number>
</property> </property>
<item>
<widget class="QListView" name="recentLevelList">
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="spacing">
<number>4</number>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@ -310,8 +352,26 @@
</property> </property>
<item> <item>
<widget class="QPushButton" name="newLevelButton"> <widget class="QPushButton" name="newLevelButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>156</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>156</width>
<height>16777215</height>
</size>
</property>
<property name="text"> <property name="text">
<string>New level...</string> <string>Create new...</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -333,228 +393,216 @@
</item> </item>
<item> <item>
<widget class="QPushButton" name="openLevelButton"> <widget class="QPushButton" name="openLevelButton">
<property name="minimumSize">
<size>
<width>156</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>156</width>
<height>16777215</height>
</size>
</property>
<property name="text"> <property name="text">
<string>Open level...</string> <string>Open...</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout>
</widget>
</item>
<item> <item>
<spacer name="verticalSpacer_2"> <spacer name="horizontalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>20</width> <width>40</width>
<height>20</height> <height>20</height>
</size> </size>
</property> </property>
</spacer> </spacer>
</item> </item>
<item> <item>
<widget class="QWidget" name="horizontalWidget_2" native="true"> <widget class="QToolButton" name="objectListButton">
<property name="sizePolicy"> <property name="text">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <string>...</string>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="sliceControlContainer">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property> </property>
<property name="bottomMargin"> <property name="icon">
<number>0</number> <iconset resource="../../../Framework/AzQtComponents/AzQtComponents/Components/resources.qrc">
<normaloff>:/stylesheet/img/UI20/toolbar/Object_list.svg</normaloff>:/stylesheet/img/UI20/toolbar/Object_list.svg</iconset>
</property> </property>
<item> <property name="iconSize">
<widget class="QPushButton" name="newSliceButton"> <size>
<property name="text"> <width>24</width>
<string>New slice...</string> <height>24</height>
</size>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<spacer name="horizontalSpacer_2"> <widget class="QToolButton" name="gridButton">
<property name="orientation"> <property name="text">
<enum>Qt::Horizontal</enum> <string>...</string>
</property> </property>
<property name="sizeType"> <property name="icon">
<enum>QSizePolicy::Fixed</enum> <iconset resource="../../../Framework/AzQtComponents/AzQtComponents/Components/resources.qrc">
<normaloff>:/stylesheet/img/UI20/toolbar/Grid.svg</normaloff>:/stylesheet/img/UI20/toolbar/Grid.svg</iconset>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="iconSize">
<size> <size>
<width>24</width> <width>24</width>
<height>0</height> <height>24</height>
</size> </size>
</property> </property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="openSliceButton">
<property name="text">
<string>Open slice...</string>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="Line" name="line_4"> <spacer name="verticalSpacer_2">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>1</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">color: &quot;black&quot;</string>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Vertical</enum>
</property> </property>
</widget> <property name="sizeType">
</item> <enum>QSizePolicy::Fixed</enum>
<item alignment="Qt::AlignHCenter">
<widget class="QWidget" name="documentationLinkContainer" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>48</height>
</size>
</property> </property>
<property name="maximumSize"> <property name="sizeHint" stdset="0">
<size> <size>
<width>16777215</width> <width>20</width>
<height>48</height> <height>20</height>
</size> </size>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout"> </spacer>
<property name="spacing"> </item>
<number>10</number> <item>
</property> <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="2,2,1">
<property name="leftMargin"> <property name="leftMargin">
<number>0</number> <number>6</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property> </property>
<item> <item>
<widget class="QToolButton" name="documentationButton"> <widget class="QLabel" name="nameLabel">
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text"> <property name="text">
<string>info</string> <string>Name</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/stylesheet/img/UI20/Info.svg</normaloff>:/stylesheet/img/UI20/Info.svg</iconset>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="documentationLink"> <widget class="QLabel" name="modifiedLabel">
<property name="text"> <property name="text">
<string>Documentation and tutorials</string> <string>Last modified</string>
</property> </property>
<property name="class" stdset="0"> </widget>
<string>link</string> </item>
<item>
<widget class="QLabel" name="typeLabel">
<property name="text">
<string>Type</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="Line" name="line_3"> <layout class="QVBoxLayout" name="verticalLayout_7" stretch="0,0,0">
<property name="maximumSize"> <property name="leftMargin">
<size> <number>16</number>
<width>1</width>
<height>16777215</height>
</size>
</property> </property>
<property name="styleSheet"> <property name="topMargin">
<string notr="true">color: &quot;black&quot;</string> <number>16</number>
</property> </property>
<property name="frameShadow"> <property name="rightMargin">
<enum>QFrame::Plain</enum> <number>16</number>
</property> </property>
<property name="lineWidth"> <item>
<number>0</number> <widget class="QLabel" name="levelFileLabel">
<property name="enabled">
<bool>true</bool>
</property> </property>
<property name="orientation"> <property name="sizePolicy">
<enum>Qt::Vertical</enum> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>No level file created yet for this project. &lt;a href=&quot;#&quot;&gt;Create one&lt;/a&gt; now.</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QWidget" name="articleViewContainerRoot" native="true"> <widget class="QTableWidget" name="recentLevelTable">
<property name="minimumSize"> <property name="enabled">
<size> <bool>true</bool>
<width>480</width>
<height>0</height>
</size>
</property> </property>
<layout class="QVBoxLayout" name="newsContainerLayout"> <property name="sizePolicy">
<property name="spacing"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
<number>0</number> <horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<property name="leftMargin"> <property name="styleSheet">
<number>0</number> <string notr="true"/>
</property> </property>
<property name="topMargin"> <property name="horizontalScrollBarPolicy">
<number>0</number> <enum>Qt::ScrollBarAlwaysOff</enum>
</property> </property>
<property name="rightMargin"> <property name="columnCount">
<number>0</number> <number>3</number>
</property>
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>1</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>48</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
<column/>
<column/>
<column/>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property> </property>
<property name="bottomMargin"> <property name="sizeHint" stdset="0">
<number>0</number> <size>
<width>20</width>
<height>40</height>
</size>
</property> </property>
</layout> </spacer>
</widget>
</item> </item>
</layout> </layout>
</item> </item>
<item> <item>
<widget class="Line" name="line"> <widget class="Line" name="line_4">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>16777215</width> <width>16777215</width>
@ -575,69 +623,16 @@
</property> </property>
</widget> </widget>
</item> </item>
<item alignment="Qt::AlignRight"> </layout>
<widget class="QWidget" name="optionsViewContainer" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>36</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>36</height>
</size>
</property>
<layout class="QHBoxLayout" name="optionsViewContainer_layout">
<property name="spacing">
<number>30</number>
</property>
<property name="leftMargin">
<number>16</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>16</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="autoLoadLevel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Auto-load last opened level on startup</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showOnStartup">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Skip this dialog on startup</string>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="WelcomeScreenDialog.qrc"/> <include location="WelcomeScreenDialog.qrc"/>
<include location="../../../Framework/AzQtComponents/AzQtComponents/Components/resources.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:53b846352880d940621b14b1ea9514e0a4c95aa6ead4d00234a98684c061c04f
size 29505
Loading…
Cancel
Save