/*************************************************************************** kocrocrad.cpp - ocrad dialog ------------------- begin : Tue Jul 15 2003 copyright : (C) 2003 by Klaas Freitag email : freitag@suse.de ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* $Id$ */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "resource.h" #include "kocrocrad.h" #include #include "kookaimage.h" #include "kookapref.h" #include #include #include ocradDialog::ocradDialog( TQWidget *parent, KSpellConfig *spellConfig ) :KOCRBase( parent, spellConfig, KDialogBase::Tabbed ), m_ocrCmd( TQString()), m_orfUrlRequester(0L), m_layoutMode(0), m_binaryLabel(0), m_proc(0), m_version(0) { kdDebug(28000) << "Starting ocrad-Start-Dialog!" << endl; // Layout-Boxes } TQString ocradDialog::ocrEngineLogo() const { return "ocrad.png"; } TQString ocradDialog::ocrEngineName() const { return i18n("ocrad" ); } TQString ocradDialog::ocrEngineDesc() const { return i18n("ocrad is a Free Software project " "for optical character recognition.

" "The author of ocrad is Antonio Diaz
" "For more information about ocrad see " "" "http://www.gnu.org/software/ocrad/ocrad.html

" "Images should be scanned in black/white mode for ocrad.
" "Best results are achieved if the characters are at least 20 pixels high.

" "Problems arise, as usual, with very bold or very light or broken characters, " "the same with merged character groups."); } int ocradDialog::layoutDetectionMode() const { return m_layoutMode->currentItem(); } EngineError ocradDialog::setupGui() { KOCRBase::setupGui(); TQVBox *page = ocrPage(); Q_CHECK_PTR( page ); KConfig *conf = KGlobal::config (); conf->setGroup( CFG_GROUP_OCR_DIA ); // Horizontal line // (void) new KSeparator( KSeparator::HLine, page); // Entry-Field. TQString res = conf->readPathEntry( CFG_OCRAD_BINARY, "notFound" ); if( res == "notFound" ) { res = KookaPreferences::tryFindBinary("ocrad", CFG_OCRAD_BINARY); if( res.isEmpty() ) { /* Popup here telling that the config needs to be called */ KMessageBox::sorry( this, i18n( "The path to the ocrad binary is not configured yet.\n" "Please go to the Kooka configuration and enter the path manually."), i18n("OCR Software Not Found") ); } } if( res.isEmpty() ) res = i18n("Not found"); else m_ocrCmd = res; /** layout detection button **/ conf->setGroup( CFG_GROUP_OCRAD ); int layoutDetect = conf->readNumEntry( CFG_OCRAD_LAYOUT_DETECTION, 0 ); kdDebug(28000) << "Layout detection from config: " << layoutDetect << endl; (void) new KSeparator( KSeparator::HLine, page); TQHBox *hb1 = new TQHBox(page); hb1->setSpacing( KDialog::spacingHint() ); (void) new TQLabel( i18n("OCRAD layout analysis mode: "), hb1); m_layoutMode = new TQComboBox(hb1); m_layoutMode->insertItem(i18n("No Layout Detection"), 0 ); m_layoutMode->insertItem(i18n("Column Detection"), 1 ); m_layoutMode->insertItem(i18n("Full Layout Detection"), 2); m_layoutMode->setCurrentItem(layoutDetect); /** stating the ocrad binary **/ (void) new KSeparator( KSeparator::HLine, page); TQHBox *hb = new TQHBox(page); hb->setSpacing( KDialog::spacingHint()); m_binaryLabel = new TQLabel( i18n("Using ocrad binary: ") + res, hb ); // retrieve Program version and display version(res); getAnimation(hb); /* This is for a 'work-in-progress'-Animation */ return ENG_OK; } void ocradDialog::introduceImage( KookaImage *img ) { if( !img ) return; KOCRBase::introduceImage( img ); } ocradDialog::~ocradDialog() { if( m_proc ) delete m_proc; } void ocradDialog::writeConfig( void ) { KConfig *conf = KGlobal::config (); conf->setGroup( CFG_GROUP_OCR_DIA ); conf->writeEntry( CFG_OCRAD_BINARY, TQString(getOCRCmd())); conf->setGroup( CFG_GROUP_OCRAD ); conf->writeEntry( CFG_OCRAD_LAYOUT_DETECTION, m_layoutMode->currentItem()); } void ocradDialog::enableFields(bool ) { kdDebug(28000) << "About to disable the entry fields" << endl; } /* Later: Allow interactive loading of orf files * for now, return emty string */ TQString ocradDialog::orfUrl() const { if( m_orfUrlRequester ) return m_orfUrlRequester->url(); else return TQString(); } void ocradDialog::version( const TQString& exe ) { if( m_proc ) delete m_proc; m_proc = new KProcess; kdDebug(28000) << "Using " << exe << " as command" << endl; *m_proc << exe; *m_proc << TQString("-V"); connect( m_proc, TQT_SIGNAL(receivedStdout(KProcess *, char *, int )), this, TQT_SLOT(slReceiveStdIn(KProcess *, char *, int ))); if( ! m_proc->start( KProcess::NotifyOnExit, KProcess::Stdout ) ) { slReceiveStdIn( 0, (char*) "unknown", 7 ); } } void ocradDialog::slReceiveStdIn( KProcess*, char *buffer, int buflen) { TQString vstr = TQString::fromUtf8(buffer, buflen); kdDebug(28000) << "Got input: "<< buffer << endl; TQRegExp rx; rx.setPattern("GNU Ocrad version ([\\d\\.]+)"); if( rx.search( vstr ) > -1 ) { TQString vStr = rx.cap(1); vStr.remove(0,2); m_version = vStr.toInt(); TQString v = i18n("Version: ") + rx.cap(1); if( m_binaryLabel ) { m_binaryLabel->setText(m_binaryLabel->text() + "\n" + v ); m_binaryLabel->update(); } } } /* * returns the numeric version of the ocrad program. It is queried in the slot * slReceiveStdIn, which parses the output of the ocrad -V call. * * Attention: This method returns 10 for ocrad v. 0.10 and 8 for ocrad-0.8 */ int ocradDialog::getNumVersion() { return m_version; } #include "kocrocrad.moc" /* The End ;) */