You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kbarcode/kbarcode/tcanvasitem.cpp

222 lines
5.6 KiB

/***************************************************************************
tcanvasitem.cpp - description
-------------------
begin : Do Sep 2 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 "tcanvasitem.h"
#include "mycanvasitem.h"
#include "mycanvasview.h"
#include "imageitem.h"
#include <tqpainter.h>
#include <labelutils.h>
TCanvasItem::TCanvasItem( MyCanvasView* cv )
: TQCanvasRectangle( cv->canvas() ),
ReferenceCounted()
{
m_view = cv;
m_item = NULL;
show();
}
TCanvasItem::~TCanvasItem()
{
if( m_item )
delete m_item;
}
void TCanvasItem::setZ( double z )
{
TQCanvasRectangle::setZ( z );
if( m_item )
m_item->setZ( (int)z );
}
void TCanvasItem::setSize( int width, int height )
{
TQCanvasRectangle::setSize( width, height );
if( m_item )
{
m_item->setSize( width, height );
if( m_item->rtti() == eRtti_Image )
{
ImageItem* img = static_cast<ImageItem*>(m_item);
img->updateImage();
}
update();
}
}
void TCanvasItem::setSizeMM( int w, int h )
{
if( m_item )
{
m_item->setSizeMM( w, h );
TQCanvasRectangle::setSize( m_item->boundingRect().width(), m_item->boundingRect().height() );
}
}
void TCanvasItem::moveBy( double dx, double dy )
{
TQCanvasRectangle::moveBy( dx, dy );
if( m_item )
{
m_item->move( (int)x() - m_view->getTranslation().x(), (int)y() - m_view->getTranslation().y() );
update();
}
}
void TCanvasItem::moveByMM( int x, int y )
{
moveMM( m_item->rectMM().x() + x, m_item->rectMM().y() + y );
}
void TCanvasItem::moveMM( int x, int y )
{
if( m_item )
{
LabelUtils l;
// the TQCanvasRectangle::move is done before the real move
// as we get dancing TCanvasItems on the screen otherwise
TQCanvasRectangle::move( l.mmToPixel( x / 1000.0, TQT_TQPAINTDEVICE(m_view), LabelUtils::DpiX ) + m_view->getTranslation().x(),
l.mmToPixel( y / 1000.0, TQT_TQPAINTDEVICE(m_view), LabelUtils::DpiY ) + m_view->getTranslation().y() );
m_item->moveMM( x, y );
}
}
void TCanvasItem::drawShape (TQPainter & painter)
{
painter.save();
if( m_item )
{
if( z() != (int)m_item->z() )
TQCanvasRectangle::setZ( m_item->z() );
painter.save();
painter.setClipRect( boundingRect(), TQPainter::CoordPainter );
painter.translate( m_view->getTranslation().x(), m_view->getTranslation().y() );
m_item->draw( &painter );
painter.restore();
}
// draw edges
if( isSelected() ) {
const TQPixmap* spot = SpotProvider::getInstance()->spot();
painter.translate( x(), y() );
// top left
painter.drawPixmap( 0, 0, *spot );
// bottom left
painter.drawPixmap( 0, height()-SPOTSIZE, *spot );
// top right
painter.drawPixmap( width()-SPOTSIZE, 0, *spot );
// bottom left
painter.drawPixmap( width()-SPOTSIZE, height()-SPOTSIZE, *spot );
if( (width() - 2 * SPOTSIZE ) / 2 > SPOTSIZE ) {
// top middle
painter.drawPixmap( (width()-SPOTSIZE)/2, 0, *spot );
// bottom middle
painter.drawPixmap( (width()-SPOTSIZE)/2, height()-SPOTSIZE, *spot );
}
if( (height() - 2 * SPOTSIZE ) / 2 > SPOTSIZE ) {
// left middle
painter.drawPixmap( 0, (height()-SPOTSIZE)/2, *spot );
// right middle
painter.drawPixmap( width() - SPOTSIZE, (height()-SPOTSIZE)/2, *spot );
}
}
painter.restore();
}
void TCanvasItem::setItem (DocumentItem* item)
{
if( m_item )
m_item->setCanvasItem( NULL );
m_item = item;
if( m_item )
{
m_item->setCanvasItem( this );
this->setZ( m_item->z() );
TQCanvasRectangle::move( m_item->boundingRect().x() + m_view->getTranslation().x(), m_item->boundingRect().y() + m_view->getTranslation().y() );
TQCanvasRectangle::setSize( m_item->boundingRect().width(), m_item->boundingRect().height() );
update();
}
}
DocumentItem* TCanvasItem::item () const
{
return m_item;
}
void TCanvasItem::update()
{
TQCanvasRectangle::update();
}
int TCanvasItem::rtti() const
{
if( m_item )
return m_item->rtti();
else
return 0;
}
MyCanvasView* TCanvasItem::canvasView() const
{
return m_view;
}
void TCanvasItem::show()
{
if (!isVisible())
{
this->addRef();
((TQCanvasItem*) this)->show();
}
}
void TCanvasItem::hide()
{
if (refCount()==1)
{
if (isVisible())
{
this->remRef();
}
}
else
{
if (isVisible())
{
((TQCanvasItem*) this)->hide();
this->remRef();
}
}
}