File indexing completed on 2024-05-05 17:19:09

0001 /***************************************************************************
0002  * SPDX-FileCopyrightText: 2022 S. MANKOWSKI stephane@mankowski.fr
0003  * SPDX-FileCopyrightText: 2022 G. DE BURE support@mankowski.fr
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  ***************************************************************************/
0006 /** @file
0007  * A zoom selector.
0008  *
0009  * @author Stephane MANKOWSKI / Guillaume DE BURE
0010  */
0011 #include "skgzoomselector.h"
0012 #include "skgservices.h"
0013 
0014 SKGZoomSelector::SKGZoomSelector(QWidget* iParent)
0015     : QWidget(iParent), m_resetValue(0)
0016 {
0017     ui.setupUi(this);
0018 
0019     // Set icons
0020     ui.kZoomIn->setIcon(SKGServices::fromTheme(QStringLiteral("zoom-in")));
0021     ui.kZoomOut->setIcon(SKGServices::fromTheme(QStringLiteral("zoom-out")));
0022     ui.kZoomOriginal->setIcon(SKGServices::fromTheme(QStringLiteral("zoom-original")));
0023 
0024     connect(ui.kZoomOriginal, &QToolButton::clicked, this, &SKGZoomSelector::initializeZoom);
0025     connect(ui.kZoomOut, &QToolButton::clicked, this, &SKGZoomSelector::zoomOut);
0026     connect(ui.kZoomIn, &QToolButton::clicked, this, &SKGZoomSelector::zoomIn);
0027     connect(ui.kZoomSlider, &QSlider::valueChanged, this, &SKGZoomSelector::onZoomChangedDelayed);
0028 
0029     // Init timer
0030     m_timer.setSingleShot(true);
0031     connect(&m_timer, &QTimer::timeout, this, &SKGZoomSelector::onZoomChanged, Qt::QueuedConnection);
0032 }
0033 
0034 SKGZoomSelector::~SKGZoomSelector()
0035     = default;
0036 
0037 void SKGZoomSelector::setValue(int iValue, bool iEmitEvent)
0038 {
0039     bool previous = ui.kZoomSlider->blockSignals(!iEmitEvent);
0040     ui.kZoomSlider->setValue(iValue);
0041     if (ui.kZoomOriginal != nullptr) {
0042         ui.kZoomOriginal->setChecked(iValue == m_resetValue);
0043     }
0044     ui.kZoomSlider->blockSignals(previous);
0045 }
0046 
0047 int SKGZoomSelector::value() const
0048 {
0049     return ui.kZoomSlider->value();
0050 }
0051 
0052 int SKGZoomSelector::resetValue() const
0053 {
0054     return m_resetValue;
0055 }
0056 
0057 void SKGZoomSelector::setResetValue(int iValue)
0058 {
0059     m_resetValue = iValue;
0060 }
0061 
0062 void SKGZoomSelector::zoomIn()
0063 {
0064     ui.kZoomSlider->setValue(ui.kZoomSlider->value() + 1);
0065 }
0066 
0067 void SKGZoomSelector::zoomOut()
0068 {
0069     ui.kZoomSlider->setValue(ui.kZoomSlider->value() - 1);
0070 }
0071 
0072 void SKGZoomSelector::initializeZoom()
0073 {
0074     ui.kZoomSlider->setValue(m_resetValue);
0075 }
0076 
0077 void SKGZoomSelector::onZoomChangedDelayed()
0078 {
0079     m_timer.start(300);
0080 }
0081 
0082 void SKGZoomSelector::onZoomChanged()
0083 {
0084     int val = ui.kZoomSlider->value();
0085     if (ui.kZoomIn != nullptr) {
0086         ui.kZoomIn->setEnabled(val < 10);
0087     }
0088     if (ui.kZoomOut != nullptr) {
0089         ui.kZoomOut->setEnabled(val > -10);
0090     }
0091     if (ui.kZoomOriginal != nullptr) {
0092         ui.kZoomOriginal->setChecked(val == m_resetValue);
0093     }
0094 
0095     Q_EMIT changed(val);
0096 }
0097 
0098