File indexing completed on 2024-05-12 16:02:14

0001 /*  
0002     SPDX-FileCopyrightText: 2004 Ariya Hidayat <ariya@kde.org>
0003     SPDX-FileCopyrightText: 2006 Peter Simonsson <peter.simonsson@gmail.com>
0004     SPDX-FileCopyrightText: 2006-2007 C. Boemann <cbo@boemann.dk>
0005     SPDX-FileCopyrightText: 2014 Sven Langkamp <sven.langkamp@gmail.com>
0006 
0007     SPDX-License-Identifier: LGPL-2.0-only
0008 */
0009 
0010 #include "KoZoomWidget.h"
0011 
0012 #include <QSlider>
0013 #include <QToolButton>
0014 #include <QBoxLayout>
0015 #include <QDebug>
0016 #include <klocalizedstring.h>
0017 
0018 #include "KoZoomInput.h"
0019 #include "KoIcon.h"
0020 
0021 class KoZoomWidget::Private
0022 {
0023 public:
0024 
0025     Private()
0026         : slider(0)
0027         , input(0)
0028         , canvasMappingButton(0)
0029     {}
0030 
0031     QSlider* slider;
0032     KoZoomInput* input;
0033     QToolButton* canvasMappingButton;
0034 
0035     qreal effectiveZoom {1.0};
0036 };
0037 
0038 KoZoomWidget::KoZoomWidget(QWidget* parent, int maxZoom )
0039     : QWidget(parent)
0040     , d(new Private)
0041 {
0042     QHBoxLayout *layout = new QHBoxLayout(this);
0043     //layout->setSizeConstraint(QLayout::SetFixedSize);
0044     layout->setMargin(0);
0045     layout->setSpacing(0);
0046 
0047     d->input = new KoZoomInput(this);
0048     connect(d->input, SIGNAL(zoomLevelChanged(QString)), this, SIGNAL(zoomLevelChanged(QString)));
0049     layout->addWidget(d->input);
0050 
0051     d->slider = new QSlider(Qt::Horizontal);
0052     d->slider->setToolTip(i18n("Zoom"));
0053     d->slider->setMinimum(0);
0054     d->slider->setMaximum(maxZoom);
0055     d->slider->setValue(0);
0056     d->slider->setSingleStep(1);
0057     d->slider->setPageStep(1);
0058     d->slider->setMinimumWidth(80);
0059     layout->addWidget(d->slider);
0060     layout->setStretch(1, 1);
0061 
0062     d->canvasMappingButton = new QToolButton(this);
0063     d->canvasMappingButton->setIcon(kisIcon("zoom-pixels"));
0064     d->canvasMappingButton->setCheckable(true);
0065     d->canvasMappingButton->setChecked(false);
0066     d->canvasMappingButton->setAutoRaise(true);
0067     connect(d->canvasMappingButton, SIGNAL(toggled(bool)), this, SIGNAL(canvasMappingModeChanged(bool)));
0068     layout->addWidget(d->canvasMappingButton);
0069 
0070     connect(d->slider, SIGNAL(valueChanged(int)), this, SIGNAL(sliderValueChanged(int)));
0071 }
0072 
0073 KoZoomWidget::~KoZoomWidget()
0074 {
0075 }
0076 
0077 bool KoZoomWidget::isZoomInputFlat() const
0078 {
0079     return d->input->isFlat();
0080 }
0081 
0082 void KoZoomWidget::setZoomInputFlat(bool flat)
0083 {
0084     d->input->setFlat(flat);
0085 }
0086 
0087 void KoZoomWidget::setSliderSize(int size)
0088 {
0089     d->slider->setMaximum(size);
0090 }
0091 
0092 void KoZoomWidget::setZoomLevels(const QStringList &values)
0093 {
0094     d->input->setZoomLevels(values);
0095 }
0096 
0097 void KoZoomWidget::setCurrentZoomLevel(const QString &valueString)
0098 {
0099     d->input->setCurrentZoomLevel(valueString);
0100 }
0101 
0102 void KoZoomWidget::setSliderValue(int value)
0103 {
0104     d->slider->blockSignals(true);
0105     d->slider->setValue(value);
0106     d->slider->blockSignals(false);
0107 }
0108 
0109 void KoZoomWidget::setCanvasMappingMode(bool status)
0110 {
0111     if(d->canvasMappingButton && d->canvasMappingButton->isChecked() != status) {
0112         d->canvasMappingButton->blockSignals(true);
0113         d->canvasMappingButton->setChecked(status);
0114         d->canvasMappingButton->blockSignals(false);
0115     }
0116 
0117     QString canvasMappingMode;
0118 
0119     if (status) {
0120         d->canvasMappingButton->setIcon(kisIcon("zoom-print"));
0121         canvasMappingMode = i18n("Print Size");
0122     } else {
0123         d->canvasMappingButton->setIcon(kisIcon("zoom-pixels"));
0124         canvasMappingMode = i18n("Pixel Size");
0125     }
0126 
0127     d->canvasMappingButton->setToolTip(
0128                         i18n("Map the displayed canvas size between pixel size or print size\n"
0129                              "Current Mapping: %1", canvasMappingMode));
0130 }
0131