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;
qreal top_position = 0;
qreal left_position = 0;
QList<Element*> selected_elmts = this->selectedContent().elements.toList();
if (!this->selectedContent().elements.isEmpty()) {
QList<QGraphicsItem*> selected_elmts = this->selectedContent().items();
if (!this->selectedContent().items(255).isEmpty()) {
switch(e -> key()) {
case Qt::Key_Left:
foreach (QGraphicsItem *item, selected_elmts) {

View File

@@ -604,11 +604,31 @@ switch(e -> key())
current_project->changeTabDown();
return;
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();
return;
}
else break;
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();
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<QGraphicsItem *> selected_elmts = scene ->selectedItems();
QList<QGraphicsItem *> 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<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
peuvent etre supprimes, false sinon

View File

@@ -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);