diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 9cd7c8a34..ac7214541 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -457,12 +457,45 @@ void DiagramView::editDiagramProperties() { } /** - @return true s'il y a des elements selectionnes sur le schema, false sinon + @return true s'il y a des items selectionnes sur le schema, false sinon */ bool DiagramView::hasSelectedItems() { return(scene -> selectedItems().size() > 0); } +/** + @return true s'il y a des items selectionnes sur le schema et que ceux-ci + peuvent etre copies dans le presse-papier, false sinon +*/ +bool DiagramView::hasCopiableItems() { + foreach(QGraphicsItem *qgi, scene -> selectedItems()) { + if ( + 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 +*/ +bool DiagramView::hasDeletableItems() { + foreach(QGraphicsItem *qgi, scene -> selectedItems()) { + if ( + qgraphicsitem_cast(qgi) || + qgraphicsitem_cast(qgi) || + qgraphicsitem_cast(qgi) + ) { + return(true); + } + } + return(false); +} + /** Ajoute une colonne au schema. */ diff --git a/sources/diagramview.h b/sources/diagramview.h index 3dabec08f..b1aeae775 100644 --- a/sources/diagramview.h +++ b/sources/diagramview.h @@ -61,6 +61,8 @@ class DiagramView : public QGraphicsView { Diagram *diagram() { return(scene); } QETDiagramEditor *diagramEditor() const; bool hasSelectedItems(); + bool hasCopiableItems(); + bool hasDeletableItems(); void addText(); IndependentTextItem *addDiagramTextAtPos(const QPointF &); diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 9b2fa435b..aafa7606f 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -1152,16 +1152,17 @@ void QETDiagramEditor::slot_updateComplexActions() { conductor_reset -> setEnabled(editable_diagram && selected_conductors_count); // actions ayant aussi besoin d'items (elements, conducteurs, textes, ...) selectionnes - bool selected_items = dv ? (dv -> hasSelectedItems()) : false; - cut -> setEnabled(editable_diagram && selected_items); - copy -> setEnabled(selected_items); - delete_selection -> setEnabled(editable_diagram && selected_items); - rotate_selection -> setEnabled(editable_diagram && selected_items && dv -> diagram() -> canRotateSelection()); - selection_prop -> setEnabled(editable_diagram && selected_items); + bool copiable_items = dv ? (dv -> hasCopiableItems()) : false; + bool deletable_items = dv ? (dv -> hasDeletableItems()) : false; + cut -> setEnabled(editable_diagram && copiable_items); + copy -> setEnabled(copiable_items); + delete_selection -> setEnabled(editable_diagram && deletable_items); + rotate_selection -> setEnabled(editable_diagram && dv -> diagram() -> canRotateSelection()); + selection_prop -> setEnabled(deletable_items); // actions ayant besoin de textes selectionnes bool selected_texts = dv ? (dv -> diagram() -> selectedTexts().count()) : 0; - rotate_texts -> setEnabled(editable_diagram && selected_texts); + rotate_texts -> setEnabled(editable_diagram && selected_texts); } /**