File indexing completed on 2024-05-19 04:26:53

0001 /*
0002  *  SPDX-FileCopyrightText: 2020 Deif Lou <ginoba@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "AngleSelector.h"
0007 
0008 #include "kis_debug.h"
0009 
0010 
0011 const QList<QString> FlipOptionsMode = {
0012     "NoFlipOptions",    // 0 = KisAngleSelector::FlipOptionsMode_NoFlipOptions
0013     "MenuButton",       //     KisAngleSelector::FlipOptionsMode_MenuButton
0014     "Buttons",          //     KisAngleSelector::FlipOptionsMode_Buttons
0015     "ContextMenu"       //     KisAngleSelector::FlipOptionsMode_ContextMenu
0016 };
0017 
0018 const QList<QString> IncreasingDirection = {
0019     "CounterClockwise", // 0 = KisAngleGauge::IncreasingDirection_CounterClockwise
0020     "Clockwise"         //     KisAngleGauge::IncreasingDirection_Clockwise
0021 };
0022 
0023 struct AngleSelector::Private {
0024     Private() {}
0025 
0026     KisAngleSelector *widget;
0027 };
0028 
0029 AngleSelector::AngleSelector()
0030     : QObject()
0031     , d(new Private)
0032 {
0033     d->widget = new KisAngleSelector();
0034 
0035     // Forward KisAngleSelector::angleChanged to AngleSelector::angleChanged
0036     connect(d->widget, SIGNAL(angleChanged(qreal)), this, SIGNAL(angleChanged(qreal)));
0037 }
0038 
0039 AngleSelector::~AngleSelector()
0040 {
0041     delete d;
0042 }
0043 
0044 QWidget* AngleSelector::widget() const
0045 {
0046     return d->widget;
0047 }
0048 
0049 qreal AngleSelector::angle() const
0050 {
0051     return d->widget->angle();
0052 }
0053 
0054 qreal AngleSelector::snapAngle() const
0055 {
0056     return d->widget->snapAngle();
0057 }
0058 
0059 qreal AngleSelector::resetAngle() const
0060 {
0061     return d->widget->resetAngle();
0062 }
0063 
0064 int AngleSelector::decimals() const
0065 {
0066     return d->widget->decimals();
0067 }
0068 
0069 qreal AngleSelector::maximum() const
0070 {
0071     return d->widget->maximum();
0072 }
0073 
0074 qreal AngleSelector::minimum() const
0075 {
0076     return d->widget->minimum();
0077 }
0078 
0079 QString AngleSelector::prefix() const
0080 {
0081     return d->widget->prefix();
0082 }
0083 
0084 bool AngleSelector::wrapping() const
0085 {
0086     return d->widget->wrapping();
0087 }
0088 
0089 QString AngleSelector::flipOptionsMode() const
0090 {
0091     KisAngleSelector::FlipOptionsMode mode = d->widget->flipOptionsMode();
0092     if (!(0 <= mode && mode <= FlipOptionsMode.size())) {
0093         warnScript << "AngleSelector::flipOptionsMode() doesn't handle mode '" << mode << "'!";
0094         return "";
0095     }
0096     return FlipOptionsMode[mode];
0097 }
0098 
0099 int AngleSelector::widgetsHeight() const
0100 {
0101     return d->widget->widgetsHeight();
0102 }
0103 
0104 QString AngleSelector::increasingDirection() const
0105 {
0106     KisAngleGauge::IncreasingDirection increasingDirection = d->widget->increasingDirection();
0107     if (!(0 <= increasingDirection && increasingDirection <= IncreasingDirection.size())) {
0108         warnScript << "AngleSelector::increasingDirection() doesn't handle mode '" << increasingDirection << "'!";
0109         return "";
0110     }
0111     return IncreasingDirection[increasingDirection];
0112 }
0113 
0114 bool AngleSelector::isUsingFlatSpinBox() const
0115 {
0116     return d->widget->isUsingFlatSpinBox();
0117 }
0118 
0119 void AngleSelector::setAngle(qreal newAngle)
0120 {
0121     d->widget->setAngle(newAngle);
0122 }
0123 
0124 void AngleSelector::setSnapAngle(qreal newSnapAngle)
0125 {
0126     d->widget->setSnapAngle(newSnapAngle);
0127 }
0128 
0129 void AngleSelector::setResetAngle(qreal newResetAngle)
0130 {
0131     d->widget->setResetAngle(newResetAngle);
0132 }
0133 
0134 void AngleSelector::setDecimals(int newNumberOfDecimals)
0135 {
0136     d->widget->setDecimals(newNumberOfDecimals);
0137 }
0138 
0139 void AngleSelector::setMaximum(qreal newMaximum)
0140 {
0141     d->widget->setMaximum(newMaximum);
0142 }
0143 
0144 void AngleSelector::setMinimum(qreal newMinimum)
0145 {
0146     d->widget->setMinimum(newMinimum);
0147 }
0148 
0149 void AngleSelector::setRange(qreal newMinimum, qreal newMaximum)
0150 {
0151     d->widget->setRange(newMinimum, newMaximum);
0152 }
0153 
0154 void AngleSelector::setPrefix(const QString &newPrefix)
0155 {
0156     d->widget->setPrefix(newPrefix);
0157 }
0158 
0159 void AngleSelector::setWrapping(bool newWrapping)
0160 {
0161     d->widget->setWrapping(newWrapping);
0162 }
0163 
0164 void AngleSelector::setFlipOptionsMode(QString newMode)
0165 {
0166     int index = FlipOptionsMode.indexOf(newMode);
0167     if (index == -1) {
0168         dbgScript << "Script using AngleSelector.setFlipOptionsMode() passed invalid mode '" << newMode << "', ignoring.";
0169         return;
0170     }
0171     d->widget->setFlipOptionsMode((KisAngleSelector::FlipOptionsMode) index);
0172 }
0173 
0174 void AngleSelector::setWidgetsHeight(int newHeight)
0175 {
0176     d->widget->setWidgetsHeight(newHeight);
0177 }
0178 
0179 void AngleSelector::setIncreasingDirection(QString newIncreasingDirection)
0180 {
0181     int index = IncreasingDirection.indexOf(newIncreasingDirection);
0182     if (index == -1) {
0183         dbgScript << "Script using AngleSelector.setIncreasingDirection() passed invalid mode '" << newIncreasingDirection << "', ignoring.";
0184         return;
0185     }
0186     d->widget->setIncreasingDirection((KisAngleGauge::IncreasingDirection) index);
0187 }
0188 
0189 void AngleSelector::useFlatSpinBox(bool newUseFlatSpinBox)
0190 {
0191     d->widget->useFlatSpinBox(newUseFlatSpinBox);
0192 }
0193 
0194 void AngleSelector::reset()
0195 {
0196     d->widget->reset();
0197 }
0198 
0199 qreal AngleSelector::closestCoterminalAngleInRange(qreal angle, qreal minimum, qreal maximum, bool *ok)
0200 {
0201     return KisAngleSelector::closestCoterminalAngleInRange(angle, minimum, maximum, ok);
0202 }
0203 
0204 qreal AngleSelector::closestCoterminalAngleInRange(qreal angle, bool *ok) const
0205 {
0206     return d->widget->closestCoterminalAngleInRange(angle, ok);
0207 }
0208 
0209 qreal AngleSelector::flipAngle(qreal angle, Qt::Orientations orientations)
0210 {
0211     return KisAngleSelector::flipAngle(angle, orientations);
0212 }
0213 
0214 qreal AngleSelector::flipAngle(qreal angle, qreal minimum, qreal maximum, Qt::Orientations orientations, bool *ok)
0215 {
0216     return KisAngleSelector::flipAngle(angle, minimum, maximum, orientations, ok);
0217 }
0218 
0219 void AngleSelector::flip(Qt::Orientations orientations)
0220 {
0221     bool ok = false;
0222     qreal flippedAngle = flipAngle(angle(), minimum(), maximum(), orientations, &ok);
0223     if (ok) {
0224         setAngle(flippedAngle);
0225     }
0226 }