File indexing completed on 2025-01-05 05:23:53

0001 /*
0002     This file is part of the Okteta Kasten module, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2003, 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "abstractbytearraycolumntextrenderer.hpp"
0010 
0011 // Qt
0012 #include <QTextStream>
0013 
0014 namespace Kasten {
0015 
0016 AbstractByteArrayColumnTextRenderer::AbstractByteArrayColumnTextRenderer(const Okteta::AbstractByteArrayModel* byteArrayModel, Okteta::Address offset, const Okteta::CoordRange& coordRange,
0017                                                                          int noOfBytesPerLine)
0018     : mByteArrayModel(byteArrayModel)
0019     , mCoordRange(coordRange)
0020     , mNoOfBytesPerLine(noOfBytesPerLine)
0021     , mOffset(offset)
0022     , mLinePositions(new int[mNoOfBytesPerLine])
0023 {
0024 }
0025 
0026 AbstractByteArrayColumnTextRenderer::~AbstractByteArrayColumnTextRenderer()
0027 {
0028     delete [] mLinePositions;
0029 }
0030 
0031 void AbstractByteArrayColumnTextRenderer::setWidths(int byteWidth, int byteSpacingWidth, int noOfGroupedBytes)
0032 {
0033     // TODO: remove this hack and make it more general
0034     if (byteSpacingWidth > 0) {
0035         byteSpacingWidth = DefaultTRByteSpacingWidth;
0036     }
0037 
0038     int spacingTrigger = noOfGroupedBytes - 1;
0039     if (spacingTrigger < 0) {
0040         spacingTrigger = mNoOfBytesPerLine; // ensures to never trigger the group spacing
0041 
0042     }
0043     int N = 0;
0044     int p = 0;
0045     int gs = 0;
0046     int* P = mLinePositions;
0047     for (; P < &mLinePositions[mNoOfBytesPerLine]; ++P, ++p, ++gs) {
0048         *P = N;
0049         N += byteWidth;
0050 
0051         // is there a space behind the actual byte (if it is not the last)?
0052         if (gs == spacingTrigger) {
0053             N += TRGroupSpacingWidth;
0054             gs = -1;
0055         } else {
0056             N += byteSpacingWidth;
0057         }
0058     }
0059 
0060     N -= (gs == 0) ? TRGroupSpacingWidth : byteSpacingWidth;
0061 
0062     mNoOfCharsPerLine = N;
0063 }
0064 
0065 void AbstractByteArrayColumnTextRenderer::renderFirstLine(QTextStream* stream, int lineIndex) const
0066 {
0067     mRenderLine = lineIndex;
0068     renderLine(stream, false);
0069 }
0070 
0071 void AbstractByteArrayColumnTextRenderer::renderNextLine(QTextStream* stream, bool isSubline) const
0072 {
0073     renderLine(stream, isSubline);
0074 }
0075 
0076 }