File indexing completed on 2024-05-12 05:52:05

0001 /*
0002     SPDX-FileCopyrightText: 2022 Waqar Ahmed <waqar.17a@gmail.com>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 #pragma once
0006 
0007 #include <QWidget>
0008 
0009 class LineNumArea final : public QWidget
0010 {
0011     Q_OBJECT
0012 public:
0013     explicit LineNumArea(class DiffEditor *parent);
0014 
0015     int lineNumAreaWidth() const;
0016     QSize sizeHint() const override;
0017 
0018     void setLineNumData(std::vector<int> leftLineNos, std::vector<int> rightLineNos);
0019     void setMaxLineNum(int n)
0020     {
0021         maxLineNum = n;
0022     }
0023 
0024     int lineNumForBlock(int block)
0025     {
0026         auto it = std::find(m_lineToNumA.begin(), m_lineToNumA.end(), block);
0027         if (it == m_lineToNumA.end()) {
0028             return 0;
0029         }
0030         return *it;
0031     }
0032 
0033     int blockForLineNum(int lineNo)
0034     {
0035         auto it = std::find(m_lineToNumA.begin(), m_lineToNumA.end(), lineNo);
0036         return std::distance(m_lineToNumA.begin(), it);
0037     }
0038 
0039 protected:
0040     void paintEvent(QPaintEvent *event) override;
0041     void mousePressEvent(QMouseEvent *e) override;
0042 
0043 private:
0044     void drawLineNumber(QPainter &painter, QRect rect, int blockNumber, int num, const struct LineNumColors &c);
0045 
0046     class DiffEditor *const textEdit;
0047     //     QColor m_currentLineColor;
0048     //     QBrush m_currentLineBgColor;
0049     QColor m_otherLinesColor;
0050     QColor m_borderColor;
0051     std::vector<int> m_lineToNumA;
0052     std::vector<int> m_lineToNumB;
0053     int maxLineNum = 0;
0054 };