/* ============================================================ * * Date : 2008-04-17 * Description : Sane plugin interface for KDE * * Copyright (C) 2008 by Kare Sars * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) version 3, or any * later version accepted by the membership of KDE e.V. (or its * successor approved by the membership of KDE e.V.), which shall * act as a proxy defined in Section 6 of version 3 of the license. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program. If not, see . * * ============================================================ */ #include "sanedialog.h" #include #include "kpLogCategories.h" #include #include #include #include #include SaneDialog::SaneDialog(QWidget *parent) : KPageDialog(parent) { setFaceType(static_cast (Plain)); setWindowTitle(i18nc("@title:window", "Acquire Image")); buttonBox()->setStandardButtons(QDialogButtonBox::Close); buttonBox()->button(QDialogButtonBox::Close)->setDefault(true); m_ksanew = new KSaneIface::KSaneWidget(this); addPage(m_ksanew, QString()); connect (m_ksanew, &KSaneIface::KSaneWidget::scannedImageReady, this, &SaneDialog::imageReady); m_openDev = QString(); } bool SaneDialog::setup() { if(!m_ksanew) { // new failed return false; } if (!m_openDev.isEmpty()) { return true; } // need to select a scanner m_openDev = m_ksanew->selectDevice(parentWidget()); if (m_openDev.isEmpty()) { // either no scanner was found or then cancel was pressed. return false; } if (!m_ksanew->openDevice(m_openDev)) { // could not open the scanner KMessageBox::error(parentWidget(), i18n("Opening the selected scanner failed.")); m_openDev = QString(); return false; } // restore scan dialog size and all options for the selected device if available KSharedConfigPtr configPtr = KSharedConfig::openConfig(QStringLiteral("scannersettings")); KWindowConfig::restoreWindowSize(windowHandle(), KConfigGroup(configPtr, "ScanDialog")); QString groupName = m_openDev; if (configPtr->hasGroup(groupName)) { KConfigGroup group(configPtr, groupName); QStringList keys = group.keyList(); for (int i = 0; i < keys.count(); i++) { m_ksanew->setOptVal(keys[i], group.readEntry(keys[i])); } } return true; } SaneDialog::~SaneDialog() { if (m_ksanew && !m_openDev.isEmpty()) { // save scan dialog size and all options for the selected device if available KSharedConfigPtr configPtr = KSharedConfig::openConfig(QStringLiteral("scannersettings")); KConfigGroup group(configPtr, "ScanDialog"); KWindowConfig::saveWindowSize(windowHandle(), group, KConfigGroup::Persistent); group = configPtr->group(m_openDev); QMap opts; m_ksanew->getOptVals(opts); QMap::const_iterator i = opts.constBegin(); for (; i != opts.constEnd(); ++i) { group.writeEntry(i.key(), i.value(), KConfigGroup::Persistent); } } } void SaneDialog::imageReady(const QImage &img) { Q_EMIT finalImage(img, nextId()); } int SaneDialog::nextId() { return ++m_currentId; }