1 /* ============================================================
2  *
3  * SPDX-FileCopyrightText: 2009 Kare Sars <kare dot sars at iki dot fi>
4  * SPDX-FileCopyrightText: 2014 Gregor Mitsch : port to KDE5 frameworks
5  *
6  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7  *
8  * ============================================================ */
9 
10 #ifndef KSANE_BASE_OPTION_H
11 #define KSANE_BASE_OPTION_H
12 
13 // Qt includes
14 #include <QObject>
15 
16 //KDE includes
17 
18 #include <klocalizedstring.h>
19 
20 // Sane includes
21 extern "C"
22 {
23 #include <sane/sane.h>
24 #include <sane/saneopts.h>
25 }
26 
27 #include "../ksaneoption.h"
28 
29 #define SANE_TRANSLATION_DOMAIN "sane-backends"
30 
31 namespace KSaneIface
32 {
33 
sane_i18n(const char * text)34 inline QString sane_i18n(const char *text) {
35     return i18nd(SANE_TRANSLATION_DOMAIN, text);
36 }
37 
38 
39 class KSaneBaseOption : public QObject
40 {
41     Q_OBJECT
42 
43 public:
44 
45     KSaneBaseOption();
46     KSaneBaseOption(const SANE_Handle handle, const int index);
47     ~KSaneBaseOption() override;
48     static KSaneOption::KSaneOptionType optionType(const SANE_Option_Descriptor *optDesc);
49 
50     bool needsPolling() const;
51     virtual void readOption();
52     virtual void readValue();
53 
54 
55     virtual QString name() const;
56     virtual QString title() const;
57     virtual QString description() const;
58     virtual KSaneOption::KSaneOptionType type() const;
59     virtual KSaneOption::KSaneOptionState state() const;
60     virtual QVariant minimumValue() const;
61     virtual QVariant maximumValue() const;
62     virtual QVariant stepValue() const;
63     virtual QVariant value() const;
64     virtual QVariantList valueList() const;
65     virtual QVariantList internalValueList() const;
66     virtual KSaneOption::KSaneOptionUnit valueUnit() const;
67     virtual int valueSize() const;
68     virtual QString valueAsString() const;
69 
70     bool storeCurrentData();
71     bool restoreSavedData();
72 
73 Q_SIGNALS:
74     void optionsNeedReload();
75     void valuesNeedReload();
76     void optionReloaded();
77     void valueChanged(const QVariant &value);
78 
79 public Q_SLOTS:
80 
81     virtual bool setValue(const QVariant &value);
82 
83 protected:
84 
85     static SANE_Word toSANE_Word(unsigned char *data);
86     static void fromSANE_Word(unsigned char *data, SANE_Word from);
87     bool writeData(void *data);
88 
89     SANE_Handle                   m_handle = nullptr;
90     int                           m_index = -1;
91     const SANE_Option_Descriptor *m_optDesc = nullptr; ///< This pointer is provided by sane
92     unsigned char                *m_data= nullptr;
93     KSaneOption::KSaneOptionType  m_optionType = KSaneOption::TypeDetectFail;
94 };
95 
96 }  // NameSpace KSaneIface
97 
98 #endif // KSANE_BASE_OPTION_H
99 
100