mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
Fix loading a second dive, after the first file was loaded.
This patch fixes loading a second dive-file after the first one had been loaded. it simply clears some information and makes sure that the current selected dive is invalid when the file closes. I also did a bit of code cleanup on this one to make things simpler in the future. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
e3cb36498d
commit
d39b1aedcd
6 changed files with 41 additions and 35 deletions
|
@ -11,12 +11,31 @@
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
|
#include <QSortFilterProxyModel>
|
||||||
|
|
||||||
|
|
||||||
DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false)
|
DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false)
|
||||||
{
|
{
|
||||||
setUniformRowHeights(true);
|
setUniformRowHeights(true);
|
||||||
setItemDelegateForColumn(TreeItemDT::RATING, new StarWidgetsDelegate());
|
setItemDelegateForColumn(TreeItemDT::RATING, new StarWidgetsDelegate());
|
||||||
|
QSortFilterProxyModel *model = new QSortFilterProxyModel(this);
|
||||||
|
setModel(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiveListView::reload()
|
||||||
|
{
|
||||||
|
QSortFilterProxyModel *m = qobject_cast<QSortFilterProxyModel*>(model());
|
||||||
|
QAbstractItemModel *oldModel = m->sourceModel();
|
||||||
|
oldModel->deleteLater();
|
||||||
|
m->setSourceModel(new DiveTripModel(this));
|
||||||
|
sortByColumn(0, Qt::DescendingOrder);
|
||||||
|
QModelIndex firstDiveOrTrip = m->index(0,0);
|
||||||
|
if (firstDiveOrTrip.isValid()){
|
||||||
|
if (m->index(0,0, firstDiveOrTrip).isValid())
|
||||||
|
setCurrentIndex(m->index(0,0, firstDiveOrTrip));
|
||||||
|
else
|
||||||
|
setCurrentIndex(firstDiveOrTrip);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiveListView::setModel(QAbstractItemModel* model)
|
void DiveListView::setModel(QAbstractItemModel* model)
|
||||||
|
|
|
@ -29,6 +29,8 @@ public:
|
||||||
void keyPressEvent(QKeyEvent* event);
|
void keyPressEvent(QKeyEvent* event);
|
||||||
void keyReleaseEvent(QKeyEvent*);
|
void keyReleaseEvent(QKeyEvent*);
|
||||||
void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command);
|
void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command);
|
||||||
|
void reload();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void currentDiveChanged(int divenr);
|
void currentDiveChanged(int divenr);
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QSortFilterProxyModel>
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QCloseEvent>
|
#include <QCloseEvent>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
@ -27,24 +26,14 @@
|
||||||
#include "modeldelegates.h"
|
#include "modeldelegates.h"
|
||||||
#include "models.h"
|
#include "models.h"
|
||||||
|
|
||||||
MainWindow::MainWindow() : ui(new Ui::MainWindow()),
|
MainWindow::MainWindow() : ui(new Ui::MainWindow())
|
||||||
model(new DiveTripModel(this)),
|
|
||||||
sortModel(new QSortFilterProxyModel())
|
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
readSettings();
|
readSettings();
|
||||||
sortModel->setSourceModel(model);
|
|
||||||
ui->ListWidget->setModel(sortModel);
|
|
||||||
setWindowIcon(QIcon(":subsurface-icon"));
|
setWindowIcon(QIcon(":subsurface-icon"));
|
||||||
connect(ui->ListWidget, SIGNAL(currentDiveChanged(int)), this, SLOT(current_dive_changed(int)));
|
connect(ui->ListWidget, SIGNAL(currentDiveChanged(int)), this, SLOT(current_dive_changed(int)));
|
||||||
ui->ProfileWidget->setFocusProxy(ui->ListWidget);
|
ui->ProfileWidget->setFocusProxy(ui->ListWidget);
|
||||||
|
ui->ListWidget->reload();
|
||||||
QModelIndex firstDiveOrTrip = sortModel->index(0,0);
|
|
||||||
if (sortModel->index(0,0, firstDiveOrTrip).isValid())
|
|
||||||
ui->ListWidget->setCurrentIndex(sortModel->index(0,0, firstDiveOrTrip));
|
|
||||||
else
|
|
||||||
ui->ListWidget->setCurrentIndex(firstDiveOrTrip);
|
|
||||||
|
|
||||||
ui->ListWidget->setFocus();
|
ui->ListWidget->setFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,16 +78,7 @@ void MainWindow::on_actionOpen_triggered()
|
||||||
|
|
||||||
ui->InfoWidget->reload();
|
ui->InfoWidget->reload();
|
||||||
|
|
||||||
model->deleteLater();
|
ui->ListWidget->reload();
|
||||||
model = new DiveTripModel(this);
|
|
||||||
sortModel->setSourceModel(model);
|
|
||||||
ui->ListWidget->sortByColumn(0, Qt::DescendingOrder);
|
|
||||||
|
|
||||||
QModelIndex firstDiveOrTrip = sortModel->index(0,0);
|
|
||||||
if (sortModel->index(0,0, firstDiveOrTrip).isValid())
|
|
||||||
ui->ListWidget->setCurrentIndex(sortModel->index(0,0, firstDiveOrTrip));
|
|
||||||
else
|
|
||||||
ui->ListWidget->setCurrentIndex(firstDiveOrTrip);
|
|
||||||
ui->ListWidget->setFocus();
|
ui->ListWidget->setFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,8 +100,6 @@ void MainWindow::on_actionClose_triggered()
|
||||||
while (dive_table.nr)
|
while (dive_table.nr)
|
||||||
delete_single_dive(0);
|
delete_single_dive(0);
|
||||||
|
|
||||||
mark_divelist_changed(FALSE);
|
|
||||||
|
|
||||||
/* clear the selection and the statistics */
|
/* clear the selection and the statistics */
|
||||||
selected_dive = -1;
|
selected_dive = -1;
|
||||||
|
|
||||||
|
@ -131,6 +109,8 @@ void MainWindow::on_actionClose_triggered()
|
||||||
ui->InfoWidget->clearStats();
|
ui->InfoWidget->clearStats();
|
||||||
ui->InfoWidget->clearInfo();
|
ui->InfoWidget->clearInfo();
|
||||||
ui->InfoWidget->clearEquipment();
|
ui->InfoWidget->clearEquipment();
|
||||||
|
ui->ProfileWidget->clear();
|
||||||
|
ui->ListWidget->reload();
|
||||||
|
|
||||||
clear_events();
|
clear_events();
|
||||||
#if USE_GTK_UI
|
#if USE_GTK_UI
|
||||||
|
@ -349,7 +329,8 @@ void MainWindow::readSettings()
|
||||||
ui->ListWidget->resizeColumnToContents(i);
|
ui->ListWidget->resizeColumnToContents(i);
|
||||||
}
|
}
|
||||||
ui->ListWidget->collapseAll();
|
ui->ListWidget->collapseAll();
|
||||||
ui->ListWidget->scrollTo(sortModel->index(0,0), QAbstractItemView::PositionAtCenter);
|
ui->ListWidget->scrollTo(ui->ListWidget->model()->index(0,0), QAbstractItemView::PositionAtCenter);
|
||||||
|
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
settings.beginGroup("Units");
|
settings.beginGroup("Units");
|
||||||
GET_UNIT(v, "feet", length, units::METERS, units::FEET);
|
GET_UNIT(v, "feet", length, units::METERS, units::FEET);
|
||||||
|
|
|
@ -76,8 +76,6 @@ protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
DiveTripModel *model;
|
|
||||||
QSortFilterProxyModel *sortModel;
|
|
||||||
QAction *actionNextDive;
|
QAction *actionNextDive;
|
||||||
QAction *actionPreviousDive;
|
QAction *actionPreviousDive;
|
||||||
|
|
||||||
|
|
|
@ -206,16 +206,21 @@ void ProfileGraphicsView::showEvent(QShowEvent* event)
|
||||||
plot(dive);
|
plot(dive);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfileGraphicsView::plot(struct dive *d)
|
void ProfileGraphicsView::clear()
|
||||||
{
|
{
|
||||||
|
|
||||||
scene()->clear();
|
scene()->clear();
|
||||||
if (dive != d){
|
|
||||||
resetTransform();
|
resetTransform();
|
||||||
zoomLevel = 0;
|
zoomLevel = 0;
|
||||||
dive = d;
|
|
||||||
toolTip = 0;
|
toolTip = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProfileGraphicsView::plot(struct dive *d)
|
||||||
|
{
|
||||||
|
if (dive == d)
|
||||||
|
return;
|
||||||
|
|
||||||
|
clear();
|
||||||
|
dive = d;
|
||||||
|
|
||||||
if(!isVisible() || !dive){
|
if(!isVisible() || !dive){
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -64,6 +64,7 @@ public:
|
||||||
ProfileGraphicsView(QWidget* parent = 0);
|
ProfileGraphicsView(QWidget* parent = 0);
|
||||||
void plot(struct dive *d);
|
void plot(struct dive *d);
|
||||||
bool eventFilter(QObject* obj, QEvent* event);
|
bool eventFilter(QObject* obj, QEvent* event);
|
||||||
|
void clear();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void resizeEvent(QResizeEvent *event);
|
void resizeEvent(QResizeEvent *event);
|
||||||
|
|
Loading…
Reference in a new issue