2013-06-04 21:51:27 +00:00
|
|
|
#include "simplewidgets.h"
|
2014-11-13 18:31:03 +00:00
|
|
|
#include "filtermodels.h"
|
2013-06-04 21:51:27 +00:00
|
|
|
|
2013-09-27 15:52:01 +00:00
|
|
|
#include <QProcess>
|
2014-02-13 15:43:55 +00:00
|
|
|
#include <QFileDialog>
|
2014-04-25 17:39:40 +00:00
|
|
|
#include <QShortcut>
|
2014-06-19 18:42:05 +00:00
|
|
|
#include <QCalendarWidget>
|
2015-02-09 20:58:40 +00:00
|
|
|
#include <QKeyEvent>
|
2015-02-11 15:58:23 +00:00
|
|
|
#include <QAction>
|
2015-01-17 09:43:52 +00:00
|
|
|
|
2014-05-19 21:11:32 +00:00
|
|
|
#include "file.h"
|
2013-11-18 13:53:05 +00:00
|
|
|
#include "mainwindow.h"
|
2014-03-20 20:57:49 +00:00
|
|
|
#include "helpers.h"
|
2014-11-25 20:22:02 +00:00
|
|
|
#include "libdivecomputer/parser.h"
|
2015-02-09 20:27:59 +00:00
|
|
|
#include "divelistview.h"
|
2015-02-09 21:51:31 +00:00
|
|
|
#include "display.h"
|
|
|
|
#include "profile/profilewidget2.h"
|
2015-02-14 17:12:05 +00:00
|
|
|
#include "undocommands.h"
|
2013-06-17 16:41:00 +00:00
|
|
|
|
2014-01-16 04:50:56 +00:00
|
|
|
class MinMaxAvgWidgetPrivate {
|
2013-06-04 21:51:27 +00:00
|
|
|
public:
|
|
|
|
QLabel *avgIco, *avgValue;
|
|
|
|
QLabel *minIco, *minValue;
|
|
|
|
QLabel *maxIco, *maxValue;
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
MinMaxAvgWidgetPrivate(MinMaxAvgWidget *owner)
|
|
|
|
{
|
2013-06-04 21:51:27 +00:00
|
|
|
avgIco = new QLabel(owner);
|
2014-02-28 04:09:57 +00:00
|
|
|
avgIco->setPixmap(QIcon(":/average").pixmap(16, 16));
|
2013-06-04 21:51:27 +00:00
|
|
|
avgIco->setToolTip(QObject::tr("Average"));
|
|
|
|
minIco = new QLabel(owner);
|
2014-02-28 04:09:57 +00:00
|
|
|
minIco->setPixmap(QIcon(":/minimum").pixmap(16, 16));
|
2013-06-04 21:51:27 +00:00
|
|
|
minIco->setToolTip(QObject::tr("Minimum"));
|
|
|
|
maxIco = new QLabel(owner);
|
2014-02-28 04:09:57 +00:00
|
|
|
maxIco->setPixmap(QIcon(":/maximum").pixmap(16, 16));
|
2013-06-04 21:51:27 +00:00
|
|
|
maxIco->setToolTip(QObject::tr("Maximum"));
|
|
|
|
avgValue = new QLabel(owner);
|
|
|
|
minValue = new QLabel(owner);
|
|
|
|
maxValue = new QLabel(owner);
|
2013-06-17 16:41:00 +00:00
|
|
|
|
2013-06-04 21:51:27 +00:00
|
|
|
QGridLayout *formLayout = new QGridLayout();
|
|
|
|
formLayout->addWidget(maxIco, 0, 0);
|
|
|
|
formLayout->addWidget(maxValue, 0, 1);
|
|
|
|
formLayout->addWidget(avgIco, 1, 0);
|
|
|
|
formLayout->addWidget(avgValue, 1, 1);
|
|
|
|
formLayout->addWidget(minIco, 2, 0);
|
|
|
|
formLayout->addWidget(minValue, 2, 1);
|
|
|
|
owner->setLayout(formLayout);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
double MinMaxAvgWidget::average() const
|
|
|
|
{
|
|
|
|
return d->avgValue->text().toDouble();
|
|
|
|
}
|
|
|
|
|
|
|
|
double MinMaxAvgWidget::maximum() const
|
|
|
|
{
|
|
|
|
return d->maxValue->text().toDouble();
|
|
|
|
}
|
|
|
|
double MinMaxAvgWidget::minimum() const
|
|
|
|
{
|
|
|
|
return d->minValue->text().toDouble();
|
|
|
|
}
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
MinMaxAvgWidget::MinMaxAvgWidget(QWidget *parent) : d(new MinMaxAvgWidgetPrivate(this))
|
2014-01-16 04:50:56 +00:00
|
|
|
{
|
2013-11-30 17:18:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
MinMaxAvgWidget::~MinMaxAvgWidget()
|
|
|
|
{
|
2013-06-04 21:51:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void MinMaxAvgWidget::clear()
|
|
|
|
{
|
|
|
|
d->avgValue->setText(QString());
|
|
|
|
d->maxValue->setText(QString());
|
|
|
|
d->minValue->setText(QString());
|
|
|
|
}
|
|
|
|
|
|
|
|
void MinMaxAvgWidget::setAverage(double average)
|
|
|
|
{
|
|
|
|
d->avgValue->setText(QString::number(average));
|
|
|
|
}
|
|
|
|
|
|
|
|
void MinMaxAvgWidget::setMaximum(double maximum)
|
|
|
|
{
|
|
|
|
d->maxValue->setText(QString::number(maximum));
|
|
|
|
}
|
|
|
|
void MinMaxAvgWidget::setMinimum(double minimum)
|
|
|
|
{
|
|
|
|
d->minValue->setText(QString::number(minimum));
|
|
|
|
}
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
void MinMaxAvgWidget::setAverage(const QString &average)
|
2013-06-04 21:51:27 +00:00
|
|
|
{
|
|
|
|
d->avgValue->setText(average);
|
|
|
|
}
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
void MinMaxAvgWidget::setMaximum(const QString &maximum)
|
2013-06-04 21:51:27 +00:00
|
|
|
{
|
|
|
|
d->maxValue->setText(maximum);
|
|
|
|
}
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
void MinMaxAvgWidget::setMinimum(const QString &minimum)
|
2013-06-04 21:51:27 +00:00
|
|
|
{
|
|
|
|
d->minValue->setText(minimum);
|
|
|
|
}
|
2013-06-17 16:41:00 +00:00
|
|
|
|
2014-05-30 22:46:55 +00:00
|
|
|
void MinMaxAvgWidget::overrideMinToolTipText(const QString &newTip)
|
|
|
|
{
|
|
|
|
d->minIco->setToolTip(newTip);
|
2014-11-17 18:40:08 +00:00
|
|
|
d->minValue->setToolTip(newTip);
|
|
|
|
}
|
|
|
|
|
|
|
|
void MinMaxAvgWidget::overrideAvgToolTipText(const QString &newTip)
|
|
|
|
{
|
|
|
|
d->avgIco->setToolTip(newTip);
|
|
|
|
d->avgValue->setToolTip(newTip);
|
2014-05-30 22:46:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void MinMaxAvgWidget::overrideMaxToolTipText(const QString &newTip)
|
|
|
|
{
|
|
|
|
d->maxIco->setToolTip(newTip);
|
2014-11-17 18:40:08 +00:00
|
|
|
d->maxValue->setToolTip(newTip);
|
2014-05-30 22:46:55 +00:00
|
|
|
}
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
RenumberDialog *RenumberDialog::instance()
|
2013-06-17 16:41:00 +00:00
|
|
|
{
|
2014-02-28 04:09:57 +00:00
|
|
|
static RenumberDialog *self = new RenumberDialog(MainWindow::instance());
|
2013-06-17 16:41:00 +00:00
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2014-05-19 21:11:32 +00:00
|
|
|
void RenumberDialog::renumberOnlySelected(bool selected)
|
|
|
|
{
|
|
|
|
if (selected && amount_selected == 1)
|
|
|
|
ui.groupBox->setTitle(tr("New number"));
|
|
|
|
else
|
|
|
|
ui.groupBox->setTitle(tr("New starting number"));
|
|
|
|
selectedOnly = selected;
|
|
|
|
}
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
void RenumberDialog::buttonClicked(QAbstractButton *button)
|
2013-06-17 16:41:00 +00:00
|
|
|
{
|
2015-02-28 04:42:37 +00:00
|
|
|
if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) {
|
2015-08-19 16:58:08 +00:00
|
|
|
MainWindow::instance()->dive_list()->rememberSelection();
|
2015-06-15 04:49:34 +00:00
|
|
|
// we remember a map from dive uuid to a pair of old number / new number
|
|
|
|
QMap<int,QPair<int, int> > renumberedDives;
|
2015-02-28 04:42:37 +00:00
|
|
|
int i;
|
2015-06-15 04:49:34 +00:00
|
|
|
int newNr = ui.spinBox->value();
|
2015-02-28 04:42:37 +00:00
|
|
|
struct dive *dive = NULL;
|
|
|
|
for_each_dive (i, dive) {
|
|
|
|
if (!selectedOnly || dive->selected)
|
2015-06-15 04:49:34 +00:00
|
|
|
renumberedDives.insert(dive->id, QPair<int,int>(dive->number, newNr++));
|
2015-02-28 04:42:37 +00:00
|
|
|
}
|
2015-06-15 04:49:34 +00:00
|
|
|
UndoRenumberDives *undoCommand = new UndoRenumberDives(renumberedDives);
|
2015-02-28 04:42:37 +00:00
|
|
|
MainWindow::instance()->undoStack->push(undoCommand);
|
2015-08-19 16:58:08 +00:00
|
|
|
|
|
|
|
MainWindow::instance()->dive_list()->fixMessyQtModelBehaviour();
|
|
|
|
mark_divelist_changed(true);
|
|
|
|
MainWindow::instance()->dive_list()->restoreSelection();
|
2015-02-28 04:42:37 +00:00
|
|
|
}
|
2013-06-17 16:41:00 +00:00
|
|
|
}
|
|
|
|
|
2014-05-19 21:11:32 +00:00
|
|
|
RenumberDialog::RenumberDialog(QWidget *parent) : QDialog(parent), selectedOnly(false)
|
2014-11-25 20:22:02 +00:00
|
|
|
{
|
|
|
|
ui.setupUi(this);
|
|
|
|
connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
|
|
|
|
QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
|
|
|
|
connect(close, SIGNAL(activated()), this, SLOT(close()));
|
|
|
|
QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
|
|
|
|
connect(quit, SIGNAL(activated()), parent, SLOT(close()));
|
|
|
|
}
|
|
|
|
|
|
|
|
SetpointDialog *SetpointDialog::instance()
|
|
|
|
{
|
|
|
|
static SetpointDialog *self = new SetpointDialog(MainWindow::instance());
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetpointDialog::setpointData(struct divecomputer *divecomputer, int second)
|
|
|
|
{
|
|
|
|
dc = divecomputer;
|
2014-12-15 22:33:16 +00:00
|
|
|
time = second < 0 ? 0 : second;
|
2014-11-25 20:22:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetpointDialog::buttonClicked(QAbstractButton *button)
|
|
|
|
{
|
2015-06-22 05:19:59 +00:00
|
|
|
if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole && dc)
|
2014-11-26 13:22:41 +00:00
|
|
|
add_event(dc, time, SAMPLE_EVENT_PO2, 0, (int)(1000.0 * ui.spinbox->value()), "SP change");
|
|
|
|
mark_divelist_changed(true);
|
|
|
|
MainWindow::instance()->graphics()->replot();
|
2014-11-25 20:22:02 +00:00
|
|
|
}
|
|
|
|
|
2015-06-22 05:19:59 +00:00
|
|
|
SetpointDialog::SetpointDialog(QWidget *parent) :
|
|
|
|
QDialog(parent),
|
|
|
|
dc(0)
|
2013-06-17 16:41:00 +00:00
|
|
|
{
|
2013-10-03 18:54:25 +00:00
|
|
|
ui.setupUi(this);
|
2014-02-28 04:09:57 +00:00
|
|
|
connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
|
2014-04-25 18:32:02 +00:00
|
|
|
QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
|
|
|
|
connect(close, SIGNAL(activated()), this, SLOT(close()));
|
|
|
|
QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
|
|
|
|
connect(quit, SIGNAL(activated()), parent, SLOT(close()));
|
2013-06-17 16:41:00 +00:00
|
|
|
}
|
2013-09-27 15:52:01 +00:00
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
ShiftTimesDialog *ShiftTimesDialog::instance()
|
2013-11-18 13:53:05 +00:00
|
|
|
{
|
2014-02-28 04:09:57 +00:00
|
|
|
static ShiftTimesDialog *self = new ShiftTimesDialog(MainWindow::instance());
|
2013-11-18 13:53:05 +00:00
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
void ShiftTimesDialog::buttonClicked(QAbstractButton *button)
|
2013-11-18 13:53:05 +00:00
|
|
|
{
|
|
|
|
int amount;
|
|
|
|
|
2014-01-16 04:50:56 +00:00
|
|
|
if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) {
|
2013-11-18 13:53:05 +00:00
|
|
|
amount = ui.timeEdit->time().hour() * 3600 + ui.timeEdit->time().minute() * 60;
|
|
|
|
if (ui.backwards->isChecked())
|
|
|
|
amount *= -1;
|
2013-11-18 18:00:39 +00:00
|
|
|
if (amount != 0) {
|
|
|
|
// DANGER, DANGER - this could get our dive_table unsorted...
|
2015-02-14 17:12:05 +00:00
|
|
|
int i;
|
|
|
|
struct dive *dive;
|
|
|
|
QList<int> affectedDives;
|
|
|
|
for_each_dive (i, dive) {
|
|
|
|
if (!dive->selected)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
affectedDives.append(dive->id);
|
|
|
|
}
|
|
|
|
MainWindow::instance()->undoStack->push(new UndoShiftTime(affectedDives, amount));
|
2013-11-18 18:00:39 +00:00
|
|
|
sort_table(&dive_table);
|
2014-01-15 08:30:42 +00:00
|
|
|
mark_divelist_changed(true);
|
2014-02-12 14:22:54 +00:00
|
|
|
MainWindow::instance()->dive_list()->rememberSelection();
|
|
|
|
MainWindow::instance()->refreshDisplay();
|
|
|
|
MainWindow::instance()->dive_list()->restoreSelection();
|
2013-11-18 18:00:39 +00:00
|
|
|
}
|
2013-11-18 13:53:05 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-05-22 18:40:22 +00:00
|
|
|
void ShiftTimesDialog::showEvent(QShowEvent *event)
|
2014-03-20 20:57:49 +00:00
|
|
|
{
|
|
|
|
ui.timeEdit->setTime(QTime(0, 0, 0, 0));
|
2014-05-22 18:40:22 +00:00
|
|
|
when = get_times(); //get time of first selected dive
|
2014-03-20 20:57:49 +00:00
|
|
|
ui.currentTime->setText(get_dive_date_string(when));
|
|
|
|
ui.shiftedTime->setText(get_dive_date_string(when));
|
|
|
|
}
|
|
|
|
|
|
|
|
void ShiftTimesDialog::changeTime()
|
|
|
|
{
|
|
|
|
int amount;
|
|
|
|
|
|
|
|
amount = ui.timeEdit->time().hour() * 3600 + ui.timeEdit->time().minute() * 60;
|
|
|
|
if (ui.backwards->isChecked())
|
|
|
|
amount *= -1;
|
|
|
|
|
2014-05-22 18:40:22 +00:00
|
|
|
ui.shiftedTime->setText(get_dive_date_string(amount + when));
|
2014-03-20 20:57:49 +00:00
|
|
|
}
|
|
|
|
|
2015-06-22 05:19:59 +00:00
|
|
|
ShiftTimesDialog::ShiftTimesDialog(QWidget *parent) :
|
|
|
|
QDialog(parent),
|
|
|
|
when(0)
|
2013-11-18 13:53:05 +00:00
|
|
|
{
|
|
|
|
ui.setupUi(this);
|
2014-02-28 04:09:57 +00:00
|
|
|
connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
|
2014-03-20 20:57:49 +00:00
|
|
|
connect(ui.timeEdit, SIGNAL(timeChanged(const QTime)), this, SLOT(changeTime()));
|
|
|
|
connect(ui.backwards, SIGNAL(toggled(bool)), this, SLOT(changeTime()));
|
2014-04-25 17:39:40 +00:00
|
|
|
QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
|
|
|
|
connect(close, SIGNAL(activated()), this, SLOT(close()));
|
|
|
|
QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
|
|
|
|
connect(quit, SIGNAL(activated()), parent, SLOT(close()));
|
2013-11-18 13:53:05 +00:00
|
|
|
}
|
2014-01-27 13:44:26 +00:00
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
void ShiftImageTimesDialog::buttonClicked(QAbstractButton *button)
|
2014-01-27 13:44:26 +00:00
|
|
|
{
|
|
|
|
if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) {
|
2014-02-08 22:56:47 +00:00
|
|
|
m_amount = ui.timeEdit->time().hour() * 3600 + ui.timeEdit->time().minute() * 60;
|
2014-01-27 13:44:26 +00:00
|
|
|
if (ui.backwards->isChecked())
|
2014-02-08 22:56:47 +00:00
|
|
|
m_amount *= -1;
|
2014-01-27 13:44:26 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-02-13 15:43:55 +00:00
|
|
|
void ShiftImageTimesDialog::syncCameraClicked()
|
|
|
|
{
|
|
|
|
QPixmap picture;
|
2014-02-18 05:50:35 +00:00
|
|
|
QDateTime dcDateTime = QDateTime();
|
2014-02-13 15:43:55 +00:00
|
|
|
QStringList fileNames = QFileDialog::getOpenFileNames(this,
|
2014-07-11 17:39:03 +00:00
|
|
|
tr("Open image file"),
|
2014-02-18 23:26:36 +00:00
|
|
|
DiveListView::lastUsedImageDir(),
|
2014-07-11 17:39:03 +00:00
|
|
|
tr("Image files (*.jpg *.jpeg *.pnm *.tif *.tiff)"));
|
2014-02-13 15:43:55 +00:00
|
|
|
if (fileNames.isEmpty())
|
|
|
|
return;
|
|
|
|
|
|
|
|
picture.load(fileNames.at(0));
|
2014-02-19 10:34:54 +00:00
|
|
|
ui.displayDC->setEnabled(true);
|
2014-02-28 04:09:57 +00:00
|
|
|
QGraphicsScene *scene = new QGraphicsScene(this);
|
2014-02-13 15:43:55 +00:00
|
|
|
|
|
|
|
scene->addPixmap(picture.scaled(ui.DCImage->size()));
|
|
|
|
ui.DCImage->setScene(scene);
|
2015-03-14 14:35:47 +00:00
|
|
|
|
2015-04-24 12:19:41 +00:00
|
|
|
dcImageEpoch = picture_get_timestamp(fileNames.at(0).toUtf8().data());
|
2014-02-13 15:43:55 +00:00
|
|
|
dcDateTime.setTime_t(dcImageEpoch);
|
|
|
|
ui.dcTime->setDateTime(dcDateTime);
|
|
|
|
connect(ui.dcTime, SIGNAL(dateTimeChanged(const QDateTime &)), this, SLOT(dcDateTimeChanged(const QDateTime &)));
|
|
|
|
}
|
|
|
|
|
|
|
|
void ShiftImageTimesDialog::dcDateTimeChanged(const QDateTime &newDateTime)
|
|
|
|
{
|
|
|
|
if (!dcImageEpoch)
|
|
|
|
return;
|
|
|
|
setOffset(newDateTime.toTime_t() - dcImageEpoch);
|
|
|
|
}
|
|
|
|
|
2015-09-11 09:31:02 +00:00
|
|
|
void ShiftImageTimesDialog::matchAllImagesToggled(bool state)
|
|
|
|
{
|
|
|
|
matchAllImages = state;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool ShiftImageTimesDialog::matchAll()
|
|
|
|
{
|
|
|
|
return matchAllImages;
|
|
|
|
}
|
|
|
|
|
2015-03-17 12:38:45 +00:00
|
|
|
ShiftImageTimesDialog::ShiftImageTimesDialog(QWidget *parent, QStringList fileNames) : QDialog(parent), fileNames(fileNames), m_amount(0)
|
2014-01-27 13:44:26 +00:00
|
|
|
{
|
|
|
|
ui.setupUi(this);
|
2014-02-28 04:09:57 +00:00
|
|
|
connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
|
2014-02-13 15:43:55 +00:00
|
|
|
connect(ui.syncCamera, SIGNAL(clicked()), this, SLOT(syncCameraClicked()));
|
2015-03-14 16:44:24 +00:00
|
|
|
connect(ui.timeEdit, SIGNAL(timeChanged(const QTime &)), this, SLOT(timeEditChanged(const QTime &)));
|
2015-09-11 09:31:02 +00:00
|
|
|
connect(ui.matchAllImages, SIGNAL(toggled(bool)), this, SLOT(matchAllImagesToggled(bool)));
|
2014-02-28 04:09:57 +00:00
|
|
|
dcImageEpoch = (time_t)0;
|
2014-01-27 13:44:26 +00:00
|
|
|
}
|
2013-11-18 13:53:05 +00:00
|
|
|
|
2014-02-13 15:43:55 +00:00
|
|
|
time_t ShiftImageTimesDialog::amount() const
|
2014-02-08 22:56:47 +00:00
|
|
|
{
|
|
|
|
return m_amount;
|
|
|
|
}
|
|
|
|
|
2014-02-13 15:43:55 +00:00
|
|
|
void ShiftImageTimesDialog::setOffset(time_t offset)
|
2014-02-12 15:46:17 +00:00
|
|
|
{
|
|
|
|
if (offset >= 0) {
|
2014-02-19 10:34:54 +00:00
|
|
|
ui.forward->setChecked(true);
|
2014-02-12 15:46:17 +00:00
|
|
|
} else {
|
2014-02-19 10:34:54 +00:00
|
|
|
ui.backwards->setChecked(true);
|
2014-02-12 15:46:17 +00:00
|
|
|
offset *= -1;
|
|
|
|
}
|
2014-02-18 05:50:35 +00:00
|
|
|
ui.timeEdit->setTime(QTime(offset / 3600, (offset % 3600) / 60, offset % 60));
|
2014-02-12 15:46:17 +00:00
|
|
|
}
|
|
|
|
|
2015-03-14 16:44:24 +00:00
|
|
|
void ShiftImageTimesDialog::updateInvalid()
|
|
|
|
{
|
|
|
|
timestamp_t timestamp;
|
|
|
|
QDateTime time;
|
|
|
|
bool allValid = true;
|
|
|
|
ui.warningLabel->hide();
|
|
|
|
ui.invalidLabel->hide();
|
|
|
|
ui.invalidLabel->clear();
|
|
|
|
|
|
|
|
Q_FOREACH (const QString &fileName, fileNames) {
|
|
|
|
if (picture_check_valid(fileName.toUtf8().data(), m_amount))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
// We've found invalid image
|
2015-04-24 12:19:41 +00:00
|
|
|
timestamp = picture_get_timestamp(fileName.toUtf8().data());
|
2015-03-14 16:44:24 +00:00
|
|
|
dcImageEpoch = timestamp;
|
|
|
|
time.setTime_t(timestamp + m_amount);
|
|
|
|
ui.invalidLabel->setText(ui.invalidLabel->text() + fileName + " " + time.toString() + "\n");
|
|
|
|
allValid = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!allValid){
|
|
|
|
ui.warningLabel->show();
|
|
|
|
ui.invalidLabel->show();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void ShiftImageTimesDialog::timeEditChanged(const QTime &time)
|
|
|
|
{
|
|
|
|
m_amount = time.hour() * 3600 + time.minute() * 60;
|
|
|
|
if (ui.backwards->isChecked())
|
|
|
|
m_amount *= -1;
|
|
|
|
updateInvalid();
|
|
|
|
}
|
|
|
|
|
2015-04-24 15:10:55 +00:00
|
|
|
URLDialog::URLDialog(QWidget *parent) : QDialog(parent)
|
|
|
|
{
|
|
|
|
ui.setupUi(this);
|
|
|
|
QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
|
|
|
|
connect(close, SIGNAL(activated()), this, SLOT(close()));
|
|
|
|
QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
|
|
|
|
connect(quit, SIGNAL(activated()), parent, SLOT(close()));
|
|
|
|
}
|
|
|
|
|
|
|
|
QString URLDialog::url() const
|
|
|
|
{
|
|
|
|
return ui.urlField->toPlainText();
|
|
|
|
}
|
|
|
|
|
2013-09-27 15:52:01 +00:00
|
|
|
bool isGnome3Session()
|
|
|
|
{
|
|
|
|
#if defined(QT_OS_WIW) || defined(QT_OS_MAC)
|
|
|
|
return false;
|
|
|
|
#else
|
|
|
|
if (qApp->style()->objectName() != "gtk+")
|
|
|
|
return false;
|
|
|
|
QProcess p;
|
2014-02-28 04:09:57 +00:00
|
|
|
p.start("pidof", QStringList() << "gnome-shell");
|
2013-09-27 15:52:01 +00:00
|
|
|
p.waitForFinished(-1);
|
|
|
|
QString p_stdout = p.readAllStandardOutput();
|
|
|
|
return !p_stdout.isEmpty();
|
|
|
|
#endif
|
|
|
|
}
|
2014-06-19 16:42:49 +00:00
|
|
|
|
2014-06-19 18:42:05 +00:00
|
|
|
DateWidget::DateWidget(QWidget *parent) : QWidget(parent),
|
|
|
|
calendarWidget(new QCalendarWidget())
|
2014-06-19 16:42:49 +00:00
|
|
|
{
|
|
|
|
setDate(QDate::currentDate());
|
2014-09-17 22:39:49 +00:00
|
|
|
setMinimumSize(QSize(80, 64));
|
2014-06-19 18:52:30 +00:00
|
|
|
setFocusPolicy(Qt::StrongFocus);
|
2014-06-30 21:20:17 +00:00
|
|
|
calendarWidget->setWindowFlags(Qt::FramelessWindowHint);
|
2014-06-28 15:35:59 +00:00
|
|
|
calendarWidget->setFirstDayOfWeek(getLocale().firstDayOfWeek());
|
2014-06-28 15:41:10 +00:00
|
|
|
calendarWidget->setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader);
|
2014-06-19 18:42:05 +00:00
|
|
|
|
|
|
|
connect(calendarWidget, SIGNAL(activated(QDate)), calendarWidget, SLOT(hide()));
|
|
|
|
connect(calendarWidget, SIGNAL(clicked(QDate)), calendarWidget, SLOT(hide()));
|
|
|
|
connect(calendarWidget, SIGNAL(activated(QDate)), this, SLOT(setDate(QDate)));
|
|
|
|
connect(calendarWidget, SIGNAL(clicked(QDate)), this, SLOT(setDate(QDate)));
|
2014-06-30 21:20:17 +00:00
|
|
|
calendarWidget->installEventFilter(this);
|
2014-06-19 16:42:49 +00:00
|
|
|
}
|
|
|
|
|
2014-06-30 21:20:17 +00:00
|
|
|
bool DateWidget::eventFilter(QObject *object, QEvent *event)
|
|
|
|
{
|
2014-09-17 22:39:49 +00:00
|
|
|
if (event->type() == QEvent::FocusOut) {
|
2014-06-30 21:20:17 +00:00
|
|
|
calendarWidget->hide();
|
|
|
|
return true;
|
|
|
|
}
|
2014-09-17 22:39:49 +00:00
|
|
|
if (event->type() == QEvent::KeyPress) {
|
|
|
|
QKeyEvent *ev = static_cast<QKeyEvent *>(event);
|
|
|
|
if (ev->key() == Qt::Key_Escape) {
|
2014-06-30 21:28:13 +00:00
|
|
|
calendarWidget->hide();
|
|
|
|
}
|
|
|
|
}
|
2014-06-30 21:20:17 +00:00
|
|
|
return QObject::eventFilter(object, event);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-09-17 22:39:49 +00:00
|
|
|
void DateWidget::setDate(const QDate &date)
|
2014-06-19 16:42:49 +00:00
|
|
|
{
|
|
|
|
mDate = date;
|
|
|
|
update();
|
2014-06-19 18:42:05 +00:00
|
|
|
emit dateChanged(mDate);
|
2014-06-19 16:42:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
QDate DateWidget::date() const
|
|
|
|
{
|
|
|
|
return mDate;
|
|
|
|
}
|
|
|
|
|
2014-06-19 22:57:53 +00:00
|
|
|
void DateWidget::changeEvent(QEvent *event)
|
|
|
|
{
|
2014-09-17 22:39:49 +00:00
|
|
|
if (event->type() == QEvent::EnabledChange) {
|
2014-06-19 22:57:53 +00:00
|
|
|
update();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-06-26 23:14:44 +00:00
|
|
|
#define DATEWIDGETWIDTH 80
|
2014-06-19 16:42:49 +00:00
|
|
|
void DateWidget::paintEvent(QPaintEvent *event)
|
|
|
|
{
|
2014-09-17 22:39:49 +00:00
|
|
|
static QPixmap pix = QPixmap(":/calendar").scaled(DATEWIDGETWIDTH, 64);
|
2014-06-19 16:42:49 +00:00
|
|
|
|
|
|
|
QPainter painter(this);
|
2014-06-19 21:45:26 +00:00
|
|
|
|
2014-09-17 22:39:49 +00:00
|
|
|
painter.drawPixmap(QPoint(0, 0), isEnabled() ? pix : QPixmap::fromImage(grayImage(pix.toImage())));
|
2014-06-19 16:42:49 +00:00
|
|
|
|
|
|
|
QString month = mDate.toString("MMM");
|
|
|
|
QString year = mDate.toString("yyyy");
|
|
|
|
QString day = mDate.toString("dd");
|
|
|
|
|
2014-06-26 23:14:44 +00:00
|
|
|
QFont font = QFont("monospace", 10);
|
2014-06-19 16:42:49 +00:00
|
|
|
QFontMetrics metrics = QFontMetrics(font);
|
|
|
|
painter.setFont(font);
|
|
|
|
painter.setPen(QPen(QBrush(Qt::white), 0));
|
|
|
|
painter.setBrush(QBrush(Qt::white));
|
2014-06-26 23:14:44 +00:00
|
|
|
painter.drawText(QPoint(6, metrics.height() + 1), month);
|
|
|
|
painter.drawText(QPoint(DATEWIDGETWIDTH - metrics.width(year) - 6, metrics.height() + 1), year);
|
2014-06-19 16:42:49 +00:00
|
|
|
|
|
|
|
font.setPointSize(14);
|
|
|
|
metrics = QFontMetrics(font);
|
2014-09-17 22:39:49 +00:00
|
|
|
painter.setPen(QPen(QBrush(Qt::black), 0));
|
2014-06-19 16:42:49 +00:00
|
|
|
painter.setBrush(Qt::black);
|
|
|
|
painter.setFont(font);
|
2014-06-26 23:14:44 +00:00
|
|
|
painter.drawText(QPoint(DATEWIDGETWIDTH / 2 - metrics.width(day) / 2, 45), day);
|
2014-06-19 18:52:30 +00:00
|
|
|
|
2014-06-19 21:11:44 +00:00
|
|
|
if (hasFocus()) {
|
|
|
|
QStyleOptionFocusRect option;
|
|
|
|
option.initFrom(this);
|
|
|
|
option.backgroundColor = palette().color(QPalette::Background);
|
|
|
|
style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this);
|
|
|
|
}
|
2014-06-19 18:42:05 +00:00
|
|
|
}
|
2014-06-19 16:42:49 +00:00
|
|
|
|
2014-06-19 18:42:05 +00:00
|
|
|
void DateWidget::mousePressEvent(QMouseEvent *event)
|
|
|
|
{
|
2014-06-30 21:31:29 +00:00
|
|
|
calendarWidget->setSelectedDate(mDate);
|
2014-06-19 18:42:05 +00:00
|
|
|
calendarWidget->move(event->globalPos());
|
|
|
|
calendarWidget->show();
|
2014-06-30 21:20:17 +00:00
|
|
|
calendarWidget->raise();
|
|
|
|
calendarWidget->setFocus();
|
2014-06-19 16:42:49 +00:00
|
|
|
}
|
2014-06-19 18:42:05 +00:00
|
|
|
|
2014-06-19 18:52:30 +00:00
|
|
|
void DateWidget::focusInEvent(QFocusEvent *event)
|
|
|
|
{
|
|
|
|
setFocus();
|
|
|
|
QWidget::focusInEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
void DateWidget::focusOutEvent(QFocusEvent *event)
|
|
|
|
{
|
|
|
|
QWidget::focusOutEvent(event);
|
2014-06-19 18:58:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DateWidget::keyPressEvent(QKeyEvent *event)
|
|
|
|
{
|
2014-09-17 22:39:49 +00:00
|
|
|
if (event->key() == Qt::Key_Return ||
|
|
|
|
event->key() == Qt::Key_Enter ||
|
|
|
|
event->key() == Qt::Key_Space) {
|
|
|
|
calendarWidget->move(mapToGlobal(QPoint(0, 64)));
|
2014-06-19 18:58:27 +00:00
|
|
|
calendarWidget->show();
|
|
|
|
event->setAccepted(true);
|
2014-09-17 22:39:49 +00:00
|
|
|
} else {
|
2014-06-19 18:58:27 +00:00
|
|
|
QWidget::keyPressEvent(event);
|
|
|
|
}
|
|
|
|
}
|
2014-08-16 15:32:23 +00:00
|
|
|
|
|
|
|
#define COMPONENT_FROM_UI(_component) what->_component = ui._component->isChecked()
|
|
|
|
#define UI_FROM_COMPONENT(_component) ui._component->setChecked(what->_component)
|
|
|
|
|
2014-09-17 22:39:49 +00:00
|
|
|
DiveComponentSelection::DiveComponentSelection(QWidget *parent, struct dive *target, struct dive_components *_what) : targetDive(target)
|
2014-08-16 15:32:23 +00:00
|
|
|
{
|
|
|
|
ui.setupUi(this);
|
|
|
|
what = _what;
|
2015-02-13 04:58:03 +00:00
|
|
|
UI_FROM_COMPONENT(divesite);
|
2014-08-16 15:32:23 +00:00
|
|
|
UI_FROM_COMPONENT(divemaster);
|
|
|
|
UI_FROM_COMPONENT(buddy);
|
|
|
|
UI_FROM_COMPONENT(rating);
|
|
|
|
UI_FROM_COMPONENT(visibility);
|
|
|
|
UI_FROM_COMPONENT(notes);
|
|
|
|
UI_FROM_COMPONENT(suit);
|
2014-08-17 00:35:44 +00:00
|
|
|
UI_FROM_COMPONENT(tags);
|
2014-08-16 15:32:23 +00:00
|
|
|
UI_FROM_COMPONENT(cylinders);
|
|
|
|
UI_FROM_COMPONENT(weights);
|
|
|
|
connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
|
|
|
|
QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
|
|
|
|
connect(close, SIGNAL(activated()), this, SLOT(close()));
|
|
|
|
QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
|
|
|
|
connect(quit, SIGNAL(activated()), parent, SLOT(close()));
|
|
|
|
}
|
|
|
|
|
|
|
|
void DiveComponentSelection::buttonClicked(QAbstractButton *button)
|
|
|
|
{
|
|
|
|
if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) {
|
2015-02-13 04:58:03 +00:00
|
|
|
COMPONENT_FROM_UI(divesite);
|
2014-08-16 15:32:23 +00:00
|
|
|
COMPONENT_FROM_UI(divemaster);
|
|
|
|
COMPONENT_FROM_UI(buddy);
|
|
|
|
COMPONENT_FROM_UI(rating);
|
|
|
|
COMPONENT_FROM_UI(visibility);
|
|
|
|
COMPONENT_FROM_UI(notes);
|
|
|
|
COMPONENT_FROM_UI(suit);
|
2014-08-17 00:35:44 +00:00
|
|
|
COMPONENT_FROM_UI(tags);
|
2014-08-16 15:32:23 +00:00
|
|
|
COMPONENT_FROM_UI(cylinders);
|
|
|
|
COMPONENT_FROM_UI(weights);
|
2014-08-17 00:33:09 +00:00
|
|
|
selective_copy_dive(&displayed_dive, targetDive, *what, true);
|
2014-08-16 15:32:23 +00:00
|
|
|
}
|
|
|
|
}
|
2014-09-17 17:17:41 +00:00
|
|
|
|
2014-09-17 22:39:49 +00:00
|
|
|
TagFilter::TagFilter(QWidget *parent) : QWidget(parent)
|
2014-09-17 17:17:41 +00:00
|
|
|
{
|
|
|
|
ui.setupUi(this);
|
2014-10-31 17:40:57 +00:00
|
|
|
ui.label->setText(tr("Tags: "));
|
2015-02-17 11:31:23 +00:00
|
|
|
#if QT_VERSION >= 0x050200
|
2014-10-31 18:01:28 +00:00
|
|
|
ui.filterInternalList->setClearButtonEnabled(true);
|
|
|
|
#endif
|
2014-09-17 18:45:18 +00:00
|
|
|
QSortFilterProxyModel *filter = new QSortFilterProxyModel();
|
|
|
|
filter->setSourceModel(TagFilterModel::instance());
|
2014-12-10 04:23:12 +00:00
|
|
|
filter->setFilterCaseSensitivity(Qt::CaseInsensitive);
|
2014-10-31 17:40:57 +00:00
|
|
|
connect(ui.filterInternalList, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
|
|
|
|
ui.filterList->setModel(filter);
|
2014-09-17 17:17:41 +00:00
|
|
|
}
|
2014-10-01 19:23:02 +00:00
|
|
|
|
|
|
|
void TagFilter::showEvent(QShowEvent *event)
|
|
|
|
{
|
2014-10-31 17:27:33 +00:00
|
|
|
MultiFilterSortModel::instance()->addFilterModel(TagFilterModel::instance());
|
2014-10-01 19:23:02 +00:00
|
|
|
QWidget::showEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TagFilter::hideEvent(QHideEvent *event)
|
|
|
|
{
|
2014-10-31 17:27:33 +00:00
|
|
|
MultiFilterSortModel::instance()->removeFilterModel(TagFilterModel::instance());
|
2014-10-01 19:23:02 +00:00
|
|
|
QWidget::hideEvent(event);
|
|
|
|
}
|
2014-10-31 17:22:21 +00:00
|
|
|
|
2014-10-31 18:49:52 +00:00
|
|
|
BuddyFilter::BuddyFilter(QWidget *parent) : QWidget(parent)
|
|
|
|
{
|
|
|
|
ui.setupUi(this);
|
2014-10-31 19:13:09 +00:00
|
|
|
ui.label->setText(tr("Person: "));
|
2014-11-01 00:07:15 +00:00
|
|
|
ui.label->setToolTip(tr("Searches for buddies and divemasters"));
|
2015-02-17 11:31:23 +00:00
|
|
|
#if QT_VERSION >= 0x050200
|
2014-10-31 18:49:52 +00:00
|
|
|
ui.filterInternalList->setClearButtonEnabled(true);
|
|
|
|
#endif
|
|
|
|
QSortFilterProxyModel *filter = new QSortFilterProxyModel();
|
|
|
|
filter->setSourceModel(BuddyFilterModel::instance());
|
2014-12-10 04:23:12 +00:00
|
|
|
filter->setFilterCaseSensitivity(Qt::CaseInsensitive);
|
2014-10-31 18:49:52 +00:00
|
|
|
connect(ui.filterInternalList, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
|
|
|
|
ui.filterList->setModel(filter);
|
|
|
|
}
|
|
|
|
|
|
|
|
void BuddyFilter::showEvent(QShowEvent *event)
|
|
|
|
{
|
|
|
|
MultiFilterSortModel::instance()->addFilterModel(BuddyFilterModel::instance());
|
|
|
|
QWidget::showEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
void BuddyFilter::hideEvent(QHideEvent *event)
|
|
|
|
{
|
|
|
|
MultiFilterSortModel::instance()->removeFilterModel(BuddyFilterModel::instance());
|
|
|
|
QWidget::hideEvent(event);
|
|
|
|
}
|
|
|
|
|
2014-10-31 19:45:39 +00:00
|
|
|
LocationFilter::LocationFilter(QWidget *parent) : QWidget(parent)
|
|
|
|
{
|
|
|
|
ui.setupUi(this);
|
|
|
|
ui.label->setText(tr("Location: "));
|
2015-02-17 11:31:23 +00:00
|
|
|
#if QT_VERSION >= 0x050200
|
2014-10-31 19:45:39 +00:00
|
|
|
ui.filterInternalList->setClearButtonEnabled(true);
|
|
|
|
#endif
|
|
|
|
QSortFilterProxyModel *filter = new QSortFilterProxyModel();
|
2014-10-31 19:48:44 +00:00
|
|
|
filter->setSourceModel(LocationFilterModel::instance());
|
2014-12-10 04:23:12 +00:00
|
|
|
filter->setFilterCaseSensitivity(Qt::CaseInsensitive);
|
2014-10-31 19:45:39 +00:00
|
|
|
connect(ui.filterInternalList, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
|
|
|
|
ui.filterList->setModel(filter);
|
|
|
|
}
|
|
|
|
|
|
|
|
void LocationFilter::showEvent(QShowEvent *event)
|
|
|
|
{
|
|
|
|
MultiFilterSortModel::instance()->addFilterModel(LocationFilterModel::instance());
|
|
|
|
QWidget::showEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
void LocationFilter::hideEvent(QHideEvent *event)
|
|
|
|
{
|
|
|
|
MultiFilterSortModel::instance()->removeFilterModel(LocationFilterModel::instance());
|
|
|
|
QWidget::hideEvent(event);
|
|
|
|
}
|
2014-11-11 18:07:45 +00:00
|
|
|
|
2014-11-13 19:32:17 +00:00
|
|
|
SuitFilter::SuitFilter(QWidget *parent) : QWidget(parent)
|
|
|
|
{
|
|
|
|
ui.setupUi(this);
|
|
|
|
ui.label->setText(tr("Suits: "));
|
2015-02-17 11:31:23 +00:00
|
|
|
#if QT_VERSION >= 0x050200
|
2014-11-13 19:32:17 +00:00
|
|
|
ui.filterInternalList->setClearButtonEnabled(true);
|
|
|
|
#endif
|
|
|
|
QSortFilterProxyModel *filter = new QSortFilterProxyModel();
|
|
|
|
filter->setSourceModel(SuitsFilterModel::instance());
|
2014-12-10 04:23:12 +00:00
|
|
|
filter->setFilterCaseSensitivity(Qt::CaseInsensitive);
|
2014-11-13 19:32:17 +00:00
|
|
|
connect(ui.filterInternalList, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
|
|
|
|
ui.filterList->setModel(filter);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SuitFilter::showEvent(QShowEvent *event)
|
|
|
|
{
|
|
|
|
MultiFilterSortModel::instance()->addFilterModel(SuitsFilterModel::instance());
|
|
|
|
QWidget::showEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SuitFilter::hideEvent(QHideEvent *event)
|
|
|
|
{
|
|
|
|
MultiFilterSortModel::instance()->removeFilterModel(SuitsFilterModel::instance());
|
|
|
|
QWidget::hideEvent(event);
|
|
|
|
}
|
|
|
|
|
2014-11-16 16:04:06 +00:00
|
|
|
MultiFilter::MultiFilter(QWidget *parent) : QWidget(parent)
|
2014-10-31 17:22:21 +00:00
|
|
|
{
|
2014-12-18 07:47:52 +00:00
|
|
|
ui.setupUi(this);
|
2014-11-16 16:04:06 +00:00
|
|
|
|
2014-11-11 19:06:28 +00:00
|
|
|
QWidget *expandedWidget = new QWidget();
|
2014-10-31 17:22:21 +00:00
|
|
|
QHBoxLayout *l = new QHBoxLayout();
|
2014-11-11 18:07:45 +00:00
|
|
|
|
2014-12-18 18:47:00 +00:00
|
|
|
TagFilter *tagFilter = new TagFilter(this);
|
2014-11-03 19:39:31 +00:00
|
|
|
int minimumHeight = tagFilter->ui.filterInternalList->height() +
|
2014-11-16 16:04:06 +00:00
|
|
|
tagFilter->ui.verticalLayout->spacing() * tagFilter->ui.verticalLayout->count();
|
2014-11-03 19:39:31 +00:00
|
|
|
|
|
|
|
QListView *dummyList = new QListView();
|
|
|
|
QStringListModel *dummy = new QStringListModel(QStringList() << "Dummy Text");
|
|
|
|
dummyList->setModel(dummy);
|
|
|
|
|
2014-12-18 07:47:52 +00:00
|
|
|
connect(ui.close, SIGNAL(clicked(bool)), this, SLOT(closeFilter()));
|
|
|
|
connect(ui.clear, SIGNAL(clicked(bool)), MultiFilterSortModel::instance(), SLOT(clearFilter()));
|
|
|
|
connect(ui.maximize, SIGNAL(clicked(bool)), this, SLOT(adjustHeight()));
|
2014-11-16 16:04:06 +00:00
|
|
|
|
2014-11-03 19:39:31 +00:00
|
|
|
l->addWidget(tagFilter);
|
2014-10-31 18:49:52 +00:00
|
|
|
l->addWidget(new BuddyFilter());
|
2014-10-31 19:48:44 +00:00
|
|
|
l->addWidget(new LocationFilter());
|
2014-11-13 19:32:17 +00:00
|
|
|
l->addWidget(new SuitFilter());
|
2014-10-31 21:28:39 +00:00
|
|
|
l->setContentsMargins(0, 0, 0, 0);
|
2014-11-03 19:39:31 +00:00
|
|
|
l->setSpacing(0);
|
2014-11-11 19:06:28 +00:00
|
|
|
expandedWidget->setLayout(l);
|
2014-11-16 16:04:06 +00:00
|
|
|
|
2014-12-18 07:47:52 +00:00
|
|
|
ui.scrollArea->setWidget(expandedWidget);
|
2014-11-11 19:06:28 +00:00
|
|
|
expandedWidget->resize(expandedWidget->width(), minimumHeight + dummyList->sizeHintForRow(0) * 5 );
|
2014-12-18 07:47:52 +00:00
|
|
|
ui.scrollArea->setMinimumHeight(expandedWidget->height() + 5);
|
2014-11-03 19:39:31 +00:00
|
|
|
|
2014-11-16 16:04:06 +00:00
|
|
|
connect(MultiFilterSortModel::instance(), SIGNAL(filterFinished()), this, SLOT(filterFinished()));
|
|
|
|
}
|
|
|
|
|
|
|
|
void MultiFilter::filterFinished()
|
|
|
|
{
|
2014-12-18 07:47:52 +00:00
|
|
|
ui.filterText->setText(tr("Filter shows %1 (of %2) dives").arg(MultiFilterSortModel::instance()->divesDisplayed).arg(dive_table.nr));
|
2014-11-16 16:04:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void MultiFilter::adjustHeight()
|
|
|
|
{
|
2014-12-18 07:47:52 +00:00
|
|
|
ui.scrollArea->setVisible(!ui.scrollArea->isVisible());
|
2014-10-31 17:22:21 +00:00
|
|
|
}
|
2014-11-13 21:45:32 +00:00
|
|
|
|
|
|
|
void MultiFilter::closeFilter()
|
|
|
|
{
|
|
|
|
MultiFilterSortModel::instance()->clearFilter();
|
|
|
|
hide();
|
|
|
|
}
|