schematic selection dialog
This commit is contained in:
99
src/ui/SchematicChoiceDialog.cpp
Normal file
99
src/ui/SchematicChoiceDialog.cpp
Normal file
@@ -0,0 +1,99 @@
|
||||
#include "SchematicChoiceDialog.h"
|
||||
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
SchematicChoiceDialog::SchematicChoiceDialog(
|
||||
const std::vector<SchematicChoiceOption>& options,
|
||||
QWidget* parent)
|
||||
: QDialog(parent)
|
||||
, m_chosenIndex(0)
|
||||
{
|
||||
setWindowTitle(tr("Schematic Drop"));
|
||||
setWindowFlags(windowFlags() & ~Qt::WindowCloseButtonHint);
|
||||
setModal(true);
|
||||
|
||||
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
||||
|
||||
QLabel* titleLabel = new QLabel(tr("Choose a schematic to unlock:"), this);
|
||||
QFont titleFont = titleLabel->font();
|
||||
titleFont.setPointSize(titleFont.pointSize() + 2);
|
||||
titleFont.setBold(true);
|
||||
titleLabel->setFont(titleFont);
|
||||
titleLabel->setAlignment(Qt::AlignCenter);
|
||||
mainLayout->addWidget(titleLabel);
|
||||
|
||||
QHBoxLayout* optionsLayout = new QHBoxLayout();
|
||||
mainLayout->addLayout(optionsLayout);
|
||||
|
||||
for (int i = 0; i < static_cast<int>(options.size()); ++i)
|
||||
{
|
||||
const SchematicChoiceOption& option = options[static_cast<std::size_t>(i)];
|
||||
|
||||
QWidget* card = new QWidget(this);
|
||||
QVBoxLayout* cardLayout = new QVBoxLayout(card);
|
||||
card->setStyleSheet("QWidget { border: 1px solid gray; padding: 8px; }");
|
||||
|
||||
QLabel* nameLabel = new QLabel(QString::fromStdString(option.displayName), card);
|
||||
QFont nameFont = nameLabel->font();
|
||||
nameFont.setPointSize(nameFont.pointSize() + 1);
|
||||
nameFont.setBold(true);
|
||||
nameLabel->setFont(nameFont);
|
||||
nameLabel->setAlignment(Qt::AlignCenter);
|
||||
cardLayout->addWidget(nameLabel);
|
||||
|
||||
QString typeText;
|
||||
if (option.type == SchematicType::Ship)
|
||||
{
|
||||
typeText = tr("Ship");
|
||||
}
|
||||
else if (option.type == SchematicType::Module)
|
||||
{
|
||||
typeText = tr("Module");
|
||||
}
|
||||
else
|
||||
{
|
||||
typeText = tr("Recipe");
|
||||
}
|
||||
QLabel* typeLabel = new QLabel(typeText, card);
|
||||
typeLabel->setAlignment(Qt::AlignCenter);
|
||||
cardLayout->addWidget(typeLabel);
|
||||
|
||||
QString statusText;
|
||||
if (option.isNewUnlock)
|
||||
{
|
||||
statusText = tr("New unlock");
|
||||
}
|
||||
else
|
||||
{
|
||||
statusText = tr("Level up -> %1").arg(option.targetLevel);
|
||||
}
|
||||
QLabel* statusLabel = new QLabel(statusText, card);
|
||||
statusLabel->setAlignment(Qt::AlignCenter);
|
||||
cardLayout->addWidget(statusLabel);
|
||||
|
||||
QPushButton* selectButton = new QPushButton(tr("Select"), card);
|
||||
cardLayout->addWidget(selectButton);
|
||||
|
||||
const int index = i;
|
||||
connect(selectButton, &QPushButton::clicked, this, [this, index]()
|
||||
{
|
||||
onOptionClicked(index);
|
||||
});
|
||||
|
||||
optionsLayout->addWidget(card);
|
||||
}
|
||||
}
|
||||
|
||||
int SchematicChoiceDialog::getChosenIndex() const
|
||||
{
|
||||
return m_chosenIndex;
|
||||
}
|
||||
|
||||
void SchematicChoiceDialog::onOptionClicked(int index)
|
||||
{
|
||||
m_chosenIndex = index;
|
||||
accept();
|
||||
}
|
||||
Reference in New Issue
Block a user