diff --git a/sources/conductor.cpp b/sources/conductor.cpp index ad4ef4098..d0a143f58 100644 --- a/sources/conductor.cpp +++ b/sources/conductor.cpp @@ -1264,30 +1264,15 @@ void Conductor::displayedTextChanged() { // verifie que le texte a reellement change if (text_item -> toPlainText() == properties_.text) return; + // initialise l'objet UndoCommand correspondant if (Diagram *my_diagram = diagram()) { - int qmbreturn=0; - //if conductor isn't alone at this potential - //ask user to apply text on every conductors of this potential - if (relatedPotentialConductors().size() >= 1){ - qmbreturn = QMessageBox::question(diagramEditor(), tr("Textes de conducteurs"), - tr("Voulez-vous appliquer le nouveau texte \n" - "\340 l'ensemble des conducteurs de ce potentiel ?"), - QMessageBox::No| QMessageBox::Yes, QMessageBox::Yes); - if (qmbreturn == QMessageBox::Yes){ - ConductorAutoNumerotation can(this); - can.setText(text_item -> toPlainText()); - } - } - if (qmbreturn == 0 || qmbreturn == QMessageBox::No) { - // initialise l'objet UndoCommand correspondant - ConductorProperties new_properties(properties_); - new_properties.text = text_item -> toPlainText(); - - ChangeConductorPropertiesCommand *ccpc = new ChangeConductorPropertiesCommand(this); - ccpc -> setOldSettings(properties_); - ccpc -> setNewSettings(new_properties); - my_diagram -> undoStack().push(ccpc); - } + ConductorProperties new_properties(properties_); + new_properties.text = text_item -> toPlainText(); + + ChangeConductorPropertiesCommand *ccpc = new ChangeConductorPropertiesCommand(this); + ccpc -> setOldSettings(properties_); + ccpc -> setNewSettings(new_properties); + my_diagram -> undoStack().push(ccpc); } } diff --git a/sources/conductorautonumerotation.cpp b/sources/conductorautonumerotation.cpp index 3f3cf17d2..ee6888dc4 100644 --- a/sources/conductorautonumerotation.cpp +++ b/sources/conductorautonumerotation.cpp @@ -1,9 +1,9 @@ #include #include "conductorautonumerotation.h" #include "conductorautonumerotationwidget.h" +#include "diagram.h" #include "qetdiagrameditor.h" #include "QGraphicsView" -#include "diagramcommands.h" /** * Constructor @@ -11,23 +11,19 @@ ConductorAutoNumerotation::ConductorAutoNumerotation() : conductor_ (0), diagram_ (0), -strategy_ (0), -strategy_is_set (false) +strategy_(0) {} /** *Constructor - * @param c the conductor to apply automatic numerotation + * @param c le conducteur a appliquer une numerotation */ ConductorAutoNumerotation::ConductorAutoNumerotation(Conductor *c) : conductor_ (c), diagram_ (c -> diagram()), conductor_list(c -> relatedPotentialConductors()), - strategy_ (0), - strategy_is_set (false) -{ - setNumStrategy(); -} + strategy_(0) +{} /** *destructor @@ -37,136 +33,69 @@ ConductorAutoNumerotation::~ConductorAutoNumerotation() { } /** - * @param c the conductor to apply automatic numerotation + * @param c le conducteur a appliquer une numerotation */ void ConductorAutoNumerotation::setConductor(Conductor *c) { conductor_ = c; diagram_ = c -> diagram(); + strategy_ = 0; conductor_list = c -> relatedPotentialConductors(); - setNumStrategy(); } /** * @brief ConductorAutoNumerotation::numerate - * execute the automatic numerotation + *execute la numerotation automatique du conducteur */ void ConductorAutoNumerotation::numerate() { - if (strategy_is_set) - strategy_ -> createNumerotation(); -} - -/** - * @brief ConductorAutoNumerotation::setText - * apply the text @t by the strategy - */ -void ConductorAutoNumerotation::setText(QString t) { - if (strategy_is_set) - strategy_ -> applyText(t); + if (conductor_ == 0) return; + //ce conducteur est sur un potentiel existant + if (conductor_list.size() >= 1) { + setNumStrategy(new SamePotential); + strategy_ -> createNumerotation(conductor_, diagram_); + } + //ce conducteur est le premier d'un nouveau potentiel + else if (conductor_list.size() == 0) { + } } /** * @brief ConductorAutoNumerotation::setNumStrategy - * apply the good strategy relative to the conductor + *applique la strategy adéquate à la situation + * @param strategy la class de la strategy à appliquer */ -void ConductorAutoNumerotation::setNumStrategy() { +void ConductorAutoNumerotation::setNumStrategy(NumStrategy *strategy) { if (strategy_ != 0) delete strategy_; - - if (conductor_list.size() >= 1) { - strategy_ = new SamePotential (conductor_); - strategy_is_set = true; - } - else if (conductor_list.size() == 0) { - strategy_is_set = false; - } + strategy_ = strategy; } - -/** - * Constructor - */ -NumStrategy::NumStrategy (Conductor *c): - conductor_ (c), - c_list (c -> relatedPotentialConductors()), - diagram_ (c -> diagram()) -{} - +NumStrategy::NumStrategy () {} NumStrategy::~NumStrategy() {} -/** - * @brief ConductorAutoNumerotationWidget::applyText - *apply the text @t on every conductors of @c_list and @conductor_ - */ -void NumStrategy::applyText(QString t) { - if (!c_list.empty()) { - QSet conductorslist = c_list; - conductorslist << conductor_; - QList old_properties, new_properties; - ConductorProperties cp; - - foreach (Conductor *c, conductorslist) { - old_properties << c -> properties(); - cp = c -> properties(); - cp.text = t; - c -> setProperties(cp); - new_properties << c -> properties(); - c -> setText(t); - } - //initialize the corresponding UndoCommand object - ChangeSeveralConductorsPropertiesCommand *cscpc = new ChangeSeveralConductorsPropertiesCommand(conductorslist); - cscpc -> setOldSettings(old_properties); - cscpc -> setNewSettings(new_properties); - diagram_ -> undoStack().push(cscpc); - } - else { - //initialize the corresponding UndoCommand object - ChangeConductorPropertiesCommand *ccpc = new ChangeConductorPropertiesCommand (conductor_); - ConductorProperties cp; - cp = conductor_ ->properties(); - ccpc -> setOldSettings(cp); - cp.text = t; - ccpc -> setNewSettings(cp); - diagram_ -> undoStack().push(ccpc); - conductor_ -> setProperties(cp); - conductor_ -> setText(t); - } -} - - -/** - * Constructor - */ -SamePotential::SamePotential(Conductor *c): - NumStrategy(c) -{} - /** * @brief SamePotential::createNumerotation - *create the numerotation for the conductor @c connected on an existing potential + *crée la numerotation pour le conducteur @c connecté sur un potentiel deja existant */ -void SamePotential::createNumerotation() { +void SamePotential::createNumerotation(Conductor *c, Diagram *d) { + QSet cl; QStringList strl; - foreach (const Conductor *cc, c_list) strl<<(cc->text()); - //the texts is identicals + cl = c -> relatedPotentialConductors(); + foreach (const Conductor *cc, cl) strl<<(cc->text()); + //tout les textes sont identique if (eachIsEqual(strl)) { ConductorProperties cp; cp.text = strl.at(0); - conductor_ -> setProperties(cp); - conductor_ -> setText(strl.at(0)); + c -> setProperties(cp); + c -> setText(strl.at(0)); } - //the texts isn't identicals + //les textes ne sont pas identique else { - ConductorAutoNumerotationWidget *canw = new ConductorAutoNumerotationWidget(conductor_, c_list, conductor_ -> diagramEditor()); - connect(canw, SIGNAL(textIsSelected(QString)), - this, SLOT(applyText(QString))); - canw -> exec(); + ConductorAutoNumerotationWidget canw (c, cl, c -> diagramEditor()); + canw.exec(); } } -/** - * @return true if every text of qsl is identical, else false. - */ bool eachIsEqual (const QStringList &qsl) { foreach (const QString t, qsl) { if (qsl.at(0) != t) return false; diff --git a/sources/conductorautonumerotation.h b/sources/conductorautonumerotation.h index 2c1ea2e88..d5c1ea3cc 100644 --- a/sources/conductorautonumerotation.h +++ b/sources/conductorautonumerotation.h @@ -1,9 +1,7 @@ #ifndef CONDUCTORAUTONUMEROTATION_H #define CONDUCTORAUTONUMEROTATION_H -#include -#include "conductor.h" -#include "diagram.h" +#include class NumStrategy; @@ -18,48 +16,32 @@ class ConductorAutoNumerotation //methods void setConductor(Conductor *); void numerate(); - void setText(QString); protected: //methods - void setNumStrategy (); + void setNumStrategy (NumStrategy *); //attributes Conductor *conductor_; Diagram *diagram_; QSet conductor_list; NumStrategy *strategy_; - - private: - bool strategy_is_set; }; -class NumStrategy: public QObject +class NumStrategy { - Q_OBJECT - public: - NumStrategy (Conductor *); + NumStrategy (); virtual ~NumStrategy (); - virtual void createNumerotation() = 0; //cree la numerotation en fonction de la strategie utilisé - - public slots: - void applyText(QString); - - protected: - Conductor *conductor_; - QSet c_list; - Diagram *diagram_; + virtual void createNumerotation(Conductor *, Diagram *) = 0; //cree la numerotation en fonction de la strategie utilisé }; class SamePotential: public NumStrategy { - public: - SamePotential (Conductor *); - virtual void createNumerotation(); + virtual void createNumerotation(Conductor *, Diagram *); }; bool eachIsEqual (const QStringList &); diff --git a/sources/conductorautonumerotationwidget.cpp b/sources/conductorautonumerotationwidget.cpp index f87afd7ed..7d774c2de 100644 --- a/sources/conductorautonumerotationwidget.cpp +++ b/sources/conductorautonumerotationwidget.cpp @@ -1,8 +1,8 @@ #include "conductorautonumerotationwidget.h" +#include "conductorproperties.h" +#include "diagramcommands.h" +#include "diagram.h" -/** - * constructor - */ ConductorAutoNumerotationWidget::ConductorAutoNumerotationWidget(Conductor *c, QSet cl, QWidget *parent) : QDialog (parent), conductor_(c), @@ -15,9 +15,6 @@ ConductorAutoNumerotationWidget::ConductorAutoNumerotationWidget(Conductor *c, Q buildInterface(); } -/** - * @brief ConductorAutoNumerotationWidget::buildInterface - */ void ConductorAutoNumerotationWidget::buildInterface() { QVBoxLayout *mainlayout = new QVBoxLayout; QGroupBox *potential_groupbox = new QGroupBox(tr("Textes de potentiel"), this); @@ -98,6 +95,31 @@ QMultiMap ConductorAutoNumerotationWidget::conductorsTextToMap(QS return conductorlist; } +/** + * @brief ConductorAutoNumerotationWidget::applyText + *applique le texte selectionne @text_ a tout les conducteur de @c_list et a @conducteur_ + */ +void ConductorAutoNumerotationWidget::applyText() { + QSet conductorslist = c_list; + conductorslist << conductor_; + QList old_properties, new_properties; + ConductorProperties cp; + + foreach (Conductor *c, conductorslist) { + old_properties << c -> properties(); + cp = c -> properties(); + cp.text = text_; + c -> setProperties(cp); + new_properties << c -> properties(); + c -> setText(text_); + } + // initialise l'objet UndoCommand correspondant + ChangeSeveralConductorsPropertiesCommand *cscpc = new ChangeSeveralConductorsPropertiesCommand(conductorslist); + cscpc -> setOldSettings(old_properties); + cscpc -> setNewSettings(new_properties); + diagram_ -> undoStack().push(cscpc); +} + /** * @brief ConductorAutoNumerotationWidget::setText * enregistre le texte @t passé en parametre @@ -112,9 +134,10 @@ void ConductorAutoNumerotationWidget::setText(QString t) { */ void ConductorAutoNumerotationWidget::accept() { if (text_field -> isEnabled()) { - emit textIsSelected(text_field -> text()); + text_ = text_field -> text(); + applyText(); } else - emit textIsSelected(text_); + applyText(); close(); } diff --git a/sources/conductorautonumerotationwidget.h b/sources/conductorautonumerotationwidget.h index 79d48b47a..d2970b99c 100644 --- a/sources/conductorautonumerotationwidget.h +++ b/sources/conductorautonumerotationwidget.h @@ -20,13 +20,11 @@ class ConductorAutoNumerotationWidget : public QDialog void setText (QString); void accept(); - signals: - void textIsSelected (QString); - private: //methods void buildInterface(); QVBoxLayout* buildRadioList(); + void applyText(); //attributes Conductor *conductor_; diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index b40693d56..3bf0b5f2a 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -37,8 +37,7 @@ #include "qeticons.h" #include "qetmessagebox.h" #include "qtextorientationspinboxwidget.h" -#include "htmleditor/htmleditor.h" -#include "conductorautonumerotation.h" + /** Constructeur @@ -410,9 +409,8 @@ void DiagramView::pasteHere() { } /** - Gere les clics et plus particulierement : - * le clic du milieu (= coller pour X11) - * le clic pour ajouter un champ de texte independant + Manage the events click mouse : + * click to add an independent text field */ void DiagramView::mousePressEvent(QMouseEvent *e) { if (fresh_focus_in_) { @@ -420,32 +418,39 @@ void DiagramView::mousePressEvent(QMouseEvent *e) { fresh_focus_in_ = false; } if (isInteractive() && !scene -> isReadOnly()) { - if (e -> buttons() == Qt::MidButton) { - paste(mapToScene(e -> pos()), QClipboard::Selection); - } else { - if (is_adding_text && e -> buttons() == Qt::LeftButton) { - addDiagramTextAtPos(mapToScene(e -> pos())); - is_adding_text = false; - } + if (is_adding_text && e -> buttons() == Qt::LeftButton) { + addDiagramTextAtPos(mapToScene(e -> pos())); + is_adding_text = false; } } QGraphicsView::mousePressEvent(e); } /** - Gere les actions liees a la rollette de la souris - @param e QWheelEvent decrivant l'evenement rollette + Manage wheel event of mouse + @param e QWheelEvent */ void DiagramView::wheelEvent(QWheelEvent *e) { - // si la touche Ctrl est enfoncee, on zoome / dezoome - if (e -> modifiers() & Qt::ControlModifier) { - if (e -> delta() > 0) { - zoomIn(); - } else { - zoomOut(); + //Zoom and scrolling + if (e->buttons() != Qt::MidButton) { + if (!(e -> modifiers() & Qt::ControlModifier)) { + if (e -> delta() > 0) zoomIn(); + else zoomOut(); + } + else { + QAbstractScrollArea::wheelEvent(e); + } + } + // Or select visualisation or selection mode + else{ + if (!is_moving_view_) { + setVisualisationMode(); + is_moving_view_ = true; + } + else{ + setSelectionMode(); + is_moving_view_ = false; } - } else { - QAbstractScrollArea::wheelEvent(e); } } @@ -711,7 +716,7 @@ void DiagramView::updateWindowTitle() { } /** - Active ou desactive le dessin de grille selon la quantite de pixels affichee + Enables or disables the drawing grid according to the amount of pixels display */ void DiagramView::adjustGridToZoom() { QRectF viewed_scene = viewedSceneRect(); @@ -977,27 +982,13 @@ void DiagramView::editConductor(Conductor *edited_conductor) { if (conductor_dialog.exec() == QDialog::Accepted) { // recupere les nouvelles proprietes ConductorProperties new_properties = cpw -> conductorProperties(); + if (new_properties != old_properties) { - int qmbreturn=0; - //if conductor isn't alone at this potential - //ask user to apply text on every conductors of this potential - if (edited_conductor -> relatedPotentialConductors().size() >= 1){ - qmbreturn = QMessageBox::question(diagramEditor(), tr("Textes de conducteurs"), - tr("Voulez-vous appliquer le nouveau texte \n" - "\340 l'ensemble des conducteurs de ce potentiel ?"), - QMessageBox::No| QMessageBox::Yes, QMessageBox::Yes); - if (qmbreturn == QMessageBox::Yes){ - ConductorAutoNumerotation can(edited_conductor); - can.setText(new_properties.text); - } - } - if (qmbreturn == 0 || qmbreturn == QMessageBox::No) { - // initialise l'objet UndoCommand correspondant - ChangeConductorPropertiesCommand *ccpc = new ChangeConductorPropertiesCommand(edited_conductor); - ccpc -> setOldSettings(old_properties); - ccpc -> setNewSettings(new_properties); - diagram() -> undoStack().push(ccpc); - } + // initialise l'objet UndoCommand correspondant + ChangeConductorPropertiesCommand *ccpc = new ChangeConductorPropertiesCommand(edited_conductor); + ccpc -> setOldSettings(old_properties); + ccpc -> setNewSettings(new_properties); + diagram() -> undoStack().push(ccpc); } } }