diff --git a/conductor.cpp b/conductor.cpp index c3cb3dc37..d67a0e2ae 100644 --- a/conductor.cpp +++ b/conductor.cpp @@ -1001,6 +1001,11 @@ void Conductor::setProfile(const ConductorProfile &cp) { calculateTextItemPosition(); } +/// @return le profil de ce conducteur +ConductorProfile Conductor::profile() const { + return(conductor_profile); +} + bool Conductor::isSingleLine() const { return(is_single_line); } diff --git a/conductor.h b/conductor.h index 778282673..9a8cd49be 100644 --- a/conductor.h +++ b/conductor.h @@ -70,6 +70,7 @@ class Conductor : public QGraphicsPathItem { QDomElement toXml(QDomDocument &, QHash &) const; const QList segmentsList() const; void setProfile(const ConductorProfile &); + ConductorProfile profile() const; void setSingleLine(bool); bool isSingleLine() const; diff --git a/diagramcommands.cpp b/diagramcommands.cpp index 8f0790ae0..a106cbe80 100644 --- a/diagramcommands.cpp +++ b/diagramcommands.cpp @@ -388,6 +388,40 @@ void ChangeConductorCommand::redo() { else conductor -> setProfile(new_profile); } +/** + Constructeur + @param c Conducteurs reinitialises + @param p Anciens profils des conducteurs + @param parent QUndoCommand parent +*/ +ResetConductorCommand::ResetConductorCommand( + const QHash &cp, + QUndoCommand *parent +) : + QUndoCommand(QObject::tr("R\351initialiser ") + QET::ElementsAndConductorsSentence(0, cp.count()), parent), + conductors_profiles(cp) +{ +} + +/// Destructeur +ResetConductorCommand::~ResetConductorCommand() { +} + +/// Annule la reinitialisation des conducteurs +void ResetConductorCommand::undo() { + foreach(Conductor *c, conductors_profiles.keys()) { + c -> setProfile(conductors_profiles[c]); + } +} + +/// Refait la reinitialisation des conducteurs +void ResetConductorCommand::redo() { + foreach(Conductor *c, conductors_profiles.keys()) { + ConductorProfile t(conductors_profiles[c]); + c -> setProfile(ConductorProfile()); + } +} + /** Constructeur @param d Schema dont on modifie le cartouche diff --git a/diagramcommands.h b/diagramcommands.h index 21a2d46d6..7b69e62e9 100644 --- a/diagramcommands.h +++ b/diagramcommands.h @@ -225,16 +225,38 @@ class ChangeConductorCommand : public QUndoCommand { // attributs private: - /// DiagramTextItem modifie + /// Conducteur modifie Conductor *conductor; - /// texte avant changement + /// profil avant changement ConductorProfile old_profile; - /// texte apres changement + /// profil apres changement ConductorProfile new_profile; /// booleen pour ne pas executer le premier redo() bool first_redo; }; +/** + Cette classe represente l'action de reinitialiser des conducteurs +*/ +class ResetConductorCommand : public QUndoCommand { + // constructeurs, destructeur + public: + ResetConductorCommand(const QHash &, QUndoCommand * = 0); + virtual ~ResetConductorCommand(); + private: + ResetConductorCommand(const ResetConductorCommand &); + + // methodes + public: + virtual void undo(); + virtual void redo(); + + // attributs + private: + /// Conducteurs reinitialises et leurs anciens profils + QHash conductors_profiles; +}; + /** Cette classe represente l'action de modifier les informations du cartouche d'un schema */ diff --git a/diagramview.cpp b/diagramview.cpp index 4769e95ee..da9bc96d6 100644 --- a/diagramview.cpp +++ b/diagramview.cpp @@ -669,3 +669,21 @@ void DiagramView::editConductor() { delete ccpc; } } + +/** + Reinitialise le profil des conducteurs selectionnes +*/ +void DiagramView::resetConductors() { + // recupere les conducteurs selectionnes + QSet selected_conductors = scene -> selectedConductors(); + + // repere les conducteurs modifies (= profil non nul) + QHash conductors_and_profiles; + foreach(Conductor *conductor, selected_conductors) { + ConductorProfile profile = conductor -> profile(); + if (!profile.isNull()) conductors_and_profiles.insert(conductor, profile); + } + + if (conductors_and_profiles.isEmpty()) return; + scene -> undoStack().push(new ResetConductorCommand(conductors_and_profiles)); +} diff --git a/diagramview.h b/diagramview.h index a3ca0251d..02181cc8e 100644 --- a/diagramview.h +++ b/diagramview.h @@ -74,6 +74,7 @@ class DiagramView : public QGraphicsView { void adjustSceneRect(); void updateWindowTitle(); void editConductor(); + void resetConductors(); private slots: void slot_selectionChanged(); diff --git a/ico/conductor2.png b/ico/conductor2.png new file mode 100644 index 000000000..4a37c96e5 Binary files /dev/null and b/ico/conductor2.png differ diff --git a/qelectrotech.qrc b/qelectrotech.qrc index 5bcfc669a..b5127ff52 100644 --- a/qelectrotech.qrc +++ b/qelectrotech.qrc @@ -13,6 +13,7 @@ ico/category_new.png ico/circle.png ico/conductor.png + ico/conductor2.png ico/configure.png ico/copy.png ico/cut.png diff --git a/qetdiagrameditor.cpp b/qetdiagrameditor.cpp index cee8f2e89..b0f15214c 100644 --- a/qetdiagrameditor.cpp +++ b/qetdiagrameditor.cpp @@ -162,6 +162,7 @@ void QETDiagramEditor::actions() { delete_selection = new QAction(QIcon(":/ico/delete.png"), tr("Supprimer"), this); rotate_selection = new QAction(QIcon(":/ico/pivoter.png"), tr("Pivoter"), this); conductor_prop = new QAction(QIcon(":/ico/conductor.png"), tr("Propri\351t\351s du conducteur"), this); + conductor_reset = new QAction(QIcon(":/ico/conductor2.png"), tr("R\351initialiser les conducteurs"), this); infos_diagram = new QAction(QIcon(":/ico/info.png"), tr("Informations sur le sch\351ma"), this); add_column = new QAction(QIcon(":/ico/add_col.png"), tr("Ajouter une colonne"), this); remove_column = new QAction(QIcon(":/ico/remove_col.png"), tr("Enlever une colonne"), this); @@ -210,6 +211,7 @@ void QETDiagramEditor::actions() { delete_selection -> setShortcut(QKeySequence(tr("Suppr"))); rotate_selection -> setShortcut(QKeySequence(tr("Ctrl+R"))); conductor_prop -> setShortcut(QKeySequence(tr("Ctrl+J"))); + conductor_reset -> setShortcut(QKeySequence(tr("Ctrl+K"))); zoom_in -> setShortcut(QKeySequence::ZoomIn); zoom_out -> setShortcut(QKeySequence::ZoomOut); @@ -313,7 +315,8 @@ void QETDiagramEditor::actions() { connect(arrange_window, SIGNAL(triggered()), &workspace, SLOT(arrangeIcons()) ); connect(next_window, SIGNAL(triggered()), &workspace, SLOT(activateNextWindow()) ); connect(prev_window, SIGNAL(triggered()), &workspace, SLOT(activatePreviousWindow()) ); - connect(conductor_prop, SIGNAL(triggered()), this, SLOT(slot_editConductor()) ); + connect(conductor_prop, SIGNAL(triggered()), this, SLOT(slot_editConductor()) ); + connect(conductor_reset, SIGNAL(triggered()), this, SLOT(slot_resetConductors()) ); connect(infos_diagram, SIGNAL(triggered()), this, SLOT(slot_editInfos()) ); connect(add_column, SIGNAL(triggered()), this, SLOT(slot_addColumn()) ); connect(remove_column, SIGNAL(triggered()), this, SLOT(slot_removeColumn()) ); @@ -372,6 +375,7 @@ void QETDiagramEditor::menus() { menu_edition -> addAction(rotate_selection); menu_edition -> addSeparator(); menu_edition -> addAction(conductor_prop); + menu_edition -> addAction(conductor_reset); menu_edition -> addSeparator(); menu_edition -> addAction(infos_diagram); menu_edition -> addAction(add_column); @@ -653,6 +657,9 @@ void QETDiagramEditor::slot_updateActions() { DiagramView *sv = currentDiagram(); bool opened_document = (sv != 0); + // nombre de conducteurs selectionnes + int selected_conductors_count = opened_document ? sv -> diagram() -> selectedConductors().count() : 0; + // actions ayant juste besoin d'un document ouvert close_file -> setEnabled(opened_document); save_file -> setEnabled(opened_document); @@ -667,7 +674,8 @@ void QETDiagramEditor::slot_updateActions() { zoom_out -> setEnabled(opened_document); zoom_fit -> setEnabled(opened_document); zoom_reset -> setEnabled(opened_document); - conductor_prop -> setEnabled(opened_document && sv -> diagram() -> selectedConductors().count() == 1); + conductor_prop -> setEnabled(opened_document && selected_conductors_count == 1); + conductor_reset -> setEnabled(opened_document && selected_conductors_count); infos_diagram -> setEnabled(opened_document); add_column -> setEnabled(opened_document); remove_column -> setEnabled(opened_document); @@ -734,7 +742,7 @@ void QETDiagramEditor::addDiagramView(DiagramView *dv) { // ajoute la fenetre QWidget *p = workspace.addWindow(dv); - connect(dv, SIGNAL(selectionChanged()), this, SLOT(slot_updateActions())); + connect(dv -> diagram(), SIGNAL(selectionChanged()), this, SLOT(slot_updateActions())); connect(dv, SIGNAL(modeChanged()), this, SLOT(slot_updateActions())); // affiche la fenetre @@ -776,6 +784,7 @@ void QETDiagramEditor::slot_updateWindowsMenu() { if (!windows.isEmpty()) windows_menu -> addSeparator(); for (int i = 0 ; i < windows.size() ; ++ i) { DiagramView *dv = qobject_cast(windows.at(i)); + if (!dv) continue; QString dv_title = dv -> windowTitle().left(dv -> windowTitle().length() - 3); QAction *action = windows_menu -> addAction(dv_title); action -> setStatusTip(tr("Active la fen\352tre ") + dv_title); @@ -831,8 +840,20 @@ void QETDiagramEditor::slot_shrink() { sv -> shrink(); } +/** + Edite les proprietes du conducteur selectionne +*/ void QETDiagramEditor::slot_editConductor() { if (DiagramView *dv = currentDiagram()) { dv -> editConductor(); } } + +/** + Reinitialise les conducteurs selectionnes +*/ +void QETDiagramEditor::slot_resetConductors() { + if (DiagramView *dv = currentDiagram()) { + dv -> resetConductors(); + } +} diff --git a/qetdiagrameditor.h b/qetdiagrameditor.h index 345d5f648..b250a7297 100644 --- a/qetdiagrameditor.h +++ b/qetdiagrameditor.h @@ -66,6 +66,7 @@ class QETDiagramEditor : public QMainWindow { void slot_expand(); void slot_shrink(); void slot_editConductor(); + void slot_resetConductors(); // attributs protected: @@ -92,6 +93,7 @@ class QETDiagramEditor : public QMainWindow { QAction *delete_selection; QAction *rotate_selection; QAction *conductor_prop; + QAction *conductor_reset; QAction *infos_diagram; QAction *add_column; QAction *remove_column;