File indexing completed on 2024-03-24 17:26:48
0001 /* 0002 This file is part of the Okteta Gui library, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2008-2010 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 OKTETA_BYTEARRAYROWVIEW_P_HPP 0010 #define OKTETA_BYTEARRAYROWVIEW_P_HPP 0011 0012 // lib 0013 #include "bytearrayrowview.hpp" 0014 #include "abstractbytearrayview_p.hpp" 0015 #include "bytearrayrowcolumnrenderer.hpp" 0016 0017 namespace Okteta { 0018 class Coord; 0019 0020 class ByteArrayRowViewPrivate : public AbstractByteArrayViewPrivate 0021 { 0022 Q_DECLARE_PUBLIC(ByteArrayRowView) 0023 0024 public: 0025 explicit ByteArrayRowViewPrivate(ByteArrayRowView* parent); 0026 ~ByteArrayRowViewPrivate() override; 0027 0028 public: 0029 void init(); 0030 0031 public: 0032 // value column 0033 int /*PixelX*/ byteSpacingWidth() const; 0034 int noOfGroupedBytes() const; 0035 int /*PixelX*/ groupSpacingWidth() const; 0036 int /*PixelX*/ binaryGapWidth() const; 0037 0038 // char column 0039 bool showsNonprinting() const; 0040 QChar substituteChar() const; 0041 QChar undefinedChar() const; 0042 0043 bool isByteTypeColored() const; 0044 0045 public: // logic value service 0046 QSize minimumSizeHint() const; 0047 0048 public: // modification access 0049 void setByteArrayModel(AbstractByteArrayModel* byteArrayModel); 0050 0051 public: // AbstractByteArrayViewPrivate API 0052 void ensureVisible(const AddressRange& range, bool ensureStartVisible) override; 0053 void ensureCursorVisible() override; 0054 void placeCursor(QPoint point) override; 0055 QRect cursorRect() const override; 0056 Address indexByPoint(QPoint point) const override; 0057 void blinkCursor() override; 0058 0059 public: 0060 // setting parameters 0061 // value column parameters 0062 void setByteSpacingWidth(int /*PixelX*/ byteSpacingWidth); 0063 void setNoOfGroupedBytes(int noOfGroupedBytes); 0064 void setGroupSpacingWidth(int /*PixelX*/ groupSpacingWidth); 0065 void setBinaryGapWidth(int binaryGapWidth); 0066 void setBufferSpacing(/*PixelX*/ int byteSpacingWidth, int noOfGroupedBytes, /*PixelX*/ int groupSpacingWidth); 0067 void setValueCoding(AbstractByteArrayView::ValueCoding valueCoding); 0068 // char column parameters 0069 void setShowsNonprinting(bool showsNonprinting = true); 0070 void setSubstituteChar(QChar substituteChar); 0071 void setUndefinedChar(QChar undefinedChar); 0072 void setCharCoding(AbstractByteArrayView::CharCoding charCoding); 0073 void setCharCoding(const QString& charCodingName); 0074 void setByteTypeColored(bool isColored); 0075 0076 private: // drawing related operations 0077 /** recreates the cursor pixmaps and paints active and inactive cursors if doable */ 0078 void createCursorPixmaps(); 0079 /** draws the blinking cursor or removes it */ 0080 void drawActiveCursor(QPainter* painter); 0081 void drawInactiveCursor(QPainter* painter); 0082 void updateCursor(const ByteArrayRowColumnRenderer& column, AbstractByteArrayView::CodingTypeId codingId); 0083 0084 private: // partial operations 0085 void changeEvent(QEvent* event); 0086 0087 private: 0088 /** recalcs a layout due to the resize style that fits into the view size 0089 * and updates the dependent values 0090 */ 0091 void ensureVisible(const ByteArrayRowColumnRenderer& column, Coord coord); 0092 void renderColumns(QPainter* painter, int cx, int cy, int cw, int ch); 0093 0094 protected: // AbstractByteArrayViewPrivate API 0095 // cursor control 0096 void pauseCursor() override; 0097 void updateCursors() override; 0098 0099 void setActiveCoding(AbstractByteArrayView::CodingTypeId codingId) override; 0100 void setVisibleCodings(int visibleCodings) override; 0101 0102 protected: // AbstractByteArrayViewPrivate API 0103 AbstractByteArrayView::CodingTypeId activeCoding() const override; 0104 AbstractByteArrayView::CodingTypes visibleCodings() const override; 0105 int fittingBytesPerLine() const override; 0106 void adjustToLayoutNoOfBytesPerLine() override; 0107 void updateChanged() override; 0108 0109 private: 0110 ByteArrayRowColumnRenderer* mByteArrayColumn; 0111 0112 ByteArrayRowView::CodingTypeId mActiveCoding; 0113 ByteArrayRowView::CodingTypeId mInactiveCoding; 0114 }; 0115 0116 inline PixelX ByteArrayRowViewPrivate::byteSpacingWidth() const { return mByteArrayColumn->byteSpacingWidth(); } 0117 inline int ByteArrayRowViewPrivate::noOfGroupedBytes() const { return mByteArrayColumn->noOfGroupedBytes(); } 0118 inline PixelX ByteArrayRowViewPrivate::groupSpacingWidth() const { return mByteArrayColumn->groupSpacingWidth(); } 0119 inline PixelX ByteArrayRowViewPrivate::binaryGapWidth() const { return mByteArrayColumn->binaryGapWidth(); } 0120 inline bool ByteArrayRowViewPrivate::showsNonprinting() const { return mByteArrayColumn->isShowingNonprinting(); } 0121 inline QChar ByteArrayRowViewPrivate::substituteChar() const { return mByteArrayColumn->substituteChar(); } 0122 inline QChar ByteArrayRowViewPrivate::undefinedChar() const { return mByteArrayColumn->undefinedChar(); } 0123 inline bool ByteArrayRowViewPrivate::isByteTypeColored() const { return mByteArrayColumn->isByteTypeColored(); } 0124 0125 } 0126 0127 #endif