Continues migration with DDS, Common
This commit is contained in:
1 parent
9b15cee841
commit
fa48db111e
668 files changed
+111841
-2
No files matched your search
+182
@@ -0,0 +1,182 @@
|
||||
#include "track_resize_handler.h"
|
||||
#include "track_entry.h"
|
||||
#include "track_widget.h"
|
||||
#include "track_content_widget.h"
|
||||
#include "filter_track_widget.h"
|
||||
#include "filter_background_widget.h"
|
||||
|
||||
#include "tools.h"
|
||||
|
||||
#include <LtsWidgets/lts_message_dialog.h>
|
||||
|
||||
#include <QMouseEvent>
|
||||
#include <QDebug>
|
||||
|
||||
|
||||
namespace LtsScriptTimeline
|
||||
{
|
||||
void ResizeHandler::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
if (event->buttons() != Qt::LeftButton || !m_possible)
|
||||
return;
|
||||
|
||||
TrackEntry *te = m_trackContentWidget->getTrackEntryOnPos(event->globalPos());
|
||||
|
||||
if (te == nullptr)
|
||||
return;
|
||||
|
||||
m_oldLength = te->m_length;
|
||||
m_resizing = true;
|
||||
}
|
||||
|
||||
|
||||
void ResizeHandler::mouseReleaseEvent(QMouseEvent *)
|
||||
{
|
||||
m_resizing = false;
|
||||
|
||||
if (!m_trackContentWidget->m_mainSelected)
|
||||
return;
|
||||
|
||||
QVector<TrackEntry *> vecPreviewTrackEntries = {m_trackContentWidget->m_mainSelected};
|
||||
|
||||
bool msg = true;
|
||||
for (TrackContentWidget *tcw : qAsConst(m_tcwCorresponding))
|
||||
{
|
||||
if (TrackContentWidget::checkForParallelTopics(tcw, vecPreviewTrackEntries, m_trackContentWidget->m_mainSelected->m_startTime))
|
||||
{
|
||||
if (msg)
|
||||
{
|
||||
LtsWidgets::LtsMessageDialog::showMessage(m_trackContentWidget, TrackContentWidget::parallelError(), QObject::tr("Error"));
|
||||
msg = false;
|
||||
}
|
||||
m_trackContentWidget->m_mainSelected->m_length = m_oldLength;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool ResizeHandler::isCollision(int newLength) const
|
||||
{
|
||||
int startTime = m_trackContentWidget->m_mainSelected->m_startTime;
|
||||
int endTime = startTime + newLength;
|
||||
|
||||
|
||||
for (auto i = m_trackContentWidget->m_entryList.constBegin(); i != m_trackContentWidget->m_entryList.constEnd(); ++i)
|
||||
{
|
||||
const TrackEntry *trackEntry = *i;
|
||||
|
||||
if (!trackEntry || trackEntry == m_trackContentWidget->m_mainSelected)
|
||||
continue;
|
||||
|
||||
if (LtsScriptTimeline::isCollision2(startTime, endTime, trackEntry))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const QVector<FilterTrackWidget *> &filterTrackWidgets = m_trackContentWidget->trackWidget()->filterLines();
|
||||
for (const FilterTrackWidget *filterTrackWidget : qAsConst(filterTrackWidgets))
|
||||
{
|
||||
for (auto iFilterContentWidget = filterTrackWidget->fbw()->filterContentWidgets().begin(); iFilterContentWidget != filterTrackWidget->fbw()->filterContentWidgets().end(); ++iFilterContentWidget)
|
||||
{
|
||||
int filterContentWidgetTopicId = iFilterContentWidget.key();
|
||||
if (m_trackContentWidget->m_mainSelected->m_topicId != filterContentWidgetTopicId)
|
||||
continue;
|
||||
|
||||
TrackContentWidget *filterContentWidget = iFilterContentWidget.value();
|
||||
for (auto iTrackEntry = filterContentWidget->m_entryList.constBegin(); iTrackEntry != filterContentWidget->m_entryList.end(); ++iTrackEntry)
|
||||
{
|
||||
const TrackEntry *trackEntry = *iTrackEntry;
|
||||
|
||||
if (!trackEntry || trackEntry == m_trackContentWidget->m_mainSelected)
|
||||
continue;
|
||||
|
||||
if (endTime < startTime + trackEntry->m_startTime + trackEntry->m_length)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool ResizeHandler::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
QPoint pos = m_trackContentWidget->mapFromGlobal(event->globalPos());
|
||||
int posX = pos.x();
|
||||
int cursorTime = m_trackContentWidget->m_tools->getTime(posX, m_trackContentWidget->m_isFilter);
|
||||
|
||||
if (m_resizing && m_trackContentWidget->m_mainSelected)
|
||||
{
|
||||
int newLength = cursorTime - m_trackContentWidget->m_mainSelected->m_startTime;
|
||||
int cursorY = pos.y();
|
||||
|
||||
if (cursorY < 0 || cursorY > m_trackContentWidget->height() || newLength < 1 || (m_mainTeLength != -1 && newLength > m_mainTeLength) || isCollision(newLength))
|
||||
{
|
||||
newLength = m_oldLength;
|
||||
m_trackContentWidget->setCursor(Qt::ForbiddenCursor);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_trackContentWidget->setCursor(m_cursor);
|
||||
}
|
||||
|
||||
m_trackContentWidget->m_mainSelected->m_length = newLength;
|
||||
m_trackContentWidget->update();
|
||||
emit m_trackContentWidget->signalChangesMade();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
TrackEntry *te = m_trackContentWidget->getTrackEntryOnPos(event->globalPos());
|
||||
|
||||
if (m_trackContentWidget->m_isFilter)
|
||||
{
|
||||
TrackEntry *mainTe = m_trackContentWidget->getParentTopicOfFilter(te);
|
||||
|
||||
if (mainTe != nullptr)
|
||||
m_mainTeLength = mainTe->m_length;
|
||||
else
|
||||
m_mainTeLength = -1;
|
||||
}
|
||||
|
||||
|
||||
if (te && (te->m_type == LtsScriptTimeline::TrackEntryType::Audio ||
|
||||
te->m_type == LtsScriptTimeline::TrackEntryType::Video))
|
||||
{
|
||||
m_possible = false;
|
||||
m_trackContentWidget->setCursor(m_cursor = Qt::ArrowCursor);
|
||||
m_trackContentWidget->update();
|
||||
}
|
||||
else if (te && m_trackContentWidget->m_mainSelected && te == m_trackContentWidget->m_mainSelected && m_trackContentWidget->m_selected.count() == 1
|
||||
&& (cursorTime >= (m_trackContentWidget->m_mainSelected->m_startTime + m_trackContentWidget->m_mainSelected->m_length - 4)
|
||||
&& cursorTime <= (m_trackContentWidget->m_mainSelected->m_startTime + m_trackContentWidget->m_mainSelected->m_length)))
|
||||
{
|
||||
m_possible = true;
|
||||
m_trackContentWidget->setCursor(m_cursor = Qt::SizeHorCursor);
|
||||
m_trackContentWidget->update();
|
||||
}
|
||||
else if (!m_resizing)
|
||||
{
|
||||
m_possible = false;
|
||||
m_trackContentWidget->setCursor(m_cursor = Qt::ArrowCursor);
|
||||
m_trackContentWidget->update();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void ResizeHandler::keyPressEvent(QKeyEvent *event)
|
||||
{
|
||||
if (m_trackContentWidget->m_mainSelected && event->key() == Qt::Key_Escape && m_resizing)
|
||||
{
|
||||
m_trackContentWidget->m_mainSelected->m_length = m_oldLength;
|
||||
m_resizing = false;
|
||||
m_possible = false;
|
||||
m_trackContentWidget->setCursor(Qt::ArrowCursor);
|
||||
m_trackContentWidget->update();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user