1 /* ============================================================
2  *
3  * SPDX-FileCopyrightText: 2021 Alexander Stippich <a.stippich@gmx.net>
4  *
5  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6  *
7  * ============================================================ */
8 
9 #ifndef KSANE_PAGESIZE_OPTION_H
10 #define KSANE_PAGESIZE_OPTION_H
11 
12 #include <QList>
13 
14 #include "ksanebaseoption.h"
15 
16 namespace KSaneIface
17 {
18 
19 static const QString PageSizeOptionName = QStringLiteral("KSane::PageSize");
20 
21 class KSanePageSizeOption : public KSaneBaseOption
22 {
23     Q_OBJECT
24 
25 public:
26     KSanePageSizeOption(KSaneBaseOption *m_optionTopLeftX, KSaneBaseOption *m_optionTopLeftY,
27                         KSaneBaseOption *m_optionBottomRightX, KSaneBaseOption *m_optionBottomRightY,
28                         KSaneBaseOption *m_optionResolution);
29 
30     QVariant value() const override;
31     QString valueAsString() const override;
32 
33     KSaneOption::KSaneOptionState state() const override;
34     QString name() const override;
35     QString title() const override;
36     QString description() const override;
37     QVariantList valueList() const override;
38 
39 public Q_SLOTS:
40     bool setValue(const QVariant &value) override;
41 
42 private Q_SLOTS:
43     void optionTopLeftXUpdated();
44     void optionTopLeftYUpdated();
45     void optionBottomRightXUpdated();
46     void optionBottomRightYUpdated();
47 
48 private:
49     double ensureMilliMeter(KSaneBaseOption *option, double value);
50 
51     KSaneBaseOption *m_optionTopLeftX;
52     KSaneBaseOption *m_optionTopLeftY;
53     KSaneBaseOption *m_optionBottomRightX;
54     KSaneBaseOption *m_optionBottomRightY;
55     KSaneBaseOption *m_optionResolution;
56     int m_currentIndex = -1;
57     KSaneOption::KSaneOptionState m_state = KSaneOption::StateDisabled;
58     QVariantList m_availableSizesListNames;
59     QList<QSizeF> m_availableSizesList;
60 };
61 
62 }  // NameSpace KSaneIface
63 
64 #endif // KSANE_PAGESIZE_OPTION_H
65