summaryrefslogtreecommitdiffstats
path: root/kbarcode/propertywidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kbarcode/propertywidget.cpp')
-rw-r--r--kbarcode/propertywidget.cpp631
1 files changed, 631 insertions, 0 deletions
diff --git a/kbarcode/propertywidget.cpp b/kbarcode/propertywidget.cpp
new file mode 100644
index 0000000..ee56af5
--- /dev/null
+++ b/kbarcode/propertywidget.cpp
@@ -0,0 +1,631 @@
+/***************************************************************************
+ propertywidget.h - description
+ -------------------
+ begin : Do Sep 10 2004
+ copyright : (C) 2004 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 "propertywidget.h"
+#include "documentitem.h"
+#include "rectitem.h"
+#include "commands.h"
+#include "sqltables.h"
+#include "barcodecombo.h"
+#include "multilineeditdlg.h"
+#include "textitem.h"
+#include "imageitem.h"
+#include "measurements.h"
+#include "mycanvasview.h"
+//NY20
+#include "textlineitem.h"
+#include "textlineedit.h"
+//NY20
+#include "tokendialog.h"
+
+#include <kcolorbutton.h>
+#include <kcombobox.h>
+#include <kcommand.h>
+#include <kiconloader.h>
+#include <kimageio.h>
+#include <klineedit.h>
+#include <klocale.h>
+#include <knuminput.h>
+#include <ktextedit.h>
+#include <kurlrequester.h>
+
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpainter.h>
+#include <qradiobutton.h>
+#include <qsqlquery.h>
+#include <qvbox.h>
+#include <qvbuttongroup.h>
+#include <kmessagebox.h>
+
+#define IMAGE_INTERNAL i18n("Image Saved in KBarcode")
+
+void FillLineCombo( KComboBox* box )
+{
+ /* A small helper function to fill
+ * a combobox with all by Qt
+ * supported pen styles.
+ */
+
+ // TODO: Use the enum for Qt line styles here!
+
+ QPainter p;
+ for( int i = 1; i < 6; i++ ) {
+ QPixmap pixmap( 60, 20 );
+ pixmap.fill( Qt::white );
+ p.begin( &pixmap );
+ p.setPen( QPen( Qt::black, 3, (Qt::PenStyle)i ) );
+ p.drawLine( 5, 10, 55, 10 );
+ p.end();
+
+ box->insertItem( pixmap );
+ }
+}
+
+PropertyWidget::PropertyWidget(QWidget* parent )
+ : QWidget( parent, 0 )
+{
+ grid = new QGridLayout( this, 2, 2 );
+}
+
+PropertyBorder::PropertyBorder( QWidget* parent )
+ : PropertyWidget( parent )
+{
+ checkBorder = new QCheckBox( this );
+ checkBorder->setText( i18n("&Border Visible") );
+
+ buttonColor = new KColorButton( this );
+
+ spinWidth = new KIntNumInput( this );
+ spinWidth->setRange( 1, 100, 1, false );
+
+ comboLine = new KComboBox( false, this );
+ FillLineCombo( comboLine );
+
+ grid->addMultiCellWidget( checkBorder, 0, 0, 0, 1 );
+ grid->addWidget( new QLabel( i18n("Color:"), this ), 1, 0 );
+ grid->addWidget( buttonColor, 1, 1 );
+ grid->addWidget( new QLabel( i18n("Line Width:"), this ), 2, 0 );
+ grid->addWidget( spinWidth, 2, 1 );
+ grid->addWidget( new QLabel( i18n("Line Style:"), this ), 3, 0 );
+ grid->addWidget( comboLine, 3, 1 );
+
+
+ connect( checkBorder, SIGNAL( clicked() ), this, SLOT( enableControls() ) );
+}
+
+void PropertyBorder::applySettings( DocumentItem* item, KMacroCommand* command )
+{
+ BorderCommand* bc = new BorderCommand( checkBorder->isChecked(), QPen( buttonColor->color(), spinWidth->value(), (Qt::PenStyle)(comboLine->currentItem() + 1) ), item );
+ bc->execute();
+ command->addCommand( bc );
+}
+
+void PropertyBorder::initSettings( DocumentItem* item )
+{
+ checkBorder->setChecked( item->border() );
+ buttonColor->setColor( item->pen().color() );
+ spinWidth->setValue( item->pen().width() );
+ comboLine->setCurrentItem( item->pen().style() - 1 );
+
+ enableControls();
+}
+
+void PropertyBorder::enableControls()
+{
+ buttonColor->setEnabled( checkBorder->isChecked() );
+ spinWidth->setEnabled( checkBorder->isChecked() );
+ comboLine->setEnabled( checkBorder->isChecked() );
+}
+
+
+PropertyRotation::PropertyRotation( QWidget* parent )
+ : PropertyWidget( parent )
+{
+ QLabel* label = new QLabel( i18n("&Rotation:"), this );
+ comboRotation = new KComboBox( FALSE, this );
+ label->setBuddy( comboRotation );
+
+ comboRotation->insertItem( i18n("0") );
+ comboRotation->insertItem( i18n("90") );
+ comboRotation->insertItem( i18n("180") );
+ comboRotation->insertItem( i18n("270") );
+
+ grid->addWidget( label, 0, 0 );
+ grid->addWidget( comboRotation, 0, 1 );
+
+}
+
+void PropertyRotation::applySettings( DocumentItem* item, KMacroCommand* command )
+{
+ TextItem* text = static_cast<TextItem*>(item);
+ double rot = 0.0;
+
+ if( comboRotation->currentItem() == 1 )
+ rot = 90.0;
+ else if( comboRotation->currentItem() == 2 )
+ rot = 180.0;
+ else if( comboRotation->currentItem() == 3 )
+ rot = 270.0;
+
+ TextRotationCommand* rc = new TextRotationCommand( rot, text );
+ rc->execute();
+ command->addCommand( rc );
+}
+
+void PropertyRotation::initSettings( DocumentItem* item )
+{
+ TextItem* text = static_cast<TextItem*>(item);
+
+ if( text->rotation() == 0.0 )
+ comboRotation->setCurrentItem( 0 );
+ else if( text->rotation() == 90.0 )
+ comboRotation->setCurrentItem( 1 );
+ else if( text->rotation() == 180.0 )
+ comboRotation->setCurrentItem( 2 );
+ else if( text->rotation() == 270.0 )
+ comboRotation->setCurrentItem( 3 );
+}
+
+PropertyFill::PropertyFill( QWidget* parent )
+ : PropertyWidget( parent )
+{
+ buttonColor = new KColorButton( this );
+
+ grid->addWidget( new QLabel( i18n("Color:"), this ), 0, 0 );
+ grid->addWidget( buttonColor, 0, 1 );
+}
+
+void PropertyFill::applySettings( DocumentItem* item, KMacroCommand* command )
+{
+ RectItem* rect = static_cast<RectItem*>(item);
+ FillCommand* fc = new FillCommand( buttonColor->color(), rect );
+ fc->execute();
+ command->addCommand( fc );
+}
+
+void PropertyFill::initSettings( DocumentItem* item )
+{
+ RectItem* rect = static_cast<RectItem*>(item);
+ buttonColor->setColor( rect->color() );
+}
+
+PropertyBarcode::PropertyBarcode( TokenProvider* token, QWidget* parent )
+ : PropertyWidget( parent )
+{
+ QLabel* TextLabel1 = new QLabel( this, "TextLabel1" );
+ TextLabel1->setText( i18n( "Barcode Settings:" ) );
+
+ comboComplex = new KComboBox( FALSE, this );
+ if( SqlTables::isConnected() )
+ {
+ QSqlQuery* query = new QSqlQuery("select encoding_type from barcode_basic group by encoding_type");
+ while( query->next() )
+ comboComplex->insertItem( "Main:" + query->value( 0 ).toString() );
+
+ delete query;
+
+ query = new QSqlQuery("select customer_no, encoding_type from customer_text group by customer_no, encoding_type");
+ while( query->next() )
+ comboComplex->insertItem( query->value( 0 ).toString() + ":" + query->value( 1 ).toString() );
+ delete query;
+ }
+
+ comboComplex->insertItem( "Static" );
+
+ barcode = new BarcodeWidget( this, "barcode" );
+ barcode->setTokenProvider( token );
+
+ //connect( this, SIGNAL( defaultClicked() ), this, SLOT( defaults() ) );
+ connect( comboComplex, SIGNAL( activated(int) ), this, SLOT(changedCombo() ) );
+
+ grid->addWidget( TextLabel1, 0, 0 );
+ grid->addWidget( comboComplex, 0, 1 );
+ grid->addMultiCellWidget( barcode, 1, 1, 0, 1 );
+
+ changedCombo();
+}
+
+// void PropertyBarcode::defaults()
+// {
+// comboComplex->setCurrentItem( 0 );
+// barcode->defaults();
+// }
+
+void PropertyBarcode::changedCombo()
+{
+ bool v = false;
+ if( comboComplex->currentItem() == comboComplex->count() - 1 )
+ v = true;
+
+ barcode->setDataEnabled( v );
+ barcode->setStandardEnabled( v );
+}
+
+void PropertyBarcode::applySettings( DocumentItem* item, KMacroCommand* command )
+{
+ BarcodeItem* bcode = static_cast<BarcodeItem*>(item);
+
+ Barkode* d = new Barkode();
+ barcode->getData( *d );
+
+ if( comboComplex->currentItem() != comboComplex->count() - 1 ) {
+ d->setType( getTypeFromCaption( comboComplex->currentText() ) );
+ d->setValue( SqlTables::getInstance()->getBarcodeMaxLength( d->type() ) );
+ }
+ d->setDatabaseMode( comboComplex->currentText() );
+
+ BarcodeCommand* bc = new BarcodeCommand( bcode, d );
+ bc->execute();
+ command->addCommand( bc );
+}
+
+void PropertyBarcode::initSettings( DocumentItem* item )
+{
+ BarcodeItem* bcode = static_cast<BarcodeItem*>(item);
+
+ barcode->setData( *bcode );
+ for( int i = 0; i < comboComplex->count(); i++ )
+ if( comboComplex->text( i ).lower() == bcode->databaseMode().lower() )
+ comboComplex->setCurrentItem( i );
+
+ changedCombo();
+}
+
+PropertyText::PropertyText( TokenProvider* token, QWidget* parent )
+ : PropertyWidget( parent )
+{
+ m_editor = new MultiLineEditor( token, this, "m_editor" );
+ grid->addWidget( m_editor, 0, 0 );
+}
+
+void PropertyText::applySettings( DocumentItem* item, KMacroCommand* command )
+{
+ TextItem* text = static_cast<TextItem*>(item);
+
+ TextChangeCommand* tc = new TextChangeCommand( text, m_editor->text() );
+ tc->execute();
+ command->addCommand( tc );
+}
+
+void PropertyText::initSettings( DocumentItem* item )
+{
+ TextItem* text = static_cast<TextItem*>(item);
+ m_editor->setText( text->text() );
+}
+
+//NY21
+PropertyTextLine::PropertyTextLine( TokenProvider* token, QWidget* parent )
+ : PropertyWidget( parent )
+{
+ m_editor = new TextLineEditor( token, this );
+ grid->addWidget( m_editor, 0, 0 );
+}
+
+void PropertyTextLine::applySettings( DocumentItem* item, KMacroCommand* command )
+{
+ TextLineItem* text = static_cast<TextLineItem*>(item);
+
+ TextLineChangeCommand* tc = new TextLineChangeCommand( text, m_editor->text(), m_editor->getFontType(),m_editor->getVertMag(),m_editor->getHorMag() );
+ tc->execute();
+ command->addCommand( tc );
+}
+
+void PropertyTextLine::initSettings( DocumentItem* item )
+{
+ TextLineItem* text = static_cast<TextLineItem*>(item);
+ m_editor->setText( text->text() );
+ m_editor->setFontType(text->getFont());
+ m_editor->setHorMag(text->getMagHor());
+ m_editor->setVertMag(text->getMagVert());
+}
+//NY21
+
+PropertySize::PropertySize( QWidget* parent )
+ : PropertyWidget( parent )
+{
+ const double low = -1000.0;
+ const double max = 1000.0;
+ QVBox* box = new QVBox( this );
+
+ checkLock = new QCheckBox( i18n("&Protect item from being moved or resized"), box );
+ numTop = new KDoubleNumInput( low, max, 0.0, 0.2, 3, box );
+ numLeft = new KDoubleNumInput( numTop, low, max, 0.0, 0.2, 3, box );
+ numHeight = new KDoubleNumInput( numLeft, low, max, 0.0, 0.2, 3, box );
+ numWidth = new KDoubleNumInput( numHeight, low, max, 0.0, 0.2, 3, box );
+
+ numTop->setSuffix( Measurements::system() );
+ numLeft->setSuffix( Measurements::system() );
+ numHeight->setSuffix( Measurements::system() );
+ numWidth->setSuffix( Measurements::system() );
+
+ numTop->setLabel( i18n("&Top:"), AlignLeft | AlignCenter );
+ numLeft->setLabel( i18n("&Left:"), AlignLeft | AlignCenter );
+ numHeight->setLabel( i18n("&Height:"), AlignLeft | AlignCenter );
+ numWidth->setLabel( i18n("&Width:"), AlignLeft | AlignCenter );
+
+ grid->addWidget( box, 0, 0 );
+
+ connect( checkLock, SIGNAL( clicked() ), this, SLOT( enableControls() ));
+}
+
+void PropertySize::enableControls()
+{
+ numTop->setEnabled( !checkLock->isChecked() );
+ numLeft->setEnabled( !checkLock->isChecked() );
+ numHeight->setEnabled( !checkLock->isChecked() );
+ numWidth->setEnabled( !checkLock->isChecked() );
+}
+
+void PropertySize::applySettings( DocumentItem* item, KMacroCommand* command )
+{
+ QRect r = item->rect();
+ QPoint translation( 0, 0 );
+
+ TCanvasItem* canvasItem = item->canvasItem();
+ if( canvasItem )
+ {
+ MyCanvasView* view = canvasItem->canvasView();
+ translation = view->getTranslation();
+ }
+
+ if( Measurements::measurementSystem() == Measurements::Metric )
+ {
+ r.setX( (int)(numLeft->value() * 1000));
+ r.setY( (int)(numTop->value() * 1000));
+ r.setWidth( (int)(numWidth->value() * 1000));
+ r.setHeight( (int)(numHeight->value() * 1000));
+ }
+ else
+ {
+ /* This conversion from int to millimeter should get its own
+ * function or maybe even an own class.
+ */
+ #warning "test inch to mm!"
+ r.setX( (int)(numLeft->value() * 1000 * 25.4000508001016 ) );
+ r.setY( (int)(numTop->value() * 1000 * 25.4000508001016 ) );
+ r.setWidth( (int)(numWidth->value() * 1000 * 25.4000508001016 ) );
+ r.setHeight( (int)(numHeight->value() * 1000 * 25.4000508001016 ) );
+ }
+
+ if( canvasItem )
+ {
+ if( item->rectMM().x() != r.x() || item->rectMM().y() != r.y() )
+ {
+ MoveCommand* mc = new MoveCommand( r.x(), r.y(), canvasItem );
+ mc->execute();
+ command->addCommand( mc );
+ }
+
+ if( item->rectMM() != r )
+ {
+ ResizeCommand* rc = new ResizeCommand( canvasItem, false );
+ rc->setRect( r.x(), r.y(), r.width(), r.height() );
+ rc->execute();
+ command->addCommand( rc );
+ }
+
+ if( checkLock->isChecked() != item->locked() )
+ {
+ LockCommand* lc = new LockCommand( checkLock->isChecked(), canvasItem );
+ lc->execute();
+ command->addCommand( lc );
+ }
+ }
+}
+
+void PropertySize::initSettings( DocumentItem* item )
+{
+ QRect r = item->rectMM();
+ QPoint translation( 0, 0 );
+
+ TCanvasItem* canvasItem = item->canvasItem();
+ if( canvasItem )
+ {
+ MyCanvasView* view = canvasItem->canvasView();
+ translation = view->getTranslation();
+ }
+
+ if( Measurements::measurementSystem() == Measurements::Metric )
+ {
+ numLeft->setValue( r.x() / 1000.0 );
+ numTop->setValue( r.y() / 1000.0 );
+ numWidth->setValue( r.width() / 1000.0 );
+ numHeight->setValue( r.height() / 1000.0 );
+ }
+ else // Imperial
+ {
+ numLeft->setValue( (r.x() / 1000.0) / 25.4000508001016 );
+ numTop->setValue( (r.y() / 1000.0) / 25.4000508001016 );
+ numWidth->setValue( (r.width() / 1000.0) / 25.4000508001016 );
+ numHeight->setValue( (r.height() / 1000.0) / 25.4000508001016 );
+ }
+
+ checkLock->setChecked( item->locked() );
+ enableControls();
+}
+
+PropertyImage::PropertyImage( TokenProvider* token, QWidget* parent )
+ : PropertyWidget( parent ), m_token( token )
+{
+ QLabel* label = new QLabel( i18n("&Rotation:"), this );
+ comboRotation = new KComboBox( FALSE, this );
+ label->setBuddy( comboRotation );
+
+ QVButtonGroup* groupFile = new QVButtonGroup( i18n("&Image"), this );
+ radioImagePath = new QRadioButton( i18n("&Load image from path"), groupFile );
+ imgUrl = new KURLRequester( groupFile );
+ imgUrl->setFilter( KImageIO::pattern( KImageIO::Reading ) );
+ imgUrl->setMode( KFile::File | KFile::ExistingOnly | KFile::LocalOnly );
+ radioImageExpression = new QRadioButton( i18n("&Read image path from expression"), groupFile );
+
+ imgHBox = new QHBox( groupFile );
+ imgHBox->setSpacing( 5 );
+
+ imgExpression = new KLineEdit( imgHBox );
+ buttonToken = new KPushButton( i18n("&Insert Data Field..."), imgHBox );
+ buttonToken->setIconSet( QIconSet( SmallIcon("contents") ) );
+
+ comboRotation->insertItem( i18n("0") );
+ comboRotation->insertItem( i18n("90") );
+ comboRotation->insertItem( i18n("180") );
+ comboRotation->insertItem( i18n("270") );
+
+ QVButtonGroup* group = new QVButtonGroup( i18n("&Size"), this );
+
+ radioOriginal = new QRadioButton( i18n("&None"), group );
+ radioZoomed = new QRadioButton( i18n("&Zoom"), group );
+ radioScaled = new QRadioButton( i18n("S&cale"), group );
+
+ checkMirrorH = new QCheckBox( i18n("Mirror &Horizontaly"), this );
+ checkMirrorV = new QCheckBox( i18n("Mirror &Vertically"), this );
+
+ grid->addMultiCellWidget( groupFile, 0, 1, 0, 1 );
+ grid->addMultiCellWidget( group, 2, 3, 0, 1 );
+ grid->addWidget( label, 4, 0 );
+ grid->addWidget( comboRotation, 4, 1 );
+ grid->addMultiCellWidget( checkMirrorH, 5, 5, 0, 1 );
+ grid->addMultiCellWidget( checkMirrorV, 6, 6, 0, 1 );
+
+ connect( radioImageExpression, SIGNAL( clicked() ), this, SLOT( enableControls() ) );
+ connect( radioImagePath, SIGNAL( clicked() ), this, SLOT( enableControls() ) );
+ connect( buttonToken, SIGNAL( clicked() ), this, SLOT( slotTokens() ) );
+}
+
+void PropertyImage::applySettings( DocumentItem* item, KMacroCommand* command )
+{
+ ImageItem* img = static_cast<ImageItem*>(item);
+ EImageScaling scaling = eImage_Original;
+ double rot = 0.0;
+ QPixmap pix;
+
+ if( radioImagePath->isChecked() )
+ {
+ if( !imgUrl->url().isEmpty() )
+ {
+ if( !pix.load( imgUrl->url() ) )
+ KMessageBox::error( NULL, QString( i18n("Image format not supported for file: %1") ).arg( imgUrl->url() ) );
+ }
+ else
+ {
+ pix = img->pixmap();
+ }
+ }
+
+ if( radioZoomed->isChecked() )
+ scaling = eImage_Zoomed;
+ else if( radioScaled->isChecked() )
+ scaling = eImage_Scaled;
+
+ if( comboRotation->currentItem() == 1 )
+ rot = 90.0;
+ else if( comboRotation->currentItem() == 2 )
+ rot = 180.0;
+ else if( comboRotation->currentItem() == 3 )
+ rot = 270.0;
+
+ PictureCommand* pc = new PictureCommand( rot, checkMirrorH->isChecked(), checkMirrorV->isChecked(), scaling, img );
+ pc->setExpression( radioImageExpression->isChecked() ? imgExpression->text() : QString::null );
+ pc->setPixmap( pix );
+ pc->execute();
+ command->addCommand( pc );
+}
+
+void PropertyImage::initSettings( DocumentItem* item )
+{
+ ImageItem* img = static_cast<ImageItem*>(item);
+ QString expr = img->expression();
+
+ if( !expr.isEmpty() )
+ {
+ radioImageExpression->setChecked( true );
+ imgExpression->setText( expr );
+ }
+ else
+ {
+ // imgUrl->setURL( IMAGE_INTERNAL );
+ radioImagePath->setChecked( true );
+ }
+
+ switch( img->scaling() )
+ {
+ default:
+ case eImage_Original:
+ radioOriginal->setChecked( true );
+ break;
+ case eImage_Scaled:
+ radioScaled->setChecked( true );
+ break;
+ case eImage_Zoomed:
+ radioZoomed->setChecked( true );
+ break;
+ }
+
+ if( img->rotation() == 0.0 )
+ comboRotation->setCurrentItem( 0 );
+ else if( img->rotation() == 90.0 )
+ comboRotation->setCurrentItem( 1 );
+ else if( img->rotation() == 180.0 )
+ comboRotation->setCurrentItem( 2 );
+ else if( img->rotation() == 270.0 )
+ comboRotation->setCurrentItem( 3 );
+
+ checkMirrorH->setChecked( img->mirrorHorizontal() );
+ checkMirrorV->setChecked( img->mirrorVertical() );
+
+
+ enableControls();
+}
+
+void PropertyImage::enableControls()
+{
+ imgHBox->setEnabled( radioImageExpression->isChecked() );
+ imgUrl->setEnabled( radioImagePath->isChecked() );
+}
+
+void PropertyImage::slotTokens()
+{
+ TokenDialog tokendlg( m_token, this, "tokendlg" );
+ if( tokendlg.exec() == QDialog::Accepted )
+ imgExpression->insert( tokendlg.token() );
+}
+
+PropertyVisible::PropertyVisible( QWidget* parent )
+ : PropertyWidget( parent )
+{
+ QLabel* label = new QLabel( i18n("Evaluate JavsScript code to define the visibility of this item:"), this );
+ m_script = new KTextEdit( this );
+
+ grid->addWidget( label, 0, 0 );
+ grid->addMultiCellWidget( m_script, 1, 8, 0, 2 );
+}
+
+void PropertyVisible::applySettings( DocumentItem* item, KMacroCommand* command )
+{
+ TCanvasItem* canvasItem = item->canvasItem();
+ ScriptCommand* sc = new ScriptCommand( m_script->text(), canvasItem );
+ sc->execute();
+ command->addCommand( sc);
+}
+
+void PropertyVisible::initSettings( DocumentItem* item )
+{
+ m_script->setText( item->visibilityScript() );
+}
+
+#include "propertywidget.moc"