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/documentitem.cpp

246 lines
6.8 KiB

/***************************************************************************
documentitem.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 "documentitem.h"
#include "tcanvasitem.h"
#include "labelutils.h"
#include <tdeapplication.h>
#include <tqpen.h>
#include <tqpaintdevicemetrics.h>
#include <tqpainter.h>
#include <tqdom.h>
DocumentItem::DocumentItem()
: TQObject(), XMLUtils()
{
init();
}
void DocumentItem::init()
{
m_canvasitem = NULL;
m_token = NULL;
m_device = TQT_TQPAINTDEVICE(TDEApplication::desktop());
m_z = 0;
m_border = true;
m_locked = false;
m_pen = TQPen( TQt::black, 1, TQt::SolidLine );
m_rect = TQRect( 0, 0, 0, 0 );
m_visibilityScript = "true";
}
void DocumentItem::drawBorder(TQPainter* painter)
{
if( m_border )
{
painter->save();
painter->setPen( m_pen );
painter->drawRect( rect() );
painter->restore();
}
}
void DocumentItem::loadXML (TQDomElement* element)
{
LabelUtils l;
m_rect.setX( element->attribute( "x_mm", "0" ).toInt() );
m_rect.setY( element->attribute( "y_mm", "0" ).toInt() );
m_rect.setWidth( element->attribute( "width_mm", "-1" ).toInt() );
m_rect.setHeight( element->attribute( "height_mm", "-1" ).toInt() );
m_pen.setColor( readXMLColor( element, "line-color", TQt::black ) );
m_pen.setStyle( (Qt::PenStyle)element->attribute( "line-style", "0" ).toInt() );
m_pen.setWidth( element->attribute( "line-width", "1" ).toInt() );
m_border = (bool)element->attribute( "line-visible", "1" ).toInt();
m_z = element->attribute( "z", "0" ).toInt();
m_locked = (bool)element->attribute( "locked", "0" ).toInt();
m_visibilityScript = element->attribute( "visibilityScript", "true" );
}
void DocumentItem::saveXML (TQDomElement* element)
{
element->setAttribute( "x_mm", m_rect.x() );
element->setAttribute( "y_mm", m_rect.y() );
element->setAttribute( "width_mm", m_rect.width() );
element->setAttribute( "height_mm", m_rect.height() );
writeXMLColor( element, "line-color", m_pen.color() );
element->setAttribute( "line-style", (TQt::PenStyle)m_pen.style() );
element->setAttribute( "line-width", m_pen.width() );
element->setAttribute( "line-visible", (int)m_border );
element->setAttribute( "z", m_z );
element->setAttribute( "locked", (int)m_locked );
element->setAttribute( "visibilityScript", m_visibilityScript );
}
void DocumentItem::move( int x, int y )
{
LabelUtils l;
moveMM( (int)(l.pixelToMm( x, m_device, LabelUtils::DpiX ) * 1000.0 ),
(int)(l.pixelToMm( y, m_device, LabelUtils::DpiY ) * 1000.0 ) );
}
void DocumentItem::moveMM( int x, int y )
{
// Move is not relative!
/* m_rect.setX( m_rect.x() + x );
m_rect.setY( m_rect.y() + y );*/
m_rect = TQRect( x, y, m_rect.width(), m_rect.height() );
}
void DocumentItem::setSize( int w, int h )
{
LabelUtils l;
setSizeMM( (int)(l.pixelToMm( w, m_device, LabelUtils::DpiX ) * 1000.0 ),
(int)(l.pixelToMm( h, m_device, LabelUtils::DpiY ) * 1000.0 ) );
}
void DocumentItem::setSizeMM( int w, int h )
{
m_rect.setWidth( w );
m_rect.setHeight( h );
}
void DocumentItem::setBoundingRect( const TQRect & rect )
{
TQRect r;
LabelUtils l;
r.setX( (int)(l.pixelToMm( rect.x(), m_device, LabelUtils::DpiX ) * 1000.0 ) );
r.setY( (int)(l.pixelToMm( rect.y(), m_device, LabelUtils::DpiY ) * 1000.0 ) );
r.setWidth( (int)(l.pixelToMm( rect.width(), m_device, LabelUtils::DpiX ) * 1000.0 ) );
r.setHeight( (int)(l.pixelToMm( rect.height(), m_device, LabelUtils::DpiY ) * 1000.0 ) );
// avoid resizing to negative values
setRectMM( r.normalize() );
}
TQRect DocumentItem::boundingRect() const
{
TQRect r;
LabelUtils l;
r.setX( (int)(l.mmToPixel( m_rect.x(), m_device, LabelUtils::DpiX ) / 1000.0 ) );
r.setY( (int)(l.mmToPixel( m_rect.y(), m_device, LabelUtils::DpiY ) / 1000.0 ) );
r.setWidth( (int)(l.mmToPixel( m_rect.width(), m_device, LabelUtils::DpiX ) / 1000.0 ) );
r.setHeight( (int)(l.mmToPixel( m_rect.height(), m_device, LabelUtils::DpiY ) / 1000.0 ) );
// tqDebug("bounding rect %i %i %i %i", r.x(), r.y(), r.width(), r.height() );
return r;
}
void DocumentItem::setRect( const TQRect & rect)
{
// avoid resizing to negative values
TQRect r = rect.normalize();
setBoundingRect( TQRect( r.x() - m_pen.width(), r.y() - m_pen.width(), r.width() + 2 * m_pen.width(), r.height() + 2 * m_pen.width() ) );
}
TQRect DocumentItem::rect() const
{
TQRect bound = boundingRect();
TQRect r( bound.x() + m_pen.width(), bound.y() + m_pen.width(), bound.width() - 2 * m_pen.width(), bound.height() - 2 * m_pen.width() );
// tqDebug("rect %i %i %i %i", r.x(), r.y(), r.width(), r.height() );
return r;
}
void DocumentItem::setRectMM( const TQRect & rect )
{
// avoid resizing to negative values
m_rect = rect.normalize();
}
TQRect DocumentItem::rectMM() const
{
return m_rect;
}
void DocumentItem::setBorder (bool b)
{
m_border = b;
}
bool DocumentItem::border () const
{
return m_border;
}
void DocumentItem::setPen( const TQPen & pen )
{
m_pen = pen;
}
TQPen DocumentItem::pen() const
{
return m_pen;
}
void DocumentItem::setCanvasItem( TCanvasItem* item )
{
m_canvasitem = item;
}
TCanvasItem* DocumentItem::canvasItem() const
{
return m_canvasitem;
}
int DocumentItem::z() const
{
return m_z;
}
void DocumentItem::setZ( int z )
{
m_z = z;
}
void DocumentItem::setPaintDevice( TQPaintDevice* device )
{
m_device = device;
}
TQPaintDevice* DocumentItem::paintDevice() const
{
return m_device;
}
void DocumentItem::setTokenProvider( TokenProvider* token )
{
m_token = token;
}
TokenProvider* DocumentItem::tokenProvider() const
{
return m_token;
}
void DocumentItem::setLocked( bool locked )
{
m_locked = locked;
}
const bool DocumentItem::locked() const
{
return m_locked;
}