File: heatmapverticalaxiswidget.cpp

package info (click to toggle)
apitrace 7.1%2Bgit20170623.d38a69d6%2Brepack-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 15,992 kB
  • sloc: cpp: 179,347; ansic: 62,439; python: 33,058; java: 377; makefile: 105; sh: 26; xml: 26
file content (82 lines) | stat: -rw-r--r-- 2,531 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "heatmapverticalaxiswidget.h"

#include <qmath.h>
#include <QPainter>
#include <QMouseEvent>

HeatmapVerticalAxisWidget::HeatmapVerticalAxisWidget(QWidget* parent) :
    GraphAxisWidget(parent),
    m_data(NULL)
{
    m_rowHeight = 20;
}

void HeatmapVerticalAxisWidget::setDataProvider(HeatmapDataProvider* data)
{
    delete m_data;
    m_data = data;

    m_valueMin = 0;
    m_valueMax = (data->dataRows() + data->headerRows()) * m_rowHeight;

    m_valueBegin = m_valueMin;
    m_valueEnd = m_valueMax;

    update();
}

void HeatmapVerticalAxisWidget::mouseDoubleClickEvent(QMouseEvent *e)
{
    if (e->pos().y() < m_data->headerRows() * m_rowHeight) {
        m_selectionState->type = SelectionState::None;
        emit selectionChanged();
    } else {
        int row = e->pos().y();
        row -= m_data->headerRows() * m_rowHeight;
        row += m_valueBegin;
        row /= m_rowHeight;

        if (row >= m_data->dataRows()) {
            m_selectionState->type = SelectionState::None;
            emit selectionChanged();
        } else {
            m_selectionState->type = SelectionState::Vertical;
            m_selectionState->start = m_data->dataRowAt(row);
            m_selectionState->end = m_selectionState->start;
            emit selectionChanged();
        }
    }
}

void HeatmapVerticalAxisWidget::paintEvent(QPaintEvent *)
{
    if (!m_data) {
        return;
    }

    QPainter painter(this);
    painter.setPen(Qt::black);
    painter.setBrush(Qt::lightGray);
    painter.drawRect(0, 0, width() - 1, height() - 1);

    /* Draw scrollable rows */
    painter.translate(0, m_data->headerRows() * m_rowHeight - m_valueBegin % m_rowHeight);
    int rowStart = m_valueBegin / m_rowHeight;
    int rowEnd = qMin<int>(qCeil(m_valueEnd / (double)m_rowHeight), m_data->dataRows());

    for (unsigned i = rowStart; i < rowEnd; ++i) {
        painter.drawText(0, 0, width(), m_rowHeight, Qt::AlignHCenter | Qt::AlignVCenter, m_data->dataLabel(i));
        painter.drawLine(0, m_rowHeight, width(), m_rowHeight);
        painter.translate(0, m_rowHeight);
    }

    /* Draw fixed position headers */
    painter.resetTransform();
    painter.drawRect(0, 0, width() - 1, m_data->headerRows() * m_rowHeight);

    for (unsigned i = 0; i < m_data->headerRows(); ++i) {
        painter.drawText(0, 0, width(), m_rowHeight, Qt::AlignHCenter | Qt::AlignVCenter, m_data->headerLabel(i));
        painter.drawLine(0, m_rowHeight, width(), m_rowHeight);
        painter.translate(0, m_rowHeight);
    }
}