void McaEditorReferenceArea::keyPressEvent(QKeyEvent *event) { const int key = event->key(); bool accepted = false; DNASequenceSelection * const selection = ctx->getSequenceSelection(); U2Region selectedRegion = (NULL != selection && !selection->isEmpty() ? selection->getSelectedRegions().first() : U2Region()); switch(key) { case Qt::Key_Left: if (!selectedRegion.isEmpty() && selectedRegion.startPos > 0) { selectedRegion.startPos--; ctx->getSequenceSelection()->setSelectedRegions(QVector<U2Region>() << selectedRegion); ui->getScrollController()->scrollToBase(selectedRegion.startPos, width()); } case Qt::Key_Up: accepted = true; break; case Qt::Key_Right: if (!selectedRegion.isEmpty() && selectedRegion.endPos() < ctx->getSequenceLength()) { selectedRegion.startPos++; ctx->getSequenceSelection()->setSelectedRegions(QVector<U2Region>() << selectedRegion); ui->getScrollController()->scrollToBase(selectedRegion.endPos() - 1, width()); } case Qt::Key_Down: accepted = true; break; case Qt::Key_Home: ui->getScrollController()->scrollToEnd(ScrollController::Left); accepted = true; break; case Qt::Key_End: ui->getScrollController()->scrollToEnd(ScrollController::Right); accepted = true; break; case Qt::Key_PageUp: ui->getScrollController()->scrollPage(ScrollController::Left); accepted = true; break; case Qt::Key_PageDown: ui->getScrollController()->scrollPage(ScrollController::Right); accepted = true; break; } if (accepted) { event->accept(); } else { PanView::keyPressEvent(event); } }
bool SequenceAreaRenderer::drawContent(QPainter &painter, const U2Region ®ion, const QList<int> &seqIdx, int xStart, int yStart) const { CHECK(!region.isEmpty(), false); CHECK(!seqIdx.isEmpty(), false); MsaHighlightingScheme* highlightingScheme = seqAreaWgt->getCurrentHighlightingScheme(); MaEditor* editor = seqAreaWgt->getEditor(); painter.setPen(Qt::black); painter.setFont(editor->getFont()); MultipleAlignmentObject* maObj = editor->getMaObject(); SAFE_POINT(maObj != NULL, tr("Alignment object is NULL"), false); const MultipleAlignment ma = maObj->getMultipleAlignment(); //Use dots to draw regions, which are similar to reference sequence highlightingScheme->setUseDots(seqAreaWgt->getUseDotsCheckedState()); int rowHeight = 0; foreach (const int rowIndex, seqIdx) { rowHeight = drawRow(painter, ma, rowIndex, region, xStart, yStart); yStart += ui->getRowHeightController()->getRowHeight(rowIndex); }