File indexing completed on 2024-04-28 04:32:23
0001 /* 0002 * SPDX-FileCopyrightText: 2009 Kare Sars <kare dot sars at iki dot fi> 0003 * SPDX-FileCopyrightText: 2014 Gregor Mitsch : port to KDE5 frameworks 0004 * SPDX-FileCopyrightText: 2021 Alexander Stippich <a.stippich@gmx.net> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #ifndef KSANE_WIDGET_PRIVATE_H 0010 #define KSANE_WIDGET_PRIVATE_H 0011 0012 #include <QWidget> 0013 #include <QCheckBox> 0014 #include <QTimer> 0015 #include <QProgressBar> 0016 #include <QTabWidget> 0017 #include <QPushButton> 0018 #include <QVector> 0019 #include <QSplitter> 0020 #include <QToolButton> 0021 #include <QSet> 0022 0023 #include <KSaneCore/Interface> 0024 #include <KSaneCore/Option> 0025 0026 #include "ksanewidget.h" 0027 #include "ksaneoptionwidget.h" 0028 #include "ksaneviewer.h" 0029 #include "labeledcombo.h" 0030 #include "labeledfslider.h" 0031 #include "labeledentry.h" 0032 #include "ksanebutton.h" 0033 #include "labeledgamma.h" 0034 #include "labeledcheckbox.h" 0035 #include "splittercollapser.h" 0036 0037 #define IMG_DATA_R_SIZE 100000 0038 0039 /** This namespace collects all methods and classes in LibKSane. */ 0040 namespace KSaneIface 0041 { 0042 class KSaneWidgetPrivate: public QObject 0043 { 0044 Q_OBJECT 0045 0046 public: 0047 KSaneWidgetPrivate(KSaneWidget *); 0048 void clearDeviceOptions(); 0049 void createOptInterface(); 0050 void updatePreviewSize(); 0051 void setBusy(bool busy); 0052 KSaneOptionWidget *createOptionWidget(QWidget *parent, KSaneCore::Option *option); 0053 0054 float ratioToScanAreaX(float ratio); 0055 float ratioToScanAreaY(float ratio); 0056 float scanAreaToRatioX(float scanArea); 0057 float scanAreaToRatioY(float scanArea); 0058 0059 float ratioToDispUnitX(float ratio); 0060 float ratioToDispUnitY(float ratio); 0061 float dispUnitToRatioX(float mm); 0062 float dispUnitToRatioY(float mm); 0063 0064 bool scanSourceADF(); 0065 0066 public Q_SLOTS: 0067 void startFinalScan(); 0068 void startPreviewScan(); 0069 void scanDone(KSaneCore::Interface::ScanStatus status, const QString &strStatus); 0070 void previewScanDone(KSaneCore::Interface::ScanStatus status, const QString &strStatus); 0071 void oneFinalScanDone(KSaneCore::Interface::ScanStatus status, const QString &strStatus); 0072 void updateProgress(int progress); 0073 void updateCountDown(int remainingSeconds); 0074 void handleSelection(float tl_x, float tl_y, float br_x, float br_y); 0075 void signalDevListUpdate(const QList<KSaneCore::DeviceInformation*> &deviceList); 0076 void imageReady(const QImage &image); 0077 0078 private Q_SLOTS: 0079 0080 void setTLX(const QVariant &x); 0081 void setTLY(const QVariant &y); 0082 void setBRX(const QVariant &x); 0083 void setBRY(const QVariant &y); 0084 0085 void checkInvert(); 0086 void invertPreview(); 0087 0088 void updateScanSelection(); 0089 void setPossibleScanSizes(); 0090 void setPageSize(int index); 0091 0092 void updateCommonGamma(); 0093 void updatePreviewViewer(); 0094 0095 public: 0096 void alertUser(KSaneCore::Interface::ScanStatus status, const QString &strStatus); 0097 0098 public: 0099 KSaneCore::Interface *m_ksaneCoreInterface; 0100 0101 // backend independent 0102 QTabWidget *m_optsTabWidget; 0103 QScrollArea *m_basicScrollA; 0104 QWidget *m_basicOptsTab; 0105 QWidget *m_colorOpts; 0106 QScrollArea *m_advancedScrollA; 0107 QWidget *m_advancedOptsTab; 0108 QScrollArea *m_otherScrollA; 0109 QWidget *m_otherOptsTab; 0110 0111 QVector<int> m_sizeCodes; 0112 LabeledCombo *m_scanareaPapersize; 0113 bool m_settingPageSize = false; 0114 LabeledFSlider *m_scanareaWidth; 0115 LabeledFSlider *m_scanareaHeight; 0116 LabeledFSlider *m_scanareaX; 0117 LabeledFSlider *m_scanareaY; 0118 0119 QSplitter *m_splitter; 0120 SplitterCollapser *m_optionsCollapser; 0121 0122 QWidget *m_previewFrame; 0123 KSaneViewer *m_previewViewer; 0124 QWidget *m_btnFrame; 0125 QToolButton *m_zInBtn; 0126 QToolButton *m_zOutBtn; 0127 QToolButton *m_zSelBtn; 0128 QToolButton *m_zFitBtn; 0129 QToolButton *m_clearSelBtn; 0130 QPushButton *m_scanBtn; 0131 QPushButton *m_prevBtn; 0132 0133 QWidget *m_activityFrame; 0134 QLabel *m_warmingUp; 0135 QLabel *m_countDown; 0136 QProgressBar *m_progressBar; 0137 QPushButton *m_cancelBtn; 0138 0139 // Option variables 0140 QSet<QString> m_handledOptions; 0141 KSaneCore::Option *m_optSource; 0142 KSaneCore::Option *m_optNegative; 0143 KSaneCore::Option *m_optFilmType; 0144 KSaneCore::Option *m_optMode; 0145 KSaneCore::Option *m_optDepth; 0146 KSaneCore::Option *m_optRes; 0147 KSaneCore::Option *m_optResX; 0148 KSaneCore::Option *m_optResY; 0149 KSaneCore::Option *m_optTlX; 0150 KSaneCore::Option *m_optTlY; 0151 KSaneCore::Option *m_optBrX; 0152 KSaneCore::Option *m_optBrY; 0153 KSaneCore::Option *m_optPreview; 0154 KSaneCore::Option *m_optGamR; 0155 KSaneCore::Option *m_optGamG; 0156 KSaneCore::Option *m_optGamB; 0157 KSaneCore::Option *m_optInvert; 0158 LabeledCheckbox *m_splitGamChB; 0159 LabeledGamma *m_commonGamma; 0160 KSaneCore::Option *m_optWaitForBtn; 0161 0162 // preview variables 0163 float m_previewWidth; 0164 float m_previewHeight; 0165 float m_previewDPI; 0166 QImage m_previewImg; 0167 bool m_isPreview; 0168 bool m_autoSelect; 0169 0170 bool m_cancelMultiScan = false; 0171 bool m_scanOngoing = false; 0172 int m_selIndex; 0173 0174 KSaneWidget *q; 0175 }; 0176 0177 } // NameSpace KSaneIface 0178 0179 #endif // SANE_WIDGET_H