summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/tripselectiondialog.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-09-29 23:19:11 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2020-10-03 10:01:13 -0700
commitf5fe6839c7672f775e35068f46fbb2d2e41b8bf5 (patch)
tree37fe93300f9fb809677d1ad3308ca0d76355b8b6 /desktop-widgets/tripselectiondialog.cpp
parentf4ee8934243d6c924d810b5b2ec5a6c1f3b492f8 (diff)
downloadsubsurface-f5fe6839c7672f775e35068f46fbb2d2e41b8bf5.tar.gz
desktop: add trip selection dialog
A simple dialog to select a trip. Simply fill a QListWidget without the model/view rigmarole. So much less painful! Of course that means that the dialog has to be regenerated everytime it is used. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/tripselectiondialog.cpp')
-rw-r--r--desktop-widgets/tripselectiondialog.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/desktop-widgets/tripselectiondialog.cpp b/desktop-widgets/tripselectiondialog.cpp
new file mode 100644
index 000000000..2623fdc10
--- /dev/null
+++ b/desktop-widgets/tripselectiondialog.cpp
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "tripselectiondialog.h"
+#include "core/trip.h"
+#include "core/qthelper.h"
+#include <QShortcut>
+#include <QPushButton>
+
+TripSelectionDialog::TripSelectionDialog(QWidget *parent) : QDialog(parent)
+{
+ ui.setupUi(this);
+ connect(ui.trips, &QListWidget::itemSelectionChanged, this, &TripSelectionDialog::selectionChanged);
+
+ QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
+ connect(close, &QShortcut::activated, this, &QDialog::close);
+ QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
+ connect(quit, &QShortcut::activated, parent, &QWidget::close);
+
+ // We could use a model, but it seems barely worth the hassle.
+ QStringList list;
+ list.reserve(trip_table.nr);
+ for (int i = 0; i < trip_table.nr; ++i)
+ list.push_back(get_trip_string(trip_table.trips[i]));
+ ui.trips->addItems(list);
+}
+
+void TripSelectionDialog::selectionChanged()
+{
+ ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(selectedTrip() != nullptr);
+}
+
+dive_trip *TripSelectionDialog::selectedTrip() const
+{
+ // Accessing the selected index of a QListWidget is ridiculously cumbersome.
+ // Note that "currentItem" is a different beast.
+ QModelIndexList rows = ui.trips->selectionModel()->selectedRows();
+ if (rows.size() != 1)
+ return nullptr;
+ int idx = rows[0].row();
+ if (idx < 0 || idx >= trip_table.nr)
+ return nullptr;
+ return trip_table.trips[idx];
+}
+
+dive_trip *TripSelectionDialog::getTrip()
+{
+ return exec() ? selectedTrip() : nullptr;
+}