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