diff options
Diffstat (limited to 'desktop-widgets/locationinformation.h')
-rw-r--r-- | desktop-widgets/locationinformation.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/desktop-widgets/locationinformation.h b/desktop-widgets/locationinformation.h new file mode 100644 index 000000000..243df939b --- /dev/null +++ b/desktop-widgets/locationinformation.h @@ -0,0 +1,114 @@ +#ifndef LOCATIONINFORMATION_H +#define LOCATIONINFORMATION_H + +#include "ui_locationInformation.h" +#include <stdint.h> +#include <QAbstractListModel> +#include <QSortFilterProxyModel> + +class LocationInformationWidget : public QGroupBox { +Q_OBJECT +public: + LocationInformationWidget(QWidget *parent = 0); + virtual bool eventFilter(QObject*, QEvent*); + +protected: + void showEvent(QShowEvent *); + +public slots: + void acceptChanges(); + void rejectChanges(); + void updateGpsCoordinates(); + void markChangedWidget(QWidget *w); + void enableEdition(); + void resetState(); + void resetPallete(); + 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(); +signals: + void startEditDiveSite(uint32_t uuid); + void endEditDiveSite(); + void coordinatesChanged(); + void startFilterDiveSite(uint32_t uuid); + void stopFilterDiveSite(); + void requestCoordinates(); + void endRequestCoordinates(); + +private: + Ui::LocationInformation ui; + bool modified; + QAction *acceptAction, *rejectAction; +}; + +class DiveLocationFilterProxyModel : public QSortFilterProxyModel { + Q_OBJECT +public: + DiveLocationFilterProxyModel(QObject *parent = 0); + virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const; + virtual bool lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const; +}; + +class DiveLocationModel : public QAbstractTableModel { + Q_OBJECT +public: + enum columns{UUID, NAME, LATITUDE, LONGITUDE, DESCRIPTION, NOTES, COLUMNS}; + 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: + virtual void currentChanged(const QModelIndex& current, const QModelIndex& previous); +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 |