mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 13:10:19 +00:00
bb33be4117
Added the left / right shortcuts for moving the handlers around in time, this also made me wonder why we have the 'previous dc' on the menu, it got actually to broke my code on the shortcuts for the planner because they are active everytime - should they be active only when the profile's visible or they serve any other purpose? If they serve only for the profile, I'll get them out of the menu and put them in their proper place - the profile view. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
133 lines
3.5 KiB
C++
133 lines
3.5 KiB
C++
#ifndef DIVEPLANNER_H
|
|
#define DIVEPLANNER_H
|
|
|
|
#include <QGraphicsView>
|
|
#include <QGraphicsPathItem>
|
|
#include <QDialog>
|
|
|
|
class Button : public QObject, public QGraphicsRectItem {
|
|
Q_OBJECT
|
|
public:
|
|
explicit Button(QObject* parent = 0);
|
|
void setText(const QString& text);
|
|
void setPixmap(const QPixmap& pixmap);
|
|
|
|
protected:
|
|
virtual void mousePressEvent(QGraphicsSceneMouseEvent* event);
|
|
signals:
|
|
void clicked();
|
|
private:
|
|
QGraphicsPixmapItem *icon;
|
|
QGraphicsSimpleTextItem *text;
|
|
};
|
|
|
|
class DiveHandler : public QGraphicsEllipseItem{
|
|
public:
|
|
DiveHandler();
|
|
QGraphicsLineItem *from;
|
|
QGraphicsLineItem *to;
|
|
int sec;
|
|
int mm;
|
|
protected:
|
|
void mousePressEvent(QGraphicsSceneMouseEvent* event);
|
|
|
|
};
|
|
|
|
class Ruler : public QGraphicsLineItem{
|
|
public:
|
|
Ruler();
|
|
void setMinimum(double minimum);
|
|
void setMaximum(double maximum);
|
|
void setTickInterval(double interval);
|
|
void setOrientation(Qt::Orientation orientation);
|
|
void setTickSize(qreal size);
|
|
void updateTicks();
|
|
double minimum() const;
|
|
double maximum() const;
|
|
qreal valueAt(const QPointF& p);
|
|
qreal percentAt(const QPointF& p);
|
|
qreal posAtValue(qreal value);
|
|
void setColor(const QColor& color);
|
|
|
|
private:
|
|
Qt::Orientation orientation;
|
|
QList<QGraphicsLineItem*> ticks;
|
|
double min;
|
|
double max;
|
|
double interval;
|
|
double posBegin;
|
|
double posEnd;
|
|
double tickSize;
|
|
};
|
|
|
|
class DivePlannerGraphics : public QGraphicsView {
|
|
Q_OBJECT
|
|
public:
|
|
DivePlannerGraphics(QWidget* parent = 0);
|
|
protected:
|
|
virtual void mouseDoubleClickEvent(QMouseEvent* event);
|
|
virtual void showEvent(QShowEvent* event);
|
|
virtual void resizeEvent(QResizeEvent* event);
|
|
virtual void mouseMoveEvent(QMouseEvent* event);
|
|
virtual void mousePressEvent(QMouseEvent* event);
|
|
virtual void mouseReleaseEvent(QMouseEvent* event);
|
|
|
|
void createDecoStops();
|
|
bool isPointOutOfBoundaries(const QPointF& point);
|
|
void deleteTemporaryDivePlan(struct divedatapoint* dp);
|
|
qreal fromPercent(qreal percent, Qt::Orientation orientation);
|
|
private slots:
|
|
void keyEscAction();
|
|
void keyDeleteAction();
|
|
void keyUpAction();
|
|
void keyDownAction();
|
|
void keyLeftAction();
|
|
void keyRightAction();
|
|
void increaseTime();
|
|
void increaseDepth();
|
|
void okClicked();
|
|
void cancelClicked();
|
|
|
|
private:
|
|
void moveActiveHandler(const QPointF& pos);
|
|
|
|
/* This are the lines of the plotted dive. */
|
|
QList<QGraphicsLineItem*> lines;
|
|
|
|
/* This is the user-entered handles. */
|
|
QList<DiveHandler *> handles;
|
|
|
|
/* those are the lines that follows the mouse. */
|
|
QGraphicsLineItem *verticalLine;
|
|
QGraphicsLineItem *horizontalLine;
|
|
|
|
/* This is the handler that's being dragged. */
|
|
DiveHandler *activeDraggedHandler;
|
|
|
|
// When we start to move the handler, this pos is saved.
|
|
// so we can revert it later.
|
|
QPointF originalHandlerPos;
|
|
|
|
/* this is the background of the dive, the blue-gradient. */
|
|
QGraphicsPolygonItem *diveBg;
|
|
|
|
/* This is the bottom ruler - the x axis, and it's associated text */
|
|
Ruler *timeLine;
|
|
QGraphicsSimpleTextItem *timeString;
|
|
|
|
/* this is the left ruler, the y axis, and it's associated text. */
|
|
Ruler *depthLine;
|
|
QGraphicsSimpleTextItem *depthString;
|
|
|
|
/* Buttons */
|
|
Button *plusTime; // adds 10 minutes to the time ruler.
|
|
Button *plusDepth; // adds 10 meters to the depth ruler.
|
|
Button *lessTime; // remove 10 minutes to the time ruler.
|
|
Button *lessDepth; // remove 10 meters to the depth ruler.
|
|
Button *okBtn; // accepts, and creates a new dive based on the plan.
|
|
Button *cancelBtn; // rejects, and clears the dive plan.
|
|
|
|
int minMinutes; // this holds the minimum duration of the dive.
|
|
};
|
|
|
|
#endif
|