diff --git a/dev_doc/enum_type_of_QGraphicsItem b/dev_doc/enum_type_of_QGraphicsItem index 068b37d70..33e5c3e57 100644 --- a/dev_doc/enum_type_of_QGraphicsItem +++ b/dev_doc/enum_type_of_QGraphicsItem @@ -11,6 +11,7 @@ DiagramImageItem + 1007 QetShapItem + 1008 crossRefItem + 1009 DynamiqueElementTextItem + 1010 +TerminalStripItem +1011 ElementPrimitiveDecorator + 2200 ###ELEMENT EDITOR### diff --git a/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp b/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp index 48b3de916..8b4ebf94c 100644 --- a/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp +++ b/sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp @@ -47,3 +47,11 @@ QRectF TerminalStripItem::boundingRect() const return br_; } + +/** + * @brief TerminalStripItem::name + * @return usual name of this item + */ +QString TerminalStripItem::name() const { + return tr("plan de bornes"); +} diff --git a/sources/TerminalStrip/GraphicsItem/terminalstripitem.h b/sources/TerminalStrip/GraphicsItem/terminalstripitem.h index e3410037e..1fbb4f22c 100644 --- a/sources/TerminalStrip/GraphicsItem/terminalstripitem.h +++ b/sources/TerminalStrip/GraphicsItem/terminalstripitem.h @@ -32,8 +32,12 @@ class TerminalStripItem : public QetGraphicsItem public: TerminalStripItem(QPointer strip, QGraphicsItem *parent = nullptr); + enum {Type = UserType + 1011}; + int type() const override {return Type;} + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; QRectF boundingRect() const override; + QString name() const override; private: QPointer m_strip; diff --git a/sources/TerminalStrip/ui/addterminalstripitemdialog.cpp b/sources/TerminalStrip/ui/addterminalstripitemdialog.cpp index 44f54de47..c6c843b3d 100644 --- a/sources/TerminalStrip/ui/addterminalstripitemdialog.cpp +++ b/sources/TerminalStrip/ui/addterminalstripitemdialog.cpp @@ -18,6 +18,7 @@ #include "addterminalstripitemdialog.h" #include "ui_addterminalstripitemdialog.h" +#include "../../undocommand/addgraphicsobjectcommand.h" #include "../terminalstrip.h" #include "../GraphicsItem/terminalstripitem.h" #include "../../diagram.h" @@ -32,7 +33,9 @@ void AddTerminalStripItemDialog::openDialog(Diagram *diagram, QWidget *parent) { auto item_ = new TerminalStripItem(strip_); diagram->addItem(item_); - item_->setPos(20, 20); + item_->setPos(50, 50); + + diagram->project()->undoStack()->push(new AddGraphicsObjectCommand(item_, diagram, QPointF{50, 50})); } } } @@ -60,8 +63,8 @@ TerminalStrip *AddTerminalStripItemDialog::selectedTerminalStrip() const { if (m_project) { - QUuid uuid_{ui->m_terminal_strip_cb->currentData().toUuid()}; - for (const auto &strip_ : m_project->terminalStrip()) + const QUuid uuid_{ui->m_terminal_strip_cb->currentData().toUuid()}; + for (auto &&strip_ : m_project->terminalStrip()) { if (strip_->uuid() == uuid_) { return strip_; @@ -76,7 +79,7 @@ void AddTerminalStripItemDialog::fillComboBox() { if (m_project) { - for (const auto strip_ : m_project->terminalStrip()) + for (auto &&strip_ : m_project->terminalStrip()) { const auto text{strip_->installation() + " " + strip_->location() + " " + strip_->name()}; ui->m_terminal_strip_cb->addItem(text, strip_->uuid()); diff --git a/sources/diagramcommands.cpp b/sources/diagramcommands.cpp index 4665d312b..46e41b601 100644 --- a/sources/diagramcommands.cpp +++ b/sources/diagramcommands.cpp @@ -176,7 +176,8 @@ MoveElementsCommand::MoveElementsCommand( DiagramContent::ConductorsToMove | DiagramContent::Images | DiagramContent::Shapes | - DiagramContent::ElementTextFields + DiagramContent::ElementTextFields | + DiagramContent::TerminalStrip ); setText( @@ -236,13 +237,14 @@ void MoveElementsCommand::move(const QPointF &actual_movement) typedef DiagramContent dc; //Move every movable items, except conductor - for (QGraphicsItem *qgi : content_to_move.items(dc::Elements - | dc::TextFields - | dc::Images - | dc::Shapes - | dc::TextGroup - | dc::ElementTextFields - | dc::Tables)) + for (auto &&qgi : content_to_move.items(dc::Elements + | dc::TextFields + | dc::Images + | dc::Shapes + | dc::TextGroup + | dc::ElementTextFields + | dc::Tables + | dc::TerminalStrip)) { //If curent item have parent, and parent item is in content_to_move //we don't apply movement to this item, because this item will be moved by is parent. diff --git a/sources/diagramcontent.cpp b/sources/diagramcontent.cpp index 3842490cd..1f03a6a79 100644 --- a/sources/diagramcontent.cpp +++ b/sources/diagramcontent.cpp @@ -28,6 +28,7 @@ #include "qetgraphicsitem/independenttextitem.h" #include "qetgraphicsitem/qetshapeitem.h" #include "qetgraphicsitem/terminal.h" +#include "TerminalStrip/GraphicsItem/terminalstripitem.h" #include @@ -54,7 +55,7 @@ DiagramContent::DiagramContent(Diagram *diagram, bool selected) : item_list = diagram->items(); } - for (auto item : item_list) + for (const auto &item : qAsConst(item_list)) { switch (item->type()) { @@ -88,6 +89,7 @@ DiagramContent::DiagramContent(Diagram *diagram, bool selected) : break; } case QetGraphicsTableItem::Type: { m_tables << qgraphicsitem_cast(item); break;} + case TerminalStripItem::Type : {m_terminal_strip << qgraphicsitem_cast(item); break;} } } @@ -194,13 +196,14 @@ bool DiagramContent::hasDeletableItems() const { for(QGraphicsItem *qgi : m_selected_items) { - if (qgi->type() == Element::Type || - qgi->type() == Conductor::Type || - qgi->type() == IndependentTextItem::Type || - qgi->type() == QetShapeItem::Type || - qgi->type() == DiagramImageItem::Type || - qgi->type() == DynamicElementTextItem::Type || - qgi->type() == QetGraphicsTableItem::Type) + if (qgi->type() == Element::Type + || qgi->type() == Conductor::Type + || qgi->type() == IndependentTextItem::Type + || qgi->type() == QetShapeItem::Type + || qgi->type() == DiagramImageItem::Type + || qgi->type() == DynamicElementTextItem::Type + || qgi->type() == QetGraphicsTableItem::Type + || qgi->type() == TerminalStripItem::Type) return true; if(qgi->type() == QGraphicsItemGroup::Type) if(dynamic_cast(qgi)) @@ -240,6 +243,7 @@ void DiagramContent::clear() m_texts_groups.clear(); m_selected_items.clear(); m_tables.clear(); + m_terminal_strip.clear(); } /** @@ -378,7 +382,7 @@ QList DiagramContent::items(int filter) const { QList items_list; - for(QGraphicsItem *qgi : conductors(filter)) items_list << qgi; + for(auto &&qgi : conductors(filter)) items_list << qgi; if (filter & Elements) for(auto qgi : m_elements) items_list << qgi; if (filter & TextFields) for(auto qgi : m_text_fields) items_list << qgi; @@ -387,9 +391,10 @@ QList DiagramContent::items(int filter) const if (filter & ElementTextFields) for(auto qgi : m_element_texts) items_list << qgi; if (filter & TextGroup) for(auto qgi : m_texts_groups) items_list << qgi; if (filter & Tables) for(auto qgi : m_tables) items_list << qgi; + if (filter & TerminalStrip) for(const auto qgi : qAsConst(m_terminal_strip)) items_list << qgi; if (filter & SelectedOnly) { - for(QGraphicsItem *qgi : items_list) { + for(const auto &qgi : qAsConst(items_list)) { if (!qgi -> isSelected()) items_list.removeOne(qgi); } } @@ -415,6 +420,7 @@ int DiagramContent::count(int filter) const if (filter & ElementTextFields) for(auto deti : m_element_texts) { if (deti -> isSelected()) ++ count; } if (filter & TextGroup) for(auto etig : m_texts_groups) { if (etig -> isSelected()) ++ count; } if (filter & Tables) for(auto table : m_tables) { if (table -> isSelected()) ++ count; } + if (filter & TerminalStrip) for(const auto &strip : qAsConst(m_terminal_strip)) {if (strip->isSelected()) ++ count;} } else { if (filter & Elements) count += m_elements.count(); @@ -427,6 +433,7 @@ int DiagramContent::count(int filter) const if (filter & ElementTextFields) count += m_element_texts.count(); if (filter & TextGroup) count += m_texts_groups.count(); if (filter & Tables) count += m_tables.count(); + if (filter & TerminalStrip) count += m_terminal_strip.count(); } return(count); } @@ -447,7 +454,7 @@ QString DiagramContent::sentence(int filter) const int shapes_count = (filter & Shapes) ? m_shapes.count() : 0; int elmt_text_count = (filter & ElementTextFields) ? m_element_texts.count() : 0; int tables_count = (filter & Tables) ? m_tables.count() : 0; - + const int strip_count = (filter & TerminalStrip) ? m_terminal_strip.count() : 0; return( QET::ElementsAndConductorsSentence( elements_count, @@ -456,7 +463,8 @@ QString DiagramContent::sentence(int filter) const images_count, shapes_count, elmt_text_count, - tables_count + tables_count, + strip_count ) ); } diff --git a/sources/diagramcontent.h b/sources/diagramcontent.h index 76d36ace7..40105e44e 100644 --- a/sources/diagramcontent.h +++ b/sources/diagramcontent.h @@ -32,6 +32,7 @@ class ElementTextItemGroup; class Diagram; class DiagramTextItem; class QetGraphicsTableItem; +class TerminalStripItem; /** This class provides a container that makes the transmission of diagram content @@ -62,8 +63,9 @@ class DiagramContent Shapes = 128, TextGroup = 256, Tables = 512, - All = 1023, - SelectedOnly = 1024 + TerminalStrip = 1024, + All = 2047, + SelectedOnly = 2048 }; QList m_elements; @@ -78,6 +80,7 @@ class DiagramContent QSet m_texts_groups; QList m_selected_items; QVector m_tables; + QVector m_terminal_strip; QList selectedTexts() const; diff --git a/sources/elementsmover.cpp b/sources/elementsmover.cpp index c6d070ad0..11e1edaeb 100644 --- a/sources/elementsmover.cpp +++ b/sources/elementsmover.cpp @@ -171,7 +171,7 @@ void ElementsMover::endMovement() //There is only one element moved, and project authorize auto conductor, //we try auto connection of conductor; typedef DiagramContent dc; - if (m_moved_content.items(dc::TextFields | dc::Images | dc::Shapes).size() == 0 && + if (m_moved_content.items(dc::TextFields | dc::Images | dc::Shapes | dc::TerminalStrip).size() == 0 && m_moved_content.items(dc::Elements).size() == 1 && diagram_ -> project() -> autoConductor()) { diff --git a/sources/qet.cpp b/sources/qet.cpp index e7150d06e..fa07804f5 100644 --- a/sources/qet.cpp +++ b/sources/qet.cpp @@ -266,7 +266,8 @@ QString QET::ElementsAndConductorsSentence( int images_count, int shapes_count, int element_text_count, - int tables_count) + int tables_count, + int terminal_strip_count) { QString text; if (elements_count) { @@ -329,6 +330,14 @@ QString QET::ElementsAndConductorsSentence( tables_count); } + if (terminal_strip_count) { + if (!text.isEmpty()) text += ", "; + text += QObject::tr( + "%n plan de bornes", + "part of a sentence listing the content of a diagram", + terminal_strip_count); + } + return(text); } diff --git a/sources/qet.h b/sources/qet.h index 36929b2a4..b4ccfad9a 100644 --- a/sources/qet.h +++ b/sources/qet.h @@ -162,7 +162,14 @@ namespace QET { bool orthogonalProjection(const QPointF &, const QLineF &, QPointF * = nullptr); bool attributeIsAnInteger(const QDomElement &, const QString& , int * = nullptr); bool attributeIsAReal(const QDomElement &, const QString& , qreal * = nullptr); - QString ElementsAndConductorsSentence(int elements=0, int conductors=0, int indi_texts=0, int images=0, int shapes=0, int element_text=0, int tables_count=0); + QString ElementsAndConductorsSentence(int elements=0, + int conductors=0, + int indi_texts=0, + int images=0, + int shapes=0, + int element_text=0, + int tables_count=0, + int terminal_strip_count=0); QList findInDomElement(const QDomElement &, const QString &); QList findInDomElement(const QDomElement &, const QString &, const QString &); QList forbiddenCharacters();