Fix Home and End Buttons Handling and DiagramEditor Scroll

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4613 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
dfochi
2016-08-08 16:42:47 +00:00
parent 412007bb0d
commit 8f8ede0e6c
3 changed files with 63 additions and 19 deletions

View File

@@ -244,8 +244,8 @@ void Diagram::keyPressEvent(QKeyEvent *e)
QPointF movement; QPointF movement;
qreal top_position = 0; qreal top_position = 0;
qreal left_position = 0; qreal left_position = 0;
QList<Element*> selected_elmts = this->selectedContent().elements.toList(); QList<QGraphicsItem*> selected_elmts = this->selectedContent().items();
if (!this->selectedContent().elements.isEmpty()) { if (!this->selectedContent().items(255).isEmpty()) {
switch(e -> key()) { switch(e -> key()) {
case Qt::Key_Left: case Qt::Key_Left:
foreach (QGraphicsItem *item, selected_elmts) { foreach (QGraphicsItem *item, selected_elmts) {

View File

@@ -604,11 +604,31 @@ switch(e -> key())
current_project->changeTabDown(); current_project->changeTabDown();
return; return;
case Qt::Key_Home: case Qt::Key_Home:
if (!hasTextItems()) {
if (
qgraphicsitem_cast<IndependentTextItem *>(scene->focusItem()) ||
qgraphicsitem_cast<ElementTextItem *>(scene->focusItem()) ||
qgraphicsitem_cast<ConductorTextItem *>(scene->focusItem()) ||
qgraphicsitem_cast<DiagramTextItem *>(scene->focusItem())
)
break;
current_project->changeFirstTab(); current_project->changeFirstTab();
return; return;
}
else break;
case Qt::Key_End: case Qt::Key_End:
if (!hasTextItems()) {
if (
qgraphicsitem_cast<IndependentTextItem *>(scene->focusItem()) ||
qgraphicsitem_cast<ElementTextItem *>(scene->focusItem()) ||
qgraphicsitem_cast<ConductorTextItem *>(scene->focusItem()) ||
qgraphicsitem_cast<DiagramTextItem *>(scene->focusItem())
)
break;
current_project->changeLastTab(); current_project->changeLastTab();
return; return;
}
else break;
case Qt::Key_ZoomOut: case Qt::Key_ZoomOut:
zoom(0.85); zoom(0.85);
return; return;
@@ -622,19 +642,19 @@ switch(e -> key())
if (e->modifiers() & Qt::ControlModifier) if (e->modifiers() & Qt::ControlModifier)
zoom(1.15); zoom(1.15);
case Qt::Key_Up: case Qt::Key_Up:
if(!scene->selectedContent().elements.isEmpty()){ if(!(scene->selectedContent().items(255).isEmpty())){
scrollOnMovement(e); scrollOnMovement(e);
} }
case Qt::Key_Down: case Qt::Key_Down:
if(!scene->selectedContent().elements.isEmpty()){ if(!(scene->selectedContent().items(255).isEmpty())){
scrollOnMovement(e); scrollOnMovement(e);
} }
case Qt::Key_Left: case Qt::Key_Left:
if(!scene->selectedContent().elements.isEmpty()){ if(!(scene->selectedContent().items(255).isEmpty())){
scrollOnMovement(e); scrollOnMovement(e);
} }
case Qt::Key_Right: case Qt::Key_Right:
if(!scene->selectedContent().elements.isEmpty()){ if(!(scene->selectedContent().items(255).isEmpty())){
scrollOnMovement(e); scrollOnMovement(e);
} }
} }
@@ -659,7 +679,7 @@ void DiagramView::keyReleaseEvent(QKeyEvent *e) {
or below the editor SceneRect is expanded or below the editor SceneRect is expanded
*/ */
void DiagramView::scrollOnMovement(QKeyEvent *e){ void DiagramView::scrollOnMovement(QKeyEvent *e){
QList<QGraphicsItem *> selected_elmts = scene ->selectedItems(); QList<QGraphicsItem *> selected_elmts = scene->selectedContent().items(255);
QRectF viewed_scene = viewedSceneRect(); QRectF viewed_scene = viewedSceneRect();
foreach (QGraphicsItem *qgi, selected_elmts){ foreach (QGraphicsItem *qgi, selected_elmts){
qreal x = qgi->pos().x(); qreal x = qgi->pos().x();
@@ -682,15 +702,21 @@ void DiagramView::scrollOnMovement(QKeyEvent *e){
QScrollBar *v = verticalScrollBar(); QScrollBar *v = verticalScrollBar();
int h_increment=0; int h_increment=0;
int v_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(); v_increment = 2*qgi->boundingRect().top();
if (v_increment == 0) v_increment = -2*qgi->boundingRect().height();
}
else if(e->key()==Qt::Key_Down && elmt_below_top_margin) { else if(e->key()==Qt::Key_Down && elmt_below_top_margin) {
v_increment = 2*qgi->boundingRect().bottom(); 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_Left && elmt_left_of_right_margin) {
h_increment = 2*qgi->boundingRect().left(); h_increment = 2*qgi->boundingRect().left();
if (h_increment == 0) h_increment = -2*qgi->boundingRect().width();
}
else if (e->key()==Qt::Key_Right && elmt_right_of_left_margin) { else if (e->key()==Qt::Key_Right && elmt_right_of_left_margin) {
h_increment = 2*qgi->boundingRect().right(); 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()) || if (((elmt_right >= scene->sceneRect().right() - qgi->boundingRect().right()) ||
(elmt_bottom >= scene->sceneRect().bottom() - qgi->boundingRect().bottom())) && (elmt_bottom >= scene->sceneRect().bottom() - qgi->boundingRect().bottom())) &&
@@ -754,6 +780,23 @@ bool DiagramView::hasCopiableItems() {
return(false); return(false);
} }
/**
@return true if there is any Text Item selected
*/
bool DiagramView::hasTextItems() {
foreach(QGraphicsItem *qgi, scene -> selectedItems()) {
if (
qgraphicsitem_cast<IndependentTextItem *>(qgi) ||
qgraphicsitem_cast<ElementTextItem *>(qgi) ||
qgraphicsitem_cast<ConductorTextItem *>(qgi) ||
qgraphicsitem_cast<DiagramTextItem *>(qgi)
) {
return(true);
}
}
return(false);
}
/** /**
@return true s'il y a des items selectionnes sur le schema et que ceux-ci @return true s'il y a des items selectionnes sur le schema et que ceux-ci
peuvent etre supprimes, false sinon peuvent etre supprimes, false sinon

View File

@@ -72,6 +72,7 @@ class DiagramView : public QGraphicsView
QETDiagramEditor *diagramEditor() const; QETDiagramEditor *diagramEditor() const;
bool hasSelectedItems(); bool hasSelectedItems();
bool hasCopiableItems(); bool hasCopiableItems();
bool hasTextItems();
bool hasDeletableItems(); bool hasDeletableItems();
void editSelection(); void editSelection();
void setEventInterface (DVEventInterface *event_interface); void setEventInterface (DVEventInterface *event_interface);