• 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
  • gui
  • io
  • streamencoder
  • viewtext
bytearrayviewtextstreamencoder.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 "bytearrayviewtextstreamencoder.h"
24 
25 // lib
26 #include "offsetcolumntextrenderer.h"
27 #include "bordercolumntextrenderer.h"
28 #include "valuebytearraycolumntextrenderer.h"
29 #include "charbytearraycolumntextrenderer.h"
30 #include "bytearrayrowscolumntextrenderer.h"
31 #include <bytearrayview.h>
32 // Okteta gui
33 #include <bytearraytablelayout.h>
34 #include <abstractbytearrayview.h>
35 // Okteta core
36 #include <abstractbytearraymodel.h>
37 #include <character.h>
38 // KDE
39 #include <KLocale>
40 // Qt
41 #include <QtCore/QTextStream>
42 
43 
44 namespace Kasten2
45 {
46 
47 static const Okteta::OffsetFormat::Format DefaultOffsetFormat = Okteta::OffsetFormat::Hexadecimal;
48 
49 ByteArrayViewTextStreamEncoderSettings::ByteArrayViewTextStreamEncoderSettings()
50  : /*offsetFormat(DefaultOffsetFormat),*/
51  valueCoding( Okteta::HexadecimalCoding),
52  codecName(),
53  undefinedChar( QLatin1Char('?') ),
54  substituteChar( QLatin1Char('.') ),
55  separation( QLatin1String(" ") )
56 {}
57 
58 ByteArrayViewTextStreamEncoder::ByteArrayViewTextStreamEncoder()
59  : AbstractByteArrayStreamEncoder( i18nc("name of the encoding target","View in Plain Text"), QString::fromLatin1("text/plain") )
60 {}
61 
62 
63 bool ByteArrayViewTextStreamEncoder::encodeDataToStream( QIODevice *device,
64  const ByteArrayView* byteArrayView,
65  const Okteta::AbstractByteArrayModel* byteArrayModel,
66  const Okteta::AddressRange& range )
67 {
68  bool success = true;
69 
70  // settings
71  mSettings.codecName = byteArrayView->charCodingName();
72  mSettings.valueCoding = (Okteta::ValueCoding)byteArrayView->valueCoding();
73  mSettings.undefinedChar = byteArrayView->undefinedChar();
74  mSettings.substituteChar = byteArrayView->substituteChar();
75  mSettings.firstLineOffset = byteArrayView->firstLineOffset();
76  mSettings.startOffset = byteArrayView->startOffset();
77  mSettings.delta = byteArrayView->noOfBytesPerLine();
78  const int viewModus = byteArrayView->viewModus();
79 
80  // setup
81  Okteta::ByteArrayTableLayout layout( byteArrayView->noOfBytesPerLine(), mSettings.firstLineOffset,
82  mSettings.startOffset, 0, byteArrayModel->size() );
83 
84  Okteta::CoordRange coordRange;
85  coordRange.set( layout.coordRangeOfIndizes(range) );
86 
87  const int noOfBytesPerLine = byteArrayView->noOfBytesPerLine();
88  const int byteSpacingWidth = byteArrayView->byteSpacingWidth();
89  const int noOfGroupedBytes = byteArrayView->noOfGroupedBytes();
90  const int visibleByteArrayCodings = byteArrayView->visibleByteArrayCodings();
91 
92  QList<AbstractColumnTextRenderer*> columnTextRendererList;
93 
94  if( byteArrayView->offsetColumnVisible() )
95  {
96  columnTextRendererList.append(
97  new OffsetColumnTextRenderer(Okteta::OffsetFormat::Hexadecimal,mSettings.firstLineOffset,mSettings.delta) );
98  columnTextRendererList.append( new BorderColumnTextRenderer() );
99  }
100 
101  if( viewModus == 0 )
102  {
103  if( visibleByteArrayCodings & Okteta::AbstractByteArrayView::ValueCodingId )
104  columnTextRendererList.append(
105  new ValueByteArrayColumnTextRenderer(byteArrayModel,range.start(),coordRange,
106  noOfBytesPerLine, byteSpacingWidth, noOfGroupedBytes,
107  mSettings.valueCoding) );
108 
109  if( visibleByteArrayCodings & Okteta::AbstractByteArrayView::CharCodingId )
110  {
111  if( visibleByteArrayCodings & Okteta::AbstractByteArrayView::ValueCodingId )
112  columnTextRendererList.append( new BorderColumnTextRenderer() );
113  columnTextRendererList.append(
114  new CharByteArrayColumnTextRenderer(byteArrayModel,range.start(),coordRange,
115  noOfBytesPerLine, 0, 0,
116  mSettings.codecName,mSettings.substituteChar,mSettings.undefinedChar) );
117  }
118  }
119  else
120  {
121  columnTextRendererList.append(
122  new ByteArrayRowsColumnTextRenderer(byteArrayModel,range.start(),coordRange,
123  noOfBytesPerLine, byteSpacingWidth, noOfGroupedBytes,
124  visibleByteArrayCodings,
125  mSettings.valueCoding,
126  mSettings.codecName,mSettings.substituteChar,mSettings.undefinedChar) );
127  }
128 
129  int subLinesCount = 1;
130  foreach( const AbstractColumnTextRenderer* renderer, columnTextRendererList )
131  if( renderer->noOfSublinesNeeded() > subLinesCount )
132  subLinesCount = renderer->noOfSublinesNeeded();
133 
134  // encode
135  QTextStream textStream( device );
136 
137  int l = coordRange.start().line();
138  foreach( const AbstractColumnTextRenderer* renderer, columnTextRendererList )
139  renderer->renderFirstLine( &textStream, l );
140  textStream << endl;
141 
142  int subLine = 1;
143  while( true )
144  {
145  if( subLine == subLinesCount )
146  {
147  ++l;
148  if( l > coordRange.end().line() )
149  break;
150  subLine = 0;
151  }
152  const bool isSubline = ( subLine > 0 );
153  foreach( const AbstractColumnTextRenderer* renderer, columnTextRendererList )
154  renderer->renderNextLine( &textStream, isSubline );
155  textStream << endl;
156  ++subLine;
157  }
158 
159  // clean up
160  qDeleteAll( columnTextRendererList );
161 
162  return success;
163 }
164 
165 ByteArrayViewTextStreamEncoder::~ByteArrayViewTextStreamEncoder() {}
166 
167 }
Okteta::CoordRange
describes a range in the buffercoord
Definition: coordrange.h:51
character.h
Kasten2::AbstractColumnTextRenderer::noOfSublinesNeeded
virtual int noOfSublinesNeeded() const
default returns 1
Definition: abstractcolumntextrenderer.cpp:40
Kasten2::ByteArrayViewTextStreamEncoder::ByteArrayViewTextStreamEncoder
ByteArrayViewTextStreamEncoder()
Definition: bytearrayviewtextstreamencoder.cpp:58
Okteta::AbstractByteArrayModel
could it be useful to hide the data access behind an iterator? * class KDataBufferIterator { public: ...
Definition: abstractbytearraymodel.h:79
Kasten2::ByteArrayViewTextStreamEncoder::~ByteArrayViewTextStreamEncoder
virtual ~ByteArrayViewTextStreamEncoder()
Definition: bytearrayviewtextstreamencoder.cpp:165
abstractbytearraymodel.h
Kasten2::ByteArrayView::viewModus
int viewModus() const
Definition: bytearrayview.cpp:409
Kasten2::ByteArrayViewTextStreamEncoderSettings::undefinedChar
QChar undefinedChar
Definition: bytearrayviewtextstreamencoder.h:51
Kasten2::ByteArrayView::valueCoding
int valueCoding() const
Definition: bytearrayview.cpp:250
Kasten2::ByteArrayViewTextStreamEncoderSettings::startOffset
int startOffset
Definition: bytearrayviewtextstreamencoder.h:47
Kasten2::ByteArrayViewTextStreamEncoderSettings::codecName
QString codecName
Definition: bytearrayviewtextstreamencoder.h:50
Kasten2::ByteArrayView::charCodingName
QString charCodingName() const
Definition: bytearrayview.cpp:255
Kasten2::ByteArrayView::noOfBytesPerLine
int noOfBytesPerLine() const
Definition: bytearrayview.cpp:244
bytearrayviewtextstreamencoder.h
Kasten2::AbstractColumnTextRenderer
interface for the text export of columns
Definition: abstractcolumntextrenderer.h:36
KDE::NumberRange< Address, Size >
KDE::Range::start
T start() const
Definition: range.h:86
abstractbytearrayview.h
Kasten2::ByteArrayViewTextStreamEncoderSettings::substituteChar
QChar substituteChar
Definition: bytearrayviewtextstreamencoder.h:52
Okteta::OffsetFormat::Format
Format
Definition: offsetformat.h:43
Kasten2::ByteArrayView::byteSpacingWidth
int byteSpacingWidth() const
Definition: bytearrayview.cpp:378
Kasten2::BorderColumnTextRenderer
Definition: bordercolumntextrenderer.h:34
Kasten2::ByteArrayView::firstLineOffset
Okteta::Address firstLineOffset() const
Definition: bytearrayview.cpp:240
Kasten2::AbstractByteArrayStreamEncoder
Definition: abstractbytearraystreamencoder.h:45
Kasten2::OffsetColumnTextRenderer
Definition: offsetcolumntextrenderer.h:35
Kasten2::ByteArrayView::visibleByteArrayCodings
int visibleByteArrayCodings() const
Definition: bytearrayview.cpp:306
Okteta::AbstractByteArrayView::ValueCodingId
Definition: abstractbytearrayview.h:103
bytearraytablelayout.h
Okteta::ByteArrayTableLayout
the logical layout of a byte array table for a view
Definition: bytearraytablelayout.h:61
Okteta::AbstractByteArrayModel::size
virtual Size size() const =0
Kasten2::ByteArrayViewTextStreamEncoder::encodeDataToStream
virtual bool encodeDataToStream(QIODevice *device, const ByteArrayView *byteArrayView, const Okteta::AbstractByteArrayModel *byteArrayModel, const Okteta::AddressRange &range)
Definition: bytearrayviewtextstreamencoder.cpp:63
Okteta::OffsetFormat::Hexadecimal
Definition: offsetformat.h:43
Kasten2::ValueByteArrayColumnTextRenderer
Definition: valuebytearraycolumntextrenderer.h:38
Kasten2::AbstractColumnTextRenderer::renderFirstLine
virtual void renderFirstLine(QTextStream *stream, int lineIndex) const =0
Kasten2::ByteArrayView::noOfGroupedBytes
int noOfGroupedBytes() const
Definition: bytearrayview.cpp:382
Kasten2::AbstractColumnTextRenderer::renderNextLine
virtual void renderNextLine(QTextStream *stream, bool isSubline=false) const =0
Kasten2::ByteArrayViewTextStreamEncoderSettings::valueCoding
Okteta::ValueCoding valueCoding
Definition: bytearrayviewtextstreamencoder.h:49
Kasten2::ByteArrayView::undefinedChar
QChar undefinedChar() const
Definition: bytearrayview.cpp:373
valuebytearraycolumntextrenderer.h
Kasten2::ByteArrayViewTextStreamEncoderSettings::firstLineOffset
int firstLineOffset
Definition: bytearrayviewtextstreamencoder.h:46
Okteta::AbstractByteArrayView::CharCodingId
Definition: abstractbytearrayview.h:103
Kasten2::DefaultOffsetFormat
static const Okteta::OffsetFormat::Format DefaultOffsetFormat
Definition: bytearrayviewtextstreamencoder.cpp:47
Kasten2::ByteArrayView::substituteChar
QChar substituteChar() const
Definition: bytearrayview.cpp:369
Okteta::ValueCoding
ValueCoding
Definition: oktetacore.h:34
bytearrayrowscolumntextrenderer.h
Kasten2::ByteArrayView::offsetColumnVisible
bool offsetColumnVisible() const
Definition: bytearrayview.cpp:291
Kasten2::ByteArrayViewTextStreamEncoder::mSettings
ByteArrayViewTextStreamEncoderSettings mSettings
Definition: bytearrayviewtextstreamencoder.h:74
Kasten2::ByteArrayViewTextStreamEncoderSettings::delta
int delta
Definition: bytearrayviewtextstreamencoder.h:48
offsetcolumntextrenderer.h
Kasten2::ByteArrayView::startOffset
Okteta::Address startOffset() const
Definition: bytearrayview.cpp:236
QIODevice
Kasten2::CharByteArrayColumnTextRenderer
Definition: charbytearraycolumntextrenderer.h:39
bordercolumntextrenderer.h
charbytearraycolumntextrenderer.h
Kasten2::ByteArrayView
Definition: bytearrayview.h:51
Kasten2::ByteArrayRowsColumnTextRenderer
Definition: bytearrayrowscolumntextrenderer.h:46
KDE::Range::set
void set(T S, T E)
sets the first and the last index of the range
Definition: range.h:54
Okteta::HexadecimalCoding
Definition: oktetacore.h:34
QList
Definition: bookmarkable.h:29
bytearrayview.h
Kasten2::ByteArrayViewTextStreamEncoderSettings::ByteArrayViewTextStreamEncoderSettings
ByteArrayViewTextStreamEncoderSettings()
Definition: bytearrayviewtextstreamencoder.cpp:49
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:07 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