File indexing completed on 2024-04-14 05:45:56

0001 /*
0002     This file is part of the Okteta Gui library, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2019 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_OFFSETCOLUMNRENDERER_P_HPP
0010 #define OKTETA_OFFSETCOLUMNRENDERER_P_HPP
0011 
0012 // lib
0013 #include "offsetcolumnrenderer.hpp"
0014 #include "abstractcolumnrenderer_p.hpp"
0015 
0016 namespace Okteta {
0017 
0018 class OffsetColumnRendererPrivate : public AbstractColumnRendererPrivate
0019 {
0020 public:
0021     OffsetColumnRendererPrivate(OffsetColumnRenderer* q,
0022                                 AbstractColumnStylist* stylist,
0023                                 ByteArrayTableLayout* layout, OffsetFormat::Format format);
0024     ~OffsetColumnRendererPrivate() override;
0025 
0026 public:
0027     void init();
0028     
0029 public: // AbstractColumnRenderer API
0030     void renderFirstLine(QPainter* painter, const PixelXRange& Xs, Line firstLineIndex);
0031     void renderNextLine(QPainter* painter);
0032     void renderColumn(QPainter* painter, const PixelXRange& Xs, const PixelYRange& Ys);
0033     void renderEmptyColumn(QPainter* painter, const PixelXRange& Xs, const PixelYRange& Ys);
0034 
0035 public:
0036     void setFormat(OffsetFormat::Format format, const QFontMetrics& fontMetrics);
0037     void setFontMetrics(const QFontMetrics& fontMetrics);
0038 
0039 private:
0040     /** recalculates all x values */
0041     void recalcX();
0042     /** paints full line */
0043     void renderLine(QPainter* painter, Line lineIndex);
0044     /** */
0045     void renderColumnBackground(QPainter* painter, const PixelXRange& Xs, const PixelYRange& Ys);
0046 
0047 public: // user settings
0048     ByteArrayTableLayout* mLayout;
0049 
0050 public: // pixel related
0051     /** */
0052     PixelX mOffsetTextWidth = 0;
0053     /** */
0054     PixelY mDigitBaseLine = 0;
0055 
0056 public: // general layout
0057     OffsetFormat::Format mFormat;
0058 
0059     OffsetFormat::print PrintFunction;
0060 
0061     /** buffer to hold the formatted coding */
0062     mutable char mCodedOffset[OffsetFormat::MaxFormatWidth + 1];
0063 
0064 public: // firstnext trips related
0065     /** */
0066     Line mRenderLineIndex;
0067 
0068 private:
0069     OffsetColumnRenderer* const q_ptr;
0070     Q_DECLARE_PUBLIC(OffsetColumnRenderer)
0071 };
0072 
0073 
0074 inline OffsetColumnRendererPrivate::OffsetColumnRendererPrivate(OffsetColumnRenderer* q,
0075                                                                 AbstractColumnStylist* stylist,
0076                                                                 ByteArrayTableLayout* layout, OffsetFormat::Format format)
0077     : AbstractColumnRendererPrivate(stylist)
0078     , mLayout(layout)
0079     , mFormat(format)
0080     , PrintFunction(OffsetFormat::printFunction(format))
0081     , q_ptr(q)
0082 {
0083 }
0084 
0085 inline OffsetColumnRendererPrivate::~OffsetColumnRendererPrivate() = default;
0086 
0087 inline void OffsetColumnRendererPrivate::init()
0088 {
0089     recalcX();
0090 }
0091 
0092 }
0093 
0094 #endif