summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/tab-widgets
diff options
context:
space:
mode:
Diffstat (limited to 'desktop-widgets/tab-widgets')
-rw-r--r--desktop-widgets/tab-widgets/maintab.cpp89
-rw-r--r--desktop-widgets/tab-widgets/maintab.h6
2 files changed, 39 insertions, 56 deletions
diff --git a/desktop-widgets/tab-widgets/maintab.cpp b/desktop-widgets/tab-widgets/maintab.cpp
index fe4f6186a..5509a5c93 100644
--- a/desktop-widgets/tab-widgets/maintab.cpp
+++ b/desktop-widgets/tab-widgets/maintab.cpp
@@ -69,7 +69,6 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
ui.timeEdit->setDisplayFormat(prefs.time_format);
memset(&displayed_dive, 0, sizeof(displayed_dive));
- memset(&displayedTrip, 0, sizeof(displayedTrip));
// This makes sure we only delete the models
// after the destructor of the tables,
@@ -82,6 +81,8 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
closeMessage();
connect(&diveListNotifier, &DiveListNotifier::divesChanged, this, &MainTab::divesChanged);
+ connect(&diveListNotifier, &DiveListNotifier::tripChanged, this, &MainTab::tripChanged);
+
connect(ui.editDiveSiteButton, &QToolButton::clicked, MainWindow::instance(), &MainWindow::startDiveSiteEdit);
connect(ui.location, &DiveLocationLineEdit::entered, MapWidget::instance(), &MapWidget::centerOnIndex);
connect(ui.location, &DiveLocationLineEdit::currentChanged, MapWidget::instance(), &MapWidget::centerOnIndex);
@@ -281,14 +282,10 @@ void MainTab::updateTextLabels(bool showUnits)
void MainTab::enableEdition(EditMode newEditMode)
{
- const bool isTripEdit = MainWindow::instance() &&
- MainWindow::instance()->diveList->selectedTrips().count() == 1;
-
if (((newEditMode == DIVE || newEditMode == NONE) && current_dive == NULL) || editMode != NONE)
return;
modified = false;
if ((newEditMode == DIVE || newEditMode == NONE) &&
- !isTripEdit &&
current_dive->dc.model &&
strcmp(current_dive->dc.model, "manually added dive") == 0) {
// editCurrentDive will call enableEdition with newEditMode == MANUALLY_ADDED_DIVE
@@ -312,21 +309,13 @@ void MainTab::enableEdition(EditMode newEditMode)
ui.tabWidget->setTabEnabled(3, false);
ui.tabWidget->setTabEnabled(5, false);
- if (isTripEdit) {
- // we are editing trip location and notes
- displayMessage(tr("This trip is being edited."));
- currentTrip = current_dive->divetrip;
- ui.dateEdit->setEnabled(false);
- editMode = TRIP;
+ ui.dateEdit->setEnabled(true);
+ if (amount_selected > 1) {
+ displayMessage(tr("Multiple dives are being edited."));
} else {
- ui.dateEdit->setEnabled(true);
- if (amount_selected > 1) {
- displayMessage(tr("Multiple dives are being edited."));
- } else {
- displayMessage(tr("This dive is being edited."));
- }
- editMode = newEditMode != NONE ? newEditMode : DIVE;
+ displayMessage(tr("This dive is being edited."));
}
+ editMode = newEditMode != NONE ? newEditMode : DIVE;
}
static void profileFromDive(struct dive *d)
@@ -397,6 +386,26 @@ void MainTab::divesChanged(dive_trip *trip, const QVector<dive *> &dives, DiveFi
}
}
+// This function gets called if a trip-field gets updated by an undo command.
+// Refresh the corresponding UI field.
+void MainTab::tripChanged(dive_trip *trip, TripField field)
+{
+ // If the current dive is not in list of changed dives, do nothing
+ if (currentTrip != trip)
+ return;
+
+ switch(field) {
+ case TripField::NOTES:
+ ui.notes->setText(currentTrip->notes);
+ break;
+ case TripField::LOCATION:
+ ui.diveTripLocation->setText(currentTrip->location);
+ break;
+ default:
+ break;
+ }
+}
+
void MainTab::clearEquipment()
{
cylindersModel->clear();
@@ -767,18 +776,6 @@ void MainTab::acceptChanges()
resetPallete();
displayed_dive.divetrip = nullptr; // Should not be necessary, just in case!
return;
- } else if (MainWindow::instance() && MainWindow::instance()->diveList->selectedTrips().count() == 1) {
- /* now figure out if things have changed */
- if (displayedTrip.notes && !same_string(displayedTrip.notes, currentTrip->notes)) {
- currentTrip->notes = copy_string(displayedTrip.notes);
- mark_divelist_changed(true);
- }
- if (displayedTrip.location && !same_string(displayedTrip.location, currentTrip->location)) {
- currentTrip->location = copy_string(displayedTrip.location);
- mark_divelist_changed(true);
- }
- currentTrip = NULL;
- ui.dateEdit->setEnabled(true);
} else {
// Get list of selected dives, but put the current dive last;
// this is required in case the invocation wants to compare things
@@ -1102,13 +1099,11 @@ void MainTab::on_location_diveSiteSelected()
Command::editDiveSite(newDs, false);
}
-void MainTab::on_diveTripLocation_textEdited(const QString& text)
+void MainTab::on_diveTripLocation_editingFinished()
{
- if (currentTrip) {
- free(displayedTrip.location);
- displayedTrip.location = copy_qstring(text);
- markChangedWidget(ui.diveTripLocation);
- }
+ if (!currentTrip)
+ return;
+ Command::editTripLocation(currentTrip, ui.diveTripLocation->text());
}
void MainTab::on_suit_editingFinished()
@@ -1119,28 +1114,18 @@ void MainTab::on_suit_editingFinished()
Command::editSuit(ui.suit->text(), false);
}
-void MainTab::on_notes_textChanged()
-{
- if (editMode == IGNORE)
- return;
- if (currentTrip) {
- if (same_string(displayedTrip.notes, qPrintable(ui.notes->toPlainText())))
- return;
- free(displayedTrip.notes);
- displayedTrip.notes = copy_qstring(ui.notes->toPlainText());
- markChangedWidget(ui.notes);
- }
-}
-
void MainTab::on_notes_editingFinished()
{
- if (currentTrip || !current_dive)
- return; // Trip-note editing is done via on_notes_textChanged()
+ if (!currentTrip && !current_dive)
+ return;
QString notes = ui.notes->toHtml().indexOf("<div") != -1 ?
ui.notes->toHtml() : ui.notes->toPlainText();
- Command::editNotes(notes, false);
+ if (currentTrip)
+ Command::editTripNotes(currentTrip, notes);
+ else
+ Command::editNotes(notes, false);
}
void MainTab::on_rating_valueChanged(int value)
diff --git a/desktop-widgets/tab-widgets/maintab.h b/desktop-widgets/tab-widgets/maintab.h
index 83a19895a..6a41a1f64 100644
--- a/desktop-widgets/tab-widgets/maintab.h
+++ b/desktop-widgets/tab-widgets/maintab.h
@@ -39,7 +39,6 @@ public:
enum EditMode {
NONE,
DIVE,
- TRIP,
ADD,
MANUALLY_ADDED_DIVE,
IGNORE
@@ -62,6 +61,7 @@ signals:
public
slots:
void divesChanged(dive_trip *trip, const QVector<dive *> &dives, DiveField field);
+ void tripChanged(dive_trip *trip, TripField field);
void addCylinder_clicked();
void addWeight_clicked();
void updateDiveInfo(bool clear = false);
@@ -76,8 +76,7 @@ slots:
void on_divemaster_editingFinished();
void on_buddy_editingFinished();
void on_suit_editingFinished();
- void on_diveTripLocation_textEdited(const QString& text);
- void on_notes_textChanged();
+ void on_diveTripLocation_editingFinished();
void on_notes_editingFinished();
void on_airtemp_editingFinished();
void on_duration_editingFinished();
@@ -119,7 +118,6 @@ private:
void copyTagsToDisplayedDive();
void markChangedWidget(QWidget *w);
dive_trip_t *currentTrip;
- dive_trip_t displayedTrip;
QList<TabBase*> extraWidgets;
};