[qet] [4203] Conductor : minor change |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 4203
Author: blacksun
Date: 2015-09-15 10:20:39 +0200 (Tue, 15 Sep 2015)
Log Message:
-----------
Conductor : minor change
Modified Paths:
--------------
trunk/sources/nomenclature.cpp
trunk/sources/nomenclature.h
trunk/sources/qetgraphicsitem/conductor.cpp
trunk/sources/qetgraphicsitem/conductor.h
trunk/sources/qetgraphicsitem/conductortextitem.cpp
trunk/sources/qetgraphicsitem/terminal.cpp
Modified: trunk/sources/nomenclature.cpp
===================================================================
--- trunk/sources/nomenclature.cpp 2015-09-13 20:19:44 UTC (rev 4202)
+++ trunk/sources/nomenclature.cpp 2015-09-15 08:20:39 UTC (rev 4203)
@@ -1,17 +1,17 @@
/*
Copyright 2006-2015 The QElectroTech Team
This file is part of QElectroTech.
-
+
QElectroTech is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
-
+
QElectroTech is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
@@ -23,10 +23,9 @@
/**
Constructor
- @param an project (QETProject) of QET file
+ @param an project (QETProject) of QET file
*/
nomenclature::nomenclature(QETProject *project, QWidget *parent):
- QObject(),
m_project(project)
{
m_parent = parent;
@@ -44,23 +43,24 @@
Save to csv file
@param true if success
*/
-bool nomenclature::saveToCSVFile() {
+bool nomenclature::saveToCSVFile()
+{
// SAVE IN FILE
- QString name = tr("nomenclature_") + QString(m_project -> title());
+ QString name = QObject::tr("nomenclature_") + QString(m_project -> title());
if (!name.endsWith(".csv")) {
name += ".csv";
}
- QString filename = QFileDialog::getSaveFileName(this->m_parent, tr("Enregister sous... "), name, tr("Fichiers csv (*.csv)"));
+ QString filename = QFileDialog::getSaveFileName(this->m_parent, QObject::tr("Enregister sous... "), name, QObject::tr("Fichiers csv (*.csv)"));
QFile file(filename);
if( !filename.isEmpty() ) {
if(QFile::exists ( filename )){
// if file already exist -> delete it
if(!QFile::remove ( filename ) ){
- QMessageBox::critical(this->m_parent, tr("Erreur"),
- tr("Impossible de remplacer le fichier!\n\n")+
+ QMessageBox::critical(this->m_parent, QObject::tr("Erreur"),
+ QObject::tr("Impossible de remplacer le fichier!\n\n")+
"Destination: "+filename+"\n");
return false;
- }
+ }
}
if (file.open(QIODevice::WriteOnly | QIODevice::Text)){
QTextStream stream(&file);
@@ -69,7 +69,7 @@
else return false;
}
else return false;
-
+
return true;
}
@@ -78,23 +78,22 @@
* Create and formated a nomenclature to csv file.
* @return The QString of nomenclature
*/
-QString nomenclature::getNomenclature() {
+QString nomenclature::getNomenclature()
+{
//Process...
- QString data = tr("NOMENCLATURE : ") + m_project -> title() + "\n\n";
- data += tr("N° de folio") +";"
- ""+ tr("Titre de folio") +";"
- ""+ tr("Désignation qet") +";"
- ""+ tr("Position") +";"
- ""+ tr("Label") +";"
- ""+ tr("Désignation") +";"
- ""+ tr("Commentaire") +";"
- ""+ tr("Fabricant") +";"
- ""+ tr("Reference") +";"
- ""+ tr("Bloc auxilliaire 1") +";"
- ""+ tr("Bloc auxilliaire 2") +";"
- ""+ tr("Machine-reference") +";"
- ""+ tr("Localisation") +";"
- ""+ tr("Fonction") +"\n";
+ QString data = QObject::tr("NOMENCLATURE : ") + m_project -> title() + "\n\n";
+ data += QObject::tr("N° de folio") +";"
+ ""+ QObject::tr("Titre de folio") +";"
+ ""+ QObject::tr("Désignation qet") +";"
+ ""+ QObject::tr("Position") +";"
+ ""+ QObject::tr("Label") +";"
+ ""+ QObject::tr("Désignation") +";"
+ ""+ QObject::tr("Commentaire") +";"
+ ""+ QObject::tr("Fabricant") +";"
+ ""+ QObject::tr("Reference") +";"
+ ""+ QObject::tr("Machine-reference") +";"
+ ""+ QObject::tr("Localisation") +";"
+ ""+ QObject::tr("Fonction") +"\n";
if(m_list_diagram.isEmpty()) return data;
@@ -134,8 +133,6 @@
info += elmt_info["comment"].toString() + ";";
info += elmt_info["manufacturer"].toString() + ";";
info += elmt_info["manufacturer-reference"].toString() + ";";
- info += elmt_info["Auxiliary_1-contact-bloc"].toString() + ";";
- info += elmt_info["Auxiliary_2-contact-bloc"].toString() + ";";
info += elmt_info["machine-manufacturer-reference"].toString() + ";";
info += elmt_info["location"].toString() + ";";
info += elmt_info["function"].toString() + "\n";
Modified: trunk/sources/nomenclature.h
===================================================================
--- trunk/sources/nomenclature.h 2015-09-13 20:19:44 UTC (rev 4202)
+++ trunk/sources/nomenclature.h 2015-09-15 08:20:39 UTC (rev 4203)
@@ -30,15 +30,12 @@
class QETProject;
class Diagram;
class Element;
-class DiagramContent;
-class CustomeElement;
/**
This class represents a nomenclature...
*/
-class nomenclature : public QObject {
- Q_OBJECT
-
+class nomenclature
+{
private:
QETProject *m_project;
QList<Diagram *> m_list_diagram;
Modified: trunk/sources/qetgraphicsitem/conductor.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/conductor.cpp 2015-09-13 20:19:44 UTC (rev 4202)
+++ trunk/sources/qetgraphicsitem/conductor.cpp 2015-09-15 08:20:39 UTC (rev 4203)
@@ -34,7 +34,6 @@
bool Conductor::pen_and_brush_initialized = false;
QPen Conductor::conductor_pen = QPen();
QBrush Conductor::conductor_brush = QBrush();
-QBrush Conductor::square_brush = QBrush(Qt::darkGreen);
/**
* @brief Conductor::Conductor
@@ -48,14 +47,12 @@
terminal1(p1),
terminal2(p2),
bMouseOver(false),
- destroyed_(false),
+ m_handler(10),
text_item(0),
segments(NULL),
- moving_point(false),
moving_segment(false),
modified_path(false),
has_to_save_profile(false),
- segments_squares_scale_(1.0),
must_highlight_(Conductor::None)
{
//Set the default conductor properties.
@@ -106,15 +103,13 @@
}
/**
- Destructeur
- Detruit le conducteur ainsi que ses segments. Il ne detruit pas les bornes
- mais s'en detache
-*/
-Conductor::~Conductor() {
- // se detache des bornes
- if (!isDestroyed()) destroy();
-
- // supprime les segments
+ * @brief Conductor::~Conductor
+ * Destructor. The conductor is removed from is terminal
+ */
+Conductor::~Conductor()
+{
+ terminal1->removeConductor(this);
+ terminal2->removeConductor(this);
deleteSegments();
}
@@ -437,7 +432,8 @@
@param options Les options de style pour le conducteur
@param qw Le QWidget sur lequel on dessine
*/
-void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWidget *qw) {
+void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWidget *qw)
+{
Q_UNUSED(qw);
qp -> save();
qp -> setRenderHint(QPainter::Antialiasing, false);
@@ -458,9 +454,8 @@
}
}
- // if mouse over conductor change size
- if ( bMouseOver ) conductor_pen.setWidthF(3.0);
- else conductor_pen.setWidthF(1.0);
+ //Draw the conductor bigger when is hovered
+ conductor_pen.setWidth(bMouseOver? 5 : 1);
// affectation du QPen et de la QBrush modifies au QPainter
qp -> setBrush(conductor_brush);
@@ -490,32 +485,10 @@
if (isSelected()) qp -> setBrush(Qt::NoBrush);
}
- // decalage ideal pour le rendu centre d'un carre / cercle de 2.0 px de cote / diametre
- qreal pretty_offset = 1.0;
+ //Draw the squares used to modify the path of conductor when he is selected
+ if (isSelected())
+ m_handler.drawHandler(qp, handlerPoints());
- // dessin des points d'accroche du conducteur si celui-ci est selectionne
- if (isSelected()) {
- QList<QPointF> points = segmentsToPoints();
- QPointF previous_point;
- for (int i = 1 ; i < (points.size() -1) ; ++ i) {
- QPointF point = points.at(i);
-
- // dessine le carre de saisie du segment
- if (i > 1) {
- qp -> fillRect(
- QRectF(
- ((previous_point.x() + point.x()) / 2.0 ) - pretty_offset * segments_squares_scale_,
- ((previous_point.y() + point.y()) / 2.0 ) - pretty_offset * segments_squares_scale_,
- 2.0 * segments_squares_scale_,
- 2.0 * segments_squares_scale_
- ),
- square_brush
- );
- }
- previous_point = point;
- }
- }
-
// dessine les eventuelles jonctions
QList<QPointF> junctions_list = junctions();
if (!junctions_list.isEmpty()) {
@@ -525,21 +498,12 @@
qp -> setBrush(junction_brush);
qp -> setRenderHint(QPainter::Antialiasing, true);
foreach(QPointF point, junctions_list) {
- qp -> drawEllipse(QRectF(point.x() - pretty_offset, point.y() - pretty_offset, 2.0, 2.0));
+ qp -> drawEllipse(QRectF(point.x() - 1, point.y() - 1, 2.0, 2.0));
}
}
qp -> restore();
}
-/**
- Methode de preparation a la destruction du conducteur ; le conducteur se detache de ses deux bornes
-*/
-void Conductor::destroy() {
- destroyed_ = true;
- terminal1 -> removeConductor(this);
- terminal2 -> removeConductor(this);
-}
-
/// @return le Diagram auquel ce conducteur appartient, ou 0 si ce conducteur est independant
Diagram *Conductor::diagram() const {
return(qobject_cast<Diagram *>(scene()));
@@ -578,143 +542,107 @@
/**
* @brief Conductor::mouseDoubleClickEvent
- * Action at double click on this item
- * @param e
+ * Manage the mouse double click
+ * @param event
*/
-void Conductor::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *e) {
- e->accept();
+void Conductor::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) {
+ event->accept();
editProperty();
}
/**
- Gere les clics sur le conducteur.
- @param e L'evenement decrivant le clic.
-*/
-void Conductor::mousePressEvent(QGraphicsSceneMouseEvent *e) {
- // clic gauche
- if (e -> buttons() & Qt::LeftButton) {
- // recupere les coordonnees du clic
- press_point = e -> pos();
-
- /*
- parcourt les segments pour determiner si le clic a eu lieu
- - sur l'extremite d'un segment
- - sur le milieu d'un segment
- - ailleurs
- */
- ConductorSegment *segment = segments;
- while (segment -> hasNextSegment()) {
- if (hasClickedOn(press_point, segment -> secondPoint())) {
- moving_point = true;
- moving_segment = false;
- moved_segment = segment;
- break;
- } else if (hasClickedOn(press_point, segment -> middle())) {
- moving_point = false;
- moving_segment = true;
- moved_segment = segment;
- break;
- }
- segment = segment -> nextSegment();
- }
- if (moving_segment || moving_point) {
- // en cas de debut de modification de conducteur, on memorise la position du champ de texte
+ * @brief Conductor::mousePressEvent
+ * Manage the mouse press event
+ * @param event
+ */
+void Conductor::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ //Left clic
+ if (event->buttons() & Qt::LeftButton)
+ {
+ //If user click on a handler (square used to modify the path of conductor),
+ //we get the segment corresponding to the handler
+ int index = m_handler.pointIsHoverHandler(event->pos(), handlerPoints());
+ if (index > -1)
+ {
+ moving_segment = true;
+ moved_segment = segmentsList().at(index+1);
before_mov_text_pos_ = text_item -> pos();
}
}
- QGraphicsPathItem::mousePressEvent(e);
- if (e -> modifiers() & Qt::ControlModifier) {
+
+ QGraphicsPathItem::mousePressEvent(event);
+
+ if (event -> modifiers() & Qt::ControlModifier)
setSelected(!isSelected());
- }
}
/**
- Gere les deplacements de souris sur le conducteur.
- @param e L'evenement decrivant le deplacement de souris.
-*/
-void Conductor::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
- // clic gauche
- if (e -> buttons() & Qt::LeftButton) {
- // position pointee par la souris
- qreal mouse_x = e -> pos().x();
- qreal mouse_y = e -> pos().y();
-
- bool snap_conductors_to_grid = e -> modifiers() ^ Qt::ShiftModifier;
- if (snap_conductors_to_grid) {
- mouse_x = qRound(mouse_x / (Diagram::xGrid * 1.0)) * Diagram::xGrid;
- mouse_y = qRound(mouse_y / (Diagram::yGrid * 1.0)) * Diagram::yGrid;
- }
-
- if (moving_point) {
- // la modification par points revient bientot
- /*
- // position precedente du point
- QPointF p = moved_segment -> secondPoint();
- qreal p_x = p.x();
- qreal p_y = p.y();
+ * @brief Conductor::mouseMoveEvent
+ * Manage the mouse move event
+ * @param event
+ */
+void Conductor::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ //Left clic
+ if ((event->buttons() & Qt::LeftButton) && moving_segment)
+ {
+ //Snap the mouse pos to grid
+ QPointF pos_ = Diagram::snapToGrid(event->pos());
+
+ //Position of the last point
+ QPointF p = moved_segment -> middle();
+
+ //Calcul the movement
+ moved_segment -> moveX(pos_.x() - p.x());
+ moved_segment -> moveY(pos_.y() - p.y());
- // calcul du deplacement
- moved_segment -> moveX(mouse_x - p_x());
- moved_segment -> moveY(mouse_y - p_y());
-
- // application du deplacement
- modified_path = true;
- updatePoints();
- segmentsToPath();
- */
- } else if (moving_segment) {
- // position precedente du point
- QPointF p = moved_segment -> middle();
-
- // calcul du deplacement
- moved_segment -> moveX(mouse_x - p.x());
- moved_segment -> moveY(mouse_y - p.y());
-
- // application du deplacement
- modified_path = true;
- has_to_save_profile = true;
- segmentsToPath();
- calculateTextItemPosition();
- }
+ //Apply the movement
+ modified_path = true;
+ has_to_save_profile = true;
+ segmentsToPath();
+ calculateTextItemPosition();
}
- QGraphicsPathItem::mouseMoveEvent(e);
+
+ QGraphicsPathItem::mouseMoveEvent(event);
}
/**
- Gere les relachements de boutons de souris sur le conducteur
- @param e L'evenement decrivant le lacher de bouton.
-*/
-void Conductor::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
- // clic gauche
- moving_point = false;
+ * @brief Conductor::mouseReleaseEvent
+ * Manage the mouse release event
+ * @param event
+ */
+void Conductor::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
moving_segment = false;
- if (has_to_save_profile) {
+ if (has_to_save_profile)
+ {
saveProfile();
has_to_save_profile = false;
}
- if (!(e -> modifiers() & Qt::ControlModifier)) {
- QGraphicsPathItem::mouseReleaseEvent(e);
- }
+
+ if (!(event -> modifiers() & Qt::ControlModifier))
+ QGraphicsPathItem::mouseReleaseEvent(event);
}
/**
- Gere l'entree de la souris dans la zone du conducteur
- @param e Le QGraphicsSceneHoverEvent decrivant l'evenement
-*/
-void Conductor::hoverEnterEvent(QGraphicsSceneHoverEvent *e) {
- Q_UNUSED(e);
- segments_squares_scale_ = 2.0;
+ * @brief Conductor::hoverEnterEvent
+ * Manage the hover enter event
+ * @param event
+ */
+void Conductor::hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
+ Q_UNUSED(event);
bMouseOver = true;
update();
}
/**
- Gere la sortie de la souris de la zone du conducteur
- @param e Le QGraphicsSceneHoverEvent decrivant l'evenement
-*/
-void Conductor::hoverLeaveEvent(QGraphicsSceneHoverEvent *e) {
- Q_UNUSED(e);
- segments_squares_scale_ = 1.0;
+ * @brief Conductor::hoverLeaveEvent
+ * Manage the mouse leave event
+ * @param event
+ */
+void Conductor::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) {
+ Q_UNUSED(event);
update();
bMouseOver = false;
}
@@ -723,26 +651,26 @@
* @brief Conductor::hoverMoveEvent conductor
* @param e QGraphicsSceneHoverEvent describing the event
*/
-void Conductor::hoverMoveEvent(QGraphicsSceneHoverEvent *e) {
-
- if (isSelected()) {
- QPointF hover_point = mapFromScene(e -> pos()) + scenePos();
- ConductorSegment *segment = segments;
- bool cursor_set = false;
- while (segment -> hasNextSegment()) {
- if (hasClickedOn(hover_point, segment -> secondPoint())) {
+void Conductor::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
+{
+ if (isSelected())
+ {
+ //If user hover an handler (square used to modify the path of conductor),
+ //we get the segment corresponding to the handler
+ int index = m_handler.pointIsHoverHandler(event->pos(), handlerPoints());
+ if (index > -1)
+ {
+ ConductorSegment *segment_ = segmentsList().at(index+1);
+ if (m_handler.pointIsInHandler(event->pos(), segment_->secondPoint()))
setCursor(Qt::ForbiddenCursor);
- cursor_set = true;
- } else if (hasClickedOn(hover_point, segment -> middle())) {
- setCursor(segment -> isVertical() ? Qt::SplitHCursor : Qt::SplitVCursor);
- cursor_set = true;
- }
- segment = segment -> nextSegment();
+ else if (m_handler.pointIsInHandler(event->pos(), segment_->middle()))
+ setCursor(segmentsList().at(index+1)->isVertical() ? Qt::SplitHCursor : Qt::SplitVCursor);
}
- if (!cursor_set) setCursor(Qt::ArrowCursor);
+ else
+ setCursor(Qt::ArrowCursor);
}
- QGraphicsPathItem::hoverMoveEvent(e);
+ QGraphicsPathItem::hoverMoveEvent(event);
}
/**
@@ -773,125 +701,48 @@
}
/**
- @return Le rectangle delimitant l'espace de dessin du conducteur
-*/
-QRectF Conductor::boundingRect() const {
- QRectF retour = QGraphicsPathItem::boundingRect();
- retour.adjust(-11.0, -11.0, 11.0, 11.0);
- return(retour);
+ * @brief Conductor::boundingRect
+ * @return
+ */
+QRectF Conductor::boundingRect() const
+{
+ QRectF br = shape().boundingRect();
+ return br.adjusted(-10, -10, 10, 10);
}
/**
- @return La forme / zone "cliquable" du conducteur (epaisseur : 5.0px).
- @see variableShape()
-*/
-QPainterPath Conductor::shape() const {
- return(variableShape(5.0));
-}
+ * @brief Conductor::shape
+ * @return the shape of conductor.
+ * The shape thickness is bigger when conductor is hovered
+ */
+QPainterPath Conductor::shape() const
+{
+ QPainterPathStroker pps;
+ pps.setWidth(bMouseOver? 5 : 1);
+ pps.setJoinStyle(conductor_pen.joinStyle());
-/**
- @return la distance en dessous de laquelle on considere qu'un point est a
- proximite du trajet du conducteur. La valeur est actuellement fixee a
- 60.0px.
-*/
-qreal Conductor::nearDistance() const {
- return(60.0);
-}
+ QPainterPath shape_(pps.createStroke(path()));
-/**
- @return la zone dans laquelle dont on considere que tous les points sont a
- proximite du trajet du conducteur.
- @see nearDistance()
- @see variableShape()
-*/
-QPainterPath Conductor::nearShape() const {
- return(variableShape(nearDistance()));
-}
+ if (isSelected())
+ foreach (QRectF rect, m_handler.handlerRect(handlerPoints()))
+ shape_.addRect(rect);
-/**
- @return la forme du conducteur
- @param thickness la moitie de l'epaisseur voulue pour cette forme
-*/
-QPainterPath Conductor::variableShape(const qreal &thickness) const {
- qreal my_thickness = qAbs(thickness);
-
- QList<QPointF> points = segmentsToPoints();
- QPainterPath area;
- QPointF previous_point;
- QPointF *point1, *point2;
- foreach(QPointF point, points) {
- if (!previous_point.isNull()) {
- if (point.x() == previous_point.x()) {
- if (point.y() <= previous_point.y()) {
- point1 = &point;
- point2 = &previous_point;
- } else {
- point1 = &previous_point;
- point2 = &point;
- }
- } else {
- if (point.x() <= previous_point.x()) {
- point1 = &point;
- point2 = &previous_point;
- } else {
- point1 = &previous_point;
- point2 = &point;
- }
- }
- qreal p1_x = point1 -> x();
- qreal p1_y = point1 -> y();
- qreal p2_x = point2 -> x();
- qreal p2_y = point2 -> y();
- area.setFillRule(Qt::OddEvenFill);
- area.addRect(p1_x - my_thickness, p1_y - my_thickness, my_thickness * 2.0 + p2_x - p1_x, my_thickness * 2.0 + p2_y - p1_y);
- }
- previous_point = point;
- area.setFillRule(Qt::WindingFill);
- area.addRect(point.x() - my_thickness, point.y() - my_thickness, my_thickness * 2.0, my_thickness * 2.0 );
- }
- return(area);
+ return shape_;
}
/**
- @param point un point, exprime dans les coordonnees du conducteur
- @return true si le point est a proximite du conducteur, c-a-d a moins de
- 60px du conducteur.
-*/
-bool Conductor::isNearConductor(const QPointF &point) {
- return(variableShape(60.1).contains(point));
+ * @brief Conductor::nearShape
+ * @return : An area in which it is considered a point is near this conductor.
+ */
+QPainterPath Conductor::nearShape() const
+{
+ QPainterPathStroker pps;
+ pps.setWidth(120);
+ pps.setJoinStyle(conductor_pen.joinStyle());
+ return pps.createStroke(path());
}
/**
- Renvoie une valeur donnee apres l'avoir bornee entre deux autres valeurs,
- en y ajoutant une marge interne.
- @param tobound valeur a borner
- @param bound1 borne 1
- @param bound2 borne 2
- @param space marge interne ajoutee
- @return La valeur bornee
-*/
-qreal Conductor::conductor_bound(qreal tobound, qreal bound1, qreal bound2, qreal space) {
- qDebug() << "will bound" << tobound << "between" << bound1 << "and" << bound2 ;
- if (bound1 < bound2) {
- return(qBound(bound1 + space, tobound, bound2 - space));
- } else {
- return(qBound(bound2 + space, tobound, bound1 - space));
- }
-}
-
-/**
- Renvoie une valeur donnee apres l'avoir bornee avant ou apres une valeur.
- @param tobound valeur a borner
- @param bound borne
- @param positive true pour borner la valeur avant la borne, false sinon
- @return La valeur bornee
-*/
-qreal Conductor::conductor_bound(qreal tobound, qreal bound, bool positive) {
- qreal space = 5.0;
- return(positive ? qMax(tobound, bound + space) : qMin(tobound, bound - space));
-}
-
-/**
@param type Type de Segments
@return Le nombre de segments composant le conducteur.
*/
@@ -950,22 +801,6 @@
}
/**
- Permet de savoir si un point est tres proche d'un autre. Cela sert surtout
- pour determiner si un clic a ete effectue pres d'un point donne.
- @param press_point Point effectivement clique
- @param point point cliquable
- @return true si l'on peut considerer que le point a ete clique, false sinon
-*/
-bool Conductor::hasClickedOn(QPointF press_point, QPointF point) const {
- return (
- press_point.x() >= point.x() - 5.0 &&\
- press_point.x() < point.x() + 5.0 &&\
- press_point.y() >= point.y() - 5.0 &&\
- press_point.y() < point.y() + 5.0
- );
-}
-
-/**
* @brief Conductor::fromXml
* Load the conductor and her information from xml element
* @param e
@@ -978,8 +813,9 @@
bool return_ = pathFromXml(e);
text_item -> fromXml(e);
- properties_. fromXml(e);
- readProperties();
+ ConductorProperties pr;
+ pr.fromXml(e);
+ setProperties(pr);
return return_;
}
@@ -1096,6 +932,30 @@
return(true);
}
+/**
+ * @brief Conductor::handlerPoints
+ * @return The points used to draw the handler square, used to modify
+ * the path of the conductor.
+ * The points stored in the QVector are the middle point of each segments that compose the conductor,
+ * at exception of the first and last segment because there just here to extend the terminal.
+ */
+QVector<QPointF> Conductor::handlerPoints() const
+{
+ QList <ConductorSegment *> sl = segmentsList();
+ if (sl.size() >= 3)
+ {
+ sl.removeFirst();
+ sl.removeLast();
+ }
+
+ QVector <QPointF> middle_points;
+
+ foreach(ConductorSegment *segment, sl)
+ middle_points.append(segment->middle());
+
+ return middle_points;
+}
+
/// @return les segments de ce conducteur
const QList<ConductorSegment *> Conductor::segmentsList() const {
if (segments == NULL) return(QList<ConductorSegment *>());
@@ -1365,7 +1225,15 @@
other_conductor->setProperties(other_properties);
}
- readProperties();
+ setText(properties_.text);
+ text_item -> setFontSize(properties_.text_size);
+ if (properties_.type != ConductorProperties::Multi)
+ text_item -> setVisible(false);
+ else
+ text_item -> setVisible(properties_.m_show_text);
+ calculateTextItemPosition();
+ update();
+
emit propertiesChange();
}
@@ -1378,22 +1246,6 @@
}
/**
- * @brief Conductor::readProperties
- * Read and apply properties
- */
-void Conductor::readProperties() {
- setText(properties_.text);
- text_item -> setFontSize(properties_.text_size);
- if (properties_.type != ConductorProperties::Multi) {
- text_item -> setVisible(false);
- } else {
- text_item -> setVisible(properties_.m_show_text);
- }
- calculateTextItemPosition();
- update();
-}
-
-/**
@return true si le conducteur est mis en evidence
*/
Conductor::Highlight Conductor::highlight() const {
@@ -1645,21 +1497,6 @@
}
/**
- @param p Point, en coordonnees locales
- @return true si le point p appartient au trajet du conducteur
-*/
-bool Conductor::containsPoint(const QPointF &p) const {
- if (!segments) return(false);
- ConductorSegment *segment = segments;
- while (segment -> hasNextSegment()) {
- QRectF rect(segment -> firstPoint(), segment -> secondPoint());
- if (rect.contains(p)) return(true);
- segment = segment -> nextSegment();
- }
- return(false);
-}
-
-/**
@param start Point de depart
@param end Point d'arrivee
@return le coin vers lequel se dirige le trajet de start vers end
Modified: trunk/sources/qetgraphicsitem/conductor.h
===================================================================
--- trunk/sources/qetgraphicsitem/conductor.h 2015-09-13 20:19:44 UTC (rev 4202)
+++ trunk/sources/qetgraphicsitem/conductor.h 2015-09-15 08:20:39 UTC (rev 4203)
@@ -20,6 +20,7 @@
#include "conductorproperties.h"
#include <QGraphicsPathItem>
+#include "QetGraphicsItemModeler/qetgraphicshandlerutility.h"
class ConductorProfile;
class ConductorSegmentProfile;
@@ -74,9 +75,6 @@
@return the QGraphicsItem type
*/
virtual int type() const { return Type; }
- void destroy();
- /// @return true if this conductor is destroyed
- bool isDestroyed() const { return(destroyed_); }
Diagram *diagram() const;
ConductorTextItem *textItem() const;
void updatePath(const QRectF & = QRectF());
@@ -89,14 +87,10 @@
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
QRectF boundingRect() const;
virtual QPainterPath shape() const;
- virtual qreal nearDistance() const;
virtual QPainterPath nearShape() const;
- virtual QPainterPath variableShape(const qreal &) const;
- virtual bool isNearConductor(const QPointF &);
qreal length() const;
ConductorSegment *middleSegment();
QPointF posForText(Qt::Orientations &flag);
- bool containsPoint(const QPointF &) const;
QString text() const;
void setText(const QString &);
@@ -108,6 +102,7 @@
bool pathFromXml(const QDomElement &);
public:
+ QVector <QPointF> handlerPoints() const;
const QList<ConductorSegment *> segmentsList() const;
void setProperties(const ConductorProperties &properties);
ConductorProperties properties() const;
@@ -115,7 +110,6 @@
ConductorProfile profile(Qt::Corner) const;
void setProfiles(const ConductorProfilesGroup &);
ConductorProfilesGroup profiles() const;
- void readProperties();
void calculateTextItemPosition();
virtual Highlight highlight() const;
virtual void setHighlighted(Highlight);
@@ -127,29 +121,26 @@
void displayedTextChanged();
protected:
- virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *);
- virtual void mousePressEvent(QGraphicsSceneMouseEvent *);
- virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *);
- virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
- virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *);
- virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *);
- virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *);
- virtual QVariant itemChange(GraphicsItemChange, const QVariant &);
+ virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
+ virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
+ virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+ virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
+ virtual QVariant itemChange(GraphicsItemChange, const QVariant &);
bool bMouseOver;
private:
+ QetGraphicsHandlerUtility m_handler;
/// Functional properties
ConductorProperties properties_;
- /// Whether this conductor is still valid
- bool destroyed_;
/// Text input for non simple, non-singleline conductors
ConductorTextItem *text_item;
/// Segments composing the conductor
ConductorSegment *segments;
/// Attributs related to mouse interaction
- QPointF press_point;
- bool moving_point;
bool moving_segment;
int moved_point;
qreal previous_z_value;
@@ -165,10 +156,7 @@
/// QPen et QBrush objects used to draw conductors
static QPen conductor_pen;
static QBrush conductor_brush;
- static QBrush square_brush;
static bool pen_and_brush_initialized;
- /// Scale factor to render square used to move segments
- qreal segments_squares_scale_;
/// Define whether and how the conductor should be highlighted
Highlight must_highlight_;
bool m_valid;
@@ -183,15 +171,12 @@
QList<ConductorBend> bends() const;
QList<QPointF> junctions() const;
void pointsToSegments(QList<QPointF>);
- bool hasClickedOn(QPointF, QPointF) const;
Qt::Corner currentPathType() const;
void deleteSegments();
static int getCoeff(const qreal &, const qreal &);
static int getSign(const qreal &);
QHash<ConductorSegmentProfile *, qreal> shareOffsetBetweenSegments(const qreal &offset, const QList<ConductorSegmentProfile *> &, const qreal & = 0.01) const;
static QPointF extendTerminal(const QPointF &, Qet::Orientation, qreal = 9.0);
- static qreal conductor_bound(qreal, qreal, qreal, qreal = 0.0);
- static qreal conductor_bound(qreal, qreal, bool);
static Qt::Corner movementType(const QPointF &, const QPointF &);
static QPointF movePointIntoPolygon(const QPointF &, const QPainterPath &);
};
Modified: trunk/sources/qetgraphicsitem/conductortextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/conductortextitem.cpp 2015-09-13 20:19:44 UTC (rev 4202)
+++ trunk/sources/qetgraphicsitem/conductortextitem.cpp 2015-09-15 08:20:39 UTC (rev 4203)
@@ -161,7 +161,7 @@
QPointF intended_pos = event ->scenePos() + m_mouse_to_origin_movement;
if (parent_conductor_) {
- if (parent_conductor_ -> isNearConductor(intended_pos)) {
+ if (parent_conductor_->nearShape().contains(intended_pos)) {
event->modifiers() == Qt::ControlModifier ? setPos(intended_pos) : setPos(Diagram::snapToGrid(intended_pos));
parent_conductor_ -> setHighlighted(Conductor::Normal);
} else {
Modified: trunk/sources/qetgraphicsitem/terminal.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/terminal.cpp 2015-09-13 20:19:44 UTC (rev 4202)
+++ trunk/sources/qetgraphicsitem/terminal.cpp 2015-09-15 08:20:39 UTC (rev 4203)
@@ -637,15 +637,12 @@
}
/**
- Met a jour l'eventuel conducteur relie a la borne.
- @param newpos Position de l'element parent a prendre en compte
-*/
+ * @brief Terminal::updateConductor
+ * Update the path of conductor docked to this terminal
+ */
void Terminal::updateConductor() {
- if (!scene() || !parentItem()) return;
- foreach (Conductor *conductor, conductors_) {
- if (conductor -> isDestroyed()) continue;
- conductor -> updatePath();
- }
+ foreach (Conductor *conductor, conductors_)
+ conductor->updatePath();
}
/**