test_sdk/gui/gtl_gui_chart.h

131 lines
3.6 KiB
C
Raw Permalink Normal View History

#ifndef CHART_H
#define CHART_H
#include <QDomElement>
#include "chart/widget_chart.h"
#include "gui_global.h"
#include "gtl_gui_chart_axis_x.h"
#include "gtl_gui_chart_axis_y.h"
#include "gtl_gui_chart_series.h"
#include "core/gtl_analog_data.h"
#include "gtl_gui_chart_marker.h"
#include "gtl_gui_chart_single_markers.h"
#include "gtl_gui_chart_markers.h"
namespace gtl
{
namespace gui
{
class GTL_GUI_EXPORT chart : public ::chart::widget
{
Q_OBJECT
public:
chart(QWidget* parent = NULL, chart_axis_x *axis_x = NULL, chart_axis_y *axis_y = NULL);
virtual ~chart();
bool is_axis_y_multi() const;
bool is_updating() const;
bool is_cyclic() const;
chart_markers* chart_markers_model() const;
virtual void save(QDomElement& root_element);
virtual void load(const QDomElement& root_element);
bool is_multi_y() const;
void set_background(QColor color);
chart_single_markers* single_markers() const;
void dragEnterEvent(QDragEnterEvent *event) override;
private:
bool _is_multi_y;
QPoint _mouse_pos_press;
chart_marker* _marker_popup;
protected:
::chart::series::series* _marker_series;
chart_markers* _markers;
chart_single_markers* _single_markers;
QPoint _mouse_pos_release;
private:
void set_axes_y();
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
protected:
virtual chart_axis_y* create_axis_y() const;
private:
bool _is_updating;
bool _is_cyclic;
protected:
QMenu *_menu;
QMenu* _markers_menu;
QAction* _marker_action_add;
QAction* _marker_action_remove;
QAction* _marker_action_clear;
QAction* _set_theme_action;
std::map<gtl::data_model_node*, std::list<chart_series*>> _devices;
protected:
virtual chart_series* create_series(gtl::analog_data* ai) = 0;
virtual void contextMenuEvent(QContextMenuEvent *event) override;
void add_series(chart_series *series);
void remove_series(chart_series *series);
void remove_series();
signals:
void updating_changed(bool);
void cyclic_changed(bool);
void axis_y_mode_changed(bool);
public slots:
virtual void add_ad(gtl::analog_data* ad);
virtual void remove_ad(gtl::analog_data* ad);
void set_updating(bool value);
void set_cyclic(bool value);
void set_axis_y_mode(bool is_multi_y);
private slots:
void add_marker();
void delete_marker();
void clear_markers();
void deleting_ad();
void get_axis_series(QList<chart_series*> &series);
void set_theme(bool);
protected slots:
virtual void device_recieved_data();
void set_bounds_x();
void get_neares_series_x(qreal &x, chart_line::pos_behaviors);
void get_series_data(qreal x, bool is_widget_pos, QVariantList &data);
void get_series_values(qreal x_min, qreal x_max, int series_idx, QVariantList &data);
void remove_marker();
};
}
}
#endif // CHART_H