File indexing completed on 2024-12-01 04:20:32
0001 /* 0002 * SPDX-FileCopyrightText: 2021 Alexander Stippich <a.stippich@gmx.net> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #ifndef KSANE_COREOPTION_H 0008 #define KSANE_COREOPTION_H 0009 0010 #include <memory> 0011 0012 // Qt includes 0013 0014 #include "ksanecore_export.h" 0015 #include <QObject> 0016 #include <QString> 0017 #include <QVariant> 0018 0019 namespace KSaneCore 0020 { 0021 0022 class OptionPrivate; 0023 0024 /** 0025 * A wrapper class providing access to the internal KSaneBaseOption 0026 * to access all options provided by KSANECore/SANE 0027 */ 0028 class KSANECORE_EXPORT Option : public QObject 0029 { 0030 Q_OBJECT 0031 0032 public: 0033 /** This enumeration describes the type of the option. */ 0034 enum OptionType { TypeDetectFail, TypeBool, TypeInteger, TypeDouble, TypeValueList, TypeString, TypeGamma, TypeAction }; 0035 0036 Q_ENUM(OptionType) 0037 0038 /** This enumeration describes the unit of the value of the option, 0039 * if any. */ 0040 enum OptionUnit { UnitNone, UnitPixel, UnitBit, UnitMilliMeter, UnitDPI, UnitPercent, UnitMicroSecond, UnitSecond }; 0041 0042 Q_ENUM(OptionUnit) 0043 0044 /** This enumeration describes the current statue of the value of 0045 * the option, indicating if this option should be displayed or not. */ 0046 enum OptionState { StateHidden, StateDisabled, StateActive }; 0047 0048 Q_ENUM(OptionState) 0049 0050 explicit Option(QObject *parent = nullptr); 0051 ~Option() override; 0052 0053 /** This function returns the internal name of the option 0054 * @return the internal name */ 0055 QString name() const; 0056 0057 /** This function returns the translated title of the option 0058 * @return the title */ 0059 QString title() const; 0060 0061 /** This function returns a more verbose, translated description 0062 * of the option. 0063 * @return the description */ 0064 QString description() const; 0065 0066 /** This function the type of the option as determined by KSANECore. 0067 * Each type provides a different implementation for different 0068 * variable types, e.g. integer, float or string. 0069 * @return the type of option the of value OptionType */ 0070 OptionType type() const; 0071 0072 /** This function returns the state of the option indicating 0073 * if the function is disabled or should be hidden. 0074 * @return the state of option the of value OptionState */ 0075 OptionState state() const; 0076 0077 /** This function returns the currently active value for the option. 0078 * @return the current value */ 0079 QVariant value() const; 0080 0081 /** This function returns the minimum value for the option. 0082 * Returns an empty QVariant if this value is not applicable 0083 * for the option type. 0084 * @return the minimum value */ 0085 QVariant minimumValue() const; 0086 0087 /** This function returns the maximum value for the option. 0088 * Returns an empty QVariant if this value is not applicable 0089 * for the option type. 0090 * @return the maximum value */ 0091 QVariant maximumValue() const; 0092 0093 /** This function returns the step value for the option. 0094 * Returns an empty QVariant if this value is not applicable 0095 * for the option type. 0096 * @return the step value */ 0097 QVariant stepValue() const; 0098 0099 /** This function returns the list of possible values if the option 0100 * is of type OptionType::TypeValueList. The list may contain 0101 * formatted or translated values. 0102 * @return a list with all possible values */ 0103 QVariantList valueList() const; 0104 0105 /** This function returns the list of possible values if the option 0106 * is of type OptionType::TypeValueList. The list contains the raw 0107 * internal values without any formatting or translation. 0108 * @return a list with all possible internal values */ 0109 QVariantList internalValueList() const; 0110 0111 /** This function returns an enum specifying whether the values 0112 * of the option have a unit, e.g. mm, px, etc. 0113 * @return unit of value CoreOptionUnit */ 0114 OptionUnit valueUnit() const; 0115 0116 /** This function returns the size of the values of the option 0117 * of type CoreOptionType::TypeValueList. 0118 * If the size is greater than one, value() and setValue() 0119 * return and expect a QVariantList with an accordingly number 0120 * of elements. If the option is a CoreOptionType::TypeString, 0121 * the size represents the number of characters in the string. 0122 * @return the number of elements */ 0123 int valueSize() const; 0124 0125 /** This function temporarily stores the current value 0126 * in a member variable. */ 0127 bool storeCurrentData(); 0128 0129 /** This function restores the previously saved value 0130 * and makes it the current value. */ 0131 bool restoreSavedData(); 0132 0133 Q_SIGNALS: 0134 /** This signal is emitted when the option is reloaded, which may 0135 * happen if the value of other options has changed. */ 0136 void optionReloaded(); 0137 0138 /** This signal is emitted when the current value is updated, 0139 * either when a user sets a new value or by a reload by the backend. */ 0140 void valueChanged(const QVariant &value); 0141 0142 public Q_SLOTS: 0143 0144 /** This slot allows to change the current value of the option. 0145 * @param value the new value of option inside a QVariant. 0146 * In case the variant cannot be cast to a value suitable for 0147 * the specific option, the value is discarded. */ 0148 bool setValue(const QVariant &value); 0149 0150 protected: 0151 std::unique_ptr<KSaneCore::OptionPrivate> d; 0152 }; 0153 0154 } // namespace KSaneCore 0155 0156 #endif // KSANE_COREOPTION_H