Add and move terminal strip item are now managed by undo command

This commit is contained in:
joshua 2022-11-08 19:20:32 +01:00
parent 21de926367
commit 7fede2277f
10 changed files with 74 additions and 29 deletions

View File

@ -11,6 +11,7 @@ DiagramImageItem + 1007
QetShapItem + 1008 QetShapItem + 1008
crossRefItem + 1009 crossRefItem + 1009
DynamiqueElementTextItem + 1010 DynamiqueElementTextItem + 1010
TerminalStripItem +1011
ElementPrimitiveDecorator + 2200 ElementPrimitiveDecorator + 2200
###ELEMENT EDITOR### ###ELEMENT EDITOR###

View File

@ -47,3 +47,11 @@ QRectF TerminalStripItem::boundingRect() const
return br_; return br_;
} }
/**
* @brief TerminalStripItem::name
* @return usual name of this item
*/
QString TerminalStripItem::name() const {
return tr("plan de bornes");
}

View File

@ -32,8 +32,12 @@ class TerminalStripItem : public QetGraphicsItem
public: public:
TerminalStripItem(QPointer<TerminalStrip> strip, QGraphicsItem *parent = nullptr); TerminalStripItem(QPointer<TerminalStrip> strip, QGraphicsItem *parent = nullptr);
enum {Type = UserType + 1011};
int type() const override {return Type;}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
QRectF boundingRect() const override; QRectF boundingRect() const override;
QString name() const override;
private: private:
QPointer<TerminalStrip> m_strip; QPointer<TerminalStrip> m_strip;

View File

