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:
Tomaz Canabrava 2013-05-16 16:00:33 -03:00 committed by Dirk Hohndel
parent e3cb36498d
commit d39b1aedcd
6 changed files with 41 additions and 35 deletions

View file

@ -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)

View file

@ -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:

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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);