File indexing completed on 2024-04-28 04:32:18

0001 /*
0002  * SPDX-FileCopyrightText: 2009, 2017 Kare Sars <kare dot sars at iki dot fi>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #include "ksanewidget.h"
0008 
0009 // Qt includes
0010 #include <QMap>
0011 #include <QHBoxLayout>
0012 #include <QTimer>
0013 #include <QDebug>
0014 
0015 // KDE includes
0016 #include <KLocalizedString>
0017 #include <QPushButton>
0018 
0019 // Local includes
0020 #include "twainiface.h"
0021 
0022 namespace KSaneIface
0023 {
0024 
0025 KSaneWidget::KSaneWidget(QWidget *parent)
0026     : QWidget(parent), d(new KSaneWidgetPrivate)
0027 {
0028     QPushButton *openDialog = new QPushButton;
0029     openDialog->setText(i18n("Open scan dialog"));
0030     QHBoxLayout *lay = new QHBoxLayout;
0031     lay->addWidget(openDialog);
0032     setLayout(lay);
0033 
0034     connect(openDialog, &QPushButton::clicked, d, &KSaneWidgetPrivate::ReOpenDialog);
0035 
0036     // Forward signals from the private class
0037     //connect(d, SIGNAL(scanProgress(int)), this, SIGNAL(scanProgress(int)));
0038     connect(d, &KSaneWidgetPrivate::ImageReady, this, &KSaneWidget::imageReady);
0039     connect(d, &KSaneWidgetPrivate::qImageReady, this, &KSaneWidget::scannedImageReady);
0040     //connect(d, SIGNAL(scanDone(int,QString)), this, SIGNAL(scanDone(int,QString)));
0041 
0042 }
0043 
0044 KSaneWidget::~KSaneWidget()
0045 {
0046     delete d;
0047 }
0048 
0049 QString KSaneWidget::selectDevice(QWidget *parent)
0050 {
0051     //qDebug() << "KSaneWidget::selectDevice";
0052     return d->SelectSource();
0053 }
0054 
0055 bool KSaneWidget::openDevice(const QString &device_name)
0056 {
0057     //qDebug() << "KSaneWidget::openDevice" << device_name;
0058     if (!d->OpenSource(device_name)) {
0059         return false;
0060     }
0061     QTimer::singleShot(0, d, &KSaneWidgetPrivate::OpenDialog);
0062 
0063     return true;
0064 }
0065 
0066 bool KSaneWidget::closeDevice()
0067 {
0068     //qDebug() << "KSaneWidget::closeDevice";
0069     d->CloseDSM();
0070     return true;
0071 }
0072 
0073 QImage KSaneWidget::toQImage(const QByteArray &data,
0074                              int width,
0075                              int height,
0076                              int bytes_per_line,
0077                              ImageFormat format)
0078 {
0079     return toQImageSilent(data,
0080                           width,
0081                           height,
0082                           bytes_per_line,
0083                           format);
0084 }
0085 
0086 QImage KSaneWidget::toQImageSilent(const QByteArray &data,
0087                                    int width,
0088                                    int height,
0089                                    int bytes_per_line,
0090                                    ImageFormat format)
0091 {
0092     return KSaneWidget::toQImageSilent(data,
0093                                        width,
0094                                        height,
0095                                        bytes_per_line,
0096                                        (int) currentDPI(),
0097                                        format);
0098 }
0099 
0100 QImage KSaneWidget::toQImageSilent(const QByteArray &data,
0101                                    int width,
0102                                    int height,
0103                                    int bytes_per_line,
0104                                    int dpi,
0105                                    ImageFormat format)
0106 {
0107     QImage img = QImage::fromData(data, "BMP");
0108     return img;
0109 }
0110 
0111 void KSaneWidget::scanFinal()
0112 {
0113 }
0114 
0115 void KSaneWidget::startPreviewScan()
0116 {
0117 }
0118 
0119 void KSaneWidget::scanCancel()
0120 {
0121     Q_EMIT scanProgress(0);
0122 }
0123 
0124 // stubbed functions that will not get an implementation any time soon.
0125 QString KSaneWidget::deviceName() const
0126 {
0127     return QString();
0128 }
0129 QString KSaneWidget::deviceVendor() const
0130 {
0131     return QString();
0132 }
0133 QString KSaneWidget::deviceModel() const
0134 {
0135     return QString();
0136 }
0137 QString KSaneWidget::vendor() const
0138 {
0139     return QString();
0140 }
0141 QString KSaneWidget::make() const
0142 {
0143     return QString();
0144 }
0145 QString KSaneWidget::model() const
0146 {
0147     return QString();
0148 }
0149 void KSaneWidget::getOptVals(QMap <QString, QString> &opts)
0150 {
0151     opts.clear();
0152 }
0153 bool KSaneWidget::getOptVal(const QString &optname, QString &value)
0154 {
0155     return false;
0156 }
0157 int KSaneWidget::setOptVals(const QMap <QString, QString> &opts)
0158 {
0159     return 0;
0160 }
0161 bool KSaneWidget::setOptVal(const QString &option, const QString &value)
0162 {
0163     return false;
0164 }
0165 void KSaneWidget::setScanButtonText(const QString &scanLabel) {}
0166 void KSaneWidget::setPreviewButtonText(const QString &previewLabel) {}
0167 void KSaneWidget::enableAutoSelect(bool enable) {}
0168 float KSaneWidget::currentDPI()
0169 {
0170     return 0.0;
0171 }
0172 void KSaneWidget::setPreviewResolution(float dpi)
0173 {
0174     Q_UNUSED(dpi);
0175 }
0176 void KSaneWidget::setSelection(QPointF lefttop, QPointF rightbottom)
0177 {
0178     Q_UNUSED(lefttop);
0179     Q_UNUSED(rightbottom);
0180 }
0181 void KSaneWidget::setOptionsCollapsed(bool) {}
0182 void KSaneWidget::setScanButtonHidden(bool) {}
0183 void KSaneWidget::initGetDeviceList() const {}
0184 }  // NameSpace KSaneIface