summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/tools/linguist/linguist/printout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/tools/linguist/linguist/printout.cpp')
-rw-r--r--tqtinterface/qt4/tools/linguist/linguist/printout.cpp182
1 files changed, 182 insertions, 0 deletions
diff --git a/tqtinterface/qt4/tools/linguist/linguist/printout.cpp b/tqtinterface/qt4/tools/linguist/linguist/printout.cpp
new file mode 100644
index 0000000..1aae592
--- /dev/null
+++ b/tqtinterface/qt4/tools/linguist/linguist/printout.cpp
@@ -0,0 +1,182 @@
+/**********************************************************************
+** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of TQt Linguist.
+**
+** This file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free
+** Software Foundation and appearing in the files LICENSE.GPL2
+** and LICENSE.GPL3 included in the packaging of this file.
+** Alternatively you may (at your option) use any later version
+** of the GNU General Public License if such license has been
+** publicly approved by Trolltech ASA (or its successors, if any)
+** and the KDE Free TQt Foundation.
+**
+** Please review the following information to ensure GNU General
+** Public Licensing requirements will be met:
+** http://trolltech.com/products/qt/licenses/licensing/opensource/.
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
+** or contact the sales department at sales@trolltech.com.
+**
+** Licensees holding valid TQt Commercial licenses may use this file in
+** accordance with the TQt Commercial License Agreement provided with
+** the Software.
+**
+** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
+** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
+** herein.
+**
+**********************************************************************/
+
+#include "printout.h"
+
+#include <tqprinter.h>
+#include <tqfontmetrics.h>
+
+PrintOut::PrintOut( TQPrinter *printer )
+ : pr( printer ), pdmetrics( printer ), nextRule( NoRule ), page( 0 )
+{
+ p.begin( pr );
+ TQFont f( "Arial" );
+ f8 = f;
+ f8.setPointSize( 8 );
+ f10 = f;
+ f10.setPointSize( 10 );
+ p.setFont( f10 );
+ fmetrics = new TQFontMetrics( p.fontMetrics() );
+ hmargin = 5 * pdmetrics.width() / pdmetrics.widthMM(); // 5 mm
+ vmargin = 5 * pdmetrics.height() / pdmetrics.heightMM(); // 5 mm
+ hsize = pdmetrics.width() - 2 * hmargin;
+ vsize = pdmetrics.height() - vmargin;
+ dateTime = TQDateTime::tqcurrentDateTime();
+ breakPage();
+ vsize -= voffset;
+ cp = Paragraph( TQPoint(hmargin, voffset) );
+}
+
+PrintOut::~PrintOut()
+{
+ flushLine();
+ delete fmetrics;
+ p.end();
+}
+
+void PrintOut::setRule( Rule rule )
+{
+ if ( (int) nextRule < (int) rule )
+ nextRule = rule;
+}
+
+void PrintOut::setGuide( const TQString& guide )
+{
+ g = guide;
+}
+
+void PrintOut::vskip()
+{
+ if ( !firstParagraph )
+ voffset += 14;
+}
+
+void PrintOut::flushLine( bool /* mayBreak */ )
+{
+ if ( voffset + cp.rect.height() > vsize )
+ breakPage();
+ else if ( !firstParagraph )
+ drawRule( nextRule );
+
+ for ( int i = 0; i < (int) cp.boxes.count(); i++ ) {
+ Box b = cp.boxes[i];
+ b.rect.moveBy( 0, voffset );
+ TQRect r = b.rect;
+ p.setFont( b.font );
+ p.drawText( r, b.align, b.text );
+ }
+ voffset += cp.rect.height();
+
+ nextRule = NoRule;
+ cp = Paragraph( TQPoint(hmargin, voffset) );
+ firstParagraph = FALSE;
+}
+
+void PrintOut::addBox( int percent, const TQString& text, Style style,
+ int halign )
+{
+ int align = halign | TQt::AlignTop;
+ TQFont f = f10;
+ if ( style == Strong )
+ f.setBold( TRUE );
+ else if ( style == Emphasis )
+ f.setItalic( TRUE );
+ int wd = hsize * percent / 100;
+ TQRect r( cp.rect.x() + cp.rect.width(), 0, wd, vsize );
+ int ht = p.boundingRect( r, align, text ).height();
+
+ Box b( r, text, f, align );
+ cp.boxes.append( b );
+ cp.rect.setSize( TQSize(cp.rect.width() + wd, TQMAX(cp.rect.height(), ht)) );
+}
+
+void PrintOut::breakPage()
+{
+ static const int LeftAlign = TQt::AlignLeft | TQt::AlignTop;
+ static const int RightAlign = TQt::AlignRight | TQt::AlignTop;
+ TQRect r1, r2;
+ int h1 = 0;
+ int h2 = 0;
+
+ if ( page++ > 0 )
+ pr->newPage();
+ voffset = 0;
+
+ p.setFont( f10 );
+ r1 = TQRect( hmargin, voffset, 3 * hsize / 4, vsize );
+ r2 = TQRect( r1.x() + r1.width(), voffset, hsize - r1.width(), vsize );
+ h1 = p.boundingRect( r1, LeftAlign, pr->docName() ).height();
+ p.drawText( r1, LeftAlign, pr->docName() );
+ h2 = p.boundingRect( r2, RightAlign, TQString::number(page) ).height();
+ p.drawText( r2, RightAlign, TQString::number(page) );
+ voffset += TQMAX( h1, h2 );
+
+ r1 = TQRect( hmargin, voffset, hsize / 2, LeftAlign );
+ p.setFont( f8 );
+ h1 = p.boundingRect( r1, LeftAlign, dateTime.toString() ).height();
+ p.drawText( r1, LeftAlign, dateTime.toString() );
+ p.setFont( f10 );
+ voffset += TQMAX( h1, h2 );
+
+ voffset += 4;
+ p.drawLine( TQPoint(hmargin, voffset), TQPoint(hmargin + hsize, voffset) );
+ voffset += 14;
+ firstParagraph = TRUE;
+}
+
+void PrintOut::drawRule( Rule rule )
+{
+ TQPen pen;
+
+ switch ( rule ) {
+ case NoRule:
+ voffset += 5;
+ break;
+ case ThinRule:
+ pen.setColor( TQColor(192, 192, 192) );
+ pen.setStyle( Qt::DotLine );
+ pen.setWidth( 0 );
+ p.setPen( pen );
+ voffset += 5;
+ p.drawLine( TQPoint(hmargin, voffset),
+ TQPoint(hmargin + hsize, voffset) );
+ p.setPen( TQPen() );
+ voffset += 2;
+ break;
+ case ThickRule:
+ voffset += 7;
+ p.drawLine( TQPoint(hmargin, voffset),
+ TQPoint(hmargin + hsize, voffset) );
+ voffset += 4;
+ }
+}