diff --git a/sources/qetgraphicsitem/element.cpp b/sources/qetgraphicsitem/element.cpp index 6e4317098..ee2f0f650 100644 --- a/sources/qetgraphicsitem/element.cpp +++ b/sources/qetgraphicsitem/element.cpp @@ -24,6 +24,7 @@ #include #include #include "elementprovider.h" +#include "diagramposition.h" /** Constructeur pour un element sans scene ni parent @@ -54,6 +55,8 @@ void Element::editProperty() { } } + + /** @return true si l'element est mis en evidence */ @@ -499,3 +502,23 @@ void Element::initLink(QETProject *prj) { } tmp_uuids_link.clear(); } + +/** + * @brief comparPos + * Compare position of the two elements. Compare 3 points: + * 1 folio - 2 row - 3 line + * returns a response when a comparison is found. + * @return true if elmt1 is at lower position than elmt 2, else false + */ +bool comparPos(const Element *elmt1, const Element *elmt2) { + //Compare folio first + if (elmt1->diagram()->folioIndex() != elmt2->diagram()->folioIndex()) + return elmt1->diagram()->folioIndex() < elmt2->diagram()->folioIndex(); + //Compare the row in second + QString a = elmt1->diagram()->convertPosition(elmt1->scenePos()).letter(); + QString b = elmt2->diagram()->convertPosition(elmt2->scenePos()).letter(); + if (a != b) + return apos().x() <= elmt2->pos().x(); +} diff --git a/sources/qetgraphicsitem/element.h b/sources/qetgraphicsitem/element.h index 6c8213065..813649b15 100644 --- a/sources/qetgraphicsitem/element.h +++ b/sources/qetgraphicsitem/element.h @@ -104,7 +104,7 @@ class Element : public QetGraphicsItem { virtual void unlinkAllElements() {} virtual void unlinkElement(Element *) {} void initLink(QETProject *); - QList linkedElements () const; + QList linkedElements (); virtual int linkType() const {return link_type_;} // @return the linkable type void newUuid() {uuid_ = QUuid::createUuid();} //create new uuid for this element @@ -179,6 +179,8 @@ class Element : public QetGraphicsItem { void updatePixmap(); }; +bool comparPos(const Element * elmt1, const Element * elmt2); + inline bool Element::isFree() const { return (connected_elements.isEmpty()); } @@ -221,7 +223,12 @@ inline QUuid Element::uuid() const { return uuid_; } -inline QList Element::linkedElements() const { +/** + * @brief Element::linkedElements + * @return the list of linked elements, the list is sorted by position + */ +inline QList Element::linkedElements() { + qSort(connected_elements.begin(), connected_elements.end(), comparPos); return connected_elements; } diff --git a/sources/ui/elementselectorwidget.cpp b/sources/ui/elementselectorwidget.cpp index 1e13ea68b..25f851757 100644 --- a/sources/ui/elementselectorwidget.cpp +++ b/sources/ui/elementselectorwidget.cpp @@ -35,6 +35,7 @@ ElementSelectorWidget::ElementSelectorWidget(QList elmt_list, QWidge selected_element(0), showed_element(0) { + qSort(elements_list.begin(), elements_list.end(), comparPos); ui->setupUi(this); buildInterface(); } @@ -86,6 +87,7 @@ void ElementSelectorWidget::clear() { void ElementSelectorWidget::setList(QList elmt_list) { clear(); elements_list << elmt_list; + qSort(elements_list.begin(), elements_list.end(), comparPos); buildInterface(); }