summaryrefslogtreecommitdiffstats
path: root/kbarcode/barcodedialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kbarcode/barcodedialog.cpp')
-rw-r--r--kbarcode/barcodedialog.cpp218
1 files changed, 218 insertions, 0 deletions
diff --git a/kbarcode/barcodedialog.cpp b/kbarcode/barcodedialog.cpp
new file mode 100644
index 0000000..ce6f64d
--- /dev/null
+++ b/kbarcode/barcodedialog.cpp
@@ -0,0 +1,218 @@
+/***************************************************************************
+ barcodedialog.cpp - description
+ -------------------
+ begin : Son Dez 29 2002
+ copyright : (C) 2002 by Dominik Seichter
+ email : domseichter@web.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "barcodedialog.h"
+#include "barcodeitem.h"
+#include "printersettings.h"
+#include "barcodecombo.h"
+#include "mimesources.h"
+#include "tokenprovider.h"
+
+// KDE includes
+#include <kapplication.h>
+#include <kfiledialog.h>
+#include <kiconloader.h>
+#include <kimageio.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kprinter.h>
+#include <kpushbutton.h>
+
+// Qt includes
+#include <qclipboard.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpainter.h>
+#include <qpaintdevicemetrics.h>
+#include <qpicture.h>
+
+BarCodeDialog::BarCodeDialog( QWidget* parent, const char* name )
+ : QDialog( parent, name, false)
+{
+ setCaption( i18n( "Barcode Generator" ) );
+
+ BarCodeDialogLayout = new QHBoxLayout( this, 11, 6, "BarCodeDialogLayout");
+ Layout5 = new QVBoxLayout( 0, 0, 6, "Layout5");
+ Layout6 = new QVBoxLayout( 0, 0, 6, "Layout2");
+ widget = new BarcodeWidget( this, "widget" );
+
+ m_token = new TokenProvider( KApplication::desktop() );
+ widget->setTokenProvider( m_token );
+
+ buttonGenerate = new KPushButton( this, "buttonGenerate" );
+ buttonGenerate->setText( i18n( "&Generate" ) );
+ buttonGenerate->setEnabled( Barkode::haveBarcode() );
+ buttonGenerate->setIconSet( SmallIconSet("barcode") );
+
+ buttonSave = new KPushButton( this, "buttonSave" );
+ buttonSave->setText( i18n( "&Save" ) );
+ buttonSave->setEnabled( false );
+ buttonSave->setIconSet( SmallIconSet("filesave") );
+
+ buttonCopy = new KPushButton( this, "buttonCopy" );
+ buttonCopy->setText( i18n("&Copy") );
+ buttonCopy->setEnabled( false );
+ buttonCopy->setIconSet( SmallIconSet("editcopy") );
+
+ buttonPrint = new KPushButton( this );
+ buttonPrint->setText( i18n("&Print") );
+ buttonPrint->setEnabled( false );
+ buttonPrint->setIconSet( SmallIconSet("fileprint") );
+
+ buttonClose = new KPushButton( this );
+ buttonClose->setText( i18n("&Close" ) );
+ buttonClose->setIconSet( SmallIconSet("fileclose") );
+
+
+ QScrollView* sv = new QScrollView( this );
+
+ barcode = new QLabel( sv->viewport(), "barcode" );
+ sv->addChild( barcode );
+ connect( buttonGenerate, SIGNAL( clicked() ), this, SLOT( generate() ) );
+ connect( buttonSave, SIGNAL( clicked() ), this, SLOT( save() ) );
+ connect( buttonPrint, SIGNAL( clicked() ), this, SLOT( print() ) );
+ connect( buttonCopy, SIGNAL( clicked() ), this, SLOT( copy() ) );
+
+ QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Expanding );
+
+ Layout5->addWidget( buttonGenerate );
+ Layout5->addWidget( buttonSave );
+ Layout5->addWidget( buttonPrint );
+ Layout5->addWidget( buttonCopy );
+ Layout5->addItem( spacer );
+ Layout5->addWidget( buttonClose );
+
+ Layout6->addWidget( widget );
+ Layout6->addWidget( sv );
+
+ BarCodeDialogLayout->addLayout( Layout6 );
+ BarCodeDialogLayout->addLayout( Layout5 );
+ BarCodeDialogLayout->setStretchFactor( Layout6, 2 );
+
+ connect( buttonClose, SIGNAL( clicked() ), this, SLOT( close() ) );
+
+ buttonGenerate->setDefault( true );
+
+ show();
+}
+
+BarCodeDialog::~BarCodeDialog()
+{
+ delete m_token;
+}
+
+void BarCodeDialog::generate()
+{
+ Barkode d;
+ widget->getData( d );
+ d.setTokenProvider( m_token );
+ d.update( KApplication::desktop() );
+
+ barcode->setPixmap( d.pixmap() );
+
+ buttonSave->setEnabled( !barcode->pixmap()->isNull() );
+ buttonPrint->setEnabled( !barcode->pixmap()->isNull() );
+ buttonCopy->setEnabled( !barcode->pixmap()->isNull() );
+}
+
+void BarCodeDialog::save()
+{
+ Barkode bc;
+ widget->getData( bc );
+
+ if(!bc.isValid())
+ {
+ KFileDialog fd( ":save_image", KImageIO::pattern( KImageIO::Writing ), this, "fd", true );
+ fd.setMode( KFile::File );
+ fd.setOperationMode( KFileDialog::Saving );
+ if( fd.exec() == QDialog::Accepted )
+ {
+ QString path = fd.selectedURL().path();
+ QString extension = KImageIO::type( path );
+
+ if( extension.isNull() )
+ extension = KImageIO::type( fd.currentFilter() );
+
+
+ bc.setTokenProvider( m_token );
+ bc.update( KApplication::desktop() );
+
+ if(!bc.pixmap().save( path, extension, 0 ))
+ KMessageBox::error( this, i18n("An error occurred during saving the image") );
+ }
+ }
+}
+
+void BarCodeDialog::print()
+{
+ Barkode d;
+ widget->getData( d );
+
+ if( d.isValid() )
+ return;
+
+ KPrinter* printer = PrinterSettings::getInstance()->setupPrinter( "kbarcode", this );
+ if( !printer )
+ return;
+
+ // unless we can center the barcode
+ printer->setFullPage( false );
+
+ QPaintDeviceMetrics metrics( printer );
+
+ double scalex = (double)metrics.logicalDpiX() / (double)QPaintDevice::x11AppDpiX();
+ double scaley = (double)metrics.logicalDpiY() / (double)QPaintDevice::x11AppDpiY();
+
+ QPicture picture;
+ QPainter p( printer );
+ p.scale( scalex, scaley );
+ // TODO: center barcode
+
+ TokenProvider tp( printer );
+
+ d.setTokenProvider( &tp );
+ d.update( printer );
+
+ picture = d.picture();
+ p.drawPicture( QPoint( 0, 0 ), picture );
+ p.end();
+
+ delete printer;
+}
+
+void BarCodeDialog::copy()
+{
+ if( barcode->pixmap()->isNull() )
+ return;
+
+ Barkode bc;
+ widget->getData( bc );
+
+ BarcodeItem* item = new BarcodeItem( bc );
+ DocumentItemList list;
+ list.append( item );
+ DocumentItemDrag* drag = new DocumentItemDrag();
+ drag->setDocumentItem( &list );
+
+#if QT_VERSION >= 0x030100
+ kapp->clipboard()->setData( drag, QClipboard::Clipboard );
+#else
+ kapp->clipboard()->setData( drag );
+#endif
+}
+
+#include "barcodedialog.moc"