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 }