blob: 9d3c7d6de299b32fe1c4a1d9d2d29ee1b685d81a [file] [log] [blame]
#pragma once
#include "graphview.h"
#include "graphaxiswidget.h"
#include "graphlabelwidget.h"
class QScrollBar;
/**
* The generic GraphWidget class which combines the elements of a graph,
* the axis, view, scrollbars and label.
*/
class GraphWidget : public QWidget {
Q_OBJECT
public:
enum AxisPosition {
AxisTop,
AxisLeft,
AxisRight,
AxisBottom
};
public:
GraphWidget(QWidget* parent = 0);
virtual ~GraphWidget(){}
GraphView* view();
GraphLabelWidget* label();
GraphAxisWidget* axis(AxisPosition pos);
void setView(GraphView* view);
void setLabel(GraphLabelWidget* label);
void setAxis(AxisPosition pos, GraphAxisWidget* axis);
void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy policy);
void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy policy);
virtual void resizeEvent(QResizeEvent *e) override;
protected:
/* Used if a selection would be shared between graphs with different axis */
virtual SelectionState transformSelectionIn(SelectionState state);
virtual SelectionState transformSelectionOut(SelectionState state);
/* Update the scrollbars based on current view */
void updateScrollbars();
/* Update all signal / slot connections */
void updateConnections();
/* Recalculate child widget layout */
void updateLayout();
public slots:
void setSelection(SelectionState state);
/* Set view areas */
void setHorizontalView(qint64 start, qint64 end);
void setVerticalView(qint64 start, qint64 end);
protected slots:
/* View changed by translation / zooming */
void verticalViewChange(qint64 start, qint64 end);
void verticalRangeChange(qint64 start, qint64 end);
void horizontalViewChange(qint64 start, qint64 end);
void horizontalRangeChange(qint64 start, qint64 end);
/* User interaction with scroll bars */
void horizontalScrollAction(int action);
void verticalScrollAction(int action);
/* Update child elements when selection changes */
void updateSelection(bool emitSignal = true);
signals:
void selectionChanged(SelectionState state);
void verticalViewChanged(qint64 start, qint64 end);
void verticalRangeChanged(qint64 start, qint64 end);
void horizontalViewChanged(qint64 start, qint64 end);
void horizontalRangeChanged(qint64 start, qint64 end);
protected:
SelectionState m_selection;
GraphView* m_view;
GraphLabelWidget* m_label;
GraphAxisWidget* m_axisTop;
GraphAxisWidget* m_axisLeft;
GraphAxisWidget* m_axisRight;
GraphAxisWidget* m_axisBottom;
QScrollBar* m_horizontalScrollbar;
qint64 m_horizontalMin;
qint64 m_horizontalMax;
qint64 m_horizontalStart;
qint64 m_horizontalEnd;
Qt::ScrollBarPolicy m_horizontalScrollbarPolicy;
QScrollBar* m_verticalScrollbar;
qint64 m_verticalMin;
qint64 m_verticalMax;
qint64 m_verticalStart;
qint64 m_verticalEnd;
Qt::ScrollBarPolicy m_verticalScrollbarPolicy;
};