diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 47d455dd55be855e4cc691c32f687f723d9247ee (patch) | |
tree | 52e236aaa2576bdb3840ebede26619692fed6d7d /kooka/kocrbase.cpp | |
download | tdegraphics-47d455dd55be855e4cc691c32f687f723d9247ee.tar.gz tdegraphics-47d455dd55be855e4cc691c32f687f723d9247ee.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdegraphics@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kooka/kocrbase.cpp')
-rw-r--r-- | kooka/kocrbase.cpp | 368 |
1 files changed, 368 insertions, 0 deletions
diff --git a/kooka/kocrbase.cpp b/kooka/kocrbase.cpp new file mode 100644 index 00000000..889739e7 --- /dev/null +++ b/kooka/kocrbase.cpp @@ -0,0 +1,368 @@ +/*************************************************************************** + kocrbase.cpp - base dialog for ocr + ------------------- + begin : Fri Now 10 2000 + copyright : (C) 2000 by Klaas Freitag + email : [email protected] + ***************************************************************************/ + +/*************************************************************************** + * * + * This file may be distributed and/or modified under the terms of the * + * GNU General Public License version 2 as published by the Free Software * + * Foundation and appearing in the file COPYING included in the * + * packaging of this file. * + * + * As a special exception, permission is given to link this program * + * with any version of the KADMOS ocr/icr engine of reRecognition GmbH, * + * Kreuzlingen and distribute the resulting executable without * + * including the source code for KADMOS in the source distribution. * + * + * As a special exception, permission is given to link this program * + * with any edition of Qt, and distribute the resulting executable, * + * without including the source code for Qt in the source distribution. * + * * + ***************************************************************************/ + +#include <qlayout.h> +#include <qlabel.h> +#include <qfileinfo.h> +#include <qtooltip.h> +#include <kio/job.h> +#include <kio/previewjob.h> + +#include <kapplication.h> +#include <kconfig.h> +#include <kglobal.h> +#include <kdebug.h> +#include <klocale.h> +#include <kanimwidget.h> +#include <kseparator.h> +#include <kmessagebox.h> +#include <kactivelabel.h> +#include <qhbox.h> +#include <qvbox.h> + +#include "resource.h" +#include "kocrbase.h" +#include "ksaneocr.h" +#include "kookaimage.h" + +#include <kscanslider.h> +#include <kstandarddirs.h> +#include <kfilemetainfo.h> +#include <ksconfig.h> +#include <qstringlist.h> +#include <qcolor.h> +#include <qgrid.h> +#include <qsizepolicy.h> +#include <qgroupbox.h> +#include <qcheckbox.h> + +KOCRBase::KOCRBase( QWidget *parent, KSpellConfig *spellConfig, + KDialogBase::DialogType face ) + :KDialogBase( face, i18n("Optical Character Recognition"), + User2|Close|User1, User1, parent,0, false, true, + KGuiItem( i18n("Start OCR" ), "launch", + i18n("Start the Optical Character Recognition process" )), + KGuiItem( i18n("Cancel" ), "stopocr", + i18n("Stop the OCR Process" ))), + m_animation(0L), + m_metaBox(0L), + m_imgHBox(0L), + m_previewPix(0L), + m_currImg(0L), + m_spellConfig(spellConfig), + m_wantSpellCfg(true), + m_userWantsSpellCheck(true), + m_cbWantCheck(0L), + m_gbSpellOpts(0L) +{ + kdDebug(28000) << "OCR Base Dialog!" << endl; + // Layout-Boxes + + KConfig *konf = KGlobal::config (); + KConfigGroupSaver gs( konf, CFG_OCR_KSPELL ); + m_userWantsSpellCheck = konf->readBoolEntry(CFG_WANT_KSPELL, true); + + /* Connect signals which disable the fields and store the configuration */ + connect( this, SIGNAL( user1Clicked()), this, SLOT( writeConfig())); + connect( this, SIGNAL( user1Clicked()), this, SLOT( startOCR() )); + connect( this, SIGNAL( user2Clicked()), this, SLOT( stopOCR() )); + m_previewSize.setWidth(200); + m_previewSize.setHeight(300); + + enableButton( User1, true ); /* start ocr */ + enableButton( User2, false ); /* Cancel */ + enableButton( Close, true ); +} + + +KAnimWidget* KOCRBase::getAnimation(QWidget *parent) +{ + if( ! m_animation ) + { + m_animation = new KAnimWidget( QString("kde"), 48, parent, "ANIMATION" ); + } + return( m_animation ); +} + +EngineError KOCRBase::setupGui() +{ + ocrIntro(); + imgIntro(); + if( m_wantSpellCfg ) spellCheckIntro(); + + return ENG_OK; +} + +void KOCRBase::imgIntro() +{ + m_imgPage = addVBoxPage( i18n("Image") ); + (void) new QLabel( i18n("Image Information"), m_imgPage ); + + // Caption - Label and image + m_imgHBox = new QHBox( m_imgPage ); + + m_imgHBox->setSpacing( KDialog::spacingHint()); + + m_previewPix = new QLabel( m_imgHBox ); + m_previewPix->setPixmap(QPixmap()); + m_previewPix->setFixedSize(m_previewSize); + m_previewPix->setAlignment( Qt::AlignCenter ); + m_previewPix->setFrameStyle( QFrame::Panel | QFrame::Sunken ); + // m_previewPix->resize(m_previewSize); + + /* See introduceImage where the meta box is filled with data from the + * incoming widget. + */ + m_metaBox = new QVBox( m_imgHBox ); +} + +/* + * This creates a Tab OCR + */ +void KOCRBase::ocrIntro( ) +{ + m_ocrPage = addVBoxPage( i18n("OCR") ); + + // Caption - Label and image + /* labelstring */ + (void) new QLabel( i18n("<b>Starting Optical Character Recognition with %1</b><p>"). + arg( ocrEngineName() ), m_ocrPage ); + // Find the kadmos logo and display if available + KStandardDirs stdDir; + QString logo = stdDir.findResource( "data", "kooka/pics/" + ocrEngineLogo() ); + + kdDebug(28000)<< "Reading logo " << logo << endl; + QPixmap pix; + QWidget *pa = m_ocrPage; + + if( pix.load( logo )) + { + QHBox *hb_cap = new QHBox( m_ocrPage ); + hb_cap->setSpacing( KDialog::spacingHint()); + + QLabel *imgLab = new QLabel( hb_cap ); + imgLab->setAlignment( Qt::AlignHCenter | Qt::AlignTop ); + imgLab->setPixmap( pix ); + pa = hb_cap; + } + + (void) new KActiveLabel( ocrEngineDesc(), pa ); +} + + +void KOCRBase::spellCheckIntro() +{ + m_spellchkPage = addVBoxPage( i18n("Spell-checking") ); + + /* Want the spell checking at all? Checkbox here */ + QGroupBox *gb1 = new QGroupBox( 1, Qt::Horizontal, i18n("OCR Post Processing"), m_spellchkPage ); + m_cbWantCheck = new QCheckBox( i18n("Enable spell-checking for validation of the OCR result"), + gb1 ); + /* Spellcheck options */ + m_gbSpellOpts = new QGroupBox( 1, Qt::Horizontal, i18n("Spell-Check Options"), + m_spellchkPage ); + + KSpellConfig *sCfg = new KSpellConfig( m_gbSpellOpts, "SPELLCHK", m_spellConfig, false ); + /* A space eater */ + QWidget *spaceEater = new QWidget(m_spellchkPage); + spaceEater->setSizePolicy( QSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored )); + + /* connect toggle button */ + connect( m_cbWantCheck, SIGNAL(toggled(bool)), this, SLOT(slWantSpellcheck(bool))); + m_cbWantCheck->setChecked( m_userWantsSpellCheck ); + m_gbSpellOpts->setEnabled( m_userWantsSpellCheck ); + m_spellConfig = sCfg; + + connect( sCfg, SIGNAL(configChanged()), + this, SLOT(slSpellConfigChanged())); +} + +void KOCRBase::slSpellConfigChanged() +{ + kdDebug(28000) << "Spellcheck config changed" << endl; +} + + + +void KOCRBase::stopAnimation() +{ + if( m_animation ) + m_animation->stop(); +} + +void KOCRBase::startAnimation() +{ + if( m_animation ) + m_animation->start(); +} + +KOCRBase::~KOCRBase() +{ + +} + +void KOCRBase::introduceImage( KookaImage* img) +{ + if( ! (img && img->isFileBound()) ) return; + KFileMetaInfo info = img->fileMetaInfo(); + QStringList groups; + if ( info.isValid() ) + groups = info.preferredGroups(); + + delete m_metaBox; + m_metaBox = new QVBox( m_imgHBox ); + + /* Start to create a preview job for the thumb */ + KURL::List li(img->url()); + KIO::Job *m_job = KIO::filePreview(li, m_previewSize.width(), + m_previewSize.height()); + + if( m_job ) + { + connect( m_job, SIGNAL( result( KIO::Job * )), + this, SLOT( slPreviewResult( KIO::Job * ))); + connect( m_job, SIGNAL( gotPreview( const KFileItem*, const QPixmap& )), + SLOT( slGotPreview( const KFileItem*, const QPixmap& ) )); + /* KIO::Jo result is called in any way: Success, Failed, Error, + * thus connecting the failed is not really necessary. + */ + } + + for ( QStringList::Iterator it = groups.begin(); it != groups.end(); ++it ) + { + QString theGroup(*it); + + kdDebug(29000) << "handling the group " << theGroup << endl; + + QStringList keys = info.group(theGroup).supportedKeys(); + + if( keys.count() > 0 ) + { + // info.groupInfo( theGroup )->translatedName() + // FIXME: howto get the translated group name? + QLabel *lGroup = new QLabel( theGroup, m_metaBox ); + lGroup->setBackgroundColor( QColor(gray)); + lGroup->setMargin( KDialog::spacingHint()); + + QGrid *nGrid = new QGrid( 2, m_metaBox ); + nGrid->setSpacing( KDialog::spacingHint()); + for ( QStringList::Iterator keyIt = keys.begin(); keyIt != keys.end(); ++keyIt ) + { + KFileMetaInfoItem item = info.item(*keyIt); + QString itKey = item.translatedKey(); + if( itKey.isEmpty() ) + itKey = item.key(); + if( ! itKey.isEmpty() ) + { + (void) new QLabel( item.translatedKey() + ": ", nGrid ); + (void) new QLabel( item.string(), nGrid ); + kdDebug(29000) << "hasKey " << *keyIt << endl; + } + } + } + } + QWidget *spaceEater = new QWidget( m_metaBox ); + spaceEater->setSizePolicy( QSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored )); + m_metaBox->show(); +} + +void KOCRBase::slPreviewResult(KIO::Job *job ) +{ + // nothing + if( job && job->error() > 0 ) + { + kdDebug(28000) << "Thumbnail Creation ERROR: " << job->errorString() << endl; + job->showErrorDialog( 0 ); + } +} + +void KOCRBase::slGotPreview( const KFileItem*, const QPixmap& newPix ) +{ + kdDebug(28000) << "Got the preview" << endl; + m_previewPix->setPixmap(newPix); + + if( m_previewPix && m_currImg ) + { + m_previewPix->setPixmap(newPix); + } +} + + +void KOCRBase::writeConfig() +{ + +} + +bool KOCRBase::wantSpellCheck() +{ + return m_userWantsSpellCheck; +} + +void KOCRBase::startOCR() +{ + /* en- and disable the buttons */ + kdDebug(28000) << "Base: Starting OCR" << endl; + + enableFields(false); + enableButton( User1, false ); /* Start OCR */ + enableButton( User2, true ); /* Stop OCR */ + enableButton( Close, true ); + + startAnimation(); +} + +void KOCRBase::stopOCR() +{ + enableFields(true); + + enableButton( User1, true ); /* start ocr */ + enableButton( User2, false ); /* Cancel */ + enableButton( Close, true ); + + stopAnimation(); + +} + +void KOCRBase::enableFields(bool) +{ + +} + +void KOCRBase::slWantSpellcheck( bool wantIt ) +{ + if( m_gbSpellOpts ) + { + m_gbSpellOpts->setEnabled( wantIt ); + } + m_userWantsSpellCheck = wantIt; + + KConfig *konf = KGlobal::config (); + KConfigGroupSaver gs( konf, CFG_OCR_KSPELL ); + konf->writeEntry( CFG_WANT_KSPELL, wantIt ); +} + +/* The End ;) */ +#include "kocrbase.moc" |