Skip to content

Commit 43a475a

Browse files
authored
Merge pull request scp-fs2open#7346 from MjnMixael/qtfred-about-dialog
Qtfred about dialog
2 parents c69a1aa + 9caec00 commit 43a475a

9 files changed

Lines changed: 224 additions & 143 deletions

File tree

53 KB
Loading

qtfred/resources/resources.qrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,6 @@
7474
<file>images/wingform.png</file>
7575
<file>images/zoomext.png</file>
7676
<file>images/zoomsel.png</file>
77+
<file>images/fred_about.png</file>
7778
</qresource>
7879
</RCC>

qtfred/source_groups.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ add_file_folder("Source/Mission"
3838
add_file_folder("Source/Mission/Dialogs"
3939
src/mission/dialogs/AbstractDialogModel.cpp
4040
src/mission/dialogs/AbstractDialogModel.h
41+
src/mission/dialogs/AboutDialogModel.cpp
42+
src/mission/dialogs/AboutDialogModel.h
4143
src/mission/dialogs/AsteroidEditorDialogModel.cpp
4244
src/mission/dialogs/AsteroidEditorDialogModel.h
4345
src/mission/dialogs/BackgroundEditorDialogModel.h
@@ -401,6 +403,7 @@ add_file_folder("Resources/Images"
401403
resources/images/freddoc.ico
402404
resources/images/fred.ico
403405
resources/images/fredknows.png
406+
resources/images/fred_about.png
404407
resources/images/fred_splash.png
405408
resources/images/green_do.png
406409
resources/images/next.png
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
//
2+
3+
#include "AboutDialogModel.h"
4+
5+
#include <project.h>
6+
#include <graphics/2d.h>
7+
8+
extern const char* fs2_open_credit_text;
9+
10+
namespace fso::fred::dialogs {
11+
12+
AboutDialogModel::AboutDialogModel(QObject* parent, EditorViewport* viewport)
13+
: AbstractDialogModel(parent, viewport)
14+
{
15+
}
16+
17+
bool AboutDialogModel::apply()
18+
{
19+
return true;
20+
}
21+
22+
void AboutDialogModel::reject()
23+
{
24+
}
25+
26+
SCP_string AboutDialogModel::getVersionString()
27+
{
28+
SCP_string graphicsAPI;
29+
switch (gr_screen.mode) {
30+
case GR_OPENGL:
31+
graphicsAPI = "OpenGL";
32+
break;
33+
case GR_VULKAN:
34+
graphicsAPI = "Vulkan";
35+
break;
36+
}
37+
38+
SCP_string result = "qtFRED - FreeSpace Editor, Version ";
39+
result += FS_VERSION_FULL;
40+
if (!graphicsAPI.empty()) {
41+
result += " ";
42+
result += graphicsAPI;
43+
}
44+
return result;
45+
}
46+
47+
SCP_string AboutDialogModel::getCopyrightString()
48+
{
49+
return "Based on FRED2_OPEN: Copyright \xc2\xa9 1999 Volition, Inc. All Rights Reserved";
50+
}
51+
52+
SCP_vector<SCP_string> AboutDialogModel::getQtFREDCredits()
53+
{
54+
return {
55+
"Initial Qt port by groscask",
56+
"Developed to replace FRED2: Cyborg, m!m, Mike \"MjnMixael\" Nelson, The Force",
57+
"With contributions from: BMagnu, DahBlount, Goober5000, jg18, niffiwan, plieblang, the-maddin, z64555",
58+
};
59+
}
60+
61+
SCP_vector<SCP_string> AboutDialogModel::getGraphicsCredits()
62+
{
63+
switch (gr_screen.mode) {
64+
case GR_OPENGL:
65+
return {
66+
"Ported to OpenGL by RandomTiger",
67+
"Original FSO OpenGL port by Phreak and Fry_Day",
68+
};
69+
case GR_VULKAN:
70+
// TODO: Add Vulkan port credits when available
71+
return { "Vulkan not ported yet" };
72+
}
73+
return {};
74+
}
75+
76+
SCP_string AboutDialogModel::getSCPCreditsText()
77+
{
78+
return fs2_open_credit_text;
79+
}
80+
81+
SCP_string AboutDialogModel::getQuoteString()
82+
{
83+
return "FRED2 has been deprecated. We regret nothing.";
84+
}
85+
86+
} // namespace fso::fred::dialogs
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#pragma once
2+
3+
#include "AbstractDialogModel.h"
4+
5+
#include <globalincs/pstypes.h>
6+
7+
namespace fso::fred::dialogs {
8+
9+
class AboutDialogModel : public AbstractDialogModel {
10+
Q_OBJECT
11+
12+
public:
13+
AboutDialogModel(QObject* parent, EditorViewport* viewport);
14+
15+
bool apply() override;
16+
void reject() override;
17+
18+
static SCP_string getVersionString();
19+
static SCP_string getCopyrightString();
20+
static SCP_vector<SCP_string> getQtFREDCredits();
21+
static SCP_vector<SCP_string> getGraphicsCredits();
22+
static SCP_string getSCPCreditsText();
23+
static SCP_string getQuoteString();
24+
};
25+
26+
} // namespace fso::fred::dialogs

qtfred/src/ui/FredView.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,8 @@ void FredView::initializeStatusBar() {
485485

486486
_statusBarUnitsLabel = new QLabel();
487487
statusBar()->addPermanentWidget(_statusBarUnitsLabel);
488+
489+
statusBar()->showMessage(tr("Every great mission starts here. No pressure."));
488490
}
489491
void FredView::updateUI() {
490492
if (!_viewport) {
@@ -1488,7 +1490,7 @@ void FredView::on_actionError_Checker_triggered(bool) {
14881490
fred->global_error_check();
14891491
}
14901492
void FredView::on_actionAbout_triggered(bool) {
1491-
auto dialog = new dialogs::AboutDialog(this);
1493+
auto dialog = new dialogs::AboutDialog(this, _viewport);
14921494
dialog->setAttribute(Qt::WA_DeleteOnClose);
14931495
dialog->show();
14941496
}

qtfred/src/ui/dialogs/AboutDialog.cpp

Lines changed: 61 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,47 +6,79 @@
66
#include "ui_AboutDialog.h"
77

88
#include <QtGui/QDesktopServices>
9+
#include <QtGui/QPixmap>
910
#include <QtCore/QUrl>
11+
#include <QtWidgets/QApplication>
12+
#include <QtWidgets/QDialog>
13+
#include <QtWidgets/QDialogButtonBox>
14+
#include <QtWidgets/QPlainTextEdit>
15+
#include <QtWidgets/QVBoxLayout>
1016

11-
#include <project.h>
12-
#include <graphics/2d.h>
17+
namespace fso::fred::dialogs {
1318

14-
namespace fso {
15-
namespace fred {
16-
namespace dialogs {
19+
AboutDialog::~AboutDialog() = default;
1720

18-
AboutDialog::AboutDialog(QWidget* parent) : QDialog(parent), ui(new Ui::AboutDialog()) {
21+
static QString joinLines(const SCP_vector<SCP_string>& lines)
22+
{
23+
QStringList parts;
24+
for (const auto& line : lines)
25+
parts << QString::fromStdString(line);
26+
return parts.join('\n');
27+
}
28+
29+
AboutDialog::AboutDialog(QWidget* parent, EditorViewport* viewport)
30+
: QDialog(parent),
31+
ui(new Ui::AboutDialog()),
32+
_model(new AboutDialogModel(this, viewport))
33+
{
1934
ui->setupUi(this);
2035

21-
connect(ui->buttonReportBug, &QPushButton::pressed, this, &AboutDialog::onBugPressed);
22-
connect(ui->buttonVisitForums, &QPushButton::pressed, this, &AboutDialog::onForumsPressed);
23-
connect(ui->buttonAboutQt, &QPushButton::pressed, this, &AboutDialog::onAboutQtPressed);
24-
25-
QString graphicsAPI;
26-
switch(gr_screen.mode)
27-
{
28-
case GR_OPENGL:
29-
graphicsAPI = QString::fromUtf8("OpenGL");
30-
break;
31-
case GR_VULKAN:
32-
graphicsAPI = QString::fromUtf8("Vulkan");
33-
break;
34-
}
35-
36-
ui->labelVersion->setText(tr("qtFRED - FreeSpace Editor, Version %1 %2").arg(FS_VERSION_FULL, graphicsAPI));
36+
connect(ui->okBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
37+
38+
ui->logoLabel->setPixmap(
39+
QPixmap(":/images/fred_about.png").scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation));
40+
41+
ui->labelVersion->setText(QString::fromStdString(_model->getVersionString()));
42+
ui->labelCopyright->setText(QString::fromStdString(_model->getCopyrightString()));
43+
ui->labelQtFREDCredits->setText(joinLines(_model->getQtFREDCredits()));
44+
ui->labelGraphicsCredits->setText(joinLines(_model->getGraphicsCredits()));
45+
ui->labelQuote->setText(QString::fromStdString(_model->getQuoteString()));
3746
}
38-
AboutDialog::~AboutDialog() {
47+
48+
void AboutDialog::on_scpCreditsButton_clicked()
49+
{
50+
auto* dialog = new QDialog(this);
51+
dialog->setWindowTitle(tr("SCP Team Credits"));
52+
dialog->setAttribute(Qt::WA_DeleteOnClose);
53+
dialog->resize(500, 600);
54+
55+
auto* layout = new QVBoxLayout(dialog);
56+
57+
auto* textEdit = new QPlainTextEdit(dialog);
58+
textEdit->setReadOnly(true);
59+
textEdit->setPlainText(QString::fromStdString(_model->getSCPCreditsText()));
60+
layout->addWidget(textEdit);
61+
62+
auto* buttons = new QDialogButtonBox(QDialogButtonBox::Close, dialog);
63+
connect(buttons, &QDialogButtonBox::rejected, dialog, &QDialog::reject);
64+
layout->addWidget(buttons);
65+
66+
dialog->show();
3967
}
40-
void AboutDialog::onBugPressed() {
68+
69+
void AboutDialog::on_reportBugButton_clicked() // NOLINT(readability-convert-member-functions-to-static)
70+
{
4171
QDesktopServices::openUrl(QUrl("https://github.com/scp-fs2open/fs2open.github.com/issues", QUrl::TolerantMode));
4272
}
43-
void AboutDialog::onForumsPressed() {
73+
74+
void AboutDialog::on_visitForumsButton_clicked() // NOLINT(readability-convert-member-functions-to-static)
75+
{
4476
QDesktopServices::openUrl(QUrl("https://www.hard-light.net/forums/", QUrl::TolerantMode));
4577
}
46-
void AboutDialog::onAboutQtPressed() {
78+
79+
void AboutDialog::on_aboutQtButton_clicked() // NOLINT(readability-convert-member-functions-to-static)
80+
{
4781
QApplication::aboutQt();
4882
}
4983

50-
}
51-
}
52-
}
84+
} // namespace fso::fred::dialogs
Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,33 @@
11
#pragma once
22

3+
#include <mission/EditorViewport.h>
4+
#include <mission/dialogs/AboutDialogModel.h>
5+
36
#include <QDialog>
47
#include <memory>
58

6-
namespace fso {
7-
namespace fred {
8-
namespace dialogs {
9+
namespace fso::fred::dialogs {
910

1011
namespace Ui {
1112
class AboutDialog;
1213
}
1314

14-
class AboutDialog: public QDialog {
15-
Q_OBJECT
15+
class AboutDialog : public QDialog {
16+
Q_OBJECT
1617

17-
public:
18-
explicit AboutDialog(QWidget* parent);
18+
public:
19+
explicit AboutDialog(QWidget* parent, EditorViewport* viewport);
1920
~AboutDialog() override;
20-
private:
21-
void onBugPressed();
22-
void onForumsPressed();
23-
void onAboutQtPressed();
2421

22+
private slots:
23+
void on_scpCreditsButton_clicked();
24+
void on_reportBugButton_clicked();
25+
void on_visitForumsButton_clicked();
26+
void on_aboutQtButton_clicked();
27+
28+
private: // NOLINT(readability-redundant-access-specifiers)
2529
std::unique_ptr<Ui::AboutDialog> ui;
30+
std::unique_ptr<AboutDialogModel> _model;
2631
};
2732

28-
}
29-
}
30-
}
31-
33+
} // namespace fso::fred::dialogs

0 commit comments

Comments
 (0)