##// END OF EJS Templates
Spectrogram segfault should be fixed now, added ability to provide Spectrogram min sampling time to avoid computation when possible...
Spectrogram segfault should be fixed now, added ability to provide Spectrogram min sampling time to avoid computation when possible Spectrogram visu is still broken... Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1467:da44adcd99e4
r1467:da44adcd99e4
Show More
TimeWidget.cpp
158 lines | 3.8 KiB | text/x-c | CppLexer
#include "TimeWidget/TimeWidget.h"
#include "ui_TimeWidget.h"
#include <Common/DateUtils.h>
#include <Common/MimeTypesDef.h>
#include <DragAndDrop/DragDropGuiController.h>
#include <SqpApplication.h>
#include <Time/TimeController.h>
#include <QDrag>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>
#include <QStyle>
struct TimeWidget::TimeWidgetPrivate
{
explicit TimeWidgetPrivate() {}
QPoint m_DragStartPosition;
};
TimeWidget::TimeWidget(QWidget* parent)
: QWidget { parent }
, ui { new Ui::TimeWidget }
, impl { spimpl::make_unique_impl<TimeWidgetPrivate>() }
{
ui->setupUi(this);
// Connection
connect(ui->startDateTimeEdit, &QDateTimeEdit::dateTimeChanged, this,
&TimeWidget::onTimeUpdateRequested);
connect(ui->endDateTimeEdit, &QDateTimeEdit::dateTimeChanged, this,
&TimeWidget::onTimeUpdateRequested);
// Initialisation
auto endDateTime = QDateTime::currentDateTimeUtc();
auto startDateTime = endDateTime.addSecs(-3600); // one hour before
ui->startDateTimeEdit->setDateTime(startDateTime);
ui->endDateTimeEdit->setDateTime(endDateTime);
auto dateTime = DateTimeRange { DateUtils::secondsSinceEpoch(startDateTime),
DateUtils::secondsSinceEpoch(endDateTime) };
sqpApp->timeController().setDateTimeRange(dateTime);
}
TimeWidget::~TimeWidget()
{
delete ui;
}
void TimeWidget::setTimeRange(DateTimeRange time)
{
auto startDateTime = DateUtils::dateTime(time.m_TStart);
auto endDateTime = DateUtils::dateTime(time.m_TEnd);
ui->startDateTimeEdit->setDateTime(startDateTime);
ui->endDateTimeEdit->setDateTime(endDateTime);
}
DateTimeRange TimeWidget::timeRange() const
{
return DateTimeRange { DateUtils::secondsSinceEpoch(ui->startDateTimeEdit->dateTime()),
DateUtils::secondsSinceEpoch(ui->endDateTimeEdit->dateTime()) };
}
void TimeWidget::onTimeUpdateRequested()
{
auto dateTime = timeRange();
emit timeUpdated(dateTime);
sqpApp->timeController().setDateTimeRange(dateTime);
}
void TimeWidget::dragEnterEvent(QDragEnterEvent* event)
{
if (event->mimeData()->hasFormat(MIME_TYPE_TIME_RANGE))
{
event->acceptProposedAction();
setStyleSheet("QDateTimeEdit{background-color: #BBD5EE; border:2px solid #2A7FD4}");
}
else
{
event->ignore();
}
}
void TimeWidget::dragLeaveEvent(QDragLeaveEvent* event)
{
setStyleSheet(QString {});
}
void TimeWidget::dropEvent(QDropEvent* event)
{
if (event->mimeData()->hasFormat(MIME_TYPE_TIME_RANGE))
{
auto mimeData = event->mimeData()->data(MIME_TYPE_TIME_RANGE);
auto timeRange = TimeController::timeRangeForMimeData(mimeData);
setTimeRange(timeRange);
}
else
{
event->ignore();
}
setStyleSheet(QString {});
}
void TimeWidget::mousePressEvent(QMouseEvent* event)
{
if (event->button() == Qt::LeftButton)
{
impl->m_DragStartPosition = event->pos();
}
QWidget::mousePressEvent(event);
}
void TimeWidget::mouseMoveEvent(QMouseEvent* event)
{
if (!(event->buttons() & Qt::LeftButton))
{
return;
}
if ((event->pos() - impl->m_DragStartPosition).manhattanLength()
< QApplication::startDragDistance())
{
return;
}
// Note: The management of the drag object is done by Qt
auto drag = new QDrag { this };
auto mimeData = new QMimeData;
auto timeData = TimeController::mimeDataForTimeRange(timeRange());
mimeData->setData(MIME_TYPE_TIME_RANGE, timeData);
drag->setMimeData(mimeData);
auto pixmap = QPixmap { ":/icones/time.png" };
drag->setPixmap(pixmap.scaledToWidth(22));
sqpApp->dragDropGuiController().resetDragAndDrop();
// Note: The exec() is blocking on windows but not on linux and macOS
drag->exec(Qt::MoveAction | Qt::CopyAction);
QWidget::mouseMoveEvent(event);
}