mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +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 <QDebug> | ||||
| #include <QKeyEvent> | ||||
| #include <QSortFilterProxyModel> | ||||
| 
 | ||||
| 
 | ||||
| DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false) | ||||
| { | ||||
| 	setUniformRowHeights(true); | ||||
| 	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) | ||||
|  |  | |||
|  | @ -29,6 +29,8 @@ public: | |||
| 	void keyPressEvent(QKeyEvent* event); | ||||
| 	void keyReleaseEvent(QKeyEvent*); | ||||
| 	void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command); | ||||
| 	void reload(); | ||||
| 
 | ||||
| Q_SIGNALS: | ||||
| 	void currentDiveChanged(int divenr); | ||||
| private: | ||||
|  |  | |||
|  | @ -11,7 +11,6 @@ | |||
| #include <QMessageBox> | ||||
| #include <QtDebug> | ||||
| #include <QDateTime> | ||||
| #include <QSortFilterProxyModel> | ||||
| #include <QSettings> | ||||
| #include <QCloseEvent> | ||||
| #include <QApplication> | ||||
|  | @ -27,24 +26,14 @@ | |||
| #include "modeldelegates.h" | ||||
| #include "models.h" | ||||
| 
 | ||||
| MainWindow::MainWindow() : ui(new Ui::MainWindow()), | ||||
| 			   model(new DiveTripModel(this)), | ||||
| 			   sortModel(new QSortFilterProxyModel()) | ||||
| MainWindow::MainWindow() : ui(new Ui::MainWindow()) | ||||
| { | ||||
| 	ui->setupUi(this); | ||||
| 	readSettings(); | ||||
| 	sortModel->setSourceModel(model); | ||||
| 	ui->ListWidget->setModel(sortModel); | ||||
| 	setWindowIcon(QIcon(":subsurface-icon")); | ||||
| 	connect(ui->ListWidget, SIGNAL(currentDiveChanged(int)), this, SLOT(current_dive_changed(int))); | ||||
| 	ui->ProfileWidget->setFocusProxy(ui->ListWidget); | ||||
| 
 | ||||
| 	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->reload(); | ||||
| 	ui->ListWidget->setFocus(); | ||||
| } | ||||
| 
 | ||||
|  | @ -89,16 +78,7 @@ void MainWindow::on_actionOpen_triggered() | |||
| 
 | ||||
| 	ui->InfoWidget->reload(); | ||||
| 
 | ||||
| 	model->deleteLater(); | ||||
| 	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->reload(); | ||||
| 	ui->ListWidget->setFocus(); | ||||
| } | ||||
| 
 | ||||
|  | @ -120,8 +100,6 @@ void MainWindow::on_actionClose_triggered() | |||
| 	while (dive_table.nr) | ||||
| 		delete_single_dive(0); | ||||
| 
 | ||||
| 	mark_divelist_changed(FALSE); | ||||
| 
 | ||||
| 	/* clear the selection and the statistics */ | ||||
| 	selected_dive = -1; | ||||
| 
 | ||||
|  | @ -131,6 +109,8 @@ void MainWindow::on_actionClose_triggered() | |||
| 	ui->InfoWidget->clearStats(); | ||||
| 	ui->InfoWidget->clearInfo(); | ||||
| 	ui->InfoWidget->clearEquipment(); | ||||
| 	ui->ProfileWidget->clear(); | ||||
| 	ui->ListWidget->reload(); | ||||
| 
 | ||||
| 	clear_events(); | ||||
| #if USE_GTK_UI | ||||
|  | @ -349,7 +329,8 @@ void MainWindow::readSettings() | |||
| 			ui->ListWidget->resizeColumnToContents(i); | ||||
| 	} | ||||
| 	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.beginGroup("Units"); | ||||
| 	GET_UNIT(v, "feet", length, units::METERS, units::FEET); | ||||
|  |  | |||
|  | @ -76,8 +76,6 @@ protected: | |||
| 
 | ||||
| private: | ||||
| 	Ui::MainWindow *ui; | ||||
| 	DiveTripModel *model; | ||||
| 	QSortFilterProxyModel *sortModel; | ||||
| 	QAction *actionNextDive; | ||||
| 	QAction *actionPreviousDive; | ||||
| 
 | ||||
|  |  | |||
|  | @ -206,16 +206,21 @@ void ProfileGraphicsView::showEvent(QShowEvent* event) | |||
| 		plot(dive); | ||||
| } | ||||
| 
 | ||||
| void ProfileGraphicsView::clear() | ||||
| { | ||||
| 	scene()->clear(); | ||||
| 	resetTransform(); | ||||
| 	zoomLevel = 0; | ||||
| 	toolTip = 0; | ||||
| } | ||||
| 
 | ||||
| void ProfileGraphicsView::plot(struct dive *d) | ||||
| { | ||||
| 	if (dive == d) | ||||
| 		return; | ||||
| 
 | ||||
| 	scene()->clear(); | ||||
| 	if (dive != d){ | ||||
| 		resetTransform(); | ||||
| 		zoomLevel = 0; | ||||
| 		dive = d; | ||||
| 		toolTip = 0; | ||||
| 	} | ||||
| 	clear(); | ||||
| 	dive = d; | ||||
| 
 | ||||
| 	if(!isVisible() || !dive){ | ||||
| 		return; | ||||
|  |  | |||
|  | @ -64,6 +64,7 @@ public: | |||
| 	ProfileGraphicsView(QWidget* parent = 0); | ||||
| 	void plot(struct dive *d); | ||||
| 	bool eventFilter(QObject* obj, QEvent* event); | ||||
| 	void clear(); | ||||
| 
 | ||||
| protected: | ||||
| 	void resizeEvent(QResizeEvent *event); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue