##// END OF EJS Templates
Some added fake specro and switched to new spwc getting rid of DataFrames...
Some added fake specro and switched to new spwc getting rid of DataFrames Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1462:66c20669d3a7
r1464:dce5077d4598
Show More
TimeWidget.cpp
158 lines | 3.9 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(std::move(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);
}