Files
qt6-migration-pipeline/Lts/Common/LtsScriptTimeline/track_select_handler.cpp
T

183 lines
5.5 KiB
C++
Executable File

#include "track_select_handler.h"
#include "track_content_widget.h"
#include "track_entry.h"
#include "tools.h"
#include <QKeyEvent>
#include <QMenu>
#include <QInputDialog>
#include <QCoreApplication>
#include <QGuiApplication>
#include <QMouseEvent>
#include <QDebug>
namespace LtsScriptTimeline
{
void SelectHandler::slotSetDescription()
{
if (m_pressedEntry == nullptr)
return;
bool ok;
QString iniDescription = m_pressedEntry->m_description;
QString text = QInputDialog::getText(tcw,
tr("Operator Application"),
tr("Topic Description:"), QLineEdit::Normal,
iniDescription, &ok, Qt::Popup | Qt::WindowTitleHint | Qt::CustomizeWindowHint);
if (ok)
{
m_pressedEntry->m_description = text;
emit tcw->signalChangesMade();
}
}
void SelectHandler::mouseDoubleClick(QMouseEvent *event)
{
if (m_pressedEntry != nullptr
&& tcw->m_selected.count() == 1
&& !tcw->m_isMultiLineMultiSelectionMode
&& event->buttons() == Qt::LeftButton)
emit tcw->signalEditEntry(m_pressedEntry->m_topicId);
}
void SelectHandler::mousePressEvent(QMouseEvent *event)
{
if (event->buttons() == Qt::LeftButton)
{
m_pressedEntry = nullptr;
QPoint clickedPos = tcw->mapFromGlobal(event->globalPos());
int clickedPosY = clickedPos.y();
int clickedPosX = clickedPos.x();
if (clickedPosY < 0 || clickedPosY > tcw->height())
return;
int clickedTime = tcw->m_tools->getTime(clickedPosX, tcw->m_isFilter);
m_pressedEntry = tcw->getTrackEntryAt(clickedTime);
}
else if (event->buttons() == Qt::RightButton)
{
QMenu *contextMenu = new QMenu(tcw);
contextMenu->setAttribute(Qt::WA_DeleteOnClose);
contextMenu->addSection(tr("All tracks"));
{
QAction *action = new QAction(tr("Set topic description"), tcw);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_D));
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
action->setShortcutVisibleInContextMenu(true);
#endif
action->setIcon(QIcon(QStringLiteral("icon:document-edit.svg")));
action->setEnabled(m_pressedEntry);
if (!m_pressedEntry)
action->setToolTip(tr("Right click directly on a single Topic to edit its description."));
connect(action, &QAction::triggered, this, &SelectHandler::slotSetDescription);
contextMenu->addAction(action);
}
{
QAction *action = new QAction(tr("Remove selected Topic(s)"), tcw);
action->setShortcut(QKeySequence(Qt::Key_Delete));
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
action->setShortcutVisibleInContextMenu(true);
#endif
action->setIcon(QIcon(QStringLiteral("icon:delete.svg")));
connect(action, &QAction::triggered, tcw, &TrackContentWidget::signalDeleteSelectedTopics);
contextMenu->addAction(action);
}
contextMenu->addSection(tr("Main track only"));
{
QAction *action = new QAction(tr("Select all topics"), tcw);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A));
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
action->setShortcutVisibleInContextMenu(true);
#endif
action->setIcon(QIcon(QStringLiteral("icon:selection_rec.svg")));
connect(action, &QAction::triggered, tcw, &TrackContentWidget::signalSelectAllGlobal);
contextMenu->addAction(action);
}
{
QAction *action = new QAction(tr("Cut selected topic(s)"), tcw);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_X));
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
action->setShortcutVisibleInContextMenu(true);
#endif
action->setIcon(QIcon(QStringLiteral("icon:edit-cut.svg")));
connect(action, &QAction::triggered, tcw, &TrackContentWidget::signalCutTopics);
contextMenu->addAction(action);
}
{
QAction *action = new QAction(tr("Copy selected topic(s)"), tcw);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C));
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
action->setShortcutVisibleInContextMenu(true);
#endif
action->setIcon(QIcon(QStringLiteral("icon:edit-copy.svg")));
connect(action, &QAction::triggered, tcw, &TrackContentWidget::signalCopyTopics);
contextMenu->addAction(action);
}
{
QAction *action = new QAction(tr("Paste topic(s) at indicator position"), tcw);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_V));
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
action->setShortcutVisibleInContextMenu(true);
#endif
action->setIcon(QIcon(QStringLiteral("icon:edit-paste.svg")));
connect(action, &QAction::triggered, tcw, &TrackContentWidget::signalPasteTopics);
contextMenu->addAction(action);
}
contextMenu->popup(event->globalPos());
}
}
void SelectHandler::mouseReleaseEvent(QMouseEvent *event)
{
QPoint clickedPos = tcw->mapFromGlobal(event->globalPos());
int clickedPosX = clickedPos.x();
int clickedTime = tcw->m_tools->getTime(clickedPosX, tcw->m_isFilter);
TrackEntry *releasedEntry = tcw->getTrackEntryAt(clickedTime);
if (!QGuiApplication::keyboardModifiers().testFlag(Qt::ControlModifier) && (!m_pressedEntry || !releasedEntry))
{
emit tcw->signalUnselectAll();
emit tcw->signalTrackEntrySelectionChanged(nullptr);
}
else
{
if (m_pressedEntry == releasedEntry)
tcw->selectEntry(releasedEntry);
}
}
void SelectHandler::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Escape)
{
m_pressedEntry = nullptr;
emit tcw->signalUnselectAll();
emit tcw->signalTrackEntrySelectionChanged(nullptr);
}
}
}