File indexing completed on 2024-06-23 05:48:53
0001 /* 0002 This file is part of the Okteta Kasten module, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2007-2009 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 #ifndef KASTEN_BYTEARRAYFRAMERENDERER_HPP 0010 #define KASTEN_BYTEARRAYFRAMERENDERER_HPP 0011 0012 // lib 0013 #include "abstractcolumnframerenderer.hpp" 0014 // Okteta gui 0015 #include <Okteta/OffsetFormat> 0016 // Okteta core 0017 #include <Okteta/OktetaCore> 0018 #include <Okteta/Address> 0019 #include <Okteta/Size> 0020 // Qt 0021 #include <QFont> 0022 0023 namespace Okteta { 0024 class OffsetColumnRenderer; 0025 class BorderColumnRenderer; 0026 class ValueByteArrayColumnRenderer; 0027 class CharByteArrayColumnRenderer; 0028 class ByteArrayTableLayout; 0029 class ByteArrayTableRanges; 0030 class PrintColumnStylist; 0031 } 0032 namespace Okteta { 0033 class AbstractByteArrayModel; 0034 class ValueCodec; 0035 class CharCodec; 0036 } 0037 0038 enum LayoutStyle 0039 { 0040 FixedLayoutStyle = 0, 0041 WrapOnlyByteGroupsLayoutStyle = 1, 0042 FullSizeLayoutStyle = 2, 0043 LastUserLayout = 0xFF 0044 }; 0045 0046 class ByteArrayFrameRenderer : public AbstractColumnFrameRenderer 0047 { 0048 public: 0049 enum DataColumnId 0050 { 0051 ValueCodingId = 1, 0052 CharCodingId = 2 0053 }; 0054 0055 public: 0056 ByteArrayFrameRenderer(); 0057 ~ByteArrayFrameRenderer() override; 0058 0059 public: // AbstractColumnFrameRenderer API 0060 // virtual void drawColumns( QPainter *painter, int cx, int cy, int cw, int ch ); 0061 0062 public: // AbstractFrameRenderer API 0063 // make this flags? 0064 // virtual bool hasFixedWidth() const; 0065 // virtual bool hasFixedHeight() const; 0066 int height() const override; 0067 int width() const override; 0068 // virtual QSize sizeHint( const QSize &maxSize ) const; 0069 0070 void prepare() override; 0071 void renderFrame(QPainter* painter, int frameIndex) override; 0072 0073 public: // AbstractSerialFramePrinter 0074 // only vertical for now... 0075 virtual int framesCount() const; 0076 0077 public: 0078 Okteta::AbstractByteArrayModel* byteArrayModel() const; 0079 Okteta::Address offset() const; 0080 Okteta::Size length() const; 0081 0082 int noOfBytesPerLine() const; 0083 Okteta::Address firstLineOffset() const; 0084 Okteta::Address startOffset() const; 0085 LayoutStyle layoutStyle() const; 0086 Okteta::ValueCoding valueCoding() const; 0087 Okteta::PixelX byteSpacingWidth() const; 0088 int noOfGroupedBytes() const; 0089 Okteta::PixelX groupSpacingWidth() const; 0090 Okteta::PixelX binaryGapWidth() const; 0091 bool showsNonprinting() const; 0092 QChar substituteChar() const; 0093 QChar undefinedChar() const; 0094 Okteta::CharCoding charCoding() const; 0095 QString charCodingName() const; 0096 0097 bool offsetColumnVisible() const; 0098 Okteta::OffsetFormat::Format offsetCoding() const; 0099 0100 int visibleByteArrayCodings() const; 0101 0102 public: 0103 void setByteArrayModel(Okteta::AbstractByteArrayModel* byteArrayModel, Okteta::Address offset = 0, Okteta::Size length = -1); 0104 void setHeight(int height); 0105 void setWidth(int width); 0106 void setFont(const QFont& font); 0107 void setFirstLineOffset(Okteta::Address firstLineOffset); 0108 void setStartOffset(Okteta::Address startOffset); 0109 void setBufferSpacing(Okteta::PixelX byteSpacing, int noOfGroupedBytes, Okteta::PixelX groupSpacing); 0110 void setValueCoding(Okteta::ValueCoding valueCoding); 0111 void setLayoutStyle(LayoutStyle style); 0112 void setNoOfBytesPerLine(int noOfBytesPerLine); 0113 void setByteSpacingWidth(Okteta::PixelX byteSpacingWidth); 0114 void setNoOfGroupedBytes(int noOfGroupedBytes); 0115 void setGroupSpacingWidth(Okteta::PixelX groupSpacingWidth); 0116 void setBinaryGapWidth(Okteta::PixelX binaryGapWidth); 0117 void setSubstituteChar(QChar substituteChar); 0118 void setUndefinedChar(QChar undefinedChar); 0119 void setShowsNonprinting(bool showsNonprinting); 0120 void setCharCoding(Okteta::CharCoding charCoding); 0121 void setCharCoding(const QString& charCodingName); 0122 void showByteArrayColumns(int newColumns); 0123 void showOffsetColumn(bool visible); 0124 void setOffsetCoding(Okteta::OffsetFormat::Format offsetCoding); 0125 0126 protected: // AbstractColumnFrameRenderer API 0127 // virtual void setNoOfLines( int newNoOfLines ); 0128 0129 private: 0130 void adjustToWidth(); 0131 void adjustLayoutToSize(); 0132 void adjustToLayoutNoOfBytesPerLine(); 0133 0134 private: 0135 int fittingBytesPerLine() const; 0136 0137 private: 0138 int mHeight; 0139 int mWidth; 0140 QFont mFont; 0141 0142 Okteta::AbstractByteArrayModel* mByteArrayModel = nullptr; 0143 0144 private: 0145 /** holds the logical layout */ 0146 Okteta::ByteArrayTableLayout* mLayout; 0147 Okteta::ByteArrayTableRanges* mTableRanges; 0148 0149 private: 0150 Okteta::OffsetColumnRenderer* mOffsetColumnRenderer; 0151 Okteta::BorderColumnRenderer* mFirstBorderColumnRenderer; 0152 Okteta::ValueByteArrayColumnRenderer* mValueColumnRenderer; 0153 Okteta::BorderColumnRenderer* mSecondBorderColumnRenderer; 0154 Okteta::CharByteArrayColumnRenderer* mCharColumnRenderer; 0155 Okteta::PrintColumnStylist* mStylist; 0156 0157 private: 0158 /** */ 0159 Okteta::ValueCodec* mValueCodec; 0160 /** */ 0161 Okteta::ValueCoding mValueCoding; 0162 /** */ 0163 Okteta::CharCodec* mCharCodec = nullptr; 0164 /** */ 0165 Okteta::CharCoding mCharCoding; 0166 0167 private: // parameters 0168 LayoutStyle mResizeStyle; 0169 }; 0170 0171 #endif