diff options
Diffstat (limited to 'kbarcode/commands.cpp')
-rw-r--r-- | kbarcode/commands.cpp | 604 |
1 files changed, 604 insertions, 0 deletions
diff --git a/kbarcode/commands.cpp b/kbarcode/commands.cpp new file mode 100644 index 0000000..a11c01b --- /dev/null +++ b/kbarcode/commands.cpp @@ -0,0 +1,604 @@ +/*************************************************************************** + commands.cpp - description + ------------------- + begin : Don Dez 19 2002 + copyright : (C) 2002 by Dominik Seichter + email : [email protected] + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 "commands.h" +#include "mycanvasview.h" + +#include "barkode.h" +#include "tcanvasitem.h" +#include "rectitem.h" +#include "textitem.h" +#include "imageitem.h" +#include "barcodeitem.h" +#include "lineitem.h" +//NY26 +#include "textlineitem.h" +//NY26 + + +// KDE includes +#include <kapplication.h> + +QPoint getFreePos( QCanvas* c ) +{ + MyCanvas* canvas = (MyCanvas*)c; + + if( !c->width() && !c->height() ) + return QPoint( canvas->rect().x(), canvas->rect().y() ); + + // TODO: fix for positions on label + int x = KApplication::random() % canvas->rect().width() - 20; + int y = KApplication::random() % canvas->rect().height() - 20; + + if( x > 0 && y > 0 ) + return QPoint( canvas->rect().x() + x, canvas->rect().y() + y ); + else + return QPoint( canvas->rect().x(), canvas->rect().y() ); +} + +CommandUtils::CommandUtils(TCanvasItem* item) + : QObject() +{ + m_canvas_item = item; + m_canvas_item->addRef(); + + c = m_canvas_item->canvas(); + /* NOT NEEDED: + if( m_canvas_item && m_canvas_item->item() ) + connect( m_canvas_item->item(), SIGNAL( destroyed() ), this, SLOT( documentItemDeleted() ) ); + */ +} + +CommandUtils::~CommandUtils() +{ + m_canvas_item->remRef(); +} + +bool CommandUtils::canvasHasItem() +{ + if( m_canvas_item && c ) + { + QCanvasItemList list = c->allItems(); + for( unsigned int i=0;i<list.count();i++) + if( m_canvas_item == list[i] ) + return true; + } + + return false; +} + + +void CommandUtils::documentItemDeleted() +{ + /** the document item got deleted, so that we can assume the TCanvasItem + * was deleted to (as it usually deltes the document item) + */ + /* NOT NEEDED + m_canvas_item = NULL; + c = NULL; + + qDebug("Document item removed from list!"); + delete this; + */ +} + +NewItemCommand::NewItemCommand( MyCanvasView* view, const QString & name ) + : QObject(), KCommand() +{ + cv = view; + m_name = name; + m_point = getFreePos( cv->canvas() ); + m_item = NULL; + m_object = NULL; +} + +NewItemCommand::~NewItemCommand() +{ + m_item->remRef(); +} + +void NewItemCommand::execute() +{ + if( !m_item ) + { + create(); + + if( m_object ) + { + m_item = new TCanvasItem( cv ); + m_item->setItem( m_object ); + m_item->move( m_point.x(), m_point.y() ); + m_item->addRef(); + + /* NOT NEEDED: + connect( m_object, SIGNAL( destroyed() ), this, SLOT( documentItemDeleted() ) ); + */ + } + } + + if( m_item ) + { + m_item->setCanvas( cv->canvas() ); + m_item->show(); + m_item->update(); + cv->setCurrent( m_item ); + } +} + +void NewItemCommand::unexecute() +{ + if( m_item ) { + m_item->setCanvas( NULL ); + m_item->hide(); + } +} + +void NewItemCommand::documentItemDeleted() +{ + /** the document item got deleted, so that we can assume the TCanvasItem + * was deleted to (as it usually deltes the document item) + */ + + /* NOT NEEDED: + m_item = NULL; + m_object = NULL; + + qDebug("NewItemCommand: Document item removed from list!"); + delete this; + */ +} + + +void ResizeCommand::setRect( int cx, int cy, int cw, int ch ) +{ + // make sure that the item cannot + // be resized to a negative value + if( cw <= 0 ) + cw = orect.width(); + + if( ch <= 0 ) + ch = orect.height(); + + rect = QRect( cx, cy, cw, ch ); +} + +void ResizeCommand::execute() +{ + if( canvasHasItem() ) { + if( m_shift && rect.width() ) { + double r = (double)orect.height() / (double)orect.width(); + rect.setWidth( int(rect.height() / r) ); + } + + m_canvas_item->moveMM( rect.x(), rect.y() ); + m_canvas_item->setSizeMM( rect.width(), rect.height() ); + m_canvas_item->update(); + + if( m_canvas_item->item()->rtti() == eRtti_Image ) + { + ImageItem* item = static_cast<ImageItem*>(m_canvas_item->item()); + item->updateImage(); + } + } +} + +void ResizeCommand::unexecute() +{ + if( canvasHasItem() ) { + m_canvas_item->moveMM( orect.x(), orect.y() ); + m_canvas_item->setSizeMM( orect.width(), orect.height() ); + m_canvas_item->update(); + + if( m_canvas_item->item()->rtti() == eRtti_Image ) + { + ImageItem* item = static_cast<ImageItem*>(m_canvas_item->item()); + item->updateImage(); + } + } +} + +void MoveCommand::execute() +{ + if( canvasHasItem() ) + { + m_canvas_item->moveByMM( x, y ); + m_canvas_item->update(); + } +} + +void MoveCommand::unexecute() +{ + if( canvasHasItem() ) + { + m_canvas_item->moveByMM( -x, -y ); + m_canvas_item->update(); + } +} + +ChangeZCommand::ChangeZCommand( int z, TCanvasItem* it ) + : CommandUtils( it ) +{ + m_z = z; + m_oldz = (int)m_canvas_item->z(); +} + +void ChangeZCommand::execute() +{ + if( canvasHasItem() ) + { + m_canvas_item->setZ( m_z ); + m_canvas_item->update(); + } +} + +void ChangeZCommand::unexecute() +{ + if( canvasHasItem() ) + { + m_canvas_item->setZ( m_oldz ); + m_canvas_item->update(); + } +} + +void LockCommand::execute() +{ + if( canvasHasItem() ) + { + m_canvas_item->item()->setLocked( m_locked ); + m_canvas_item->update(); + } +} + +void LockCommand::unexecute() +{ + if( canvasHasItem() ) + { + m_canvas_item->item()->setLocked( !m_locked ); + m_canvas_item->update(); + } +} + +PictureCommand::PictureCommand( double r, bool mh, bool mv, EImageScaling s, ImageItem* it ) + : CommandUtils( it->canvasItem() ) +{ + rotate = r; + mirrorv = mv; + mirrorh = mh; + scaling = s; + + orotate = it->rotation(); + omirrorv = it->mirrorVertical(); + omirrorh = it->mirrorHorizontal(); + oscaling = it->scaling(); + + oexpression = it->expression(); + opixmap = it->pixmap(); + opixserial = opixmap.serialNumber(); + + oldsize.setWidth( it->rect().width() ); + oldsize.setHeight( it->rect().height() ); + + m_item = it; +} + +void PictureCommand::setExpression( const QString & expr ) +{ + expression = expr; +} + +void PictureCommand::setPixmap( const QPixmap & pix ) +{ + pixmap = pix; + pixserial = pixmap.serialNumber(); +} + +void PictureCommand::execute() +{ + if( canvasHasItem() ) { + m_item->setRotation( rotate ); + m_item->setMirrorVertical( mirrorv ); + m_item->setMirrorHorizontal( mirrorh ); + m_item->setScaling( scaling ); + m_item->setExpression( expression ); + m_item->setPixmap( pixmap ); + + if( !pixmap.isNull() && pixserial != opixserial ) + m_item->canvasItem()->setSize( pixmap.width(), pixmap.height() ); + } +} + +void PictureCommand::unexecute() +{ + if( canvasHasItem() ) { + m_item->setRotation( orotate ); + m_item->setMirrorVertical( omirrorv ); + m_item->setMirrorHorizontal( omirrorh ); + m_item->setScaling( oscaling ); + m_item->setExpression( oexpression ); + m_item->setPixmap( opixmap ); + m_item->canvasItem()->setSize( oldsize.width(), oldsize.height() ); + } +} + +TextChangeCommand::TextChangeCommand( TextItem* it, QString t ) + : CommandUtils( it->canvasItem() ) +{ + m_item = it; + text = t; + oldtext = m_item->text(); +} + +void TextChangeCommand::execute() +{ + if( canvasHasItem() ) + m_item->setText( text ); +} + +void TextChangeCommand::unexecute() +{ + if( canvasHasItem() ) + m_item->setText( oldtext ); +} + +TextRotationCommand::TextRotationCommand( double rot, TextItem* t ) + : CommandUtils( t->canvasItem() ), m_item( t ) +{ + rot1 = rot; + rot2 = t->rotation(); +} + +void TextRotationCommand::execute() +{ + m_item->setRotation( rot1 ); +} + +void TextRotationCommand::unexecute() +{ + m_item->setRotation( rot2 ); +} + +//NY24 +TextLineChangeCommand::TextLineChangeCommand( TextLineItem* it, QString t, int font , int magvert, int maghor) + : CommandUtils( it->canvasItem() ) +{ + m_item = it; + text = t; + oldtext = m_item->text(); + m_font = font; + m_mag_vert = magvert; + m_mag_hor = maghor; +} + +void TextLineChangeCommand::execute() +{ + if( canvasHasItem() ){ + m_item->setText( text ); + m_item->setFont(m_font); + m_item->setMagVert(m_mag_vert); + m_item->setMagHor(m_mag_hor); + } +} + +void TextLineChangeCommand::unexecute() +{ + if( canvasHasItem() ) + m_item->setText( oldtext ); +} +//NY24 + +BarcodeCommand::BarcodeCommand( BarcodeItem* bcode, Barkode* d ) + : CommandUtils( bcode->canvasItem() ) +{ + m_item = bcode; + olddata = *bcode; + data = d; +} + +void BarcodeCommand::execute() +{ + if( canvasHasItem() ) { + m_item->setData( *data ); + m_item->updateBarcode(); + } +} + +void BarcodeCommand::unexecute() +{ + if( canvasHasItem() ) { + m_item->setData( olddata ); + m_item->updateBarcode(); + } +} + +void NewPictureCommand::create() +{ + ImageItem* r = new ImageItem(); + m_object = r; +} + +NewRectCommand::NewRectCommand( MyCanvasView* v, bool circle ) + : NewItemCommand( v, i18n("New Rectangle") ) +{ + m_circle = circle; +} + +void NewRectCommand::create() +{ + RectItem* r = new RectItem(); + r->setCircle( m_circle ); + + m_object = r; +} + +NewLineCommand::NewLineCommand( MyCanvasView* v ) + : NewItemCommand( v, i18n("New Line") ) +{ +} + +void NewLineCommand::create() +{ + m_object = new LineItem(); +} + +NewTextCommand::NewTextCommand( QString t, MyCanvasView* v, TokenProvider* token ) + : NewItemCommand( v, i18n("New Text") ), + m_token( token ) +{ + text = t; +} + +void NewTextCommand::create() +{ + TextItem* t = new TextItem(); + t->setTokenProvider( m_token ); + t->setText( text ); + + m_object = t; +} + +//NY25 +NewTextLineCommand::NewTextLineCommand( QString t, MyCanvasView* v, TokenProvider* token ) + : NewItemCommand( v, i18n("New TextLine") ), + m_token( token ) +{ + text = t; +} + +void NewTextLineCommand::create() +{ + TextLineItem* t = new TextLineItem(); + t->setTokenProvider( m_token ); + t->setText( text ); + + m_object = t; +} +//NY25 + +NewBarcodeCommand::NewBarcodeCommand( MyCanvasView* v, TokenProvider* token ) + : NewItemCommand( v, i18n("New Barcode") ), + m_token( token ) +{ +} + +void NewBarcodeCommand::create() +{ + m_object = new BarcodeItem(); + m_object->setTokenProvider( m_token ); +} + +DeleteCommand::~DeleteCommand() +{ + if( m_canvas_item && canvasHasItem() && m_canvas_item->canvas() == 0 ) + { + DocumentItem* item = m_canvas_item->item(); + if( item ) + item->disconnect( item, SIGNAL( destroyed() ), this, 0 ); + delete m_canvas_item; + } +} + +void DeleteCommand::execute() +{ + if( canvasHasItem() ) { + m_canvas_item->setCanvas( 0 ); + m_canvas_item->hide(); + } +} + +void DeleteCommand::unexecute() +{ + // canvasHasItem won't work here + if( m_canvas_item ) { + m_canvas_item->setCanvas( c ); + m_canvas_item->show(); + } +} + +BorderCommand::BorderCommand( bool border, const QPen & pen, DocumentItem* item ) + : CommandUtils( item->canvasItem() ) +{ + m_new_border = border; + m_new_pen = pen; + m_item = item; +} + +void BorderCommand::execute() +{ + if( canvasHasItem() ) + { + m_old_border = m_item->border(); + m_old_pen = m_item->pen(); + m_item->setBorder( m_new_border ); + m_item->setPen( m_new_pen ); + + m_canvas_item->update(); + } +} + +void BorderCommand::unexecute() +{ + if( canvasHasItem() ) + { + m_item->setBorder( m_old_border ); + m_item->setPen( m_old_pen ); + + m_canvas_item->update(); + } +} + +FillCommand::FillCommand( QColor c, RectItem* r ) + : CommandUtils( r->canvasItem() ) +{ + fill = c; + m_item = r; +} + +void FillCommand::execute() +{ + if( canvasHasItem() ) { + fill2 = m_item->color(); + m_item->setColor( fill ); + } +} + +void FillCommand::unexecute() +{ + if( canvasHasItem() ) { + m_item->setColor( fill2 ); + } +} + +void ScriptCommand::execute() +{ + if( canvasHasItem() ) + { + m_old_script = m_canvas_item->item()->visibilityScript(); + m_canvas_item->item()->setVisibilityScript( m_script ); + m_canvas_item->update(); + } +} + +void ScriptCommand::unexecute() +{ + if( canvasHasItem() ) + { + m_canvas_item->item()->setVisibilityScript( m_old_script ); + m_canvas_item->update(); + } +} + +#include "commands.moc" |