Cherry picked from development
This commit is contained in:
@@ -15,7 +15,8 @@
|
||||
#include "WelcomeScreenDialog.h"
|
||||
|
||||
// Qt
|
||||
#include <QStringListModel>
|
||||
#include <QTableWidget>
|
||||
#include <QTableWidgetItem>
|
||||
#include <QToolTip>
|
||||
#include <QMenu>
|
||||
#include <QDesktopServices>
|
||||
@@ -24,6 +25,7 @@
|
||||
#include <QScreen>
|
||||
#include <QDesktopWidget>
|
||||
#include <QTimer>
|
||||
#include <QDateTime>
|
||||
|
||||
#include <AzCore/Utils/Utils.h>
|
||||
|
||||
@@ -74,65 +76,39 @@ static int GetSmallestScreenHeight()
|
||||
WelcomeScreenDialog::WelcomeScreenDialog(QWidget* pParent)
|
||||
: QDialog(new WindowDecorationWrapper(WindowDecorationWrapper::OptionAutoAttach | WindowDecorationWrapper::OptionAutoTitleBarButtons, pParent), Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowTitleHint)
|
||||
, ui(new Ui::WelcomeScreenDialog)
|
||||
, m_pRecentListModel(new QStringListModel(this))
|
||||
, m_pRecentList(nullptr)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
// Make our welcome screen checkboxes appear as toggle switches
|
||||
AzQtComponents::CheckBox::applyToggleSwitchStyle(ui->autoLoadLevel);
|
||||
AzQtComponents::CheckBox::applyToggleSwitchStyle(ui->showOnStartup);
|
||||
ui->recentLevelTable->setColumnCount(3);
|
||||
ui->recentLevelTable->setMouseTracking(true);
|
||||
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();
|
||||
ui->currentProjectButton->setText(projectName.c_str());
|
||||
ui->currentProjectButton->adjustSize();
|
||||
ui->currentProjectButton->setMinimumWidth(ui->currentProjectButton->width() + 40);
|
||||
ui->currentProjectName->setText(projectName.c_str());
|
||||
|
||||
ui->documentationLink->setCursor(Qt::PointingHandCursor);
|
||||
ui->documentationLink->installEventFilter(this);
|
||||
ui->newLevelButton->setDefault(true);
|
||||
|
||||
connect(ui->recentLevelList, &QWidget::customContextMenuRequested, this, &WelcomeScreenDialog::OnShowContextMenu);
|
||||
// Hide these buttons until the new functionality is added
|
||||
ui->gridButton->hide();
|
||||
ui->objectListButton->hide();
|
||||
ui->switchProjectButton->hide();
|
||||
|
||||
connect(ui->recentLevelList, &QListView::entered, this, &WelcomeScreenDialog::OnShowToolTip);
|
||||
connect(ui->recentLevelList, &QListView::clicked, this, &WelcomeScreenDialog::OnRecentLevelListItemClicked);
|
||||
connect(ui->recentLevelTable, &QWidget::customContextMenuRequested, this, &WelcomeScreenDialog::OnShowContextMenu);
|
||||
|
||||
connect(ui->recentLevelTable, &QTableWidget::entered, this, &WelcomeScreenDialog::OnShowToolTip);
|
||||
connect(ui->recentLevelTable, &QTableWidget::clicked, this, &WelcomeScreenDialog::OnRecentLevelTableItemClicked);
|
||||
|
||||
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->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
|
||||
// Do it in the constructor so that the WindowDecoratorWrapper handles it correctly
|
||||
int smallestHeight = GetSmallestScreenHeight();
|
||||
@@ -153,16 +129,10 @@ WelcomeScreenDialog::WelcomeScreenDialog(QWidget* pParent)
|
||||
WelcomeScreenDialog::~WelcomeScreenDialog()
|
||||
{
|
||||
delete ui;
|
||||
delete m_manifest;
|
||||
}
|
||||
|
||||
void WelcomeScreenDialog::done(int result)
|
||||
{
|
||||
if (m_waitingOnAsync)
|
||||
{
|
||||
m_manifest->Abort();
|
||||
}
|
||||
|
||||
QDialog::done(result);
|
||||
}
|
||||
|
||||
@@ -173,13 +143,11 @@ const QString& WelcomeScreenDialog::GetLevelPath()
|
||||
|
||||
bool WelcomeScreenDialog::eventFilter(QObject *watched, QEvent *event)
|
||||
{
|
||||
if (watched == ui->documentationLink)
|
||||
if (event->type() == QEvent::Show)
|
||||
{
|
||||
if (event->type() == QEvent::MouseButtonRelease)
|
||||
{
|
||||
OnDocumentationBtnClicked(false);
|
||||
return true;
|
||||
}
|
||||
ui->recentLevelTable->horizontalHeader()->resizeSection(0, ui->nameLabel->width());
|
||||
ui->recentLevelTable->horizontalHeader()->resizeSection(1, ui->modifiedLabel->width());
|
||||
ui->recentLevelTable->horizontalHeader()->resizeSection(2, ui->typeLabel->width());
|
||||
}
|
||||
|
||||
return QDialog::eventFilter(watched, event);
|
||||
@@ -207,7 +175,9 @@ void WelcomeScreenDialog::SetRecentFileList(RecentFileList* pList)
|
||||
int nCurDir = sCurDir.length();
|
||||
|
||||
int recentListSize = pList->GetSize();
|
||||
for (int i = 0; i < recentListSize; ++i)
|
||||
int currentRow = 0;
|
||||
ui->recentLevelTable->setRowCount(recentListSize);
|
||||
for (int i = 0; i < recentListSize; ++i)
|
||||
{
|
||||
const QString& recentFile = pList->m_arrNames[i];
|
||||
if (recentFile.endsWith(m_levelExtension))
|
||||
@@ -218,7 +188,7 @@ void WelcomeScreenDialog::SetRecentFileList(RecentFileList* pList)
|
||||
if (sCurEntryDir.compare(sCurDir, Qt::CaseInsensitive) == 0)
|
||||
{
|
||||
QString fullPath = recentFile;
|
||||
QString name = Path::GetFileName(fullPath);
|
||||
const QString name = Path::GetFile(fullPath);
|
||||
|
||||
Path::ConvertSlashToBackSlash(fullPath);
|
||||
fullPath = Path::ToUnixPath(fullPath.toLower());
|
||||
@@ -226,18 +196,34 @@ void WelcomeScreenDialog::SetRecentFileList(RecentFileList* pList)
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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());
|
||||
int rowSize = ui->recentLevelList->sizeHintForRow(0) + ui->recentLevelList->spacing() * 2;
|
||||
ui->recentLevelList->setMinimumHeight(m_pRecentListModel->rowCount() * rowSize);
|
||||
ui->recentLevelList->setMaximumHeight(m_pRecentListModel->rowCount() * rowSize);
|
||||
ui->recentLevelTable->setCurrentIndex(QModelIndex());
|
||||
}
|
||||
|
||||
|
||||
@@ -245,7 +231,7 @@ void WelcomeScreenDialog::RemoveLevelEntry(int index)
|
||||
{
|
||||
TNamePathPair levelPath = m_levels[index];
|
||||
|
||||
m_pRecentListModel->removeRow(index);
|
||||
ui->recentLevelTable->removeRow(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;
|
||||
|
||||
//TEMPORARY:Begin This can be put back once the main window is in Qt
|
||||
//QRect itemRect = ui->recentLevelList->visualRect(index);
|
||||
QToolTip::showText(QCursor::pos(), QString("Open level: %1").arg(fullPath) /*, ui->recentLevelList, itemRect*/);
|
||||
//TEMPORARY:END
|
||||
QToolTip::showText(QCursor::pos(), QString("Open level: %1").arg(fullPath));
|
||||
}
|
||||
|
||||
|
||||
void WelcomeScreenDialog::OnShowContextMenu(const QPoint& pos)
|
||||
{
|
||||
QModelIndex index = ui->recentLevelList->indexAt(pos);
|
||||
QModelIndex index = ui->recentLevelTable->indexAt(pos);
|
||||
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;
|
||||
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)
|
||||
{
|
||||
m_levelPath = "new";
|
||||
accept();
|
||||
}
|
||||
|
||||
void WelcomeScreenDialog::OnNewLevelLabelClicked([[maybe_unused]] const QString& path)
|
||||
{
|
||||
OnNewLevelBtnClicked(true);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
void WelcomeScreenDialog::OnRecentLevelTableItemClicked(const QModelIndex& modelIndex)
|
||||
{
|
||||
int index = modelIndex.row();
|
||||
|
||||
@@ -365,45 +331,6 @@ void WelcomeScreenDialog::OnCloseBtnClicked([[maybe_unused]] bool checked)
|
||||
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()
|
||||
{
|
||||
//this should only be reported once per session
|
||||
|
||||
Reference in New Issue
Block a user