#ifndef CHART_H #define CHART_H #include #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> _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 &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