/*************************************************************************** textitem.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 "textitem.h" #include "labelutils.h" #include "labeleditor.h" #include "tokenprovider.h" // we need sin and cos #include #include #include #include #include #include #include #include #include TextItem::TextItem() : DocumentItem() { init(); } void TextItem::init() { m_text = TQString(); m_rotation = 0.0; setBorder( false ); setRect( TQRect( 0, 0, 100, 100 ) ); } void TextItem::draw(TQPainter* painter) { bool autosize = false; const TQString t = tokenProvider() ? tokenProvider()->parse( m_text ) : m_text; if( t != m_text ) autosize = true; TQPaintDeviceMetrics metrics( DocumentItem::paintDevice() ); double scalex = (double)metrics.logicalDpiX() / (double)TQPaintDevice::x11AppDpiX(); double scaley = (double)metrics.logicalDpiY() / (double)TQPaintDevice::x11AppDpiY(); TQColorGroup cg; TQSimpleRichText srt( t, painter->font() ); /* int width = (rect().width() < (int)((double)srt.widthUsed()*scalex) && autosize) ? srt.widthUsed() : rect().width(); int height = (rect().height() < (int)((double)srt.height()*scaley) && autosize) ? srt.height() : rect().height(); */ int width = (int)((double)rect().width() / scalex); int height = (int)((double)rect().height() / scaley); painter->save(); int w = rect().width(); int h = rect().height(); switch( (int)m_rotation ) { default: case 0: painter->translate( rect().x(), rect().y() ); break; case 90: painter->translate( rect().x() + w, rect().y() ); tqSwap( w, h ); break; case 180: painter->translate( rect().x() + w, rect().y() + h ); break; case 270: painter->translate( rect().x(), rect().y() + h ); tqSwap( w, h ); break; }; painter->rotate( m_rotation ); painter->setPen( TQt::black ); srt.setWidth( painter, w ); srt.draw( painter, 0, 0, TQRect( 0, 0, w, h ), cg ); painter->restore(); DocumentItem::drawBorder( painter ); } void TextItem::drawZpl( TQTextStream* stream ) { // simply remove all html tags.... TQString data = m_text.replace( TQRegExp("<[^>]*>"), "" ); *stream << ZPLUtils::fieldOrigin( rect().x(), rect().y() ); *stream << ZPLUtils::font( TQFont() ); // todo: select a valid font } void TextItem::drawIpl( TQTextStream* stream, IPLUtils* utils ) { int counter = utils->counter(); // simply remove all html tags.... TQString data = m_text.replace( TQRegExp("<[^>]*>"), "" ); TQString s = TQString("H%1;").arg( counter ); // field number s += utils->fieldOrigin( rect().x(), rect().y() ); s += TQString("c%1;").arg( 2 ); // font s += TQString("h%1;").arg( 2 ); // vertical magnification ("height") s += TQString("w%1;").arg( 2 ); // horicontyl magnification ("width") s += TQString("d0,%1;").arg( data.length() ); // max length of data ! *stream << utils->field( s ); utils->addValue( data ); } void TextItem::drawEPcl( TQTextStream* stream ) { // TODO: parse text field HTML // Need to wrap string if too long... // // break string into lines TQString t = m_text.replace( TQRegExp("<[^>]*>"), "" ); // @DOM: // TODO: // provide an API which simplifies wordwrapping for // barcode printers TQStringList lines = TQStringList::split( "\n", t ); TQStringList::Iterator line = lines.begin(); for( int i=0; line != lines.end(); ++line, ++i ){ TQString s = TQString("T %1").arg( rect().x() + 1 ); s += TQString(" %1 0 0 0 50 1").arg( rect().y()+50+1 + i*52 ); s += TQString(" %1").arg( *line ); *stream << EPCLUtils::field( s ); } } void TextItem::loadXML (TQDomElement* element) { TQDomNode n = element->firstChild(); while( !n.isNull() ) { TQDomElement e = n.toElement(); // try to convert the node to an element. if( !e.isNull() ) if( e.tagName() == "text" ) { setText( e.text() ); break; } n = n.nextSibling(); } m_rotation = element->attribute("rotation", "0.0").toDouble(); DocumentItem::loadXML( element ); } void TextItem::saveXML (TQDomElement* element) { TQDomElement texttag = element->ownerDocument().createElement( "text" ); texttag.appendChild( element->ownerDocument().createTextNode( text() ) ); element->appendChild( texttag ); element->setAttribute( "rotation", m_rotation ); DocumentItem::saveXML( element ); } TQString TextItem::text () const { return m_text; } void TextItem::setText (const TQString & text) { m_text = text; }