mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
The global object "displayed_dive_site" is used to store the old dive site data for the edit-dive-site widget. The fields of the widget were initialized from this object in the show event. Therefore the object was updated in numerous parts of the code to make sure that it was up-to-date. Instead, move the initialization of the object to the function that also initiatlizes the fields. Call this function explicitly before showing the widget. This makes the data-fow distinctly easier to understand. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
119 lines
3.4 KiB
C++
119 lines
3.4 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef LOCATIONINFORMATION_H
|
|
#define LOCATIONINFORMATION_H
|
|
|
|
#include "core/units.h"
|
|
#include "ui_locationInformation.h"
|
|
#include "qt-models/divelocationmodel.h"
|
|
#include <stdint.h>
|
|
#include <QAbstractListModel>
|
|
#include <QSortFilterProxyModel>
|
|
|
|
class LocationInformationWidget : public QGroupBox {
|
|
Q_OBJECT
|
|
public:
|
|
LocationInformationWidget(QWidget *parent = 0);
|
|
bool eventFilter(QObject*, QEvent*) override;
|
|
void initFields(dive_site *ds);
|
|
|
|
protected:
|
|
void enableLocationButtons(bool enable);
|
|
|
|
public slots:
|
|
void acceptChanges();
|
|
void rejectChanges();
|
|
void updateGpsCoordinates(degrees_t latitude, degrees_t longitude);
|
|
void markChangedWidget(QWidget *w);
|
|
void enableEdition();
|
|
void resetState();
|
|
void resetPallete();
|
|
void on_diveSiteCountry_textChanged(const QString& text);
|
|
void on_diveSiteCoordinates_textChanged(const QString& text);
|
|
void on_diveSiteDescription_textChanged(const QString& text);
|
|
void on_diveSiteName_textChanged(const QString& text);
|
|
void on_diveSiteNotes_textChanged();
|
|
void reverseGeocode();
|
|
void mergeSelectedDiveSites();
|
|
private slots:
|
|
void updateLabels();
|
|
void updateLocationOnMap();
|
|
signals:
|
|
void startEditDiveSite(uint32_t uuid);
|
|
void endEditDiveSite();
|
|
void startFilterDiveSite(uint32_t uuid);
|
|
void stopFilterDiveSite();
|
|
void nameChanged(const QString &oldName, const QString &newName);
|
|
|
|
private:
|
|
void clearLabels();
|
|
Ui::LocationInformation ui;
|
|
bool modified;
|
|
QAction *acceptAction, *rejectAction;
|
|
GPSLocationInformationModel filter_model;
|
|
};
|
|
|
|
class DiveLocationFilterProxyModel : public QSortFilterProxyModel {
|
|
Q_OBJECT
|
|
public:
|
|
DiveLocationFilterProxyModel(QObject *parent = 0);
|
|
bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override;
|
|
bool lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const override;
|
|
};
|
|
|
|
class DiveLocationModel : public QAbstractTableModel {
|
|
Q_OBJECT
|
|
public:
|
|
DiveLocationModel(QObject *o = 0);
|
|
void resetModel();
|
|
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
|
|
int rowCount(const QModelIndex& parent = QModelIndex()) const;
|
|
int columnCount(const QModelIndex& parent = QModelIndex()) const;
|
|
bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
|
|
private:
|
|
QString new_ds_value[2];
|
|
};
|
|
|
|
class DiveLocationListView : public QListView {
|
|
Q_OBJECT
|
|
public:
|
|
DiveLocationListView(QWidget *parent = 0);
|
|
protected:
|
|
void currentChanged(const QModelIndex& current, const QModelIndex& previous) override;
|
|
signals:
|
|
void currentIndexChanged(const QModelIndex& current);
|
|
};
|
|
|
|
class DiveLocationLineEdit : public QLineEdit {
|
|
Q_OBJECT
|
|
public:
|
|
enum DiveSiteType { NO_DIVE_SITE, NEW_DIVE_SITE, EXISTING_DIVE_SITE };
|
|
DiveLocationLineEdit(QWidget *parent =0 );
|
|
void refreshDiveSiteCache();
|
|
void setTemporaryDiveSiteName(const QString& s);
|
|
bool eventFilter(QObject*, QEvent*);
|
|
void itemActivated(const QModelIndex& index);
|
|
DiveSiteType currDiveSiteType() const;
|
|
uint32_t currDiveSiteUuid() const;
|
|
void fixPopupPosition();
|
|
void setCurrentDiveSiteUuid(uint32_t uuid);
|
|
|
|
signals:
|
|
void diveSiteSelected(uint32_t uuid);
|
|
void entered(const QModelIndex& index);
|
|
void currentChanged(const QModelIndex& index);
|
|
|
|
protected:
|
|
void keyPressEvent(QKeyEvent *ev);
|
|
void focusOutEvent(QFocusEvent *ev);
|
|
void showPopup();
|
|
|
|
private:
|
|
using QLineEdit::setText;
|
|
DiveLocationFilterProxyModel *proxy;
|
|
DiveLocationModel *model;
|
|
DiveLocationListView *view;
|
|
DiveSiteType currType;
|
|
uint32_t currUuid;
|
|
};
|
|
|
|
#endif
|