diff --git a/diagram.cpp b/diagram.cpp index 1b5b77b48..3bdc39d7f 100644 --- a/diagram.cpp +++ b/diagram.cpp @@ -93,7 +93,7 @@ void Diagram::keyPressEvent(QKeyEvent *e) { case Qt::Key_Up: movement = QPointF(0.0, -yGrid); break; case Qt::Key_Down: movement = QPointF(0.0, +yGrid); break; } - if (!movement.isNull()) { + if (!movement.isNull() && !focusItem()) { QSet moved_elements = elementsToMove(); if (!moved_elements.isEmpty()) { Element *first_elmt = NULL; diff --git a/diagramtextitem.cpp b/diagramtextitem.cpp index d02fdca3e..5b2b80203 100644 --- a/diagramtextitem.cpp +++ b/diagramtextitem.cpp @@ -47,16 +47,3 @@ void DiagramTextItem::focusOutEvent(QFocusEvent *e) { } } } - -/** - Gere le relachement des touches du clavier. - Cette methode a ete reimplementee pour gerer la touche Suppr/Del -*/ -void DiagramTextItem::keyReleaseEvent(QKeyEvent *e) { - if (e -> key() == Qt::Key_Delete) { - QTextCursor text_cursor = textCursor(); - text_cursor.deleteChar(); - setTextCursor(text_cursor); - } - QGraphicsTextItem::keyReleaseEvent(e); -} diff --git a/diagramtextitem.h b/diagramtextitem.h index 86cf6e3d4..344c62e7e 100644 --- a/diagramtextitem.h +++ b/diagramtextitem.h @@ -24,6 +24,5 @@ class DiagramTextItem : public QGraphicsTextItem { protected: virtual void focusOutEvent(QFocusEvent *); - virtual void keyReleaseEvent(QKeyEvent *); }; #endif diff --git a/diagramview.cpp b/diagramview.cpp index 4337a0d9d..532207532 100644 --- a/diagramview.cpp +++ b/diagramview.cpp @@ -702,3 +702,17 @@ void DiagramView::resetConductors() { if (conductors_and_profiles.isEmpty()) return; scene -> undoStack().push(new ResetConductorCommand(conductors_and_profiles)); } + +/** + Gere les evenements de la DiagramView + @param e Evenement +*/ +bool DiagramView::event(QEvent *e) { + // fait en sorte que les raccourcis clavier arrivent prioritairement sur la + // vue plutot que de remonter vers les QMenu / QAction + if (e -> type() == QEvent::ShortcutOverride && scene -> focusItem()) { + e -> accept(); + return(true); + } + return(QGraphicsView::event(e)); +} \ No newline at end of file diff --git a/diagramview.h b/diagramview.h index 02181cc8e..213d3a032 100644 --- a/diagramview.h +++ b/diagramview.h @@ -41,6 +41,7 @@ class DiagramView : public QGraphicsView { protected: virtual void wheelEvent(QWheelEvent *); + virtual bool event(QEvent *); private: bool saveDiagramToFile(QString &); diff --git a/editor/elementscene.cpp b/editor/elementscene.cpp index 120c8c222..4e76cb614 100644 --- a/editor/elementscene.cpp +++ b/editor/elementscene.cpp @@ -418,11 +418,6 @@ void ElementScene::slot_invertSelection() { } void ElementScene::slot_delete() { - // si un item a le focus et que ce slot est appele, c'est sans doute parce - // que la touche suppr a ete enfoncee pour effacer une lettre et non la - // selection - if (focusItem()) return; - // verifie qu'il y a qqc de selectionne QList selected_items = selectedItems(); if (selected_items.isEmpty()) return; diff --git a/editor/elementview.cpp b/editor/elementview.cpp index 5fc4637a5..4c9765383 100644 --- a/editor/elementview.cpp +++ b/editor/elementview.cpp @@ -6,7 +6,7 @@ */ ElementView::ElementView(ElementScene *scene, QWidget *parent) : QGraphicsView(scene, parent), - _scene(scene) + scene_(scene) { setInteractive(true); setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); @@ -22,7 +22,7 @@ ElementView::~ElementView() { /// @return l'ElementScene visualisee par cette ElementView ElementScene *ElementView::scene() const { - return(_scene); + return(scene_); } /** @@ -31,5 +31,13 @@ ElementScene *ElementView::scene() const { */ void ElementView::setScene(ElementScene *s) { QGraphicsView::setScene(s); - _scene = s; + scene_ = s; +} + +bool ElementView::event(QEvent *e) { + if (e -> type() == QEvent::ShortcutOverride && scene_ -> focusItem()) { + e -> accept(); + return(true); + } + return(QGraphicsView::event(e)); } diff --git a/editor/elementview.h b/editor/elementview.h index b0010eeb6..00c5de07a 100644 --- a/editor/elementview.h +++ b/editor/elementview.h @@ -16,9 +16,11 @@ class ElementView : public QGraphicsView { public: ElementScene *scene() const; void setScene(ElementScene *); + protected: + bool event(QEvent *); //attributs private: - ElementScene *_scene; + ElementScene *scene_; }; #endif diff --git a/editor/parttext.cpp b/editor/parttext.cpp index efef4b238..94306a123 100644 --- a/editor/parttext.cpp +++ b/editor/parttext.cpp @@ -133,12 +133,3 @@ QRectF PartText::boundingRect() const { r.adjust(0.0, -2.0, 0.0, 0.0); return(r); } - -void PartText::keyReleaseEvent(QKeyEvent *e) { - if (e -> key() == Qt::Key_Delete) { - QTextCursor text_cursor = textCursor(); - text_cursor.deleteChar(); - setTextCursor(text_cursor); - } - QGraphicsTextItem::keyReleaseEvent(e); -} diff --git a/editor/parttext.h b/editor/parttext.h index 6de0adf7b..cba018a97 100644 --- a/editor/parttext.h +++ b/editor/parttext.h @@ -31,7 +31,6 @@ class PartText : public QGraphicsTextItem, public CustomElementPart { protected: virtual void focusOutEvent(QFocusEvent *); virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *); - virtual void keyReleaseEvent(QKeyEvent *); virtual QVariant itemChange(GraphicsItemChange, const QVariant &); QRectF boundingRect() const; diff --git a/editor/parttextfield.cpp b/editor/parttextfield.cpp index 90b02e585..842746325 100644 --- a/editor/parttextfield.cpp +++ b/editor/parttextfield.cpp @@ -150,12 +150,3 @@ QRectF PartTextField::boundingRect() const { r.adjust(0.0, -2.0, 0.0, 0.0); return(r); } - -void PartTextField::keyReleaseEvent(QKeyEvent *e) { - if (e -> key() == Qt::Key_Delete) { - QTextCursor text_cursor = textCursor(); - text_cursor.deleteChar(); - setTextCursor(text_cursor); - } - QGraphicsTextItem::keyReleaseEvent(e); -} diff --git a/editor/parttextfield.h b/editor/parttextfield.h index 8ef8ced66..918eef675 100644 --- a/editor/parttextfield.h +++ b/editor/parttextfield.h @@ -35,7 +35,6 @@ class PartTextField : public QGraphicsTextItem, public CustomElementPart { protected: virtual void focusOutEvent(QFocusEvent *); virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *); - virtual void keyReleaseEvent(QKeyEvent *); virtual QVariant itemChange(GraphicsItemChange, const QVariant &); QRectF boundingRect() const;