subsurface/desktop-widgets/divecomputermanagementdialog.cpp
Berthold Stoeger 215e5a4544 desktop: make divecomputer table sortable
Add a small proxy-model on top of DiveComputerModel so that clicking
on table headers makes the table sortable.

The UI feature here is not as important as the fact that the UI does
its own sorting and we can keep the device-table in the core sorted
differently.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-10-11 08:35:20 -07:00

63 lines
1.9 KiB
C++

// SPDX-License-Identifier: GPL-2.0
#include "desktop-widgets/divecomputermanagementdialog.h"
#include "desktop-widgets/mainwindow.h"
#include "core/qthelper.h"
#include "qt-models/divecomputermodel.h"
#include <QMessageBox>
#include <QShortcut>
DiveComputerManagementDialog::DiveComputerManagementDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f)
{
ui.setupUi(this);
init();
connect(ui.tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(tryRemove(QModelIndex)));
QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
connect(close, SIGNAL(activated()), this, SLOT(close()));
QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
connect(quit, SIGNAL(activated()), parent, SLOT(close()));
}
void DiveComputerManagementDialog::init()
{
model.reset(new DiveComputerModel);
proxyModel.setSourceModel(model.get());
ui.tableView->setModel(&proxyModel);
ui.tableView->setSortingEnabled(true);
ui.tableView->resizeColumnsToContents();
ui.tableView->setColumnWidth(DiveComputerModel::REMOVE, 22);
layout()->activate();
}
DiveComputerManagementDialog *DiveComputerManagementDialog::instance()
{
static DiveComputerManagementDialog *self = new DiveComputerManagementDialog(MainWindow::instance());
return self;
}
void DiveComputerManagementDialog::tryRemove(const QModelIndex &index)
{
if (index.column() != DiveComputerModel::REMOVE)
return;
QMessageBox::StandardButton response = QMessageBox::question(
this, TITLE_OR_TEXT(
tr("Remove the selected dive computer?"),
tr("Are you sure that you want to \n remove the selected dive computer?")),
QMessageBox::Ok | QMessageBox::Cancel);
if (response == QMessageBox::Ok)
model->remove(index);
}
void DiveComputerManagementDialog::accept()
{
model->keepWorkingList();
hide();
close();
}
void DiveComputerManagementDialog::reject()
{
hide();
close();
}