@ -18,6 +18,7 @@
#include "addterminalstripitemdialog.h" #include "addterminalstripitemdialog.h"
#include "ui_addterminalstripitemdialog.h" #include "ui_addterminalstripitemdialog.h"
#include "../../undocommand/addgraphicsobjectcommand.h"
#include "../terminalstrip.h" #include "../terminalstrip.h"
#include "../GraphicsItem/terminalstripitem.h" #include "../GraphicsItem/terminalstripitem.h"
#include "../../diagram.h" #include "../../diagram.h"
@ -32,7 +33,9 @@ void AddTerminalStripItemDialog::openDialog(Diagram *diagram, QWidget *parent)
{ {
auto item_ = new TerminalStripItem(strip_); auto item_ = new TerminalStripItem(strip_);
diagram->addItem(item_); 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) if (m_project)
{ {
QUuid uuid_{ui->m_terminal_strip_cb->currentData().toUuid()}; const QUuid uuid_{ui->m_terminal_strip_cb->currentData().toUuid()};
for (const auto &strip_ : m_project->terminalStrip()) for (auto &&strip_ : m_project->terminalStrip())
{ {
if (strip_->uuid() == uuid_) { if (strip_->uuid() == uuid_) {
return strip_; return strip_;
@ -76,7 +79,7 @@ void AddTerminalStripItemDialog::fillComboBox()
{ {
if (m_project) 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()}; const auto text{strip_->installation() + " " + strip_->location() + " " + strip_->name()};
ui->m_terminal_strip_cb->addItem(text, strip_->uuid()); ui->m_terminal_strip_cb->addItem(text, strip_->uuid());

View File

@ -176,7 +176,8 @@ MoveElementsCommand::MoveElementsCommand(
DiagramContent::ConductorsToMove | DiagramContent::ConductorsToMove |
DiagramContent::Images | DiagramContent::Images |
DiagramContent::Shapes | DiagramContent::Shapes |
DiagramContent::ElementTextFields DiagramContent::ElementTextFields |
DiagramContent::TerminalStrip
); );
setText( setText(
@ -236,13 +237,14 @@ void MoveElementsCommand::move(const QPointF &actual_movement)
typedef DiagramContent dc; typedef DiagramContent dc;
//Move every movable items, except conductor //Move every movable items, except conductor
for (QGraphicsItem *qgi : content_to_move.items(dc::Elements for (auto &&qgi : content_to_move.items(dc::Elements
| dc::TextFields | dc::TextFields
| dc::Images | dc::Images
| dc::Shapes | dc::Shapes
| dc::TextGroup | dc::TextGroup
| dc::ElementTextFields | dc::ElementTextFields
| dc::Tables)) | dc::Tables
| dc::TerminalStrip))
{ {
//If curent item have parent, and parent item is in content_to_move //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. //we don't apply movement to this item, because this item will be moved by is parent.

View File

@ -28,6 +28,7 @@
#include "qetgraphicsitem/independenttextitem.h" #include "qetgraphicsitem/independenttextitem.h"
#include "qetgraphicsitem/qetshapeitem.h" #include "qetgraphicsitem/qetshapeitem.h"
#include "qetgraphicsitem/terminal.h" #include "qetgraphicsitem/terminal.h"
#include "TerminalStrip/GraphicsItem/terminalstripitem.h"
#include <QGraphicsItem> #include <QGraphicsItem>
@ -54,7 +55,7 @@ DiagramContent::DiagramContent(Diagram *diagram, bool selected) :
item_list = diagram->items(); item_list = diagram->items();
} }
for (auto item : item_list) for (const auto &item : qAsConst(item_list))
{ {
switch (item->type()) switch (item->type())
{ {
@ -88,6 +89,7 @@ DiagramContent::DiagramContent(Diagram *diagram, bool selected) :
break; break;
} }
case QetGraphicsTableItem::Type: { m_tables << qgraphicsitem_cast<QetGraphicsTableItem *>(item); break;} case QetGraphicsTableItem::Type: { m_tables << qgraphicsitem_cast<QetGraphicsTableItem *>(item); break;}
case TerminalStripItem::Type : {m_terminal_strip << qgraphicsitem_cast<TerminalStripItem *>(item); break;}
} }
} }
@ -194,13 +196,14 @@ bool DiagramContent::hasDeletableItems() const
{ {
for(QGraphicsItem *qgi : m_selected_items) for(QGraphicsItem *qgi : m_selected_items)
{ {
if (qgi->type() == Element::Type || if (qgi->type() == Element::Type
qgi->type() == Conductor::Type || || qgi->type() == Conductor::Type
qgi->type() == IndependentTextItem::Type || || qgi->type() == IndependentTextItem::Type
qgi->type() == QetShapeItem::Type || || qgi->type() == QetShapeItem::Type
qgi->type() == DiagramImageItem::Type || || qgi->type() == DiagramImageItem::Type
qgi->type() == DynamicElementTextItem::Type || || qgi->type() == DynamicElementTextItem::Type
qgi->type() == QetGraphicsTableItem::Type) || qgi->type() == QetGraphicsTableItem::Type
|| qgi->type() == TerminalStripItem::Type)
return true; return true;
if(qgi->type() == QGraphicsItemGroup::Type) if(qgi->type() == QGraphicsItemGroup::Type)
if(dynamic_cast<ElementTextItemGroup *>(qgi)) if(dynamic_cast<ElementTextItemGroup *>(qgi))
@ -240,6 +243,7 @@ void DiagramContent::clear()
m_texts_groups.clear(); m_texts_groups.clear();
m_selected_items.clear(); m_selected_items.clear();
m_tables.clear(); m_tables.clear();
m_terminal_strip.clear();
} }
/** /**
@ -378,7 +382,7 @@ QList<QGraphicsItem *> DiagramContent::items(int filter) const
{ {
QList<QGraphicsItem *> items_list; QList<QGraphicsItem *> 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 & Elements) for(auto qgi : m_elements) items_list << qgi;
if (filter & TextFields) for(auto qgi : m_text_fields) items_list << qgi; if (filter & TextFields) for(auto qgi : m_text_fields) items_list << qgi;
@ -387,9 +391,10 @@ QList<QGraphicsItem *> DiagramContent::items(int filter) const
if (filter & ElementTextFields) for(auto qgi : m_element_texts) items_list << qgi; 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 & TextGroup) for(auto qgi : m_texts_groups) items_list << qgi;
if (filter & Tables) for(auto qgi : m_tables) 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) { if (filter & SelectedOnly) {
for(QGraphicsItem *qgi : items_list) { for(const auto &qgi : qAsConst(items_list)) {
if (!qgi -> isSelected()) items_list.removeOne(qgi); 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 & 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 & 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 & 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 { else {
if (filter & Elements) count += m_elements.count(); 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 & ElementTextFields) count += m_element_texts.count();
if (filter & TextGroup) count += m_texts_groups.count(); if (filter & TextGroup) count += m_texts_groups.count();
if (filter & Tables) count += m_tables.count(); if (filter & Tables) count += m_tables.count();
if (filter & TerminalStrip) count += m_terminal_strip.count();
} }
return(count); return(count);
} }
@ -447,7 +454,7 @@ QString DiagramContent::sentence(int filter) const
int shapes_count = (filter & Shapes) ? m_shapes.count() : 0; int shapes_count = (filter & Shapes) ? m_shapes.count() : 0;
int elmt_text_count = (filter & ElementTextFields) ? m_element_texts.count() : 0; int elmt_text_count = (filter & ElementTextFields) ? m_element_texts.count() : 0;
int tables_count = (filter & Tables) ? m_tables.count() : 0; int tables_count = (filter & Tables) ? m_tables.count() : 0;
const int strip_count = (filter & TerminalStrip) ? m_terminal_strip.count() : 0;
return( return(
QET::ElementsAndConductorsSentence( QET::ElementsAndConductorsSentence(
elements_count, elements_count,
@ -456,7 +463,8 @@ QString DiagramContent::sentence(int filter) const
images_count, images_count,
shapes_count, shapes_count,
elmt_text_count, elmt_text_count,
tables_count tables_count,
strip_count
) )
); );
} }

View File

@ -32,6 +32,7 @@ class ElementTextItemGroup;
class Diagram; class Diagram;
class DiagramTextItem; class DiagramTextItem;
class QetGraphicsTableItem; class QetGraphicsTableItem;
class TerminalStripItem;
/** /**
This class provides a container that makes the transmission of diagram content This class provides a container that makes the transmission of diagram content
@ -62,8 +63,9 @@ class DiagramContent
Shapes = 128, Shapes = 128,
TextGroup = 256, TextGroup = 256,
Tables = 512, Tables = 512,
All = 1023, TerminalStrip = 1024,
SelectedOnly = 1024 All = 2047,
SelectedOnly = 2048
}; };
QList<Element *> m_elements; QList<Element *> m_elements;
@ -78,6 +80,7 @@ class DiagramContent
QSet<ElementTextItemGroup *> m_texts_groups; QSet<ElementTextItemGroup *> m_texts_groups;
QList<QGraphicsItem *> m_selected_items; QList<QGraphicsItem *> m_selected_items;
QVector<QetGraphicsTableItem *> m_tables; QVector<QetGraphicsTableItem *> m_tables;
QVector<TerminalStripItem *> m_terminal_strip;
QList<DiagramTextItem *> selectedTexts() const; QList<DiagramTextItem *> selectedTexts() const;

View File

@ -171,7 +171,7 @@ void ElementsMover::endMovement()
//There is only one element moved, and project authorize auto conductor, //There is only one element moved, and project authorize auto conductor,
//we try auto connection of conductor; //we try auto connection of conductor;
typedef DiagramContent dc; 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 && m_moved_content.items(dc::Elements).size() == 1 &&
diagram_ -> project() -> autoConductor()) diagram_ -> project() -> autoConductor())
{ {

View File

@ -266,7 +266,8 @@ QString QET::ElementsAndConductorsSentence(
int images_count, int images_count,
int shapes_count, int shapes_count,
int element_text_count, int element_text_count,
int tables_count) int tables_count,
int terminal_strip_count)
{ {
QString text; QString text;
if (elements_count) { if (elements_count) {
@ -329,6 +330,14 @@ QString QET::ElementsAndConductorsSentence(
tables_count); 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); return(text);
} }

View File

@ -162,7 +162,14 @@ namespace QET {
bool orthogonalProjection(const QPointF &, const QLineF &, QPointF * = nullptr); bool orthogonalProjection(const QPointF &, const QLineF &, QPointF * = nullptr);
bool attributeIsAnInteger(const QDomElement &, const QString& , int * = nullptr); bool attributeIsAnInteger(const QDomElement &, const QString& , int * = nullptr);
bool attributeIsAReal(const QDomElement &, const QString& , qreal * = 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<QDomElement> findInDomElement(const QDomElement &, const QString &); QList<QDomElement> findInDomElement(const QDomElement &, const QString &);
QList<QDomElement> findInDomElement(const QDomElement &, const QString &, const QString &); QList<QDomElement> findInDomElement(const QDomElement &, const QString &, const QString &);
QList<QChar> forbiddenCharacters(); QList<QChar> forbiddenCharacters();