77 while (mainLines.last() < (maximumValue)) {
78 qreal mainLine = powf(10, power);
79 mainLines.append(mainLine * 0.25);
80 mainLines.append(mainLine * 0.5);
81 mainLines.append(mainLine * 0.75);
82 mainLines.append(mainLine);
86 while (mainLines.last() > maximumValue) {
87 mainLines.removeLast();
89 mainLines.append(maximumValue);
91 QMap<float, float> gridLines;
92 Q_FOREACH(
float mainLine, mainLines) {
94 gridLines.insert(0.0, 0.0);
96 gridLines.insert(mainLine, std::log10(mainLine*10)*0.1*(width/(std::log10(mainLines.last()*10)*0.1)));
105 float gridValue = 0.25;
106 float gridWidthLength = width / (maximumValue / gridValue);
107 while(gridWidthLength < 25) {
109 gridWidthLength = width / (maximumValue / gridValue);
111 QMap<float, float> gridLines;
112 for (
float i = 0; i < float(width); i+=gridWidthLength) {
113 gridLines.insert((i/gridWidthLength)*gridValue, i);
124 QLabel::paintEvent(event);
125 QPainter painter(
this);
126 painter.fillRect(0, 0, this->width(), this->height(), this->
palette().dark().color());
127 painter.setPen(this->
palette().light().color());
129 const int gridHeight = this->height() - painter.fontMetrics().height();
134 Q_FOREACH (
float k, horGrid.keys()) {
135 float i = horGrid.value(k);
136 painter.drawLine(qRound(i), 0, qRound(i), gridHeight);
137 painter.drawText(QPointF(qRound(i), this->height()-2), QString::number(k));
142 unsigned int highest = 0;
144 for (
int chan = 0; chan < channels.size(); chan++) {
148 int nthPercentile = 2 * histogramTemp.size() / 100;
150 std::nth_element(histogramTemp.begin(),
151 histogramTemp.begin() + nthPercentile, histogramTemp.end(), std::greater<int>());
152 unsigned int max = *(histogramTemp.begin() + nthPercentile);
154 highest = std::max(max, highest);
159 Q_FOREACH (
float k, vertGrid.keys()) {
160 float i = vertGrid.value(k);
161 painter.drawLine(0., gridHeight -i, this->width(), gridHeight -i);
166 painter.setCompositionMode(QPainter::CompositionMode_Plus);
167 const float barWidth = float(this->width()-1) / float(nBins);
168 float logVerticalMax = std::log10(vertGrid.keys().last()*10)*0.1;
170 for (
int chan = 0; chan < (int)nChannels; chan++) {
172 QColor color = channels.at(chan)->color();
176 color = QColor(Qt::gray);
179 QColor fill_color = color;
180 fill_color.setAlphaF(.25);
181 painter.setBrush(fill_color);
182 QPen pen = QPen(color);
188 path.moveTo(QPointF(1, gridHeight));
189 for (qint32 i = 0; i < nBins; ++i) {
192 const float maxBin = !
m_logarithmic? highest: logVerticalMax;
193 const float v = curBinVertical > 0? ((std::max((
float)maxBin - curBinVertical, 0.f))/maxBin)*gridHeight: 0;
194 path.lineTo(QPointF((i*barWidth) - (barWidth*0.5),
v));
197 path.lineTo(QPointF(this->width(), gridHeight));
199 painter.drawPath(path);
201 painter.setBrush(color);
202 painter.setPen(Qt::transparent);
204 for (qint32 i = 0; i < nBins; ++i) {
206 const float curBinEnd = 1.0+(i*barWidth)+barWidth;
209 if (curBinVertical > 0) {
210 const int v = std::max(qRound((curBinVertical/maxBin)*gridHeight), 1);
211 const QRect bar(QPoint(qRound(start), std::max(gridHeight -
v, 0)),
212 QPoint(qRound(curBinEnd), gridHeight));
213 painter.drawRect(bar);