File indexing completed on 2024-04-28 04:21:20

0001 // SPDX-FileCopyrightText: 2003-2010 Jesper K. Pedersen <blackie@kde.org>
0002 // SPDX-FileCopyrightText: 2021 Johannes Zarl-Zierl <johannes@zarl-zierl.at>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006 #include "ViewerPage.h"
0007 
0008 #include "VideoPlayerSelectorDialog.h"
0009 #include "ViewerSizeConfig.h"
0010 
0011 #include <kpabase/SettingsData.h>
0012 
0013 #include <KComboBox>
0014 #include <KLocalizedString>
0015 #include <QGridLayout>
0016 #include <QLabel>
0017 #include <QPushButton>
0018 #include <QSpinBox>
0019 #include <QVBoxLayout>
0020 
0021 static QString videoBackendTextFromEnum(Settings::VideoBackend backend)
0022 {
0023     switch (backend) {
0024     case Settings::VideoBackend::NotConfigured:
0025         return i18n("Not Configured");
0026     case Settings::VideoBackend::VLC:
0027         return QString::fromUtf8("VLC");
0028     case Settings::VideoBackend::QtAV:
0029         return QString::fromUtf8("QtAV");
0030     case Settings::VideoBackend::Phonon:
0031         return QString::fromUtf8("Phonon");
0032     }
0033     Q_UNREACHABLE();
0034     return {}; // Make CI shut up.
0035 }
0036 
0037 Settings::ViewerPage::ViewerPage(QWidget *parent)
0038     : QWidget(parent)
0039 {
0040     QVBoxLayout *lay1 = new QVBoxLayout(this);
0041 
0042     m_slideShowSetup = new ViewerSizeConfig(i18n("Running Slide Show From Thumbnail View"), this);
0043     lay1->addWidget(m_slideShowSetup);
0044 
0045     m_viewImageSetup = new ViewerSizeConfig(i18n("Viewing Images and Videos From Thumbnail View"), this);
0046     lay1->addWidget(m_viewImageSetup);
0047 
0048     QGridLayout *glay = new QGridLayout;
0049     lay1->addLayout(glay);
0050     int row = -1;
0051 
0052     QLabel *label = new QLabel(i18n("Slideshow interval:"), this);
0053     glay->addWidget(label, ++row, 0);
0054 
0055     m_slideShowInterval = new QSpinBox;
0056     m_slideShowInterval->setRange(1, INT_MAX);
0057     glay->addWidget(m_slideShowInterval, row, 1);
0058     m_slideShowInterval->setSuffix(i18n(" sec"));
0059     label->setBuddy(m_slideShowInterval);
0060 
0061     label = new QLabel(i18n("Image cache:"), this);
0062     glay->addWidget(label, ++row, 0);
0063 
0064     m_cacheSize = new QSpinBox;
0065     m_cacheSize->setRange(0, 16384);
0066     m_cacheSize->setSingleStep(10);
0067     m_cacheSize->setSuffix(i18n(" Mbytes"));
0068     glay->addWidget(m_cacheSize, row, 1);
0069     label->setBuddy(m_cacheSize);
0070 
0071     QString txt;
0072 
0073     QLabel *standardSizeLabel = new QLabel(i18n("Standard size in viewer:"), this);
0074     m_viewerStandardSize = new KComboBox(this);
0075     m_viewerStandardSize->addItems(QStringList() << i18n("Full Viewer Size") << i18n("Natural Image Size") << i18n("Natural Image Size If Possible"));
0076     glay->addWidget(standardSizeLabel, ++row, 0);
0077     glay->addWidget(m_viewerStandardSize, row, 1);
0078     standardSizeLabel->setBuddy(m_viewerStandardSize);
0079 
0080     txt = i18n("<p>Set the standard size for images to be displayed in the viewer.</p> "
0081                "<p><b>Full Viewer Size</b> indicates that the image will be stretched or shrunk to fill the viewer window.</p> "
0082                "<p><b>Natural Image Size</b> indicates that the image will be displayed pixel for pixel.</p> "
0083                "<p><b>Natural Image Size If Possible</b> indicates that the image will be displayed pixel for pixel if it would fit the window, "
0084                "otherwise it will be shrunk to fit the viewer.</p>");
0085     m_viewerStandardSize->setWhatsThis(txt);
0086 
0087     QLabel *scalingLabel = new QLabel(i18n("Scaling algorithm:"), this);
0088     m_smoothScale = new KComboBox(this);
0089     m_smoothScale->addItems(QStringList() << i18n("Fastest") << i18n("Best"));
0090     scalingLabel->setBuddy(m_smoothScale);
0091 
0092     glay->addWidget(scalingLabel, ++row, 0);
0093     glay->addWidget(m_smoothScale, row, 1);
0094     txt = i18n("<p>When displaying images, KPhotoAlbum normally performs smooth scaling of the image. "
0095                "If this option is not set, KPhotoAlbum will use a faster but less smooth scaling method.</p>");
0096     scalingLabel->setWhatsThis(txt);
0097     m_smoothScale->setWhatsThis(txt);
0098 
0099     label = new QLabel(i18n("Video Backend:"), this);
0100     m_videoBackendButton = new QPushButton;
0101     glay->addWidget(label, ++row, 0);
0102     glay->addWidget(m_videoBackendButton, row, 1);
0103     connect(m_videoBackendButton, &QPushButton::clicked, this, [this] {
0104         VideoPlayerSelectorDialog dialog(this);
0105         dialog.exec();
0106         m_videoBackend = dialog.backend();
0107         m_videoBackendButton->setText(videoBackendTextFromEnum(m_videoBackend));
0108     });
0109 }
0110 
0111 void Settings::ViewerPage::loadSettings(Settings::SettingsData *opt)
0112 {
0113     m_viewImageSetup->setLaunchFullScreen(opt->launchViewerFullScreen());
0114     m_viewImageSetup->setSize(opt->viewerSize());
0115     m_slideShowSetup->setLaunchFullScreen(opt->launchSlideShowFullScreen());
0116     m_slideShowSetup->setSize(opt->slideShowSize());
0117     m_slideShowInterval->setValue(opt->slideShowInterval());
0118     m_cacheSize->setValue(opt->viewerCacheSize());
0119     m_smoothScale->setCurrentIndex(opt->smoothScale());
0120     m_viewerStandardSize->setCurrentIndex(opt->viewerStandardSize());
0121     m_videoBackend = opt->videoBackend();
0122     m_videoBackendButton->setText(videoBackendTextFromEnum(m_videoBackend));
0123 }
0124 
0125 void Settings::ViewerPage::saveSettings(Settings::SettingsData *opt)
0126 {
0127     opt->setLaunchViewerFullScreen(m_viewImageSetup->launchFullScreen());
0128     opt->setViewerSize(m_viewImageSetup->size());
0129     opt->setSlideShowInterval(m_slideShowInterval->value());
0130     opt->setViewerCacheSize(m_cacheSize->value());
0131     opt->setSmoothScale(m_smoothScale->currentIndex());
0132     opt->setViewerStandardSize((StandardViewSize)m_viewerStandardSize->currentIndex());
0133     opt->setSlideShowSize(m_slideShowSetup->size());
0134     opt->setLaunchSlideShowFullScreen(m_slideShowSetup->launchFullScreen());
0135     opt->setVideoBackend(m_videoBackend);
0136 }
0137 // vi:expandtab:tabstop=4 shiftwidth=4: