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