• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

okteta

  • sources
  • kde-4.12
  • kdesdk
  • okteta
  • kasten
  • controllers
  • view
  • print
printtool.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the Okteta Kasten module, made within the KDE community.
3 
4  Copyright 2007-2008 Friedrich W. H. Kossebau <kossebau@kde.org>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either
9  version 2.1 of the License, or (at your option) version 3, or any
10  later version accepted by the membership of KDE e.V. (or its
11  successor approved by the membership of KDE e.V.), which shall
12  act as a proxy defined in Section 6 of version 3 of the license.
13 
14  This library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  Lesser General Public License for more details.
18 
19  You should have received a copy of the GNU Lesser General Public
20  License along with this library. If not, see <http://www.gnu.org/licenses/>.
21 */
22 
23 #include "printtool.h"
24 
25 // controller
26 #include "printjob.h"
27 #include "framestopaperprinter.h"
28 #include "headerfooterframerenderer.h"
29 #include "bytearrayframerenderer.h"
30 // lib
31 #include <bytearrayview.h>
32 #include <bytearraydocument.h>
33 // Okteta core
34 #include <abstractbytearraymodel.h>
35 // KDE
36 #include <KLocale>
37 #include <KMessageBox>
38 #include <kdeprintdialog.h>
39 // Qt
40 #include <QtGui/QApplication>
41 #include <QtGui/QPrintDialog>
42 #include <QtGui/QPrinter>
43 #include <QtGui/QFont>
44 #include <QtGui/QFontMetrics>
45 
46 
47 namespace Kasten2
48 {
49 
50 PrintTool::PrintTool()
51  : mDocument( 0 ), mByteArrayView( 0 ), mByteArrayModel( 0 )
52 {
53 }
54 
55 void PrintTool::setTargetModel( AbstractModel* model )
56 {
57 // if( mByteArrayView ) mByteArrayView->disconnect( this );
58 
59  mByteArrayView = model ? model->findBaseModel<ByteArrayView*>() : 0;
60 
61  mDocument = mByteArrayView ? qobject_cast<ByteArrayDocument*>( mByteArrayView->baseModel() ) : 0;
62  mByteArrayModel = mDocument ? mDocument->content() : 0;
63 
64  const bool hasView = ( mByteArrayView && mByteArrayModel );
65  emit viewChanged( hasView );
66 }
67 
68 void PrintTool::print()
69 {
70  const QString processTitle = i18nc( "@title:window", "Print Byte Array %1", mDocument->title() );
71 
72  QPrinter printer;
73 
74  // Not supported by Qt?
75  //printer.setPageSelection( QPrinter::SystemSide );
76 
77 // LayoutDialogPage* layoutPage = new LayoutDialogPage();
78  QList<QWidget*> customDialogPages;
79 // customDialogPages << layoutPage;
80  QPrintDialog *printDialog = KdePrint::createPrintDialog( &printer, customDialogPages, 0 );
81 
82  printDialog->setWindowTitle( processTitle );
83  if( printDialog->exec() )
84  {
85  QString creator = QString::fromLatin1( "Print Plugin for Okteta " ); // no i18n(), keep space at end as separator
86 // creator += KDEUTILS_VERSION_STRING; // TODO: change to OKTETA_VERSION_STRING
87  printer.setCreator( creator );
88 
89  FramesToPaperPrinter framesPrinter;
90  framesPrinter.setPaperRect( printer.paperRect() );
91  framesPrinter.setPageRect( printer.pageRect() );
92  printer.setFullPage( true );
93 
94 
95  PrintInfo info;
96  const QRect pageRect = framesPrinter.pageRect();
97  const int left = pageRect.left();
98  const int width = pageRect.width();
99 
100  HeaderFooterFrameRenderer *headerFrameRenderer = new HeaderFooterFrameRenderer( &info );
101  headerFrameRenderer->setTexts( QLatin1String("%d"),
102  QLatin1String("%f"),
103  i18nc("in the header of the printed page, e.g. Page 2 of 20","Page %p of %P") );
104  headerFrameRenderer->setWidth( width );
105  headerFrameRenderer->setPos( pageRect.topLeft() );
106 
107  HeaderFooterFrameRenderer *footerFrameRenderer = new HeaderFooterFrameRenderer( &info );
108  footerFrameRenderer->setTexts( i18nc("in the footer of the printed page, e.g. Printed by: Joe User",
109  "Printed by: %U"),
110  i18nc("advertizer in the footer of the printed page","Okteta, built on KDE4"),
111  QLatin1String("%F") );
112  footerFrameRenderer->setWidth( width );
113  const int footerTop = pageRect.bottom() - footerFrameRenderer->height();
114  footerFrameRenderer->setPos( left, footerTop );
115 
116  const int contentHeight = pageRect.height() - footerFrameRenderer->height() - headerFrameRenderer->height();
117  const int contentTop = pageRect.top() + headerFrameRenderer->height();
118  ByteArrayFrameRenderer *byteArrayFrameRenderer = new ByteArrayFrameRenderer;
119  byteArrayFrameRenderer->setPos( left, contentTop );
120  byteArrayFrameRenderer->setWidth( width );
121  byteArrayFrameRenderer->setHeight( contentHeight );
122 
123  Okteta::AddressRange range = mByteArrayView->selection();
124  if( ! range.isValid() )
125  range.setByWidth( 0, mByteArrayModel->size() );
126  byteArrayFrameRenderer->setByteArrayModel( mByteArrayModel, range.start(), range.width() );
127 
128  // TODO: use noOfBytesPerLine of view, scale resolution down if it does not fit the page
129  const int noOfBytesPerLine = mByteArrayView->noOfBytesPerLine();
130 // byteArrayFrameRenderer->setNoOfBytesPerLine( mByteArrayView->noOfBytesPerLine() );
131 
132  const Okteta::Address startOffset = mByteArrayView->startOffset() + range.start();
133  const int line = startOffset / noOfBytesPerLine;
134  const Okteta::Address firstLineOffset = mByteArrayView->firstLineOffset() + line*noOfBytesPerLine;
135  byteArrayFrameRenderer->setFirstLineOffset( firstLineOffset );
136  byteArrayFrameRenderer->setStartOffset( startOffset );
137 
138  byteArrayFrameRenderer->setCharCoding( mByteArrayView->charCodingName() );
139  byteArrayFrameRenderer->setBufferSpacing( mByteArrayView->byteSpacingWidth(),
140  mByteArrayView->noOfGroupedBytes(),
141  mByteArrayView->groupSpacingWidth() );
142  byteArrayFrameRenderer->setBinaryGapWidth( mByteArrayView->binaryGapWidth() );
143 
144  byteArrayFrameRenderer->setValueCoding( (Okteta::ValueCoding)mByteArrayView->valueCoding() );
145  byteArrayFrameRenderer->setShowsNonprinting( mByteArrayView->showsNonprinting() );
146  byteArrayFrameRenderer->setSubstituteChar( mByteArrayView->substituteChar() );
147  byteArrayFrameRenderer->setUndefinedChar( mByteArrayView->undefinedChar() );
148  byteArrayFrameRenderer->showByteArrayColumns( mByteArrayView->visibleByteArrayCodings() );
149 
150 // if( !confirmPrintPageNumber( byteArrayFrameRenderer->framesCount()) )
151 // return;
152 
153  framesPrinter.addFrameRenderer( headerFrameRenderer );
154  framesPrinter.addFrameRenderer( byteArrayFrameRenderer );
155  framesPrinter.addFrameRenderer( footerFrameRenderer );
156 
157  info.setNoOfPages( byteArrayFrameRenderer->framesCount() );
158  info.setUrl( mDocument->title() ); //TODO: get the url from synchronizer!!!
159 
160  QApplication::setOverrideCursor( Qt::WaitCursor );
161 
162  PrintJob *printJob = new PrintJob( &framesPrinter, 0, byteArrayFrameRenderer->framesCount()-1, &printer );
163  const bool success = printJob->exec();
164 
165  QApplication::restoreOverrideCursor();
166 
167  if( ! success )
168  {
169  const QString message = i18nc( "@info","Could not print." );
170 
171  KMessageBox::sorry( 0, message, processTitle );
172  }
173  }
174 
175  delete printDialog;
176 }
177 
178 PrintTool::~PrintTool() {}
179 
180 }
Kasten2::ByteArrayView::showsNonprinting
bool showsNonprinting() const
Definition: bytearrayview.cpp:286
ByteArrayFrameRenderer::setFirstLineOffset
void setFirstLineOffset(Okteta::Address firstLineOffset)
Definition: bytearrayframerenderer.cpp:174
ByteArrayFrameRenderer::setWidth
void setWidth(int width)
Definition: bytearrayframerenderer.cpp:164
Kasten2::PrintTool::setTargetModel
void setTargetModel(AbstractModel *model)
Definition: printtool.cpp:55
Okteta::Address
qint32 Address
Definition: address.h:34
abstractbytearraymodel.h
Kasten2::PrintTool::mByteArrayView
ByteArrayView * mByteArrayView
Definition: printtool.h:81
FramesToPaperPrinter::setPaperRect
void setPaperRect(const QRect &paperRect)
Definition: framestopaperprinter.cpp:36
headerfooterframerenderer.h
Kasten2::ByteArrayView::valueCoding
int valueCoding() const
Definition: bytearrayview.cpp:250
printjob.h
FramesToPaperPrinter::setPageRect
void setPageRect(const QRect &pageRect)
Definition: framestopaperprinter.cpp:37
ByteArrayFrameRenderer::showByteArrayColumns
void showByteArrayColumns(int CCs)
Definition: bytearrayframerenderer.cpp:503
PrintInfo::setUrl
void setUrl(const KUrl &url)
Definition: headerfooterframerenderer.h:54
Kasten2::ByteArrayView::charCodingName
QString charCodingName() const
Definition: bytearrayview.cpp:255
Kasten2::ByteArrayView::noOfBytesPerLine
int noOfBytesPerLine() const
Definition: bytearrayview.cpp:244
ByteArrayFrameRenderer::setBinaryGapWidth
void setBinaryGapWidth(Okteta::PixelX binaryGapWidth)
Definition: bytearrayframerenderer.cpp:249
KDE::NumberRange< Address, Size >
KDE::Range::start
T start() const
Definition: range.h:86
ByteArrayFrameRenderer::setBufferSpacing
void setBufferSpacing(Okteta::PixelX byteSpacing, int noOfGroupedBytes, Okteta::PixelX groupSpacing)
Definition: bytearrayframerenderer.cpp:195
printtool.h
Kasten2::ByteArrayView::byteSpacingWidth
int byteSpacingWidth() const
Definition: bytearrayview.cpp:378
FramesToPaperPrinter::pageRect
QRect pageRect() const
Definition: framestopaperprinter.cpp:34
Kasten2::ByteArrayView::firstLineOffset
Okteta::Address firstLineOffset() const
Definition: bytearrayview.cpp:240
KDE::NumberRange::setByWidth
void setByWidth(N other, S width)
Definition: numberrange.h:148
ByteArrayFrameRenderer::setShowsNonprinting
void setShowsNonprinting(bool showsNonprinting)
Definition: bytearrayframerenderer.cpp:267
ByteArrayFrameRenderer
Definition: bytearrayframerenderer.h:54
Kasten2::ByteArrayView::binaryGapWidth
int binaryGapWidth() const
Definition: bytearrayview.cpp:390
Kasten2::ByteArrayView::visibleByteArrayCodings
int visibleByteArrayCodings() const
Definition: bytearrayview.cpp:306
Kasten2::AbstractModel::baseModel
AbstractModel * baseModel() const
Definition: abstractmodel.cpp:40
KDE::NumberRange::width
S width() const
Definition: numberrange.h:141
Kasten2::ByteArrayDocument::title
virtual QString title() const
Definition: bytearraydocument.cpp:63
PrintInfo::setNoOfPages
void setNoOfPages(int noOfPages)
Definition: headerfooterframerenderer.h:55
HeaderFooterFrameRenderer::setTexts
void setTexts(const QString &leftText, const QString &centerText, const QString &rightText)
Definition: headerfooterframerenderer.cpp:50
ByteArrayFrameRenderer::framesCount
virtual int framesCount() const
Definition: bytearrayframerenderer.cpp:131
Kasten2::ByteArrayView::selection
Okteta::AddressRange selection() const
Definition: bytearrayview.cpp:271
Okteta::AbstractByteArrayModel::size
virtual Size size() const =0
ByteArrayFrameRenderer::setValueCoding
void setValueCoding(Okteta::ValueCoding valueCoding)
Definition: bytearrayframerenderer.cpp:273
ByteArrayFrameRenderer::setUndefinedChar
void setUndefinedChar(QChar undefinedChar)
Definition: bytearrayframerenderer.cpp:262
Kasten2::PrintTool::mByteArrayModel
Okteta::AbstractByteArrayModel * mByteArrayModel
Definition: printtool.h:82
Kasten2::PrintTool::mDocument
ByteArrayDocument * mDocument
Definition: printtool.h:79
HeaderFooterFrameRenderer::height
virtual int height() const
Definition: headerfooterframerenderer.cpp:45
HeaderFooterFrameRenderer::setWidth
void setWidth(int width)
Definition: headerfooterframerenderer.cpp:48
ByteArrayFrameRenderer::setSubstituteChar
void setSubstituteChar(QChar substituteChar)
Definition: bytearrayframerenderer.cpp:257
framestopaperprinter.h
Kasten2::ByteArrayView::noOfGroupedBytes
int noOfGroupedBytes() const
Definition: bytearrayview.cpp:382
bytearrayframerenderer.h
ByteArrayFrameRenderer::setByteArrayModel
void setByteArrayModel(Okteta::AbstractByteArrayModel *byteArrayModel, Okteta::Address offset=0, Okteta::Size length=-1)
Definition: bytearrayframerenderer.cpp:143
PrintInfo
Definition: headerfooterframerenderer.h:37
Kasten2::ByteArrayView::undefinedChar
QChar undefinedChar() const
Definition: bytearrayview.cpp:373
Kasten2::AbstractModel::findBaseModel
T findBaseModel() const
returns the first baseModel which is of type T, or null if none is found.
Definition: abstractmodel.h:93
AbstractFrameRenderer::setPos
void setPos(int x, int y)
Definition: abstractframerenderer.cpp:50
Kasten2::PrintTool::viewChanged
void viewChanged(bool hasView)
Kasten2::ByteArrayView::groupSpacingWidth
int groupSpacingWidth() const
Definition: bytearrayview.cpp:386
Kasten2::ByteArrayView::substituteChar
QChar substituteChar() const
Definition: bytearrayview.cpp:369
Kasten2::PrintTool::~PrintTool
virtual ~PrintTool()
Definition: printtool.cpp:178
ByteArrayFrameRenderer::setStartOffset
void setStartOffset(Okteta::Address startOffset)
Definition: bytearrayframerenderer.cpp:184
HeaderFooterFrameRenderer
Definition: headerfooterframerenderer.h:58
Okteta::ValueCoding
ValueCoding
Definition: oktetacore.h:34
FramesToPaperPrinter
Definition: framestopaperprinter.h:34
Kasten2::PrintTool::print
void print()
Definition: printtool.cpp:68
Kasten2::ByteArrayDocument
Definition: bytearraydocument.h:54
Kasten2::AbstractModel
Definition: abstractmodel.h:40
ByteArrayFrameRenderer::setHeight
void setHeight(int height)
Definition: bytearrayframerenderer.cpp:163
bytearraydocument.h
Kasten2::ByteArrayView::startOffset
Okteta::Address startOffset() const
Definition: bytearrayview.cpp:236
Kasten2::PrintJob
Definition: printjob.h:42
ByteArrayFrameRenderer::setCharCoding
void setCharCoding(Okteta::CharCoding charCoding)
Definition: bytearrayframerenderer.cpp:299
KDE::Range::isValid
bool isValid() const
returns true if the range covers at least one index
Definition: range.h:122
Kasten2::ByteArrayView
Definition: bytearrayview.h:51
Kasten2::PrintJob::exec
bool exec()
Definition: printjob.cpp:52
Kasten2::PrintTool::PrintTool
PrintTool()
Definition: printtool.cpp:50
QList
Definition: bookmarkable.h:29
FramesToPaperPrinter::addFrameRenderer
void addFrameRenderer(AbstractFrameRenderer *frameRenderer)
Definition: framestopaperprinter.cpp:39
bytearrayview.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okteta

Skip menu "okteta"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal