mirror of https://github.com/Xaymar/obs-StreamFX
309 lines
10 KiB
C++
309 lines
10 KiB
C++
|
|
#include "ui-setup.hpp"
|
|
#include "version.hpp"
|
|
|
|
#include "warning-disable.hpp"
|
|
#include <QCoreApplication>
|
|
#include <QHBoxLayout>
|
|
#include <QPixmap>
|
|
#include <QSizePolicy>
|
|
#include <QVBoxLayout>
|
|
#include "warning-enable.hpp"
|
|
|
|
streamfx::ui::setup::setup(QWidget* parent) : QDialog(parent)
|
|
{
|
|
// Don't delete this window when it is closed.
|
|
|
|
// Set up basics, like not deleting self on close.
|
|
setObjectName(QString::fromUtf8("setup"));
|
|
setAttribute(Qt::WA_DeleteOnClose, false);
|
|
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
|
|
setModal(false);
|
|
|
|
// Set up overall layout.
|
|
auto layout = new QVBoxLayout(this);
|
|
layout->setContentsMargins(5, 5, 5, 5);
|
|
layout->setSpacing(10);
|
|
//setLayout(layout);
|
|
|
|
// Create a font for multi-language support.
|
|
QStringList families;
|
|
families.append(QString::fromUtf8("Roboto"));
|
|
families.append(QString::fromUtf8("MS Shell Dlg 2"));
|
|
families.append(QString::fromUtf8("MS Gothic"));
|
|
families.append(QString::fromUtf8("Malgun Gothic"));
|
|
|
|
{ // Set up header.
|
|
auto container_layout = new QHBoxLayout();
|
|
container_layout->setContentsMargins(0, 0, 0, 0);
|
|
container_layout->setSpacing(0);
|
|
|
|
container_layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
|
|
{
|
|
auto header_layout = new QVBoxLayout();
|
|
header_layout->setContentsMargins(0, 0, 0, 0);
|
|
header_layout->setSpacing(10);
|
|
|
|
{
|
|
_header_logo = new QLabel(this);
|
|
_header_logo->setObjectName(QString::fromUtf8("logo"));
|
|
QSizePolicy size_policy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
size_policy.setHorizontalStretch(0);
|
|
size_policy.setVerticalStretch(0);
|
|
size_policy.setHeightForWidth(_header_logo->sizePolicy().hasHeightForWidth());
|
|
_header_logo->setSizePolicy(size_policy);
|
|
{
|
|
QPixmap logo{QString::fromUtf8(":/logos/streamfx_logo")};
|
|
_header_logo->setPixmap(logo);
|
|
_header_logo->setMinimumSize(logo.size());
|
|
_header_logo->setMaximumSize(logo.size());
|
|
}
|
|
_header_logo->setScaledContents(false);
|
|
header_layout->addWidget(_header_logo, 0, Qt::AlignCenter);
|
|
}
|
|
|
|
{
|
|
auto links_layout = new QHBoxLayout();
|
|
links_layout->setContentsMargins(0, 0, 0, 0);
|
|
links_layout->setSpacing(10);
|
|
header_layout->addLayout(links_layout);
|
|
|
|
QFont font;
|
|
font.setFamilies(families);
|
|
font.setPointSize(12);
|
|
|
|
QSizePolicy size_policy(QSizePolicy::Expanding, QSizePolicy::Maximum);
|
|
size_policy.setHorizontalStretch(0);
|
|
size_policy.setVerticalStretch(0);
|
|
|
|
{
|
|
_header_website = new QLabel(this);
|
|
_header_website->setObjectName(QString::fromUtf8("website"));
|
|
size_policy.setHeightForWidth(_header_website->sizePolicy().hasHeightForWidth());
|
|
_header_website->setSizePolicy(size_policy);
|
|
_header_website->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
|
|
_header_website->setWordWrap(false);
|
|
_header_website->setOpenExternalLinks(true);
|
|
_header_website->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard
|
|
| Qt::LinksAccessibleByMouse);
|
|
_header_website->setFont(font);
|
|
links_layout->addWidget(_header_website);
|
|
}
|
|
|
|
{
|
|
_header_patreon = new QLabel(this);
|
|
_header_patreon->setObjectName(QString::fromUtf8("patreon"));
|
|
size_policy.setHeightForWidth(_header_patreon->sizePolicy().hasHeightForWidth());
|
|
_header_patreon->setSizePolicy(size_policy);
|
|
_header_patreon->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
|
_header_patreon->setWordWrap(false);
|
|
_header_patreon->setOpenExternalLinks(true);
|
|
_header_patreon->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard
|
|
| Qt::LinksAccessibleByMouse);
|
|
_header_patreon->setFont(font);
|
|
links_layout->addWidget(_header_patreon);
|
|
}
|
|
|
|
{
|
|
_header_discord = new QLabel(this);
|
|
_header_discord->setObjectName(QString::fromUtf8("discord"));
|
|
size_policy.setHeightForWidth(_header_discord->sizePolicy().hasHeightForWidth());
|
|
_header_discord->setSizePolicy(size_policy);
|
|
_header_discord->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
|
_header_discord->setWordWrap(false);
|
|
_header_discord->setOpenExternalLinks(true);
|
|
_header_discord->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard
|
|
| Qt::LinksAccessibleByMouse);
|
|
_header_discord->setFont(font);
|
|
links_layout->addWidget(_header_discord);
|
|
}
|
|
}
|
|
|
|
container_layout->addLayout(header_layout);
|
|
}
|
|
container_layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
|
|
|
|
layout->addLayout(container_layout);
|
|
}
|
|
|
|
layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
|
|
|
|
{ // Set up footer.
|
|
auto footer_layout = new QVBoxLayout();
|
|
footer_layout->setContentsMargins(0, 0, 0, 0);
|
|
footer_layout->setSpacing(10);
|
|
|
|
{ // Banner
|
|
auto container_layout = new QHBoxLayout();
|
|
container_layout->setContentsMargins(0, 0, 0, 0);
|
|
container_layout->setSpacing(0);
|
|
|
|
{
|
|
auto banner_layout = new QVBoxLayout();
|
|
banner_layout->setContentsMargins(0, 0, 0, 0);
|
|
banner_layout->setSpacing(10);
|
|
|
|
{ // Title
|
|
QFont font;
|
|
font.setFamilies(families);
|
|
font.setPointSize(9);
|
|
|
|
_banner_title = new QLabel(this);
|
|
_banner_title->setObjectName(QString::fromUtf8("banner_title"));
|
|
_banner_title->setFont(font);
|
|
banner_layout->addWidget(_banner_title, 0, Qt::AlignLeft | Qt::AlignVCenter);
|
|
}
|
|
|
|
{ // Content
|
|
if (streamfx::ui::obs_browser_widget::is_available()) {
|
|
_banner_content = new streamfx::ui::obs_browser_widget(
|
|
QUrl(QString::fromUtf8("about:blank")), this);
|
|
} else {
|
|
_banner_content = new QLabel(this);
|
|
}
|
|
_banner_content->setObjectName(QString::fromUtf8("banner_content"));
|
|
_banner_content->setFixedSize(728, 90);
|
|
_banner_content->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
|
banner_layout->addWidget(_banner_content, 0, Qt::AlignCenter);
|
|
}
|
|
|
|
container_layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
|
|
container_layout->addLayout(banner_layout);
|
|
container_layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
|
|
}
|
|
|
|
footer_layout->addLayout(container_layout);
|
|
}
|
|
|
|
{ // Controls
|
|
auto control_layout = new QHBoxLayout();
|
|
|
|
QFont font;
|
|
font.setFamilies(families);
|
|
font.setPointSize(12);
|
|
|
|
{ // Cancel
|
|
_control_cancel = new QPushButton(this);
|
|
_control_cancel->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
|
|
_control_cancel->setFont(font);
|
|
control_layout->addWidget(_control_cancel);
|
|
}
|
|
|
|
{ // Previous
|
|
_control_prev = new QPushButton(this);
|
|
_control_prev->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
|
|
_control_prev->setFont(font);
|
|
control_layout->addWidget(_control_prev);
|
|
}
|
|
|
|
control_layout->addSpacerItem(new QSpacerItem(100, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
|
|
|
|
{ // Next
|
|
_control_next = new QPushButton(this);
|
|
_control_next->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
|
|
_control_next->setFont(font);
|
|
control_layout->addWidget(_control_next);
|
|
}
|
|
|
|
{ // Finish
|
|
_control_finish = new QPushButton(this);
|
|
_control_finish->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
|
|
_control_finish->setFont(font);
|
|
control_layout->addWidget(_control_finish);
|
|
}
|
|
|
|
footer_layout->addLayout(control_layout);
|
|
}
|
|
|
|
{ // Info Line
|
|
auto info_layout = new QHBoxLayout();
|
|
|
|
QFont font;
|
|
font.setFamilies(families);
|
|
font.setPointSize(9);
|
|
|
|
{ // Version
|
|
_info_version = new QLabel(this);
|
|
_info_version->setObjectName(QString::fromUtf8("version"));
|
|
QSizePolicy size_policy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum);
|
|
size_policy.setHorizontalStretch(0);
|
|
size_policy.setVerticalStretch(0);
|
|
size_policy.setHeightForWidth(_info_version->sizePolicy().hasHeightForWidth());
|
|
_info_version->setSizePolicy(size_policy);
|
|
_info_version->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
|
_info_version->setWordWrap(false);
|
|
_info_version->setOpenExternalLinks(true);
|
|
_info_version->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard | Qt::LinksAccessibleByMouse);
|
|
_info_version->setFont(font);
|
|
info_layout->addWidget(_info_version);
|
|
}
|
|
|
|
footer_layout->addLayout(info_layout);
|
|
}
|
|
|
|
layout->addLayout(footer_layout);
|
|
}
|
|
|
|
// Translate initial text.
|
|
retranslate();
|
|
|
|
// Connect any named objects directly.
|
|
QMetaObject::connectSlotsByName(this);
|
|
|
|
// Ensure we fit the content.
|
|
resize(400, 300);
|
|
adjustSize();
|
|
}
|
|
|
|
streamfx::ui::setup::~setup() {}
|
|
|
|
void streamfx::ui::setup::retranslate()
|
|
{
|
|
setWindowTitle(QCoreApplication::translate("Setup", "StreamFX::UI.Setup.Title", ""));
|
|
|
|
{ // Header
|
|
|
|
{ // Website
|
|
char buffer[2048];
|
|
auto text = QCoreApplication::translate("Setup", "StreamFX::UI.Setup.Header.Website", "");
|
|
snprintf(buffer, sizeof(buffer), "<a href='%s'>%s</a>", "https://streamfx.xaymar.com/",
|
|
text.toStdString().c_str());
|
|
_header_website->setText(QString::fromUtf8(buffer));
|
|
};
|
|
|
|
{ // Patreon
|
|
char buffer[2048];
|
|
auto text = QCoreApplication::translate("Setup", "StreamFX::UI.Setup.Header.Patreon", "");
|
|
snprintf(buffer, sizeof(buffer), "<a href='%s'>%s</a>", "https://s.xaymar.com/streamfx/patreon",
|
|
text.toStdString().c_str());
|
|
_header_patreon->setText(QString::fromUtf8(buffer));
|
|
};
|
|
|
|
{ // Discord
|
|
char buffer[2048];
|
|
auto text = QCoreApplication::translate("Setup", "StreamFX::UI.Setup.Header.Discord", "");
|
|
snprintf(buffer, sizeof(buffer), "<a href='%s'>%s</a>", "https://s.xaymar.com/streamfx/discord",
|
|
text.toStdString().c_str());
|
|
_header_discord->setText(QString::fromUtf8(buffer));
|
|
}
|
|
}
|
|
|
|
{ // Footer
|
|
|
|
{ // Banner
|
|
_banner_title->setText(QCoreApplication::translate("Setup", "StreamFX::UI.Setup.Banner"));
|
|
}
|
|
|
|
{ // Controls
|
|
_control_cancel->setText(QCoreApplication::translate("Setup", "StreamFX::UI.Setup.Control.Cancel"));
|
|
_control_prev->setText(QCoreApplication::translate("Setup", "StreamFX::UI.Setup.Control.Previous"));
|
|
_control_next->setText(QCoreApplication::translate("Setup", "StreamFX::UI.Setup.Control.Next"));
|
|
_control_finish->setText(QCoreApplication::translate("Setup", "StreamFX::UI.Setup.Control.Finish"));
|
|
}
|
|
|
|
_info_version->setText(STREAMFX_VERSION_STRING);
|
|
}
|
|
|
|
layout()->invalidate();
|
|
}
|