mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
c1ed9babc7
This is needed so we can share the dive tooltip item with the new and old profile at the same time. Next few commits will be setting the functionality of the tooltip item on the new one. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
175 lines
4.2 KiB
C++
175 lines
4.2 KiB
C++
#ifndef PROFILEGRAPHICS_H
|
|
#define PROFILEGRAPHICS_H
|
|
|
|
#include "graphicsview-common.h"
|
|
#include "../display.h"
|
|
#include <QGraphicsView>
|
|
#include <QGraphicsItem>
|
|
#include <QIcon>
|
|
#include <QDoubleSpinBox>
|
|
#include <QPushButton>
|
|
#include <QGraphicsProxyWidget>
|
|
|
|
struct graphics_context;
|
|
struct plot_info;
|
|
class RulerItem;
|
|
class ToolTipItem;
|
|
|
|
class RulerNodeItem : public QObject, public QGraphicsEllipseItem
|
|
{
|
|
Q_OBJECT
|
|
friend class RulerItem;
|
|
public:
|
|
explicit RulerNodeItem(QGraphicsItem* parent, graphics_context gc);
|
|
void setRuler(RulerItem *r);
|
|
void recalculate();
|
|
|
|
protected:
|
|
QVariant itemChange(GraphicsItemChange change, const QVariant & value );
|
|
|
|
private:
|
|
graphics_context gc;
|
|
struct plot_data *entry;
|
|
RulerItem* ruler;
|
|
};
|
|
|
|
class RulerItem : public QGraphicsObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit RulerItem(QGraphicsItem* parent,
|
|
RulerNodeItem *sourceMarker,
|
|
RulerNodeItem *destMarker);
|
|
void recalculate();
|
|
|
|
RulerNodeItem* sourceNode() const;
|
|
RulerNodeItem* destNode() const;
|
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget * widget = 0);
|
|
QRectF boundingRect() const;
|
|
QPainterPath shape() const;
|
|
|
|
private:
|
|
QPointF startPoint, endPoint;
|
|
RulerNodeItem *source, *dest;
|
|
QString text;
|
|
int height;
|
|
int paint_direction;
|
|
};
|
|
|
|
class EventItem : public QGraphicsPixmapItem
|
|
{
|
|
public:
|
|
explicit EventItem(struct event *ev, QGraphicsItem* parent = 0, bool grayscale = false);
|
|
struct event* ev;
|
|
|
|
private:
|
|
QString text;
|
|
bool isGrayscale;
|
|
|
|
QColor getColor(const color_indice_t i);
|
|
};
|
|
|
|
class GraphicsTextEditor : public QGraphicsTextItem{
|
|
Q_OBJECT
|
|
public:
|
|
GraphicsTextEditor(QGraphicsItem* parent = 0);
|
|
|
|
protected:
|
|
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event);
|
|
virtual void keyReleaseEvent(QKeyEvent* event);
|
|
|
|
signals:
|
|
void textChanged(const QString& text);
|
|
void editingFinished(const QString& text);
|
|
};
|
|
|
|
class ProfileGraphicsView : public QGraphicsView
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum Mode{DIVE, PLAN};
|
|
|
|
ProfileGraphicsView(QWidget* parent = 0);
|
|
void plot(struct dive *d, bool forceRedraw = false);
|
|
bool eventFilter(QObject* obj, QEvent* event);
|
|
void clear();
|
|
void setPrintMode(bool mode, bool grayscale = false);
|
|
|
|
protected:
|
|
void resizeEvent(QResizeEvent *event);
|
|
void mouseMoveEvent(QMouseEvent* event);
|
|
void wheelEvent(QWheelEvent* event);
|
|
void showEvent(QShowEvent* event);
|
|
void contextMenuEvent(QContextMenuEvent* event);
|
|
|
|
public slots:
|
|
void refresh();
|
|
void edit_dive_time(const QString& time);
|
|
void on_rulerAction();
|
|
void on_scaleAction();
|
|
void changeGas();
|
|
void hideEvents();
|
|
void unhideEvents();
|
|
void removeEvent();
|
|
void addBookmark();
|
|
private:
|
|
void plot_depth_profile();
|
|
QGraphicsItemGroup *plot_text(text_render_options_t *tro, const QPointF& pos, const QString &text, QGraphicsItem *parent = 0);
|
|
void plot_events(struct divecomputer *dc);
|
|
void plot_one_event(struct event *event);
|
|
void plot_temperature_profile();
|
|
void plot_cylinder_pressure();
|
|
void plot_temperature_text();
|
|
void plot_single_temp_text(int sec, int mkelvin);
|
|
void plot_depth_text();
|
|
void plot_text_samples();
|
|
void plot_depth_sample(plot_data* entry, text_render_options_t* tro);
|
|
void plot_cylinder_pressure_text();
|
|
void plot_pressure_value(int mbar, int sec, double xalign, double yalign);
|
|
void plot_gas_value(int mbar, int sec, double xalign, double yalign, int o2, int he);
|
|
void plot_deco_text();
|
|
void plot_add_line(int sec, double val, QColor c, QPointF &from);
|
|
void plot_pp_gas_profile();
|
|
void plot_pp_text();
|
|
void plot_depth_scale();
|
|
|
|
|
|
void addControlItems(struct dive *d);
|
|
|
|
void create_ruler();
|
|
void add_ruler();
|
|
void remove_ruler();
|
|
|
|
QColor getColor(const color_indice_t i);
|
|
QColor get_sac_color(int sac, int avg_sac);
|
|
void scrollViewTo(const QPoint pos);
|
|
void createPPLegend(QString tr, const QColor& c, QPointF& legendPos);
|
|
|
|
QPen defaultPen;
|
|
QBrush defaultBrush;
|
|
ToolTipItem *toolTip;
|
|
graphics_context gc;
|
|
int diveId;
|
|
struct divecomputer *diveDC;
|
|
int zoomLevel;
|
|
|
|
bool rulerEnabled;
|
|
bool printMode;
|
|
bool isGrayscale;
|
|
|
|
// Top Level Items.
|
|
QGraphicsItem* profileGrid;
|
|
QGraphicsItem* timeMarkers;
|
|
QGraphicsItem* depthMarkers;
|
|
QGraphicsItem* diveComputer;
|
|
RulerItem *rulerItem;
|
|
QGraphicsProxyWidget *toolBarProxy;
|
|
|
|
// For 'Plan' mode.:
|
|
GraphicsTextEditor *depthEditor;
|
|
GraphicsTextEditor *timeEditor;
|
|
|
|
enum Mode mode;
|
|
};
|
|
|
|
#endif
|