summaryrefslogtreecommitdiffstats
path: root/kooka/kooka.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kooka/kooka.cpp')
-rw-r--r--kooka/kooka.cpp465
1 files changed, 465 insertions, 0 deletions
diff --git a/kooka/kooka.cpp b/kooka/kooka.cpp
new file mode 100644
index 00000000..3e3d660d
--- /dev/null
+++ b/kooka/kooka.cpp
@@ -0,0 +1,465 @@
+/**************************************************************************
+ kooka.cpp - Main program class
+ -------------------
+ begin : Sun Jan 16 2000
+ copyright : (C) 2000 by Klaas Freitag
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 "kooka.h"
+#include "kookaview.h"
+#include "resource.h"
+
+#include "kookapref.h"
+#include "imgprintdialog.h"
+
+#include <qlineedit.h>
+#include <qprinter.h>
+#include <qprintdialog.h>
+#include <qpainter.h>
+#include <qpaintdevicemetrics.h>
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kiconloader.h>
+#include <kmenubar.h>
+#include <kaccel.h>
+#include <kio/netaccess.h>
+#include <kfiledialog.h>
+#include <kconfig.h>
+#include <kprinter.h>
+#include <kstatusbar.h>
+#include <kurl.h>
+#include <kurlrequesterdlg.h>
+#include <qstrlist.h>
+#include <kedittoolbar.h>
+#include <kmessagebox.h>
+#include <kdockwidget.h>
+#include <kparts/partmanager.h>
+#include <kstdaccel.h>
+#include <kaction.h>
+#include <kstdaction.h>
+#include <qiconset.h>
+#include <kurldrag.h>
+
+#define DOCK_SIZES "DockSizes"
+
+
+Kooka::Kooka( const QCString& deviceToUse)
+ : KParts::DockMainWindow( 0, "Kooka" ),
+ m_printer(0),
+ m_prefDialogIndex(0)
+{
+ /* Start to create the main view framework */
+ m_view = new KookaView( this, deviceToUse);
+
+ /* Call createGUI on the ocr-result view */
+ setXMLFile( "kookaui.rc", true );
+
+ setAcceptDrops(false); // Waba: Not (yet?) supported
+ KConfig *konf = KGlobal::config ();
+ readDockConfig ( konf, DOCK_SIZES );
+
+ // then, setup our actions
+ setupActions();
+
+ createGUI(0L); // m_view->ocrResultPart());
+ // and a status bar
+ statusBar()->insertItem( QString(), KookaView::StatusTemp );
+ statusBar()->show();
+
+ // allow the view to change the statusbar and caption
+ connect(m_view, SIGNAL(signalChangeStatusbar(const QString&)),
+ this, SLOT(changeStatusbar(const QString&)));
+ connect(m_view, SIGNAL(signalCleanStatusbar(void)),
+ this, SLOT(cleanStatusbar()));
+ connect(m_view, SIGNAL(signalChangeCaption(const QString&)),
+ this, SLOT(changeCaption(const QString&)));
+
+ changeCaption( i18n( "KDE Scanning" ));
+
+ setAutoSaveSettings( QString::fromLatin1("General Options"),
+ true );
+}
+
+void Kooka::createMyGUI( KParts::Part *part )
+{
+ kdDebug(28000) << "Part changed, Creating gui" << endl;
+ createGUI(part);
+
+}
+
+Kooka::~Kooka()
+{
+ KConfig *konf = KGlobal::config ();
+ m_view->slCloseScanDevice();
+ writeDockConfig ( konf, DOCK_SIZES );
+ delete m_printer;
+}
+
+void Kooka::startup( void )
+{
+ kdDebug(29000) << "Starting startup !" << endl;
+ if( m_view ) m_view->loadStartupImage();
+}
+
+
+void Kooka::setupActions()
+{
+
+ KStdAction::print(this, SLOT(filePrint()), actionCollection());
+ KStdAction::quit(this , SLOT(close()), actionCollection());
+
+ KStdAction::keyBindings(guiFactory(), SLOT(configureShortcuts()),
+actionCollection());
+ KStdAction::configureToolbars(this, SLOT(optionsConfigureToolbars()),
+ actionCollection());
+ KStdAction::preferences(this, SLOT(optionsPreferences()), actionCollection());
+
+ m_view->createDockMenu(actionCollection(), this, "settings_show_docks" );
+
+ /* Image Viewer action Toolbar - OCR, Scaling etc. */
+ (void) new KAction(i18n("&OCR Image..."), "ocr", CTRL+Key_O,
+ m_view, SLOT(doOCR()),
+ actionCollection(), "ocrImage" );
+
+ (void) new KAction(i18n("O&CR on Selection..."), "ocr-select", CTRL+Key_C,
+ m_view, SLOT(doOCRonSelection()),
+ actionCollection(), "ocrImageSelect" );
+
+ KAction *act;
+ act = new KAction(i18n("Scale to W&idth"), "scaletowidth", CTRL+Key_I,
+ m_view, SLOT( slIVScaleToWidth()),
+ actionCollection(), "scaleToWidth" );
+ m_view->connectViewerAction( act );
+
+ act = new KAction(i18n("Scale to &Height"), "scaletoheight", CTRL+Key_H,
+ m_view, SLOT( slIVScaleToHeight()),
+ actionCollection(), "scaleToHeight" );
+ m_view->connectViewerAction( act );
+
+ act = new KAction(i18n("Original &Size"), "scaleorig", CTRL+Key_S,
+ m_view, SLOT( slIVScaleOriginal()),
+ actionCollection(), "scaleOriginal" );
+ m_view->connectViewerAction( act );
+
+#ifdef QICONSET_HONOUR_ON_OFF
+ /* The Toggleaction does not seem to handle the on/off icon from QIconSet */
+ QIconSet lockSet;
+ lockSet.setPixmap(BarIcon("lock") , QIconSet::Automatic, QIconSet::Normal, QIconSet::On );
+ lockSet.setPixmap(BarIcon("unlock"), QIconSet::Automatic, QIconSet::Normal, QIconSet::Off);
+ act = new KToggleAction ( i18n("Keep &Zoom Setting"), lockSet, CTRL+Key_Z,
+ actionCollection(), "keepZoom" );
+#else
+ act = new KToggleAction( i18n("Keep &Zoom Setting"), BarIcon("lockzoom"), CTRL+Key_Z,
+ actionCollection(), "keepZoom" );
+#endif
+
+ connect( act, SIGNAL( toggled( bool ) ), m_view->getImageViewer(),
+ SLOT(setKeepZoom(bool)));
+
+ m_view->connectViewerAction( act );
+
+ /* thumbview and gallery actions */
+ act = new KAction(i18n("Set Zoom..."), "viewmag", 0,
+ m_view, SLOT( slIVShowZoomDialog()),
+ actionCollection(), "showZoomDialog" );
+ m_view->connectViewerAction( act );
+
+ (void) new KAction(i18n("Create From Selectio&n"), "crop", CTRL+Key_N,
+ m_view, SLOT( slCreateNewImgFromSelection() ),
+ actionCollection(), "createFromSelection" );
+
+ (void) new KAction(i18n("Mirror Image &Vertically"), "mirror-vert", CTRL+Key_V,
+ this, SLOT( slMirrorVertical() ),
+ actionCollection(), "mirrorVertical" );
+
+ (void) new KAction(i18n("&Mirror Image Horizontally"), "mirror-horiz", CTRL+Key_M,
+ this, SLOT( slMirrorHorizontal() ),
+ actionCollection(), "mirrorHorizontal" );
+
+ (void) new KAction(i18n("Mirror Image &Both Directions"), "mirror-both", CTRL+Key_B,
+ this, SLOT( slMirrorBoth() ),
+ actionCollection(), "mirrorBoth" );
+
+ (void) new KAction(i18n("Open Image in &Graphic Application..."), "fileopen", CTRL+Key_G,
+ m_view, SLOT( slOpenCurrInGraphApp() ),
+ actionCollection(), "openInGraphApp" );
+
+ act = new KAction(i18n("&Rotate Image Clockwise"), "rotate_cw", CTRL+Key_R,
+ this, SLOT( slRotateClockWise() ),
+ actionCollection(), "rotateClockwise" );
+ m_view->connectViewerAction( act );
+
+ act = new KAction(i18n("Rotate Image Counter-Clock&wise"), "rotate_ccw", CTRL+Key_W,
+ this, SLOT( slRotateCounterClockWise() ),
+ actionCollection(), "rotateCounterClockwise" );
+ m_view->connectViewerAction( act );
+
+ act = new KAction(i18n("Rotate Image 180 &Degrees"), "rotate", CTRL+Key_D,
+ this, SLOT( slRotate180() ),
+ actionCollection(), "upsitedown" );
+ m_view->connectViewerAction( act );
+
+ /* Gallery actions */
+ act = new KAction(i18n("&Create Folder..."), "folder_new", 0,
+ m_view->gallery(), SLOT( slotCreateFolder() ),
+ actionCollection(), "foldernew" );
+ m_view->connectGalleryAction( act );
+
+ act = new KAction(i18n("&Save Image..."), "filesave", 0,
+ m_view->gallery(), SLOT( slotExportFile() ),
+ actionCollection(), "saveImage" );
+ m_view->connectGalleryAction( act );
+
+ act = new KAction(i18n("&Import Image..."), "inline_image", 0,
+ m_view->gallery(), SLOT( slotImportFile() ),
+ actionCollection(), "importImage" );
+ m_view->connectGalleryAction( act );
+
+ act = new KAction(i18n("&Delete Image"), "edittrash", 0,
+ m_view->gallery(), SLOT( slotDeleteItems() ),
+ actionCollection(), "deleteImage" );
+ m_view->connectGalleryAction( act );
+
+ act = new KAction(i18n("&Unload Image"), "fileclose", 0,
+ m_view->gallery(), SLOT( slotUnloadItems() ),
+ actionCollection(), "unloadImage" );
+ m_view->connectGalleryAction( act );
+
+#if 0
+ /* not yet supported actions - coming post 3.1 */
+ (void) new KAction(i18n("&Load Scan Parameters"), "bookmark_add", CTRL+Key_L,
+ m_view, SLOT(slLoadScanParams()),
+ actionCollection(), "loadscanparam" );
+
+ (void) new KAction(i18n("Save &Scan Parameters"), "bookmark_add", CTRL+Key_S,
+ m_view, SLOT(slSaveScanParams()),
+ actionCollection(), "savescanparam" );
+#endif
+
+ (void) new KAction(i18n("Select Scan Device"), "scanner", 0,
+ m_view, SLOT( slSelectDevice()),
+ actionCollection(), "selectsource" );
+
+ (void) new KAction( i18n("Enable All Warnings && Messages"), 0,
+ this, SLOT(slEnableWarnings()),
+ actionCollection(), "enable_msgs");
+
+
+ m_saveOCRTextAction = new KAction( i18n("Save OCR Res&ult Text"), "filesaveas", CTRL+Key_U,
+ m_view, SLOT(slSaveOCRResult()),
+ actionCollection(), "saveOCRResult");
+}
+
+
+void Kooka::saveProperties(KConfig *config)
+{
+ // the 'config' object points to the session managed
+ // config file. anything you write here will be available
+ // later when this app is restored
+
+ //if (!m_view->currentURL().isNull())
+ // config->writePathEntry("lastURL", m_view->currentURL());
+ kdDebug(28000) << "In kooka's saveProperties !" << endl;
+ config->setGroup( KOOKA_STATE_GROUP );
+ config->writeEntry( PREFERENCE_DIA_TAB, m_prefDialogIndex );
+ m_view->saveProperties( config );
+}
+
+void Kooka::readProperties(KConfig *config)
+{
+ (void) config;
+ // the 'config' object points to the session managed
+ // config file. this function is automatically called whenever
+ // the app is being restored. read in here whatever you wrote
+ // in 'saveProperties'
+ config->setGroup( KOOKA_STATE_GROUP );
+ m_prefDialogIndex = config->readNumEntry( PREFERENCE_DIA_TAB, 0 );
+ // QString url = config->readPathEntry("lastURL");
+
+}
+
+void Kooka::dragEnterEvent(QDragEnterEvent *event)
+{
+ // accept uri drops only
+ event->accept(KURLDrag::canDecode(event));
+}
+
+#if 0
+void Kooka::dropEvent(QDropEvent *event)
+{
+ // this is a very simplistic implementation of a drop event. we
+ // will only accept a dropped URL. the Qt dnd code can do *much*
+ // much more, so please read the docs there
+ KURL::List uri;
+
+ // see if we can decode a URI.. if not, just ignore it
+ if (KURLDrag::decode(event, uri) && !uri.isEmpty())
+ {
+ // okay, we have a URI.. process it
+ const KURL &url = uri.first();
+ kdDebug(29000) << "Importing URI " << url.url() << endl;
+
+ // TODO: Do something with url
+ // Waba: See also setAcceptDrops() above
+ }
+}
+
+void Kooka::fileNew()
+{
+ // this slot is called whenever the File->New menu is selected,
+ // the New shortcut is pressed (usually CTRL+N) or the New toolbar
+ // button is clicked
+
+ // create a new window
+ (new Kooka)->show();
+}
+
+void Kooka::fileOpen()
+{
+ // this slot is called whenever the File->Open menu is selected,
+ // the Open shortcut is pressed (usually CTRL+O) or the Open toolbar
+ // button is clicked
+}
+
+void Kooka::fileSave()
+{
+ // this slot is called whenever the File->Save menu is selected,
+ // the Save shortcut is pressed (usually CTRL+S) or the Save toolbar
+ // button is clicked
+
+ // save the current file
+}
+
+
+void Kooka::fileSaveAs()
+{
+ // this slot is called whenever the File->Save As menu is selected,
+ QStrList strlist;
+ strlist.append( "BMP" );
+ strlist.append( "JPEG" );
+ FormatDialog fd( 0, "FormatDialog", &strlist );
+ fd.exec();
+
+}
+#endif
+
+void Kooka::filePrint()
+{
+ // this slot is called whenever the File->Print menu is selected,
+ // the Print shortcut is pressed (usually CTRL+P) or the Print toolbar
+ // button is clicked
+ m_view->print();
+
+}
+
+void Kooka::optionsShowScanParams()
+{
+ m_view->slSetScanParamsVisible( m_scanParamsAction->isChecked() );
+}
+
+void Kooka::optionsShowPreviewer()
+{
+ m_view->slSetTabWVisible( m_previewerAction->isChecked());
+}
+
+void Kooka::optionsConfigureToolbars()
+{
+ // use the standard toolbar editor
+ saveMainWindowSettings(KGlobal::config(), autoSaveGroup());
+ KEditToolbar dlg(factory());
+ connect(&dlg, SIGNAL(newToolbarConfig()), SLOT(newToolbarConfig()));
+ dlg.exec();
+}
+
+void Kooka::newToolbarConfig()
+{
+ // OK/Apply pressed in the toolbar editor
+ applyMainWindowSettings(KGlobal::config(), autoSaveGroup());
+}
+
+void Kooka::optionsPreferences()
+{
+ // popup some sort of preference dialog, here
+ KookaPreferences dlg;
+ dlg.showPage( m_prefDialogIndex );
+ connect( &dlg, SIGNAL( dataSaved() ), m_view, SLOT(slFreshUpThumbView()));
+
+ if (dlg.exec())
+ {
+ // redo your settings
+ m_prefDialogIndex = dlg.activePageIndex();
+ // m_view->slFreshUpThumbView();
+ }
+}
+
+void Kooka::changeStatusbar(const QString& text)
+{
+ // display the text on the statusbar
+ statusBar()->changeItem( text, KookaView::StatusTemp );
+}
+
+void Kooka::changeCaption(const QString& text)
+{
+ // display the text on the caption
+ setCaption(text);
+}
+
+void Kooka::slMirrorVertical( void )
+{
+ m_view->slMirrorImage( KookaView::MirrorVertical );
+}
+
+void Kooka::slMirrorHorizontal( void )
+{
+ m_view->slMirrorImage( KookaView::MirrorHorizontal );
+}
+
+void Kooka::slMirrorBoth( void )
+{
+ m_view->slMirrorImage( KookaView::MirrorBoth );
+}
+
+void Kooka::slRotateClockWise( void )
+{
+ m_view->slRotateImage( 90 );
+}
+
+void Kooka::slRotateCounterClockWise( void )
+{
+ m_view->slRotateImage( -90 );
+
+}
+
+void Kooka::slRotate180( void )
+{
+ m_view->slRotateImage( 180 );
+}
+
+void Kooka::slEnableWarnings( )
+{
+ KMessageBox::information (this, i18n("All messages and warnings will now be shown."));
+ KMessageBox::enableAllMessages();
+ kapp->config()->reparseConfiguration();
+}
+
+#include "kooka.moc"