summaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-09-16 20:52:01 -0400
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-09-16 20:52:01 -0400
commit396d73705e268619c07178171e3b99f095485ebd (patch)
tree703d54ed6243e8ece807560da735c38f4ea2ad85 /qt-ui
parent242ef056f6eaab44cd4283b7015f2aef4e6c0811 (diff)
parent2b6c3b4c0cb094a06bc832573f68be00de9d7293 (diff)
downloadsubsurface-396d73705e268619c07178171e3b99f095485ebd.tar.gz
Merge branch 'multiDiveEdition' of https://github.com/tcanabrava/subsurface
Signed-off-by: Dirk Hohndel <dirk@hohndel.org> Conflicts: qt-ui/maintab.h
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/divelistview.cpp9
-rw-r--r--qt-ui/maintab.cpp188
-rw-r--r--qt-ui/maintab.h6
3 files changed, 135 insertions, 68 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index 4b856f601..2e40678ad 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -226,16 +226,7 @@ void DiveListView::currentChanged(const QModelIndex& current, const QModelIndex&
{
if (!current.isValid())
return;
- const QAbstractItemModel *model = current.model();
- int selectedDive = 0;
- struct dive *dive = (struct dive*) model->data(current, DiveTripModel::DIVE_ROLE).value<void*>();
- if (!dive) // it's a trip! select first child.
- dive = (struct dive*) model->data(current.child(0,0), DiveTripModel::DIVE_ROLE).value<void*>();
- selectedDive = get_divenr(dive);
scrollTo(current);
- if (selectedDive == selected_dive)
- return;
- Q_EMIT currentDiveChanged(selectedDive);
}
void DiveListView::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected)
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index 30c071d55..42250b42c 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -20,12 +20,12 @@
#include <QSet>
#include <QTableView>
#include <QSettings>
+#include <QPalette>
MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
ui(new Ui::MainTab()),
weightModel(new WeightModel()),
cylindersModel(new CylindersModel()),
- currentDive(0),
editMode(NONE)
{
ui->setupUi(this);
@@ -91,7 +91,7 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
void MainTab::enableEdition()
{
- if (ui->editAccept->isVisible() || !currentDive)
+ if (ui->editAccept->isVisible() || !selected_dive)
return;
ui->editAccept->setChecked(true);
@@ -150,6 +150,7 @@ void MainTab::clearStats()
void MainTab::updateDiveInfo(int dive)
{
+ editMode = NONE;
// This method updates ALL tabs whenever a new dive or trip is
// selected.
// If exactly one trip has been selected, we show the location / notes
@@ -162,7 +163,7 @@ void MainTab::updateDiveInfo(int dive)
process_selected_dives();
process_all_dives(d, &prevd);
- currentDive = d;
+
UPDATE_TEXT(d, notes);
UPDATE_TEXT(d, location);
UPDATE_TEXT(d, suit);
@@ -325,24 +326,39 @@ void MainTab::on_editAccept_clicked(bool edit)
mainWindow()->dive_list()->setEnabled(!edit);
if (edit) {
+
+ // We may be editing one or more dives here. backup everything.
+ notesBackup.clear();
+
if (mainWindow() && mainWindow()->dive_list()->selectedTrips.count() == 1) {
// we are editing trip location and notes
ui->diveNotesMessage->setText(tr("This trip is being edited. Select Save or Undo when ready."));
ui->diveNotesMessage->animatedShow();
- notesBackup.notes = ui->notes->toPlainText();
- notesBackup.location = ui->location->text();
+ notesBackup[NULL].notes = ui->notes->toPlainText();
+ notesBackup[NULL].location = ui->location->text();
editMode = TRIP;
} else {
ui->diveNotesMessage->setText(tr("This dive is being edited. Select Save or Undo when ready."));
ui->diveNotesMessage->animatedShow();
- notesBackup.buddy = ui->buddy->text();
- notesBackup.suit = ui->suit->text();
- notesBackup.notes = ui->notes->toPlainText();
- notesBackup.divemaster = ui->divemaster->text();
- notesBackup.location = ui->location->text();
- notesBackup.rating = ui->rating->currentStars();
- notesBackup.visibility = ui->visibility->currentStars();
- editMode = DIVE;
+
+ // We may be editing one or more dives here. backup everything.
+ struct dive *mydive;
+ for (int i = 0; i < dive_table.nr; i++) {
+ mydive = get_dive(i);
+ if (!mydive)
+ continue;
+ if (!mydive->selected)
+ continue;
+
+ notesBackup[mydive].buddy = QString(mydive->buddy);
+ notesBackup[mydive].suit = QString(mydive->suit);
+ notesBackup[mydive].notes = QString(mydive->notes);
+ notesBackup[mydive].divemaster = QString(mydive->divemaster);
+ notesBackup[mydive].location = QString(mydive->location);
+ notesBackup[mydive].rating = mydive->rating;
+ notesBackup[mydive].visibility = mydive->visibility;
+ }
+ editMode = DIVE;
}
} else {
ui->diveNotesMessage->animatedHide();
@@ -350,38 +366,78 @@ void MainTab::on_editAccept_clicked(bool edit)
ui->editReset->hide();
/* now figure out if things have changed */
if (mainWindow() && mainWindow()->dive_list()->selectedTrips.count() == 1) {
- if (notesBackup.notes != ui->notes->toPlainText() ||
- notesBackup.location != ui->location->text())
+ if (notesBackup[NULL].notes != ui->notes->toPlainText() ||
+ notesBackup[NULL].location != ui->location->text())
mark_divelist_changed(TRUE);
} else {
- if (notesBackup.buddy != ui->buddy->text() ||
- notesBackup.suit != ui->suit->text() ||
- notesBackup.notes != ui->notes->toPlainText() ||
- notesBackup.divemaster != ui->divemaster->text() ||
- notesBackup.location != ui->location->text() ||
- notesBackup.visibility != ui->visibility->currentStars() ||
- notesBackup.rating != ui->rating->currentStars())
+ struct dive *curr = current_dive;
+ if (notesBackup[curr].buddy != ui->buddy->text() ||
+ notesBackup[curr].suit != ui->suit->text() ||
+ notesBackup[curr].notes != ui->notes->toPlainText() ||
+ notesBackup[curr].divemaster != ui->divemaster->text() ||
+ notesBackup[curr].location != ui->location->text() ||
+ notesBackup[curr].rating != ui->visibility->currentStars() ||
+ notesBackup[curr].visibility != ui->rating->currentStars())
+
mark_divelist_changed(TRUE);
- if (notesBackup.location != ui->location->text())
+ if (notesBackup[curr].location != ui->location->text())
mainWindow()->globe()->reload();
}
editMode = NONE;
}
+ QPalette p;
+ ui->buddy->setPalette(p);
+ ui->notes->setPalette(p);
+ ui->location->setPalette(p);
+ ui->divemaster->setPalette(p);
+ ui->suit->setPalette(p);
}
+#define EDIT_TEXT2(what, text) \
+ textByteArray = text.toLocal8Bit(); \
+ free(what);\
+ what = strdup(textByteArray.data());
+
+#define EDIT_TEXT(what, text) \
+ QByteArray textByteArray = text.toLocal8Bit(); \
+ free(what);\
+ what = strdup(textByteArray.data());
+
void MainTab::on_editReset_clicked()
{
if (!ui->editAccept->isChecked())
return;
- ui->notes->setText(notesBackup.notes);
- ui->location->setText(notesBackup.location);
- if (mainWindow() && mainWindow()->dive_list()->selectedTrips.count() != 1) {
- ui->buddy->setText(notesBackup.buddy);
- ui->suit->setText(notesBackup.suit);
- ui->divemaster->setText(notesBackup.divemaster);
- ui->rating->setCurrentStars(notesBackup.rating);
- ui->visibility->setCurrentStars(notesBackup.visibility);
+ if (mainWindow() && mainWindow()->dive_list()->selectedTrips.count() == 1){
+ ui->notes->setText(notesBackup[NULL].notes );
+ ui->location->setText(notesBackup[NULL].location);
+ }else{
+ struct dive *curr = current_dive;
+ ui->notes->setText(notesBackup[curr].notes );
+ ui->location->setText(notesBackup[curr].location);
+ ui->buddy->setText(notesBackup[curr].buddy);
+ ui->suit->setText(notesBackup[curr].suit);
+ ui->divemaster->setText(notesBackup[curr].divemaster);
+ ui->rating->setCurrentStars(notesBackup[curr].rating);
+ ui->visibility->setCurrentStars(notesBackup[curr].visibility);
+
+ struct dive *mydive;
+ for (int i = 0; i < dive_table.nr; i++) {
+ mydive = get_dive(i);
+ if (!mydive)
+ continue;
+ if (!mydive->selected)
+ continue;
+
+ QByteArray textByteArray;
+ EDIT_TEXT2(mydive->buddy, notesBackup[mydive].buddy);
+ EDIT_TEXT2(mydive->suit, notesBackup[mydive].suit);
+ EDIT_TEXT2(mydive->notes, notesBackup[mydive].notes);
+ EDIT_TEXT2(mydive->divemaster, notesBackup[mydive].divemaster);
+ EDIT_TEXT2(mydive->location, notesBackup[mydive].location);
+ mydive->rating = notesBackup[mydive].rating;
+ mydive->visibility = notesBackup[mydive].visibility;
+ }
}
ui->editAccept->setChecked(false);
ui->diveNotesMessage->animatedHide();
@@ -397,75 +453,95 @@ void MainTab::on_editReset_clicked()
ui->editAccept->hide();
ui->editReset->hide();
+ notesBackup.clear();
+ QPalette p;
+ ui->buddy->setPalette(p);
+ ui->notes->setPalette(p);
+ ui->location->setPalette(p);
+ ui->divemaster->setPalette(p);
+ ui->suit->setPalette(p);
editMode = NONE;
}
+#undef EDIT_TEXT2
+
+#define EDIT_SELECTED_DIVES( WHAT ) \
+ if (editMode == NONE) \
+ return; \
+ struct dive *mydive; \
+\
+ for (int i = 0; i < dive_table.nr; i++) { \
+ mydive = get_dive(i); \
+ if (!mydive) \
+ continue; \
+ if (!mydive->selected) \
+ continue; \
+\
+ WHAT; \
+ }
-#define EDIT_TEXT(what, text) \
- QByteArray textByteArray = text.toLocal8Bit(); \
- free(what);\
- what = strdup(textByteArray.data());
+void markChangedWidget(QWidget *w){
+ QPalette p;
+ p.setBrush(QPalette::Base, QColor(Qt::yellow).lighter());
+ w->setPalette(p);
+}
void MainTab::on_buddy_textChanged(const QString& text)
{
- if (!currentDive)
- return;
- EDIT_TEXT(currentDive->buddy, text);
+ EDIT_SELECTED_DIVES( EDIT_TEXT(mydive->buddy, text) );
+ markChangedWidget(ui->buddy);
}
void MainTab::on_divemaster_textChanged(const QString& text)
{
- if (!currentDive)
- return;
- EDIT_TEXT(currentDive->divemaster, text);
+ EDIT_SELECTED_DIVES( EDIT_TEXT(mydive->divemaster, text) );
+ markChangedWidget(ui->divemaster);
}
void MainTab::on_location_textChanged(const QString& text)
{
+ if (editMode == NONE)
+ return;
if (editMode == TRIP && mainWindow() && mainWindow()->dive_list()->selectedTrips.count() == 1) {
// we are editing a trip
dive_trip_t *currentTrip = *mainWindow()->dive_list()->selectedTrips.begin();
EDIT_TEXT(currentTrip->location, text);
} else if (editMode == DIVE){
- if (!currentDive)
- return;
- EDIT_TEXT(currentDive->location, text);
+ EDIT_SELECTED_DIVES( EDIT_TEXT(mydive->location, text) )
}
+
+ markChangedWidget(ui->location);
}
void MainTab::on_suit_textChanged(const QString& text)
{
- if (!currentDive)
- return;
- EDIT_TEXT(currentDive->suit, text);
+ EDIT_SELECTED_DIVES( EDIT_TEXT(mydive->suit, text) );
+ markChangedWidget(ui->suit);
}
void MainTab::on_notes_textChanged()
{
+ if (editMode == NONE)
+ return;
if (editMode == TRIP && mainWindow() && mainWindow()->dive_list()->selectedTrips.count() == 1) {
// we are editing a trip
dive_trip_t *currentTrip = *mainWindow()->dive_list()->selectedTrips.begin();
EDIT_TEXT(currentTrip->notes, ui->notes->toPlainText());
} else if (editMode == DIVE) {
- if (!currentDive)
- return;
- EDIT_TEXT(currentDive->notes, ui->notes->toPlainText());
+ EDIT_SELECTED_DIVES( EDIT_TEXT(mydive->notes, ui->notes->toPlainText()) );
}
+ markChangedWidget(ui->notes);
}
#undef EDIT_TEXT
void MainTab::on_rating_valueChanged(int value)
{
- if (!currentDive)
- return;
- currentDive->rating = value;
+ EDIT_SELECTED_DIVES(mydive->rating = value );
}
void MainTab::on_visibility_valueChanged(int value)
{
- if (!currentDive)
- return;
- currentDive->visibility = value;
+ EDIT_SELECTED_DIVES( mydive->visibility = value );
}
void MainTab::editCylinderWidget(const QModelIndex& index)
diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h
index c423bc619..f9f65a3ff 100644
--- a/qt-ui/maintab.h
+++ b/qt-ui/maintab.h
@@ -9,11 +9,12 @@
#include <QTabWidget>
#include <QDialog>
+#include <QMap>
#include "models.h"
class QCompleter;
-
+struct dive;
namespace Ui
{
class MainTab;
@@ -68,8 +69,7 @@ private:
Ui::MainTab *ui;
WeightModel *weightModel;
CylindersModel *cylindersModel;
- NotesBackup notesBackup;
- struct dive* currentDive;
+ QMap<dive*, NotesBackup> notesBackup;
enum { NONE, DIVE, TRIP } editMode;
Completers completers;
void enableEdition();