diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2018-06-25 17:31:11 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2018-06-27 09:42:09 +0000 |
commit | 35684c6dd7dec1b902218e2b134e427305e234e4 (patch) | |
tree | 71ba71619329a84ac6e600d8ec3a645adeaaba97 /src/Authoring/Studio/Palettes/Action/ActionView.cpp | |
parent | b1a5c793e31aa68e5f33ed7b64e0b1563d5efc0a (diff) |
Fix edit menu items
- Show what is about to be deleted/duplicated
- Properly enable delete/duplicate items
- Action delete/copy/cut/paste is now fully contained in action view
- Every view and player window indicates when they are activated
(i.e. mouse is pressed on them) so we can track the context reliably
even when menu steals the focus. Required for slide duplicate/delete
enabling in edit menu.
Task-number: QT3DS-1911
Task-number: QT3DS-1958
Change-Id: Icf0bb173809740dd709b9e0525735de7aecba617
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/Authoring/Studio/Palettes/Action/ActionView.cpp')
-rw-r--r-- | src/Authoring/Studio/Palettes/Action/ActionView.cpp | 51 |
1 files changed, 38 insertions, 13 deletions
diff --git a/src/Authoring/Studio/Palettes/Action/ActionView.cpp b/src/Authoring/Studio/Palettes/Action/ActionView.cpp index 2ec9728e..a0d03267 100644 --- a/src/Authoring/Studio/Palettes/Action/ActionView.cpp +++ b/src/Authoring/Studio/Palettes/Action/ActionView.cpp @@ -112,26 +112,18 @@ ActionView::ActionView(const QSize &preferredSize, QWidget *parent) QQuickWidget::addAction(action); m_actionCopy = new QAction(tr("Copy Action\t%1C").arg(ctrlKey)); - m_actionCopy->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C)); - m_actionCopy->setShortcutContext(Qt::WidgetShortcut); connect(m_actionCopy, &QAction::triggered, this, &ActionView::copyAction); QQuickWidget::addAction(m_actionCopy); m_actionPaste = new QAction(tr("Paste Action\t%1V").arg(ctrlKey)); - m_actionPaste->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_V)); - m_actionPaste->setShortcutContext(Qt::WidgetShortcut); connect(m_actionPaste, &QAction::triggered, this, &ActionView::pasteAction); QQuickWidget::addAction(m_actionPaste); m_actionCut = new QAction(tr("Cut Action\t%1X").arg(ctrlKey)); - m_actionCut->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_X)); - m_actionCut->setShortcutContext(Qt::WidgetShortcut); connect(m_actionCut, &QAction::triggered, this, &ActionView::cutAction); QQuickWidget::addAction(m_actionCut); m_actionDel = new QAction(tr("Delete Action\tDel")); - m_actionDel->setShortcut(QKeySequence(Qt::Key_Delete)); - m_actionDel->setShortcutContext(Qt::WidgetShortcut); connect(m_actionDel, &QAction::triggered, [=](){ deleteAction(m_currentActionIndex); }); QQuickWidget::addAction(m_actionDel); } @@ -148,15 +140,48 @@ QSize ActionView::sizeHint() const void ActionView::focusInEvent(QFocusEvent *event) { - Q_UNUSED(event) updateActionStates(); - Q_EMIT actionFocused(true); + QQuickWidget::focusInEvent(event); } -void ActionView::focusOutEvent(QFocusEvent *event) +void ActionView::mousePressEvent(QMouseEvent *event) { - Q_UNUSED(event) - Q_EMIT actionFocused(false); + g_StudioApp.setLastActiveView(this); + QQuickWidget::mousePressEvent(event); +} + +bool ActionView::event(QEvent *event) +{ + if (event->type() == QEvent::ShortcutOverride) { + QKeyEvent *ke = static_cast<QKeyEvent *>(event); + if (m_currentActionIndex >= 0 && (ke->key() == Qt::Key_Delete + || (ke->modifiers() == Qt::ControlModifier + && (ke->key() == Qt::Key_C || ke->key() == Qt::Key_V + || ke->key() == Qt::Key_X)))) { + auto focusItem = quickWindow()->activeFocusItem(); + if (focusItem && (focusItem->objectName() == QStringLiteral("actionListDelegate") + || focusItem->objectName() == QStringLiteral("focusEater"))) { + if (ke->key() == Qt::Key_Delete) { + if (m_actionDel->isEnabled()) + deleteAction(m_currentActionIndex); + } else if (ke->modifiers() == Qt::ControlModifier) { + if (ke->key() == Qt::Key_C) { + if (m_actionCopy->isEnabled()) + copyAction(); + } else if (ke->key() == Qt::Key_V) { + if (m_actionPaste->isEnabled()) + pasteAction(); + } else if (ke->key() == Qt::Key_X) { + if (m_actionCut->isEnabled()) + cutAction(); + } + } + event->accept(); + return true; + } + } + } + return QQuickWidget::event(event); } void ActionView::setItem(const qt3dsdm::Qt3DSDMInstanceHandle &handle) |