| 409 | } |
| 410 | |
| 411 | void VideoTextEdit::blockClicked(Qt::KeyboardModifiers modifiers, bool play) |
| 412 | { |
| 413 | if (m_hoveredBlock > -1 && m_hoveredBlock < speechZones.count()) { |
| 414 | if (m_selectedBlocks.contains(m_hoveredBlock)) { |
| 415 | if (modifiers & Qt::ControlModifier) { |
| 416 | // remove from selection on ctrl+click an already selected block |
| 417 | m_selectedBlocks.removeAll(m_hoveredBlock); |
| 418 | } else { |
| 419 | m_selectedBlocks = {m_hoveredBlock}; |
| 420 | lineNumberArea->update(); |
| 421 | } |
| 422 | } else { |
| 423 | // Add to selection |
| 424 | if (modifiers & Qt::ControlModifier) { |
| 425 | m_selectedBlocks << m_hoveredBlock; |
| 426 | } else if (modifiers & Qt::ShiftModifier) { |
| 427 | if (m_lastClickedBlock > -1) { |
| 428 | for (int i = qMin(m_lastClickedBlock, m_hoveredBlock); i <= qMax(m_lastClickedBlock, m_hoveredBlock); i++) { |
| 429 | if (!m_selectedBlocks.contains(i)) { |
| 430 | m_selectedBlocks << i; |
| 431 | } |
| 432 | } |
| 433 | } else { |
| 434 | m_selectedBlocks = {m_hoveredBlock}; |
| 435 | } |
| 436 | } else { |
| 437 | m_selectedBlocks = {m_hoveredBlock}; |
| 438 | } |
| 439 | } |
| 440 | if (m_hoveredBlock >= 0) { |
| 441 | m_lastClickedBlock = m_hoveredBlock; |
| 442 | } |
| 443 | |
| 444 | // Find continuous block selection |
| 445 | int startBlock = m_hoveredBlock; |
| 446 | int endBlock = m_hoveredBlock; |
| 447 | while (m_selectedBlocks.contains(startBlock)) { |
| 448 | startBlock--; |
| 449 | } |
| 450 | if (!m_selectedBlocks.contains(startBlock)) { |
| 451 | startBlock++; |
| 452 | } |
| 453 | while (m_selectedBlocks.contains(endBlock)) { |
| 454 | endBlock++; |
| 455 | } |
| 456 | if (!m_selectedBlocks.contains(endBlock)) { |
| 457 | endBlock--; |
| 458 | } |
| 459 | QPair<double, double> zone = {speechZones.at(startBlock).first, speechZones.at(endBlock).second}; |
| 460 | double startMs = zone.first; |
| 461 | double endMs = zone.second; |
| 462 | pCore->getMonitor(Kdenlive::ClipMonitor)->requestSeek(GenTime(startMs).frames(pCore->getCurrentFps())); |
| 463 | pCore->getMonitor(Kdenlive::ClipMonitor) |
| 464 | ->slotLoadClipZone(QPoint(GenTime(startMs).frames(pCore->getCurrentFps()), GenTime(endMs).frames(pCore->getCurrentFps()))); |
| 465 | QTextCursor cursor = textCursor(); |
| 466 | cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor); |
| 467 | cursor.movePosition(QTextCursor::NextBlock, QTextCursor::MoveAnchor, m_hoveredBlock); |
| 468 | cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); |
no test coverage detected