From 67fec4da704086f40f5d6699fc93603fdd0baaef Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Sun, 21 Jul 2013 13:54:21 -0300 Subject: Added the possibility to choose gases in the planner. Added the possibility to choose gases in the planner, now the user should click on the name of the gas, a popup window will appear, asking the user to choose what gas he wants for that ascent / descent. now we need to hook that up with the createDecoStops method that calculates the decompression. Signed-off-by: Tomaz Canabrava --- qt-ui/diveplanner.cpp | 29 +++++++++++++++++++++++++---- qt-ui/diveplanner.h | 10 +++++++++- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index fa959cf97..25d5df11d 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -11,7 +11,10 @@ #include #include #include -#include +#include +#include +#include +#include #include "ui_diveplanner.h" #include "mainwindow.h" @@ -136,8 +139,14 @@ DivePlannerGraphics::DivePlannerGraphics(QWidget* parent): QGraphicsView(parent) ADD_ACTION(Qt::Key_Right, keyRightAction()); #undef ADD_ACTION - QStringListModel *model = new QStringListModel(QStringList() << tr("AIR") << tr("EAN32") << tr("EAN36")); + // Prepare the stuff for the gas-choices. + gasChoices = new QStringListModel(QStringList() << tr("AIR") << tr("EAN32") << tr("EAN36")); + gasListView = new QListView(); + gasListView->setWindowFlags(Qt::FramelessWindowHint); + gasListView->setModel(gasChoices); + gasListView->hide(); + connect(gasListView, SIGNAL(activated(QModelIndex)), this, SLOT(selectGas(QModelIndex))); setRenderHint(QPainter::Antialiasing); } @@ -363,16 +372,28 @@ void DivePlannerGraphics::mouseDoubleClickEvent(QMouseEvent* event) gasChooseBtn ->setText(tr("Air")); scene()->addItem(gasChooseBtn); gasChooseBtn->setZValue(10); - connect(gasChooseBtn, SIGNAL(clicked()), this, SLOT(selectGasClicked())); + connect(gasChooseBtn, SIGNAL(clicked()), this, SLOT(prepareSelectGas())); gases << gasChooseBtn; createDecoStops(); } -void DivePlannerGraphics::selectGasClicked() +void DivePlannerGraphics::prepareSelectGas() { + currentGasChoice = static_cast(sender()); + QPoint c = QCursor::pos(); + gasListView->setGeometry(c.x(), c.y(), 150, 100); + gasListView->show(); } +void DivePlannerGraphics::selectGas(const QModelIndex& index) +{ + QString gasSelected = gasListView->model()->data(index, Qt::DisplayRole).toString(); + currentGasChoice->setText(gasSelected); + gasListView->hide(); +} + + void DivePlannerGraphics::createDecoStops() { qDeleteAll(lines); diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h index cf8bb0c80..2239e013d 100644 --- a/qt-ui/diveplanner.h +++ b/qt-ui/diveplanner.h @@ -5,6 +5,10 @@ #include #include +class QListView; +class QStringListModel; +class QModelIndex; + class Button : public QObject, public QGraphicsRectItem { Q_OBJECT public: @@ -86,7 +90,8 @@ private slots: void decreaseDepth();; void okClicked(); void cancelClicked(); - void selectGasClicked(); + void prepareSelectGas(); + void selectGas(const QModelIndex& index); private: void moveActiveHandler(const QPointF& pos); @@ -102,6 +107,9 @@ private: user cna click to choose a new gas. */ QList gases; + QListView *gasListView; + QStringListModel *gasChoices; + Button *currentGasChoice; /* those are the lines that follows the mouse. */ QGraphicsLineItem *verticalLine; -- cgit v1.2.3-70-g09d2