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