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
crossRefItem + 1009
DynamiqueElementTextItem + 1010
TerminalStripItem +1011
ElementPrimitiveDecorator + 2200
###ELEMENT EDITOR###

View File

@ -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");
}

View File

@ -32,8 +32,12 @@ class TerminalStripItem : public QetGraphicsItem
public:
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;
QRectF boundingRect() const override;
QString name() const override;
private:
QPointer<TerminalStrip> m_strip;

View File

@ -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());

View File

@ -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.

View File

@ -28,6 +28,7 @@
#include "qetgraphicsitem/independenttextitem.h"
#include "qetgraphicsitem/qetshapeitem.h"
#include "qetgraphicsitem/terminal.h"
#include "TerminalStrip/GraphicsItem/terminalstripitem.h"
#include <QGraphicsItem>
@ -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<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)
{
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<ElementTextItemGroup *>(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<QGraphicsItem *> DiagramContent::items(int filter) const
{
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 & 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 & 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
)
);
}

View File

@ -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<Element *> m_elements;
@ -78,6 +80,7 @@ class DiagramContent
QSet<ElementTextItemGroup *> m_texts_groups;
QList<QGraphicsItem *> m_selected_items;
QVector<QetGraphicsTableItem *> m_tables;
QVector<TerminalStripItem *> m_terminal_strip;
QList<DiagramTextItem *> selectedTexts() const;

View File

@ -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())
{

View File

@ -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);
}

View File

@ -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<QDomElement> findInDomElement(const QDomElement &, const QString &);
QList<QDomElement> findInDomElement(const QDomElement &, const QString &, const QString &);
QList<QChar> forbiddenCharacters();