diff --git a/sources/editor/editorcommands.cpp b/sources/editor/editorcommands.cpp index 66db35a37..0476975c8 100644 --- a/sources/editor/editorcommands.cpp +++ b/sources/editor/editorcommands.cpp @@ -343,11 +343,11 @@ void ChangeNamesCommand::redo() { */ ChangeZValueCommand::ChangeZValueCommand( ElementScene *elmt, - ChangeZValueCommand::Option o, + QET::DepthOption o, QUndoCommand *parent ) : ElementEditionCommand(elmt, nullptr, parent), - option(o) + m_option(o) { // retrieve all primitives but terminals QList items_list = m_scene -> zItems(ElementScene::SortByZValue | ElementScene::SelectedOrNot); @@ -356,16 +356,16 @@ ChangeZValueCommand::ChangeZValueCommand( foreach(QGraphicsItem *qgi, items_list) undo_hash.insert(qgi, qgi -> zValue()); // choisit le nom en fonction du traitement - if (option == BringForward) { + if (m_option == QET::BringForward) { setText(QObject::tr("amener au premier plan", "undo caption")); applyBringForward(items_list); - } else if (option == Raise) { + } else if (m_option == QET::Raise) { setText(QObject::tr("rapprocher", "undo caption")); applyRaise(items_list); - } else if (option == Lower) { + } else if (m_option == QET::Lower) { setText(QObject::tr("éloigner", "undo caption")); applyLower(items_list); - } else if (option == SendBackward) { + } else if (m_option == QET::SendBackward) { setText(QObject::tr("envoyer au fond", "undo caption")); applySendBackward(items_list); } diff --git a/sources/editor/editorcommands.h b/sources/editor/editorcommands.h index 651bc7016..43b06437d 100644 --- a/sources/editor/editorcommands.h +++ b/sources/editor/editorcommands.h @@ -197,17 +197,11 @@ class ChangeNamesCommand : public ElementEditionCommand { This command changes the zValue of a set of primitives when editing an electrical element. */ -class ChangeZValueCommand : public ElementEditionCommand { - // constructors, destructor +class ChangeZValueCommand : public ElementEditionCommand +{ + // constructors, destructor public: - /// List the various kind of changes for the zValue - enum Option { - BringForward, ///< Bring primitives to the foreground so they have the highest zValue - Raise, ///< Raise primitives one layer above their current one; zValues are incremented - Lower, ///< Send primitives one layer below their current one; zValues are decremented - SendBackward ///< Send primitives to the background so they have the lowest zValue - }; - ChangeZValueCommand(ElementScene *, Option, QUndoCommand * = nullptr); + ChangeZValueCommand(ElementScene *, QET::DepthOption , QUndoCommand * = nullptr); ~ChangeZValueCommand() override; private: ChangeZValueCommand(const ChangeZValueCommand &); @@ -230,7 +224,7 @@ class ChangeZValueCommand : public ElementEditionCommand { /// associates impacted primitives with their new zValues QHash redo_hash; /// kind of treatment to apply - Option option; + QET::DepthOption m_option; }; /** diff --git a/sources/editor/elementscene.cpp b/sources/editor/elementscene.cpp index 2efd3ecb7..f93692d06 100644 --- a/sources/editor/elementscene.cpp +++ b/sources/editor/elementscene.cpp @@ -759,38 +759,6 @@ void ElementScene::slot_editNames() { } } -/** - Amene les elements selectionnes au premier plan -*/ -void ElementScene::slot_bringForward() { - undoStack().push(new ChangeZValueCommand(this, ChangeZValueCommand::BringForward)); - emit(partsZValueChanged()); -} - -/** - Remonte les elements selectionnes d'un plan -*/ -void ElementScene::slot_raise() { - undoStack().push(new ChangeZValueCommand(this, ChangeZValueCommand::Raise)); - emit(partsZValueChanged()); -} - -/** - Descend les elements selectionnes d'un plan -*/ -void ElementScene::slot_lower() { - undoStack().push(new ChangeZValueCommand(this, ChangeZValueCommand::Lower)); - emit(partsZValueChanged()); -} - -/** - Envoie les elements selectionnes au fond -*/ -void ElementScene::slot_sendBackward() { - undoStack().push(new ChangeZValueCommand(this, ChangeZValueCommand::SendBackward)); - emit(partsZValueChanged()); -} - /** @return the list of primitives currently present on the scene. */ diff --git a/sources/editor/elementscene.h b/sources/editor/elementscene.h index 6c5120df9..3904ac64e 100644 --- a/sources/editor/elementscene.h +++ b/sources/editor/elementscene.h @@ -152,10 +152,6 @@ class ElementScene : public QGraphicsScene void slot_editNames(); void slot_editAuthorInformations(); void slot_editProperties(); - void slot_bringForward(); - void slot_raise(); - void slot_lower(); - void slot_sendBackward(); void managePrimitivesGroups(); void stackAction(ElementEditionCommand *); diff --git a/sources/editor/qetelementeditor.cpp b/sources/editor/qetelementeditor.cpp index dc03f342d..200a42fbb 100644 --- a/sources/editor/qetelementeditor.cpp +++ b/sources/editor/qetelementeditor.cpp @@ -27,6 +27,7 @@ #include "recentfiles.h" #include "qeticons.h" #include "qetmessagebox.h" +#include "editorcommands.h" // editeurs de primitives #include "arceditor.h" @@ -224,30 +225,17 @@ void QETElementEditor::setupActions() { connect(edit_author, SIGNAL(triggered()), m_elmt_scene, SLOT(slot_editAuthorInformations())); connect(m_edit_properties, SIGNAL(triggered()), m_elmt_scene, SLOT(slot_editProperties())); - - /* - * Action related to change depth of primitive - */ - m_depth_ag = new QActionGroup(this); - - QAction *edit_forward = new QAction(QET::Icons::BringForward, tr("Amener au premier plan"), m_depth_ag); - QAction *edit_raise = new QAction(QET::Icons::Raise, tr("Rapprocher"), m_depth_ag); - QAction *edit_lower = new QAction(QET::Icons::Lower, tr("Éloigner"), m_depth_ag); - QAction *edit_backward = new QAction(QET::Icons::SendBackward, tr("Envoyer au fond"), m_depth_ag); - - edit_raise -> setShortcut(QKeySequence(tr("Ctrl+Shift+Up"))); - edit_lower -> setShortcut(QKeySequence(tr("Ctrl+Shift+Down"))); - edit_backward -> setShortcut(QKeySequence(tr("Ctrl+Shift+End"))); - edit_forward -> setShortcut(QKeySequence(tr("Ctrl+Shift+Home"))); - - connect(edit_forward, SIGNAL(triggered()), m_elmt_scene, SLOT(slot_bringForward() )); - connect(edit_raise, SIGNAL(triggered()), m_elmt_scene, SLOT(slot_raise() )); - connect(edit_lower, SIGNAL(triggered()), m_elmt_scene, SLOT(slot_lower() )); - connect(edit_backward, SIGNAL(triggered()), m_elmt_scene, SLOT(slot_sendBackward() )); - + //Action related to change depth of primitive + m_depth_action_group = QET::depthActionGroup(this); + + connect(m_depth_action_group, &QActionGroup::triggered, [this](QAction *action) { + this->elementScene()->undoStack().push(new ChangeZValueCommand(this->elementScene(), action->data().value())); + emit(this->elementScene()->partsZValueChanged()); + }); + depth_toolbar = addToolBar(tr("Profondeur", "toolbar title")); depth_toolbar -> setObjectName("depth_toolbar"); - depth_toolbar -> addActions(m_depth_ag -> actions()); + depth_toolbar -> addActions(m_depth_action_group -> actions()); addToolBar(Qt::TopToolBarArea, depth_toolbar); @@ -402,7 +390,7 @@ void QETElementEditor::setupMenus() { edit_menu -> addAction(edit_author); edit_menu -> addAction(m_edit_properties); edit_menu -> addSeparator(); - edit_menu -> addActions(m_depth_ag -> actions()); + edit_menu -> addActions(m_depth_action_group -> actions()); display_menu -> addActions(m_zoom_ag -> actions()); @@ -432,7 +420,7 @@ void QETElementEditor::contextMenu(QPoint p) menu.addAction(paste_in_area); menu.addMenu(paste_from_menu); menu.addSeparator(); - menu.addActions(m_depth_ag -> actions()); + menu.addActions(m_depth_action_group -> actions()); //Remove from the context menu the actions which are disabled. const QListactions = menu.actions(); @@ -467,7 +455,7 @@ void QETElementEditor::slot_updateMenus() { cut -> setEnabled(selected_items); copy -> setEnabled(selected_items); edit_delete -> setEnabled(selected_items); - foreach (QAction *action, m_depth_ag -> actions()) + foreach (QAction *action, m_depth_action_group -> actions()) action->setEnabled(selected_items); // actions dependant du contenu du presse-papiers diff --git a/sources/editor/qetelementeditor.h b/sources/editor/qetelementeditor.h index 2b4808130..5754abca2 100644 --- a/sources/editor/qetelementeditor.h +++ b/sources/editor/qetelementeditor.h @@ -80,7 +80,7 @@ class QETElementEditor : public QETMainWindow { /// toolbars QToolBar *parts_toolbar, *main_toolbar, *view_toolbar, *depth_toolbar, *element_toolbar; /// Action group - QActionGroup *parts, *m_zoom_ag, *m_depth_ag; + QActionGroup *parts, *m_zoom_ag, *m_depth_action_group; /// minimum window title QString min_title; /// filename of the currently edited element diff --git a/sources/qet.cpp b/sources/qet.cpp index 8abe1d8b5..bad248eb6 100644 --- a/sources/qet.cpp +++ b/sources/qet.cpp @@ -16,8 +16,11 @@ along with QElectroTech. If not, see . */ #include "qet.h" +#include "qeticons.h" + #include #include +#include /** Permet de convertir une chaine de caracteres ("n", "s", "e" ou "w") @@ -493,13 +496,6 @@ qreal QET::round(qreal x, qreal epsilon) { return(int(x * epsilon) / epsilon); } -/** - Round the coordinates of \a p to the nearest multiple of \a epsilon. -*/ -QPointF QET::roundPoint(const QPointF &p, qreal epsilon) { - return(QPointF(QET::round(p.x(), epsilon), QET::round(p.y(), epsilon))); -} - /** @param angle Un angle quelconque @return l'angle passe en parametre, mais ramene entre -360.0 + 360.0 degres @@ -534,19 +530,6 @@ bool QET::compareCanonicalFilePaths(const QString &first, const QString &second) return(first_canonical_path == second_canonical_path); } -/** - @param icl an TitleBlockColumnLength object - @see TitleBlockColumnLength - @return a string describing the type of this TitleBlockColumnLength object -*/ -QString QET::titleBlockColumnLengthToString(const TitleBlockColumnLength &icl) { - QString type_str; - if (icl== Absolute) type_str = "absolute"; - else if (icl == RelativeToTotalLength) type_str = "relative to total"; - else if (icl == RelativeToRemainingLength) type_str = "relative to remaining"; - return(type_str); -} - /** Export an XML document to an UTF-8 text file indented with 4 spaces, with LF end of lines and no BOM. @@ -582,62 +565,6 @@ bool QET::writeXmlFile(QDomDocument &xml_doc, const QString &filepath, QString * return(true); } -/** - @return the scene position where \a event occurred, provided it is - QGraphicsScene-related event; otherwise, this function returns a null - QPointF. -*/ -QPointF QET::graphicsSceneEventPos(QEvent *event) { - QPointF event_scene_pos; - if (event -> type() < QEvent::GraphicsSceneContextMenu) return(event_scene_pos); - if (event -> type() > QEvent::GraphicsSceneWheel) return(event_scene_pos); - - switch (event -> type()) { - case QEvent::GraphicsSceneContextMenu: { - QGraphicsSceneContextMenuEvent *qgs_event = static_cast(event); - event_scene_pos = qgs_event -> scenePos(); - break; - } - case QEvent::GraphicsSceneDragEnter: - case QEvent::GraphicsSceneDragLeave: - case QEvent::GraphicsSceneDragMove: - case QEvent::GraphicsSceneDrop: { - QGraphicsSceneDragDropEvent *qgs_event = static_cast(event); - event_scene_pos = qgs_event -> scenePos(); - break; - } - case QEvent::GraphicsSceneHelp: { - QGraphicsSceneHelpEvent *qgs_event = static_cast(event); - event_scene_pos = qgs_event -> scenePos(); - break; - } - - case QEvent::GraphicsSceneHoverEnter: - case QEvent::GraphicsSceneHoverLeave: - case QEvent::GraphicsSceneHoverMove: { - QGraphicsSceneHoverEvent *qgs_event = static_cast(event); - event_scene_pos = qgs_event -> scenePos(); - break; - } - case QEvent::GraphicsSceneMouseDoubleClick: - case QEvent::GraphicsSceneMouseMove: - case QEvent::GraphicsSceneMousePress: - case QEvent::GraphicsSceneMouseRelease: { - QGraphicsSceneMouseEvent *qgs_event = static_cast(event); - event_scene_pos = qgs_event -> scenePos(); - break; - } - case QEvent::GraphicsSceneWheel: { - QGraphicsSceneWheelEvent *qgs_event = static_cast(event); - event_scene_pos = qgs_event -> scenePos(); - break; - } - default: - break; - } - return(event_scene_pos); -} - /** * @brief QET::eachStrIsEqual * @param qsl list of string to compare @@ -690,3 +617,31 @@ QET::QetCollection QET::qetCollectionFromString(const QString &str) else return QetCollection::Common; } + +/** + * @brief QET::depthActionGroup + * @param parent + * @return an action group which contain 4 actions (forward, raise, lower, backward) + * already made with icon, shortcut and data (see QET::DepthOption) + */ +QActionGroup *QET::depthActionGroup(QObject *parent) +{ + QActionGroup *action_group = new QActionGroup(parent); + + QAction *edit_forward = new QAction(QET::Icons::BringForward, QObject::tr("Amener au premier plan"), action_group); + QAction *edit_raise = new QAction(QET::Icons::Raise, QObject::tr("Rapprocher"), action_group); + QAction *edit_lower = new QAction(QET::Icons::Lower, QObject::tr("Éloigner"), action_group); + QAction *edit_backward = new QAction(QET::Icons::SendBackward, QObject::tr("Envoyer au fond"), action_group); + + edit_raise ->setShortcut(QKeySequence(QObject::tr("Ctrl+Shift+Up"))); + edit_lower ->setShortcut(QKeySequence(QObject::tr("Ctrl+Shift+Down"))); + edit_backward->setShortcut(QKeySequence(QObject::tr("Ctrl+Shift+End"))); + edit_forward ->setShortcut(QKeySequence(QObject::tr("Ctrl+Shift+Home"))); + + edit_forward ->setData(QET::BringForward); + edit_raise ->setData(QET::Raise); + edit_lower ->setData(QET::Lower); + edit_backward->setData(QET::SendBackward); + + return action_group; +} diff --git a/sources/qet.h b/sources/qet.h index c645e7f6c..1c1e680bb 100644 --- a/sources/qet.h +++ b/sources/qet.h @@ -19,6 +19,8 @@ #define _QET_H #include #include + +class QActionGroup; /** This file provides useful functions and enums that may be used from anywhere else within the QElectroTech application. @@ -155,7 +157,6 @@ namespace QET { QList findInDomElement(const QDomElement &, const QString &); QList findInDomElement(const QDomElement &, const QString &, const QString &); QList forbiddenCharacters(); - QString forbiddenCharactersString(bool = false); QString stringToFileName(const QString &); QString escapeSpaces(const QString &); QString unescapeSpaces(const QString &); @@ -164,13 +165,11 @@ namespace QET { QString diagramAreaToString(const QET::DiagramArea &); QET::DiagramArea diagramAreaFromString(const QString &); qreal round(qreal, qreal); - QPointF roundPoint(const QPointF &, qreal); qreal correctAngle(const qreal &); bool compareCanonicalFilePaths(const QString &, const QString &); - QString titleBlockColumnLengthToString(const TitleBlockColumnLength &); bool writeXmlFile(QDomDocument &xml_doc, const QString &filepath, QString * error_message= nullptr); - QPointF graphicsSceneEventPos(QEvent *); bool eachStrIsEqual (const QStringList &qsl); + QActionGroup *depthActionGroup(QObject *parent = nullptr); } Q_DECLARE_METATYPE(QET::DepthOption)