35 #include "../../types.h"
37 #include "../../pappsoexception.h"
38 #include "../../exception/exceptionnotpossible.h"
42 qRegisterMetaType<pappso::BasePlotContext>(
"pappso::BasePlotContext");
44 qRegisterMetaType<pappso::BasePlotContext *>(
"pappso::BasePlotContext *");
52 qFatal(
"Programming error.");
55 m_pen.setStyle(Qt::SolidLine);
56 m_pen.setBrush(Qt::black);
76 qFatal(
"Programming error.");
111 const QString &x_axis_label,
112 const QString &y_axis_label)
113 : QCustomPlot(parent), m_axisLabelX(x_axis_label), m_axisLabelY(y_axis_label)
117 if(parent ==
nullptr)
118 qFatal(
"Programming error.");
121 m_pen.setStyle(Qt::SolidLine);
122 m_pen.setBrush(Qt::black);
125 xAxis->setLabel(x_axis_label);
126 yAxis->setLabel(y_axis_label);
145 qFatal(
"Programming error.");
180 for(
int iter = 0; iter < layerCount(); ++iter)
183 QString(
"Layer index %1: %2\n").arg(iter).arg(layer(iter)->name());
193 if(layerable_p ==
nullptr)
194 qFatal(
"Programming error.");
196 QCPLayer *layer_p = layerable_p->layer();
198 return layer_p->name();
205 if(layerable_p ==
nullptr)
206 qFatal(
"Programming error.");
208 QCPLayer *layer_p = layerable_p->layer();
210 for(
int iter = 0; iter < layerCount(); ++iter)
212 if(layer(iter) == layer_p)
235 pen.setColor(QColor(
"steelblue"));
260 pen.setColor(QColor(
"green"));
271 pen.setColor(QColor(
"red"));
302 pen.setColor(
"steelblue");
368 "plotsLayer", layer(
"background"), QCustomPlot::LayerInsertMode::limAbove);
373 setFocusPolicy(Qt::StrongFocus);
374 setInteractions(QCP::iRangeZoom | QCP::iSelectPlottables | QCP::iMultiSelect);
384 &QCustomPlot::mouseRelease,
392 &QCustomPlot::axisDoubleClick,
416 const QColor &new_color)
418 if(plottable_p ==
nullptr)
419 qFatal(
"Pointer cannot be nullptr.");
424 pen = plottable_p->pen();
425 pen.setColor(new_color);
426 plottable_p->setPen(pen);
435 if(!new_color.isValid())
438 QCPGraph *graph_p = graph(index);
440 if(graph_p ==
nullptr)
441 qFatal(
"Programming error.");
450 if(plottable_p ==
nullptr)
451 qFatal(
"Programming error.");
453 return plottable_p->pen().color();
460 QCPGraph *graph_p = graph(index);
462 if(graph_p ==
nullptr)
463 qFatal(
"Programming error.");
472 xAxis->setLabel(label);
479 yAxis->setLabel(label);
581 qFatal(
"Programming error.");
627 if(event->key() == Qt::Key_Left || event->key() == Qt::Key_Right ||
628 event->key() == Qt::Key_Up || event->key() == Qt::Key_Down)
658 if(event->key() == Qt::Key_Backspace)
667 else if(event->key() == Qt::Key_Space)
671 else if(event->key() == Qt::Key_Delete)
684 int graph_count = plottableCount();
707 QList<QCPGraph *> selected_graph_list;
709 selected_graph_list = selectedGraphs();
711 if(!selected_graph_list.size())
720 for(
int iter = 0; iter < selected_graph_list.size(); ++iter)
727 this, selected_graph_list.at(iter),
m_context);
740 else if(event->key() == Qt::Key_T)
752 else if(event->key() == Qt::Key_Left || event->key() == Qt::Key_Right ||
753 event->key() == Qt::Key_Up || event->key() == Qt::Key_Down)
762 else if(event->key() == Qt::Key_S)
806 int pixel_increment = 0;
811 pixel_increment = 50;
817 if(event->key() == Qt::Key_Left)
819 else if(event->key() == Qt::Key_Right)
821 else if(event->key() == Qt::Key_Up)
823 else if(event->key() == Qt::Key_Down)
840 [maybe_unused]] QKeyEvent *event)
850 QPointF pixel_coordinates(
854 Qt::MouseButton button = Qt::NoButton;
855 QEvent::Type q_event_type = QEvent::MouseButtonPress;
861 button = Qt::LeftButton;
867 q_event_type = QEvent::MouseButtonPress;
869 q_event_type = QEvent::MouseButtonRelease;
875 button = Qt::RightButton;
881 q_event_type = QEvent::MouseButtonPress;
883 q_event_type = QEvent::MouseButtonRelease;
891 QMouseEvent *mouse_event_p =
892 new QMouseEvent(q_event_type,
894 mapToGlobal(pixel_coordinates.toPoint()),
895 mapToGlobal(pixel_coordinates.toPoint()),
899 Qt::MouseEventSynthesizedByApplication);
901 if(q_event_type == QEvent::MouseButtonPress)
932 #if QT_VERSION < 0x060000
933 QPointF mousePoint =
event->localPos();
935 QPointF mousePoint =
event->position();
1054 yAxis->range().upper);
1057 yAxis->range().lower);
1117 qDebug() <<
"the left button is dragging.";
1133 qDebug() <<
"Click was on one of the axes.";
1170 qDebug() <<
"Asking that the axes be rescaled.";
1180 qDebug() <<
"Asking that the axes be panned.";
1199 qDebug() <<
"Apparently the selection is a real rectangle.";
1226 qDebug() <<
"Apparently we are measuring a delta.";
1257 qDebug() <<
"the right button is dragging.";
1317 #if QT_VERSION < 0x060000
1318 QPointF mousePoint =
event->localPos();
1320 QPointF mousePoint =
event->position();
1482 yAxis->range().upper);
1484 yAxis->range().lower);
1634 double x_delta_pixel =
1638 if(x_delta_pixel > 3)
1641 qDebug() <<
"Not asking for integration.";
1669 [[maybe_unused]] QCPAxis::SelectablePart part,
1718 QCPLayoutElement *layoutElement = layoutElementAt(mousePoint);
1721 layoutElement ==
dynamic_cast<QCPLayoutElement *
>(axisRect()))
1728 QCPAxis::SelectablePart selectablePart;
1730 selectablePart = xAxis->getPartAt(mousePoint);
1732 if(selectablePart == QCPAxis::spAxisLabel ||
1733 selectablePart == QCPAxis::spAxis ||
1734 selectablePart == QCPAxis::spTickLabels)
1745 QCPLayoutElement *layoutElement = layoutElementAt(mousePoint);
1748 layoutElement ==
dynamic_cast<QCPLayoutElement *
>(axisRect()))
1755 QCPAxis::SelectablePart selectablePart;
1757 selectablePart = yAxis->getPartAt(mousePoint);
1759 if(selectablePart == QCPAxis::spAxisLabel ||
1760 selectablePart == QCPAxis::spAxis ||
1761 selectablePart == QCPAxis::spTickLabels)
1786 double x_delta_pixel =
1790 double y_delta_pixel =
1794 if(x_delta_pixel > y_delta_pixel)
1795 return Qt::Horizontal;
1797 return Qt::Vertical;
1806 QPointF pixels_coordinates(xAxis->coordToPixel(graph_coordinates.x()),
1807 yAxis->coordToPixel(graph_coordinates.y()));
1817 QCursor::setPos(mapToGlobal(pixel_coordinates.toPoint()));
1826 QPointF pixel_coord(xAxis->coordToPixel(graph_coord.x()),
1827 yAxis->coordToPixel(graph_coord.y()));
1840 QPointF pixel_coordinates(
1846 QPointF graph_coordinates(xAxis->pixelToCoord(pixel_coordinates.x()),
1847 yAxis->pixelToCoord(pixel_coordinates.y()));
1849 return graph_coordinates;
1859 QPointF pixel_coord(xAxis->coordToPixel(graph_coord.x()),
1860 yAxis->coordToPixel(graph_coord.y()));
1873 QPointF pixel_coordinates(
1879 QPointF graph_coordinates(xAxis->pixelToCoord(pixel_coordinates.x()),
1880 yAxis->pixelToCoord(pixel_coordinates.y()));
1882 return graph_coordinates;
1893 QCPGraph *graph_p = graph(index);
1895 if(graph_p ==
nullptr)
1896 qFatal(
"Programming error.");
1898 return graph_p->getKeyRange(found_range);
1905 QCPGraph *graph_p = graph(index);
1907 if(graph_p ==
nullptr)
1908 qFatal(
"Programming error.");
1910 return graph_p->getValueRange(found_range);
1917 bool &found_range)
const
1926 found_range =
false;
1928 return QCPRange(0, 1);
1931 if(graphCount() == 1)
1932 return graph()->getKeyRange(found_range);
1934 bool found_at_least_one_range =
false;
1937 QCPRange result_range(QCPRange::minRange + 1, QCPRange::maxRange + 1);
1939 for(
int iter = 0; iter < graphCount(); ++iter)
1941 QCPRange temp_range;
1943 bool found_range_for_iter =
false;
1945 QCPGraph *graph_p = graph(iter);
1950 temp_range = graph_p->getKeyRange(found_range_for_iter);
1952 temp_range = graph_p->getValueRange(found_range_for_iter);
1954 qFatal(
"Cannot reach this point. Programming error.");
1959 if(!found_range_for_iter)
1965 if(!QCPRange::validRange(result_range))
1966 qFatal(
"The obtained range is invalid !");
1969 result_range = temp_range;
1972 found_at_least_one_range =
true;
1979 if(temp_range.lower > result_range.lower)
1980 result_range.lower = temp_range.lower;
1981 if(temp_range.upper < result_range.upper)
1982 result_range.upper = temp_range.upper;
1986 if(temp_range.lower < result_range.lower)
1987 result_range.lower = temp_range.lower;
1988 if(temp_range.upper > result_range.upper)
1989 result_range.upper = temp_range.upper;
1992 qFatal(
"Cannot reach this point. Programming error.");
2000 found_range = found_at_least_one_range;
2002 return result_range;
2046 double xLower = xAxis->range().lower;
2047 double xUpper = xAxis->range().upper;
2051 double yLower = yAxis->range().lower;
2052 double yUpper = yAxis->range().upper;
2079 xAxis->setRange(xLower, xUpper - xDelta);
2093 yAxis->setRange(yLower, yUpper - yDelta);
2143 yAxis->setRange(xAxis->range().lower,
2192 "This function can only be called if the mouse click was on one of the "
2228 QCPRange yAxisRange,
2233 if(
static_cast<int>(axis) &
static_cast<int>(
Axis::x))
2235 xAxis->setRange(xAxisRange.lower, xAxisRange.upper);
2238 if(
static_cast<int>(axis) &
static_cast<int>(
Axis::y))
2240 yAxis->setRange(yAxisRange.lower, yAxisRange.upper);
2257 xAxis->setRange(lower, upper);
2268 yAxis->setRange(lower, upper);
2331 bool for_integration)
2390 double x_axis_center_position =
2391 leftmost_point.x() + (rightmost_point.x() - leftmost_point.x()) / 2;
2401 QPointF pixel_coordinates;
2405 int pixels_away_from_line = 15;
2419 pixels_away_from_line *= -1;
2422 double y_axis_pixel_coordinate =
2425 double y_axis_modified_pixel_coordinate =
2426 y_axis_pixel_coordinate + pixels_away_from_line;
2428 pixel_coordinates.setX(x_axis_center_position);
2429 pixel_coordinates.setY(y_axis_modified_pixel_coordinate);
2433 QPointF graph_coordinates(xAxis->pixelToCoord(pixel_coordinates.x()),
2434 yAxis->pixelToCoord(pixel_coordinates.y()));
2438 graph_coordinates.y());
2490 double x_axis_center_position =
2491 leftmost_point.x() + (rightmost_point.x() - leftmost_point.x()) / 2;
2493 double y_axis_center_position =
2494 bottommost_point.y() + (topmost_point.y() - bottommost_point.y()) / 2;
2499 y_axis_center_position);
2545 double plotHeight = yAxis->range().upper - yAxis->range().lower;
2550 double heightDiffRatio = (heightDiff / plotHeight) * 100;
2552 if(heightDiffRatio > 10)
2583 double x_range_start =
2585 double x_range_end =
2594 QPointF(x_range_start, y_position));
2619 QPointF(x_range_start, y_position));
3080 bool for_integration)
3196 return static_cast<PolygonType>(current_selection_polygon);
3223 QCustomPlot::setFocus();
3235 if(focusedPlotWidget ==
nullptr)
3237 "baseplotwidget.cpp @ redrawPlotBackground(QWidget *focusedPlotWidget "
3239 "ERROR focusedPlotWidget cannot be nullptr.");
3241 if(
dynamic_cast<QWidget *
>(
this) != focusedPlotWidget)
double m_xRegionRangeStart
Qt::MouseButtons m_mouseButtonsAtMousePress
SelectionPolygon m_selectionPolygon
DragDirections recordDragDirections()
Qt::KeyboardModifiers m_keyboardModifiers
Qt::MouseButtons m_lastPressedMouseButton
bool m_isMeasuringDistance
DragDirections m_dragDirections
QPointF m_lastCursorHoveredPoint
QPointF m_currentDragPoint
double m_yRegionRangeStart
bool m_isRightPseudoButtonKeyPressed
Qt::MouseButtons m_pressedMouseButtons
Qt::MouseButtons m_mouseButtonsAtMouseRelease
bool m_isLeftPseudoButtonKeyPressed
Qt::MouseButtons m_lastReleasedMouseButton
double m_selectRectangleWidth
void setPoint(PointSpecs point_spec, double x, double y)
QPointF getTopMostPoint() const
QPointF getRightMostPoint() const
QPointF getLeftMostPoint() const
QPointF getBottomMostPoint() const
void set1D(double x_range_start, double x_range_end)
QPointF getPoint(PointSpecs point_spec) const
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...