diff --git a/sources/diagram.cpp b/sources/diagram.cpp index 5a0a689d0..563ce4f06 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -244,27 +244,27 @@ void Diagram::keyPressEvent(QKeyEvent *e) QPointF movement; qreal top_position = 0; qreal left_position = 0; - QList selected_elmts = this->selectedContent().elements.toList(); - if (!this->selectedContent().elements.isEmpty()) { + QList selected_elmts = this->selectedContent().items(); + if (!this->selectedContent().items(255).isEmpty()) { switch(e -> key()) { case Qt::Key_Left: foreach (QGraphicsItem *item, selected_elmts) { left_position = item->mapRectFromScene(item->boundingRect()).x(); if (left_position >= this->sceneRect().left() - item->boundingRect().width()) return; - } + } movement = QPointF(-xGrid, 0.0); break; case Qt::Key_Right: movement = QPointF(+xGrid, 0.0); break; case Qt::Key_Up: foreach (QGraphicsItem *item, selected_elmts) { top_position = item->mapRectFromScene(item->boundingRect()).y(); - if (top_position >= this->sceneRect().top() - item->boundingRect().height()) + if (top_position >= this->sceneRect().top() - item->boundingRect().height()) return; } movement = QPointF(0.0, -yGrid); break; - case Qt::Key_Down: movement = QPointF(0.0, +yGrid); break; + case Qt::Key_Down: movement = QPointF(0.0, +yGrid); break; } if (!movement.isNull() && !focusItem()) { beginMoveElements(); diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 57e7c1214..5bf8a643a 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -604,11 +604,31 @@ switch(e -> key()) current_project->changeTabDown(); return; case Qt::Key_Home: - current_project->changeFirstTab(); - return; + if (!hasTextItems()) { + if ( + qgraphicsitem_cast(scene->focusItem()) || + qgraphicsitem_cast(scene->focusItem()) || + qgraphicsitem_cast(scene->focusItem()) || + qgraphicsitem_cast(scene->focusItem()) + ) + break; + current_project->changeFirstTab(); + return; + } + else break; case Qt::Key_End: - current_project->changeLastTab(); - return; + if (!hasTextItems()) { + if ( + qgraphicsitem_cast(scene->focusItem()) || + qgraphicsitem_cast(scene->focusItem()) || + qgraphicsitem_cast(scene->focusItem()) || + qgraphicsitem_cast(scene->focusItem()) + ) + break; + current_project->changeLastTab(); + return; + } + else break; case Qt::Key_ZoomOut: zoom(0.85); return; @@ -622,19 +642,19 @@ switch(e -> key()) if (e->modifiers() & Qt::ControlModifier) zoom(1.15); case Qt::Key_Up: - if(!scene->selectedContent().elements.isEmpty()){ + if(!(scene->selectedContent().items(255).isEmpty())){ scrollOnMovement(e); } case Qt::Key_Down: - if(!scene->selectedContent().elements.isEmpty()){ + if(!(scene->selectedContent().items(255).isEmpty())){ scrollOnMovement(e); } case Qt::Key_Left: - if(!scene->selectedContent().elements.isEmpty()){ + if(!(scene->selectedContent().items(255).isEmpty())){ scrollOnMovement(e); } case Qt::Key_Right: - if(!scene->selectedContent().elements.isEmpty()){ + if(!(scene->selectedContent().items(255).isEmpty())){ scrollOnMovement(e); } } @@ -659,7 +679,7 @@ void DiagramView::keyReleaseEvent(QKeyEvent *e) { or below the editor SceneRect is expanded */ void DiagramView::scrollOnMovement(QKeyEvent *e){ - QList selected_elmts = scene ->selectedItems(); + QList selected_elmts = scene->selectedContent().items(255); QRectF viewed_scene = viewedSceneRect(); foreach (QGraphicsItem *qgi, selected_elmts){ qreal x = qgi->pos().x(); @@ -682,15 +702,21 @@ void DiagramView::scrollOnMovement(QKeyEvent *e){ QScrollBar *v = verticalScrollBar(); int h_increment=0; int v_increment=0; - if (e->key()==Qt::Key_Up && elmt_above_bottom_margin) + if (e->key()==Qt::Key_Up && elmt_above_bottom_margin) { v_increment = 2*qgi->boundingRect().top(); - else if(e->key()==Qt::Key_Down && elmt_below_top_margin){ - v_increment = 2*qgi->boundingRect().bottom(); + if (v_increment == 0) v_increment = -2*qgi->boundingRect().height(); } - else if (e->key()==Qt::Key_Left && elmt_left_of_right_margin) + else if(e->key()==Qt::Key_Down && elmt_below_top_margin) { + v_increment = 2*qgi->boundingRect().bottom(); + if (v_increment == 0) v_increment = -2*qgi->boundingRect().height(); + } + else if (e->key()==Qt::Key_Left && elmt_left_of_right_margin) { h_increment = 2*qgi->boundingRect().left(); - else if (e->key()==Qt::Key_Right && elmt_right_of_left_margin){ + if (h_increment == 0) h_increment = -2*qgi->boundingRect().width(); + } + else if (e->key()==Qt::Key_Right && elmt_right_of_left_margin) { h_increment = 2*qgi->boundingRect().right(); + if (h_increment == 0) h_increment = -2*qgi->boundingRect().width(); } if (((elmt_right >= scene->sceneRect().right() - qgi->boundingRect().right()) || (elmt_bottom >= scene->sceneRect().bottom() - qgi->boundingRect().bottom())) && @@ -754,6 +780,23 @@ bool DiagramView::hasCopiableItems() { return(false); } +/** + @return true if there is any Text Item selected +*/ +bool DiagramView::hasTextItems() { + foreach(QGraphicsItem *qgi, scene -> selectedItems()) { + if ( + qgraphicsitem_cast(qgi) || + qgraphicsitem_cast(qgi) || + qgraphicsitem_cast(qgi) || + qgraphicsitem_cast(qgi) + ) { + return(true); + } + } + return(false); +} + /** @return true s'il y a des items selectionnes sur le schema et que ceux-ci peuvent etre supprimes, false sinon diff --git a/sources/diagramview.h b/sources/diagramview.h index f925c68c5..e616a9a5e 100644 --- a/sources/diagramview.h +++ b/sources/diagramview.h @@ -72,6 +72,7 @@ class DiagramView : public QGraphicsView QETDiagramEditor *diagramEditor() const; bool hasSelectedItems(); bool hasCopiableItems(); + bool hasTextItems(); bool hasDeletableItems(); void editSelection(); void setEventInterface (DVEventInterface *event_interface);