You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.4 KiB
C++
110 lines
3.4 KiB
C++
/*
|
|
* Copyright (c) Contributors to the Open 3D Engine Project
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*
|
|
*/
|
|
|
|
#include "EditorDefs.h"
|
|
|
|
#include "ErrorDialog.h"
|
|
|
|
|
|
AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
|
|
#include <ui_ErrorDialog.h>
|
|
AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
|
|
|
|
namespace SandboxEditor
|
|
{
|
|
ErrorDialog::ErrorDialog(QWidget* parent)
|
|
: QDialog(parent)
|
|
, m_ui(new Ui::ErrorLogDialog())
|
|
{
|
|
m_ui->setupUi(this);
|
|
connect(m_ui->okButton, &QPushButton::clicked, this, &ErrorDialog::OnOK);
|
|
connect(
|
|
m_ui->messages,
|
|
SIGNAL(itemSelectionChanged()),
|
|
this,
|
|
SLOT(MessageSelectionChanged()));
|
|
}
|
|
|
|
ErrorDialog::~ErrorDialog()
|
|
{
|
|
}
|
|
|
|
void ErrorDialog::OnOK()
|
|
{
|
|
close();
|
|
}
|
|
|
|
void ErrorDialog::AddMessages(MessageType messageType, const AZStd::list<QString>& messages)
|
|
{
|
|
AZ_Assert(m_ui != nullptr, "ErrorDialog's AddMessages cannot be used without a valid UI.");
|
|
for (const QString& message : messages)
|
|
{
|
|
// filter out duplicate messages
|
|
if (m_uniqueStrings.contains(message))
|
|
{
|
|
continue;
|
|
}
|
|
m_uniqueStrings.insert(message);
|
|
|
|
// Attempt to split the message up by newline, so the list of errors can be kept shorter.
|
|
// This returns a QStringList with one element, the original string, if the split fails.
|
|
QStringList messageSplitPerLine = message.split('\n');
|
|
|
|
QStringList messageList;
|
|
|
|
// MessageColumn::MessageType
|
|
messageList << GetMessageTypeString(messageType);
|
|
// MessageColumn::ShortMessage
|
|
messageList << messageSplitPerLine[0];
|
|
// MessageColumn::DetailedMessage
|
|
messageList << message;
|
|
|
|
// Add the message to the tree widget at the root.
|
|
m_ui->messages->insertTopLevelItem(0, new QTreeWidgetItem(messageList));
|
|
}
|
|
}
|
|
|
|
void ErrorDialog::MessageSelectionChanged()
|
|
{
|
|
AZ_Assert(m_ui != nullptr, "ErrorDialog's MessageSelectionChanged cannot be used without a valid UI.");
|
|
AZ_Assert(m_ui->messages != nullptr, "ErrorDialog's MessageSelectionChanged cannot be used without a valid messages QTreeWidget.");
|
|
AZ_Assert(m_ui->details != nullptr, "ErrorDialog's MessageSelectionChanged cannot be used without a valid details QLabel.");
|
|
QList<QTreeWidgetItem*> selectedItem = m_ui->messages->selectedItems();
|
|
|
|
QTreeWidgetItem* firstSelected = !selectedItem.isEmpty() ? selectedItem.first() : nullptr;
|
|
if (firstSelected)
|
|
{
|
|
m_ui->details->setText(firstSelected->text((int)MessageColumn::DetailedMessage));
|
|
}
|
|
}
|
|
|
|
QString ErrorDialog::GetMessageTypeString(MessageType messageType) const
|
|
{
|
|
switch (messageType)
|
|
{
|
|
case ErrorDialog::MessageType::Warning:
|
|
return QObject::tr("Warning");
|
|
case MessageType::Error:
|
|
return QObject::tr("Error");
|
|
default:
|
|
{
|
|
AZ_Warning(
|
|
"ErrorDialog",
|
|
false,
|
|
"No message type string is available for message type %u",
|
|
messageType);
|
|
|
|
return QObject::tr("Unknown");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#include <moc_ErrorDialog.cpp>
|