subsurface/desktop-widgets/simplewidgets.h
Berthold Stoeger b86c70ab2c Turn filter list options into context menu
Let the menu introduced in commit 5e86442bab
pop up on right-click instead of button-click.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2017-12-26 13:08:49 -08:00

222 lines
5 KiB
C++

// SPDX-License-Identifier: GPL-2.0
#ifndef SIMPLEWIDGETS_H
#define SIMPLEWIDGETS_H
class MinMaxAvgWidgetPrivate;
class QAbstractButton;
class QNetworkReply;
class FilterModelBase;
#include <QWidget>
#include <QGroupBox>
#include <QDialog>
#include <QTextEdit>
#include <stdint.h>
#include "ui_renumber.h"
#include "ui_setpoint.h"
#include "ui_shifttimes.h"
#include "ui_shiftimagetimes.h"
#include "ui_urldialog.h"
#include "ui_divecomponentselection.h"
#include "ui_listfilter.h"
#include "ui_filterwidget.h"
#include "core/exif.h"
#include "core/dive.h"
class MinMaxAvgWidget : public QWidget {
Q_OBJECT
Q_PROPERTY(double minimum READ minimum WRITE setMinimum)
Q_PROPERTY(double maximum READ maximum WRITE setMaximum)
Q_PROPERTY(double average READ average WRITE setAverage)
public:
MinMaxAvgWidget(QWidget *parent);
~MinMaxAvgWidget();
double minimum() const;
double maximum() const;
double average() const;
void setMinimum(double minimum);
void setMaximum(double maximum);
void setAverage(double average);
void setMinimum(const QString &minimum);
void setMaximum(const QString &maximum);
void setAverage(const QString &average);
void overrideMinToolTipText(const QString &newTip);
void overrideAvgToolTipText(const QString &newTip);
void overrideMaxToolTipText(const QString &newTip);
void setAvgVisibility(const bool visible);
void clear();
private:
QScopedPointer<MinMaxAvgWidgetPrivate> d;
};
class RenumberDialog : public QDialog {
Q_OBJECT
public:
static RenumberDialog *instance();
void renumberOnlySelected(bool selected = true);
private
slots:
void buttonClicked(QAbstractButton *button);
private:
explicit RenumberDialog(QWidget *parent);
Ui::RenumberDialog ui;
bool selectedOnly;
};
class SetpointDialog : public QDialog {
Q_OBJECT
public:
static SetpointDialog *instance();
void setpointData(struct divecomputer *divecomputer, int time);
private
slots:
void buttonClicked(QAbstractButton *button);
private:
explicit SetpointDialog(QWidget *parent);
Ui::SetpointDialog ui;
struct divecomputer *dc;
int time;
};
class ShiftTimesDialog : public QDialog {
Q_OBJECT
public:
static ShiftTimesDialog *instance();
void showEvent(QShowEvent *event);
private
slots:
void buttonClicked(QAbstractButton *button);
void changeTime();
private:
explicit ShiftTimesDialog(QWidget *parent);
int64_t when;
Ui::ShiftTimesDialog ui;
};
class ShiftImageTimesDialog : public QDialog {
Q_OBJECT
public:
explicit ShiftImageTimesDialog(QWidget *parent, QStringList fileNames);
time_t amount() const;
void setOffset(time_t offset);
bool matchAll();
private
slots:
void buttonClicked(QAbstractButton *button);
void syncCameraClicked();
void dcDateTimeChanged(const QDateTime &);
void timeEditChanged(const QTime &time);
void timeEditChanged();
void updateInvalid();
void matchAllImagesToggled(bool);
private:
QStringList fileNames;
Ui::ShiftImageTimesDialog ui;
time_t m_amount;
time_t dcImageEpoch;
bool matchAllImages;
};
class URLDialog : public QDialog {
Q_OBJECT
public:
explicit URLDialog(QWidget *parent);
QString url() const;
private:
Ui::URLDialog ui;
};
class QCalendarWidget;
class DiveComponentSelection : public QDialog {
Q_OBJECT
public:
explicit DiveComponentSelection(QWidget *parent, struct dive *target, struct dive_components *_what);
private
slots:
void buttonClicked(QAbstractButton *button);
private:
Ui::DiveComponentSelectionDialog ui;
struct dive *targetDive;
struct dive_components *what;
};
namespace Ui{
class FilterWidget2;
};
class MultiFilter : public QWidget {
Q_OBJECT
public
slots:
void closeFilter();
void adjustHeight();
void filterFinished();
public:
MultiFilter(QWidget *parent);
Ui::FilterWidget2 ui;
};
class FilterBase : public QWidget {
void addContextMenuEntry(const QString &s, void (FilterModelBase::*)());
protected:
FilterBase(FilterModelBase *model, QWidget *parent = 0);
FilterModelBase *model;
Ui::FilterWidget ui;
virtual void showEvent(QShowEvent *);
virtual void hideEvent(QHideEvent *);
friend class MultiFilter;
};
class TagFilter : public FilterBase {
public:
TagFilter(QWidget *parent = 0);
};
class BuddyFilter : public FilterBase {
public:
BuddyFilter(QWidget *parent = 0);
};
class SuitFilter : public FilterBase {
public:
SuitFilter(QWidget *parent = 0);
};
class LocationFilter : public FilterBase {
public:
LocationFilter(QWidget *parent = 0);
};
class TextHyperlinkEventFilter : public QObject {
public:
explicit TextHyperlinkEventFilter(QTextEdit *txtEdit);
virtual bool eventFilter(QObject *target, QEvent *evt);
private:
void handleUrlClick(const QString &urlStr);
void handleUrlTooltip(const QString &urlStr, const QPoint &pos);
bool stringMeetsOurUrlRequirements(const QString &maybeUrlStr);
QString fromCursorTilWhitespace(QTextCursor *cursor, const bool searchBackwards);
QString tryToFormulateUrl(QTextCursor *cursor);
QTextEdit const *const textEdit;
QWidget const *const scrollView;
Q_DISABLE_COPY(TextHyperlinkEventFilter)
};
bool isGnome3Session();
QImage grayImage(const QImage &coloredImg);
#endif // SIMPLEWIDGETS_H