aboutsummaryrefslogtreecommitdiff
path: root/libs/installer_fomod_plus/installer/ui/FomodImageViewer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/installer_fomod_plus/installer/ui/FomodImageViewer.cpp')
-rw-r--r--libs/installer_fomod_plus/installer/ui/FomodImageViewer.cpp284
1 files changed, 0 insertions, 284 deletions
diff --git a/libs/installer_fomod_plus/installer/ui/FomodImageViewer.cpp b/libs/installer_fomod_plus/installer/ui/FomodImageViewer.cpp
deleted file mode 100644
index cb99d27..0000000
--- a/libs/installer_fomod_plus/installer/ui/FomodImageViewer.cpp
+++ /dev/null
@@ -1,284 +0,0 @@
-#include "FomodImageViewer.h"
-
-#include "ScaleLabel.h"
-#include "UIHelper.h"
-
-#include <QLabel>
-#include <QScrollArea>
-#include <QtConcurrent/QtConcurrent>
-
-constexpr int PREVIEW_IMAGE_WIDTH = 160;
-constexpr int PREVIEW_IMAGE_HEIGHT = 90;
-
-/*
-+----------------------------------------------------------+
-|n/N X |
-+---+--------------------------------------------------+---+
-| | | |
-| | | |
-| | | |
-| | | |
-| | | |
-| | | |
-| < | Image | > |
-| | | |
-| | | |
-| | | |
-| | | |
-| | label | |
-+------+------+------+---------------------------------+---+
-| | | | ...previews |
-| | | | |
-+------+------+------+-------------------------------------+
-*/
-constexpr auto BUTTON_STYLE =
- "font-size: 16px; font-weight: bold; color: white; background-color: black; padding: 5px; border-radius: 1px solid black;";
-
-FomodImageViewer::FomodImageViewer(QWidget* parent,
- const QString& fomodPath,
- const std::shared_ptr<StepViewModel>& activeStep,
- const std::shared_ptr<PluginViewModel>& activePlugin) : QDialog(parent), mFomodPath(fomodPath),
- mActiveStep(activeStep),
- mActivePlugin(activePlugin)
-{
-
- setWindowFlags(Qt::FramelessWindowHint | Qt::Window);
- setAttribute(Qt::WA_TranslucentBackground);
- setStyleSheet("background-color: rgba(0, 0, 0, 150);");
-
- const QScreen* screen = this->screen();
- const QRect availableGeometry = screen->availableGeometry();
- setFixedSize(availableGeometry.width(), availableGeometry.height());
- move(availableGeometry.x(), availableGeometry.y());
-
- collectImages();
- mMainImageWrapper = createSinglePhotoPane(this);
- mTopBar = createTopBar(this);
- mPreviewImages = createPreviewImages(this);
- mCenterRow = createCenterRow(this);
-
- const auto layout = new QVBoxLayout(this);
- layout->setContentsMargins(0, 0, 0, 0); // Remove margins
- layout->setSpacing(0); // Remove spacing between widgets
- layout->addWidget(mTopBar);
- layout->addWidget(mCenterRow, 1);
- layout->addWidget(mPreviewImages);
- setLayout(layout);
-
- select(mCurrentIndex);
-
- setFocusPolicy(Qt::StrongFocus); // so we can receive key events
-}
-
-void FomodImageViewer::collectImages()
-{
- mLabelsAndImages.clear();
- for (const auto& groupViewModel : mActiveStep->getGroups()) {
- for (const auto& pluginViewModel : groupViewModel->getPlugins()) {
- if (pluginViewModel->getImagePath().empty()) {
- continue;
- }
- QString imagePath = UIHelper::getFullImagePath(mFomodPath,
- QString::fromStdString(pluginViewModel->getImagePath()));
- mLabelsAndImages.emplace_back(QString::fromStdString(pluginViewModel->getName()), imagePath);
-
- if (pluginViewModel == mActivePlugin) {
- mCurrentIndex = static_cast<int>(mLabelsAndImages.size()) - 1;
- }
- }
- }
-}
-
-QWidget* FomodImageViewer::createCenterRow(QWidget* parent)
-{
- const auto centerRow = new QWidget(parent);
- const auto layout = new QHBoxLayout(centerRow);
-
- mBackButton = createBackButton(centerRow);
- mForwardButton = createForwardButton(centerRow);
-
- mBackButton->setFocusPolicy(Qt::NoFocus);
- mForwardButton->setFocusPolicy(Qt::NoFocus);
-
- layout->addWidget(mBackButton);
- layout->addWidget(mMainImageWrapper, 1);
- layout->addWidget(mForwardButton);
-
- return centerRow;
-}
-
-// ReSharper disable once CppMemberFunctionMayBeStatic
-QWidget* FomodImageViewer::createSinglePhotoPane(QWidget* parent)
-{
- const auto singlePhotoPane = new QWidget(parent);
- const auto layout = new QVBoxLayout(singlePhotoPane);
-
- // const auto [labelText, imagePath] = pair;
-
- mMainImage = new ScaleLabel(singlePhotoPane);
- mMainImage->setAlignment(Qt::AlignCenter);
- layout->addWidget(mMainImage, 1);
-
- mLabel = new QLabel(singlePhotoPane);
- // mLabel->setText(labelText);
- mLabel->setAlignment(Qt::AlignCenter);
- mLabel->setStyleSheet("color: white; font-size: 20px;");
- layout->addWidget(mLabel);
-
- return singlePhotoPane;
-}
-
-QScrollArea* FomodImageViewer::createPreviewImages(QWidget* parent)
-{
- mImagePanes.clear();
- const auto previewImages = new QScrollArea(parent);
- const auto widget = new QWidget(previewImages);
- const auto layout = new QHBoxLayout(previewImages);
-
- layout->setContentsMargins(0, 0, 0, 0);
- layout->setSpacing(0);
-
- for (int i = 0; i < mLabelsAndImages.size(); i++) {
- const auto imageLabel = new ScaleLabel(previewImages);
- imageLabel->setAlignment(Qt::AlignCenter);
- imageLabel->setFixedSize(PREVIEW_IMAGE_WIDTH, PREVIEW_IMAGE_HEIGHT);
- imageLabel->setFocusPolicy(Qt::NoFocus);
- connect(imageLabel, &ScaleLabel::clicked, this, [this, i] {
- select(i);
- });
- layout->addWidget(imageLabel);
- mImagePanes.emplace_back(imageLabel);
-
- // imageLabel->setScalableResource(mLabelsAndImages[i].second);
- const auto imagePath = mLabelsAndImages[i].second;
-
- QThreadPool::globalInstance()->start([imageLabel, imagePath]() {
- QMetaObject::invokeMethod(imageLabel, [imageLabel, imagePath]() {
- imageLabel->setScalableResource(imagePath);
- }, Qt::QueuedConnection);
- });
- }
-
- widget->setLayout(layout);
- previewImages->setFixedHeight(PREVIEW_IMAGE_HEIGHT + 10);
- previewImages->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- previewImages->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
- previewImages->setFocusPolicy(Qt::NoFocus);
-
- previewImages->setWidget(widget);
- previewImages->setStyleSheet("QScrollArea { border: none; }");
-
- return previewImages;
-}
-
-QPushButton* FomodImageViewer::createBackButton(QWidget* parent) const
-{
- const auto backButton = new QPushButton(parent);
- backButton->setText("<");
- backButton->setStyleSheet(BUTTON_STYLE);
- connect(backButton, &QPushButton::clicked, this, &FomodImageViewer::goBack);
- return backButton;
-}
-
-QPushButton* FomodImageViewer::createForwardButton(QWidget* parent) const
-{
- const auto forwardButton = new QPushButton(parent);
- forwardButton->setText(">");
- forwardButton->
- setStyleSheet(BUTTON_STYLE);
- connect(forwardButton, &QPushButton::clicked, this, &FomodImageViewer::goForward);
- return forwardButton;
-}
-
-QWidget* FomodImageViewer::createTopBar(QWidget* parent)
-{
- const auto topBar = new QWidget(parent);
- const auto layout = new QHBoxLayout(topBar);
-
- // counter, spacer, close button
- mCounter = new QLabel(topBar);
- mCounter->setStyleSheet(BUTTON_STYLE);
- layout->addWidget(mCounter);
-
- layout->addStretch();
-
- mCloseButton = createCloseButton(topBar);
- layout->addWidget(mCloseButton);
- return topBar;
-}
-
-QPushButton* FomodImageViewer::createCloseButton(QWidget* parent)
-{
- const auto closeButton = new QPushButton(parent);
- // const QIcon icon(":/fomod/close");
- // closeButton->setIcon(icon);
- closeButton->setText("X");
- closeButton->setStyleSheet("color: white; background-color: black; padding: 5px; border-radius: 1px solid black;");
- connect(closeButton, &QPushButton::clicked, this, &FomodImageViewer::close);
- return closeButton;
-}
-
-void FomodImageViewer::updateCounterText() const
-{
- mCounter->setText(QString::number(mCurrentIndex + 1) + "/" + QString::number(mLabelsAndImages.size()));
-}
-
-void FomodImageViewer::goBack()
-{
- if (mCurrentIndex == 0) {
- return;
- }
- select(--mCurrentIndex);
-}
-
-void FomodImageViewer::goForward()
-{
- if (mCurrentIndex == mLabelsAndImages.size() - 1) {
- return;
- }
- select(++mCurrentIndex);
-}
-
-void FomodImageViewer::select(const int index)
-{
- if (index < 0 || index >= mLabelsAndImages.size()) {
- return;
- }
-
- // Remove border from previously selected image
- mCurrentIndex = index; // check for bounds?
- updateCounterText();
-
- for (int i = 0; i < mImagePanes.size(); i++) {
- if (i == mCurrentIndex) {
- mImagePanes[i]->setStyleSheet("border: 2px solid white;");
- } else {
- mImagePanes[i]->setStyleSheet("");
- }
- }
-
- const auto& imagePath = mLabelsAndImages[index].second;
- const auto& labelText = mLabelsAndImages[index].first;
- mLabel->setText(labelText);
- mMainImage->setScalableResource(imagePath);
-}
-
-void FomodImageViewer::keyPressEvent(QKeyEvent* event)
-{
- switch (event->key()) {
- case Qt::Key_Left:
- goBack();
- break;
- case Qt::Key_Right:
- goForward();
- break;
- default:
- QDialog::keyPressEvent(event);
- }
-}
-
-void FomodImageViewer::showEvent(QShowEvent* event)
-{
- QDialog::showEvent(event);
- setFocus();
-} \ No newline at end of file