mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-13 20:23:04 +02:00
Remove the class element text item.
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5276 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
parent
8193687894
commit
a7917bb5bb
@ -24,7 +24,6 @@
|
||||
#include "diagramcommands.h"
|
||||
#include "diagramcontent.h"
|
||||
#include "diagramposition.h"
|
||||
#include "qetgraphicsitem/elementtextitem.h"
|
||||
#include "elementsmover.h"
|
||||
#include "exportdialog.h"
|
||||
#include "qetgraphicsitem/ghostelement.h"
|
||||
@ -1228,12 +1227,10 @@ void Diagram::invertSelection() {
|
||||
* Update elements and conductors that reference folio field
|
||||
* in their labels.
|
||||
*/
|
||||
void Diagram::updateLabels() {
|
||||
foreach (Element *elmt, elements()) {
|
||||
if (elmt->elementInformations()["label"].toString().contains(("%F")))
|
||||
elmt->updateLabel();
|
||||
}
|
||||
foreach (Conductor *cnd, content().conductors()) {
|
||||
void Diagram::updateLabels()
|
||||
{
|
||||
for (Conductor *cnd : content().conductors())
|
||||
{
|
||||
cnd->refreshText();
|
||||
}
|
||||
}
|
||||
@ -1783,7 +1780,6 @@ bool Diagram::canRotateSelection() const
|
||||
if (qgi->type() == IndependentTextItem::Type ||
|
||||
qgi->type() == ConductorTextItem::Type ||
|
||||
qgi->type() == DiagramImageItem::Type ||
|
||||
qgi->type() == ElementTextItem::Type ||
|
||||
qgi->type() == Element::Type ||
|
||||
qgi->type() == DynamicElementTextItem::Type)
|
||||
return true;
|
||||
|
@ -20,7 +20,6 @@
|
||||
#include "qetgraphicsitem/conductor.h"
|
||||
#include "qetgraphicsitem/conductortextitem.h"
|
||||
#include "diagram.h"
|
||||
#include "qetgraphicsitem/elementtextitem.h"
|
||||
#include "qetgraphicsitem/independenttextitem.h"
|
||||
#include "qgimanager.h"
|
||||
#include "diagram.h"
|
||||
@ -100,23 +99,7 @@ void PasteDiagramCommand::redo()
|
||||
{
|
||||
//make new uuid, because old uuid are the uuid of the copied element
|
||||
e -> newUuid();
|
||||
|
||||
//Reset the text of report element
|
||||
if (e -> linkType() & Element::AllReport)
|
||||
{
|
||||
|
||||
//Befor commit 3559 there isn't text field tagged label,
|
||||
//so if not found we take the first text field
|
||||
if (ElementTextItem *eti = e->taggedText("label"))
|
||||
eti->setPlainText("/");
|
||||
else if (e->texts().size())
|
||||
e->texts().first()->setPlainText("/");
|
||||
|
||||
if (ElementTextItem *eti = e->taggedText("function"))
|
||||
eti->setPlainText("_");
|
||||
if (ElementTextItem *eti = e->taggedText("tension-protocol"))
|
||||
eti->setPlainText("_");
|
||||
}
|
||||
|
||||
if (settings.value("diagramcommands/save-label", true).toBool())
|
||||
{
|
||||
//Reset the information about the label, the comment and location
|
||||
@ -125,10 +108,6 @@ void PasteDiagramCommand::redo()
|
||||
e -> rElementInformations().addValue("comment", "");
|
||||
e -> rElementInformations().addValue("location", "");
|
||||
|
||||
//Reset the text field tagged "label
|
||||
if (ElementTextItem *eti = e ->taggedText("label"))
|
||||
eti -> setPlainText("_");
|
||||
|
||||
//Reset the text of conductors
|
||||
const QList <Conductor *> conductors_list = content.m_conductors_to_move.toList();
|
||||
for (Conductor *c : conductors_list)
|
||||
@ -138,11 +117,6 @@ void PasteDiagramCommand::redo()
|
||||
c -> setProperties(cp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//We call update label, notably to setup the connection required by the formula of the element
|
||||
e->updateLabel();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
class DiagramTextItem;
|
||||
class Element;
|
||||
class ElementTextItem;
|
||||
class IndependentTextItem;
|
||||
class DiagramImageItem;
|
||||
class QetGraphicsItem;
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include "independenttextitem.h"
|
||||
#include "conductor.h"
|
||||
#include "diagramimageitem.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "qetshapeitem.h"
|
||||
#include "dynamicelementtextitem.h"
|
||||
#include "elementtextitemgroup.h"
|
||||
@ -128,7 +127,6 @@ QList<DiagramTextItem *> DiagramContent::selectedTexts() const
|
||||
for(QGraphicsItem *qgi : m_selected_items)
|
||||
{
|
||||
if (qgi->type() == ConductorTextItem::Type ||
|
||||
qgi->type() == ElementTextItem::Type ||
|
||||
qgi->type() == IndependentTextItem::Type ||
|
||||
qgi->type() == DynamicElementTextItem::Type)
|
||||
selected_texts << static_cast<DiagramTextItem *>(qgi);
|
||||
|
@ -25,7 +25,6 @@ class Conductor;
|
||||
class Element;
|
||||
class IndependentTextItem;
|
||||
class DiagramImageItem;
|
||||
class ElementTextItem;
|
||||
class QetShapeItem;
|
||||
class DynamicElementTextItem;
|
||||
class ElementTextItemGroup;
|
||||
|
@ -190,7 +190,7 @@ bool DiagramEventAddElement::buildElement()
|
||||
//Everything is good
|
||||
return true;
|
||||
}
|
||||
#include "elementtextitem.h"
|
||||
|
||||
/**
|
||||
* @brief DiagramEventAddElement::addElement
|
||||
* Add an element at the current pos en current rotation,
|
||||
@ -243,6 +243,5 @@ void DiagramEventAddElement::addElement()
|
||||
|
||||
m_diagram -> undoStack().push(undo_object);
|
||||
element->setUpFormula();
|
||||
element->updateLabel();
|
||||
element->freezeNewAddedElement();
|
||||
}
|
||||
|
@ -24,7 +24,6 @@
|
||||
#include "diagramposition.h"
|
||||
#include "conductorpropertieswidget.h"
|
||||
#include "qetgraphicsitem/conductortextitem.h"
|
||||
#include "qetgraphicsitem/elementtextitem.h"
|
||||
#include "qetgraphicsitem/independenttextitem.h"
|
||||
#include "qetgraphicsitem/diagramimageitem.h"
|
||||
#include "templatelocation.h"
|
||||
@ -543,7 +542,6 @@ void DiagramView::keyPressEvent(QKeyEvent *e)
|
||||
if (!hasTextItems()) {
|
||||
if (
|
||||
qgraphicsitem_cast<IndependentTextItem *>(m_diagram->focusItem()) ||
|
||||
qgraphicsitem_cast<ElementTextItem *>(m_diagram->focusItem()) ||
|
||||
qgraphicsitem_cast<ConductorTextItem *>(m_diagram->focusItem()) ||
|
||||
qgraphicsitem_cast<DiagramTextItem *>(m_diagram->focusItem())
|
||||
)
|
||||
@ -556,7 +554,6 @@ void DiagramView::keyPressEvent(QKeyEvent *e)
|
||||
if (!hasTextItems()) {
|
||||
if (
|
||||
qgraphicsitem_cast<IndependentTextItem *>(m_diagram->focusItem()) ||
|
||||
qgraphicsitem_cast<ElementTextItem *>(m_diagram->focusItem()) ||
|
||||
qgraphicsitem_cast<ConductorTextItem *>(m_diagram->focusItem()) ||
|
||||
qgraphicsitem_cast<DiagramTextItem *>(m_diagram->focusItem())
|
||||
)
|
||||
@ -735,7 +732,6 @@ bool DiagramView::hasTextItems() {
|
||||
foreach(QGraphicsItem *qgi, m_diagram -> selectedItems()) {
|
||||
if (
|
||||
qgraphicsitem_cast<IndependentTextItem *>(qgi) ||
|
||||
qgraphicsitem_cast<ElementTextItem *>(qgi) ||
|
||||
qgraphicsitem_cast<ConductorTextItem *>(qgi) ||
|
||||
qgraphicsitem_cast<DiagramTextItem *>(qgi)
|
||||
) {
|
||||
|
@ -23,7 +23,6 @@
|
||||
#include "element.h"
|
||||
#include "independenttextitem.h"
|
||||
#include "diagramimageitem.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "conductorautonumerotation.h"
|
||||
|
||||
/**
|
||||
|
@ -16,7 +16,6 @@
|
||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "elementtextsmover.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "diagram.h"
|
||||
#include "QPropertyUndoCommand/qpropertyundocommand.h"
|
||||
#include "dynamicelementtextitem.h"
|
||||
@ -56,7 +55,7 @@ int ElementTextsMover::beginMovement(Diagram *diagram, QGraphicsItem *driver_ite
|
||||
|
||||
for(QGraphicsItem *item : diagram->selectedItems())
|
||||
{
|
||||
if(item->type() == ElementTextItem::Type || item->type() == DynamicElementTextItem::Type)
|
||||
if(item->type() == DynamicElementTextItem::Type)
|
||||
{
|
||||
m_items_hash.insert(item, item->pos());
|
||||
m_text_count++;
|
||||
|
@ -28,7 +28,6 @@
|
||||
#include "qetgraphicsitem/diagramtextitem.h"
|
||||
#include "qetgraphicsitem/conductortextitem.h"
|
||||
#include "qetgraphicsitem/customelement.h"
|
||||
#include "qetgraphicsitem/elementtextitem.h"
|
||||
#include "qetgraphicsitem/ghostelement.h"
|
||||
#include "qetgraphicsitem/independenttextitem.h"
|
||||
#include "qetgraphicsitem/diagramimageitem.h"
|
||||
@ -496,40 +495,6 @@ void ExportDialog::generateDxf(Diagram *diagram, int width, int height, bool kee
|
||||
qreal hotspot_x = (elem_pos_x) * Createdxf::xScale;
|
||||
qreal hotspot_y = Createdxf::sheetHeight - (elem_pos_y) * Createdxf::yScale;
|
||||
|
||||
QList<ElementTextItem *> elmt_text = elmt -> texts();
|
||||
foreach(ElementTextItem *dti, elmt_text) {
|
||||
qreal fontSize = dti -> font().pointSizeF();
|
||||
if (fontSize < 0)
|
||||
fontSize = dti -> font().pixelSize();
|
||||
fontSize *= Createdxf::yScale;
|
||||
qreal x = elem_pos_x + dti -> pos().x();
|
||||
qreal y = elem_pos_y + dti -> pos().y();
|
||||
x *= Createdxf::xScale;
|
||||
y = Createdxf::sheetHeight - (y * Createdxf::yScale);// - fontSize;
|
||||
QPointF transformed_point = rotation_transformed(x, y, hotspot_x, hotspot_y, rotation_angle);
|
||||
x = transformed_point.x();
|
||||
y = transformed_point.y();
|
||||
QStringList lines = dti -> toPlainText().split('\n');
|
||||
y += (fontSize/2) * (lines.count()-1);
|
||||
foreach (QString line, lines) {
|
||||
qreal angle = 360 - (dti -> rotationAngle() + rotation_angle);
|
||||
if (line.size() > 0 && line != "_" )
|
||||
Createdxf::drawText(file_path, line, x, y, fontSize, angle, 0);
|
||||
|
||||
angle += 1080;
|
||||
// coordinates for next line
|
||||
if (int(angle) % 360 == 0) // no rotation
|
||||
y -= fontSize*1.06;
|
||||
else if (int(angle - 180) % 360 == 0) // 180 degrees rotation
|
||||
y += fontSize*1.06;
|
||||
else if (int(angle - 270) % 360 == 0) // 270 degrees rotation
|
||||
x -= fontSize*1.06;
|
||||
else // ((angle - 90) % 360 == 0) 90 degrees rotation
|
||||
x += fontSize*1.06;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QList<QLineF *> elmt_line = elmt -> lines();
|
||||
foreach(QLineF *line, elmt_line) {
|
||||
qreal x1 = (elem_pos_x + line -> p1().x()) * Createdxf::xScale;
|
||||
|
@ -44,7 +44,6 @@
|
||||
#include "autonumberingdockwidget.h"
|
||||
#include "dynamicelementtextitem.h"
|
||||
#include "conductortextitem.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "undocommand/rotateselectioncommand.h"
|
||||
#include "rotatetextscommand.h"
|
||||
#include "diagramcommands.h"
|
||||
@ -1432,7 +1431,6 @@ void QETDiagramEditor::slot_updateComplexActions()
|
||||
QList<ElementTextItemGroup *> groups = DiagramContent(diagram_).selectedTextsGroup();
|
||||
int selected_texts = texts.count();
|
||||
int selected_conductor_texts = 0; for(DiagramTextItem *dti : texts) {if(dti->type() == ConductorTextItem::Type) selected_conductor_texts++;}
|
||||
int selected_element_texts = 0; for(DiagramTextItem *dti : texts) {if(dti->type() == ElementTextItem::Type) selected_element_texts++;}
|
||||
int selected_dynamic_elmt_text = 0; for(DiagramTextItem *dti : texts) {if(dti->type() == DynamicElementTextItem::Type) selected_dynamic_elmt_text++;}
|
||||
m_rotate_texts->setEnabled(!ro && (selected_texts || groups.size()));
|
||||
|
||||
@ -1441,7 +1439,7 @@ void QETDiagramEditor::slot_updateComplexActions()
|
||||
|
||||
int selected_shape = dc.count(DiagramContent::Shapes);
|
||||
int selected_editable = selected_elements_count +
|
||||
(selected_texts - selected_conductor_texts - selected_element_texts - selected_dynamic_elmt_text) +
|
||||
(selected_texts - selected_conductor_texts - selected_dynamic_elmt_text) +
|
||||
selected_image +
|
||||
selected_shape +
|
||||
selected_conductors_count;
|
||||
|
@ -19,7 +19,6 @@
|
||||
#include "element.h"
|
||||
#include "qetapp.h"
|
||||
#include "diagram.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "qgraphicsitemutility.h"
|
||||
#include <QPainter>
|
||||
|
||||
@ -93,14 +92,6 @@ void CommentItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) {
|
||||
* else return false, the element is the parent of this comment item
|
||||
*/
|
||||
bool CommentItem::setTextParent() {
|
||||
if (ElementTextItem *eti = m_element->taggedText("label")) {
|
||||
setParentItem(eti);
|
||||
m_text_parent = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
qDebug() << "Comment item: can't found text tagged 'label' from actual parent element to set has parent, "
|
||||
"comment will be displayed at bottom of diagram";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,6 @@
|
||||
#include "element.h"
|
||||
#include "qetapp.h"
|
||||
#include "diagramposition.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "diagram.h"
|
||||
#include "qgraphicsitemutility.h"
|
||||
#include "assignvariables.h"
|
||||
|
@ -16,7 +16,6 @@
|
||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "customelement.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "diagram.h"
|
||||
#include "qetapp.h"
|
||||
#include "partline.h"
|
||||
@ -242,7 +241,6 @@ CustomElement::~CustomElement() {
|
||||
qDeleteAll (m_circles);
|
||||
qDeleteAll (m_polygons);
|
||||
qDeleteAll (m_arcs);
|
||||
qDeleteAll (m_texts);
|
||||
qDeleteAll (m_terminals);
|
||||
}
|
||||
|
||||
@ -258,11 +256,6 @@ QList<Conductor *> CustomElement::conductors() const {
|
||||
return(conductors);
|
||||
}
|
||||
|
||||
/// @return la liste des textes de cet element
|
||||
QList<ElementTextItem *> CustomElement::texts() const {
|
||||
return(m_texts);
|
||||
}
|
||||
|
||||
/// @return the list of lines
|
||||
QList<QLineF *> CustomElement::lines() const {
|
||||
return(m_lines);
|
||||
@ -685,20 +678,6 @@ bool CustomElement::parseText(QDomElement &e, QPainter &qp, bool addtolist) {
|
||||
text_document.setDefaultFont(used_font);
|
||||
text_document.setPlainText(e.attribute("text"));
|
||||
|
||||
if (addtolist){
|
||||
//Add element to list of texts.
|
||||
ElementTextItem *eti = new ElementTextItem(e.attribute("text"));
|
||||
eti -> setFont(QETApp::diagramTextsFont(size));
|
||||
eti -> setOriginalPos(QPointF(pos_x, pos_y));
|
||||
eti -> setPos(pos_x, pos_y);
|
||||
qreal original_rotation_angle = 0.0;
|
||||
QET::attributeIsAReal(e, "rotation", &original_rotation_angle);
|
||||
eti -> setOriginalRotationAngle(original_rotation_angle);
|
||||
eti -> setRotationAngle(original_rotation_angle);
|
||||
eti -> setFollowParentRotations(e.attribute("rotate") == "true");
|
||||
m_texts << eti;
|
||||
}
|
||||
|
||||
// Se positionne aux coordonnees indiquees dans la description du texte
|
||||
qp.setTransform(QTransform(), false);
|
||||
qp.translate(pos_x, pos_y);
|
||||
@ -751,37 +730,6 @@ bool CustomElement::parseInput(QDomElement &dom_element) {
|
||||
!QET::attributeIsAReal(dom_element, "y", &pos_y) ||\
|
||||
!QET::attributeIsAnInteger(dom_element, "size", &size)
|
||||
) return(false);
|
||||
|
||||
// //The text have a tagg, we create an element text item
|
||||
// if (dom_element.attribute("tagg", "none") != "none")
|
||||
// {
|
||||
// ElementTextItem *eti = new ElementTextItem(dom_element.attribute("text"), this);
|
||||
// eti -> setFont(QETApp::diagramTextsFont(size));
|
||||
// eti -> setTagg(dom_element.attribute("tagg", "other"));
|
||||
// m_element_informations.addValue(dom_element.attribute("tagg", "other"), dom_element.attribute("text"));
|
||||
|
||||
// // position the text field
|
||||
// eti -> setOriginalPos(QPointF(pos_x, pos_y));
|
||||
// eti -> setPos(pos_x, pos_y);
|
||||
|
||||
// // rotation of the text field
|
||||
// qreal original_rotation_angle = 0.0;
|
||||
// QET::attributeIsAReal(dom_element, "rotation", &original_rotation_angle);
|
||||
// eti -> setOriginalRotationAngle(original_rotation_angle);
|
||||
// eti -> setRotationAngle(original_rotation_angle);
|
||||
|
||||
// // behavior when the parent element is rotated
|
||||
// eti -> setFollowParentRotations(dom_element.attribute("rotate") == "true");
|
||||
|
||||
// m_texts << eti;
|
||||
|
||||
// connect(eti, &ElementTextItem::diagramTextChanged, this, &Element::textItemChanged);
|
||||
|
||||
// return(eti);
|
||||
// }
|
||||
//The text haven't got a tagg, so we convert it to a dynamic text item
|
||||
//and store it to m_converted_text_from_xml_description, instead of m_dynamic_text_list
|
||||
//because these dynamic text need post treatement
|
||||
else
|
||||
{
|
||||
DynamicElementTextItem *deti = new DynamicElementTextItem(this);
|
||||
@ -1079,34 +1027,3 @@ void CustomElement::setPainterStyle(QDomElement &e, QPainter &qp) {
|
||||
// mise en place (ou non) de l'antialiasing
|
||||
setQPainterAntiAliasing(qp, e.attribute("antialias") == "true");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief CustomElement::setTaggedText
|
||||
* Set text @newstr to the text tagged with @tagg.
|
||||
* If tagg is found return the text item, else return NULL.
|
||||
* @param tagg required tagg
|
||||
* @param newstr new label
|
||||
* @param noeditable set editable or not (by default, set editable)
|
||||
*/
|
||||
ElementTextItem* CustomElement::setTaggedText(const QString &tagg, const QString &newstr, const bool noeditable) {
|
||||
ElementTextItem *eti = taggedText(tagg);
|
||||
if (eti) {
|
||||
eti -> setPlainText(newstr);
|
||||
eti -> setNoEditable(noeditable);
|
||||
}
|
||||
return eti;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief CustomElement::taggedText
|
||||
* return the text field tagged with @tagg or NULL if text field isn't found
|
||||
* Some of available taggs :
|
||||
* function, tension-protocol, label, comment, location
|
||||
* @param tagg
|
||||
*/
|
||||
ElementTextItem* CustomElement::taggedText(const QString &tagg) const {
|
||||
foreach (ElementTextItem *eti, m_texts) {
|
||||
if (eti -> tagg() == tagg) return eti;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -22,7 +22,6 @@
|
||||
#include "elementslocation.h"
|
||||
#include <QPicture>
|
||||
|
||||
class ElementTextItem;
|
||||
class Terminal;
|
||||
|
||||
/**
|
||||
@ -50,7 +49,6 @@ class CustomElement : public FixedElement
|
||||
QPicture drawing;
|
||||
QPicture low_zoom_drawing;
|
||||
QList<Terminal *> m_terminals;
|
||||
QList<ElementTextItem *> m_texts;
|
||||
QList<DynamicElementTextItem *> m_dynamic_texts;
|
||||
bool forbid_antialiasing;
|
||||
|
||||
@ -65,7 +63,6 @@ class CustomElement : public FixedElement
|
||||
public:
|
||||
QList<Terminal *> terminals() const override;
|
||||
QList<Conductor *> conductors() const override;
|
||||
QList<ElementTextItem *> texts() const override;
|
||||
QList<QLineF *> lines() const override;
|
||||
QList<QRectF *> rectangles() const override;
|
||||
QList<QRectF *> circles() const override;
|
||||
@ -76,7 +73,6 @@ class CustomElement : public FixedElement
|
||||
QString typeId() const override;
|
||||
ElementsLocation location() const;
|
||||
QString name() const override;
|
||||
ElementTextItem* taggedText(const QString &tagg) const override;
|
||||
|
||||
protected:
|
||||
virtual bool buildFromXml(const QDomElement &, int * = nullptr);
|
||||
@ -95,8 +91,6 @@ class CustomElement : public FixedElement
|
||||
virtual void setQPainterAntiAliasing(QPainter &, bool);
|
||||
virtual bool validOrientationAttribute(const QDomElement &);
|
||||
virtual void setPainterStyle(QDomElement &, QPainter &);
|
||||
ElementTextItem* setTaggedText(const QString &tagg, const QString &newstr, const bool noeditable=false);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -18,7 +18,6 @@
|
||||
#include "element.h"
|
||||
#include "diagram.h"
|
||||
#include "conductor.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "diagramcommands.h"
|
||||
#include <QtDebug>
|
||||
#include "elementprovider.h"
|
||||
@ -237,24 +236,6 @@ void Element::rotateBy(const qreal &angle) {
|
||||
p -> updateConductor();
|
||||
}
|
||||
}
|
||||
|
||||
// repositionne les textes de l'element qui ne comportent pas l'option "FollowParentRotations"
|
||||
foreach(ElementTextItem *eti, texts()) {
|
||||
if (!eti -> followParentRotations()) {
|
||||
// on souhaite pivoter le champ de texte par rapport a son centre
|
||||
QPointF eti_center = eti -> boundingRect().center();
|
||||
// pour ce faire, on repere la position de son centre par rapport a son parent
|
||||
QPointF parent_eti_center_before = eti -> mapToParent(eti_center);
|
||||
// on applique ensuite une simple rotation contraire, qui sera donc appliquee sur le milieu du cote gauche du champ de texte
|
||||
eti -> rotateBy(-applied_angle);
|
||||
// on regarde ensuite la nouvelle position du centre du champ de texte par rapport a son parent
|
||||
QPointF parent_eti_center_after = eti -> mapToParent(eti_center);
|
||||
// on determine la translation a appliquer
|
||||
QPointF eti_translation = parent_eti_center_before - parent_eti_center_after;
|
||||
// on applique cette translation
|
||||
eti -> setPos(eti -> pos() + eti_translation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*** Methodes protegees ***/
|
||||
@ -344,25 +325,6 @@ void Element::updatePixmap() {
|
||||
paint(&p, nullptr);
|
||||
}
|
||||
|
||||
/**
|
||||
This class is used to retrieve label and function information from element
|
||||
and add it to Diagram Context. Used to make older versions work correctly
|
||||
@param Element Text item to check information
|
||||
*/
|
||||
void Element::etiToElementLabels(ElementTextItem *eti) {
|
||||
if (eti->tagg() == "label" && eti->toPlainText()!= "_") {
|
||||
DiagramContext &dc = this->rElementInformations();
|
||||
dc.addValue("label", eti->toPlainText());
|
||||
this->setElementInformations(dc);
|
||||
this->setTaggedText("label", eti->toPlainText());
|
||||
}
|
||||
else if(eti->tagg() == "function" && eti->toPlainText() != "_") {
|
||||
DiagramContext &dc = this->rElementInformations();
|
||||
dc.addValue("function", eti->toPlainText());
|
||||
this->setElementInformations(dc);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Permet de savoir si un element XML (QDomElement) represente bien un element
|
||||
@param e Le QDomElement a valide
|
||||
@ -580,20 +542,6 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool
|
||||
delete deti;
|
||||
m_converted_text_from_xml_description.clear();
|
||||
|
||||
//For the moment the text item with a tagg are not converted to dynamic text item
|
||||
//so we must to check it
|
||||
foreach(QGraphicsItem *qgi, childItems())
|
||||
{
|
||||
if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(qgi))
|
||||
{
|
||||
foreach(QDomElement input, inputs)
|
||||
{
|
||||
eti -> fromXml(input);
|
||||
etiToElementLabels(eti);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (QDomElement qde : QET::findInDomElement(e, "texts_groups", ElementTextItemGroup::xmlTaggName()))
|
||||
{
|
||||
ElementTextItemGroup *group = addTextGroup("loaded_from_xml_group");
|
||||
@ -620,30 +568,6 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool
|
||||
|
||||
setElementInformations(dc);
|
||||
|
||||
/**
|
||||
* At the start of the 0.51 devel, if the text item with tagg "label" was edited directly in the diagram,
|
||||
* the text was not write to the element information value "formula".
|
||||
* During the devel, this behavior change, when user edit the text item direclty in the diagram,
|
||||
* the text was also write in the element information.
|
||||
* Then when open a .qet file, the text item with tagg "label", is write with the value stored in the element information.
|
||||
* The mistake is :
|
||||
* if user write directly in the diagram with a version befor the change (so the text is not in the element information),
|
||||
* and open the project with a version after the change, then the text item with tagg "label" is empty.
|
||||
* The code below fix this.
|
||||
*/
|
||||
if (saved_version > -1 && saved_version <= 0.51)
|
||||
{
|
||||
if (ElementTextItem *eti = taggedText("label"))
|
||||
{
|
||||
if (m_element_informations["label"].toString().isEmpty() &&
|
||||
m_element_informations["formula"].toString().isEmpty() &&
|
||||
!eti->toPlainText().isEmpty())
|
||||
{
|
||||
m_element_informations.addValue("formula", eti->toPlainText());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
During the devel of the version 0.7, the "old text" was replaced by the dynamic element text item.
|
||||
When open a project made befor the 0.7, we must to reproduce the same visual when the label are not empty and visible,
|
||||
@ -837,9 +761,6 @@ QDomElement Element::toXml(QDomDocument &document, QHash<Terminal *, int> &table
|
||||
|
||||
// enregistrement des champ de texte de l'appareil
|
||||
QDomElement inputs = document.createElement("inputs");
|
||||
foreach(ElementTextItem *eti, texts()) {
|
||||
inputs.appendChild(eti -> toXml(document));
|
||||
}
|
||||
element.appendChild(inputs);
|
||||
|
||||
//if this element is linked to other elements,
|
||||
@ -1261,6 +1182,8 @@ void Element::hoverLeaveEvent(QGraphicsSceneHoverEvent *e) {
|
||||
*/
|
||||
void Element::setUpFormula(bool code_letter)
|
||||
{
|
||||
Q_UNUSED(code_letter)
|
||||
|
||||
if (linkType() == Element::Slave || linkType() & Element::AllReport)
|
||||
return;
|
||||
|
||||
@ -1268,31 +1191,15 @@ void Element::setUpFormula(bool code_letter)
|
||||
{
|
||||
QString formula = diagram()->project()->elementAutoNumCurrentFormula();
|
||||
|
||||
if (formula.isEmpty())
|
||||
{
|
||||
if (code_letter && !m_prefix.isEmpty())
|
||||
{
|
||||
if (ElementTextItem *eti = taggedText("label"))
|
||||
{
|
||||
QString text = eti->toPlainText();
|
||||
if (text.isEmpty() || text == "_")
|
||||
{
|
||||
m_element_informations.addValue("formula", "%prefix");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_element_informations.addValue("formula", formula);
|
||||
m_element_informations.addValue("formula", formula);
|
||||
|
||||
QString element_currentAutoNum = diagram()->project()->elementCurrentAutoNum();
|
||||
NumerotationContext nc = diagram()->project()->elementAutoNum(element_currentAutoNum);
|
||||
NumerotationContextCommands ncc (nc);
|
||||
|
||||
autonum::setSequential(formula, m_autoNum_seq, nc, diagram(), element_currentAutoNum);
|
||||
diagram()->project()->addElementAutoNum(element_currentAutoNum, ncc.next());
|
||||
|
||||
QString element_currentAutoNum = diagram()->project()->elementCurrentAutoNum();
|
||||
NumerotationContext nc = diagram()->project()->elementAutoNum(element_currentAutoNum);
|
||||
NumerotationContextCommands ncc (nc);
|
||||
|
||||
autonum::setSequential(formula, m_autoNum_seq, nc, diagram(), element_currentAutoNum);
|
||||
diagram()->project()->addElementAutoNum(element_currentAutoNum, ncc.next());
|
||||
}
|
||||
if(!m_freeze_label && !formula.isEmpty())
|
||||
{
|
||||
DiagramContext dc = m_element_informations;
|
||||
@ -1303,57 +1210,6 @@ void Element::setUpFormula(bool code_letter)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ElementTextItem::setTaggedText
|
||||
* Set text @newstr to the text tagged with @tagg.
|
||||
* If tagg is found return the text item, else return NULL.
|
||||
* @param tagg required tagg
|
||||
* @param newstr new label
|
||||
* @param noeditable set editable or not (by default, set editable)
|
||||
*/
|
||||
ElementTextItem* Element::setTaggedText(const QString &tagg, const QString &newstr, const bool noeditable) {
|
||||
ElementTextItem *eti = taggedText(tagg);
|
||||
if (eti) {
|
||||
eti -> setPlainText(newstr);
|
||||
eti -> setNoEditable(noeditable);
|
||||
}
|
||||
return eti;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Element::textItemChanged
|
||||
* Use to keep up to date the element information when text item changed.
|
||||
* @param dti
|
||||
* @param old_str
|
||||
* @param new_str
|
||||
*/
|
||||
void Element::textItemChanged(DiagramTextItem *dti, QString old_str, QString new_str)
|
||||
{
|
||||
Q_UNUSED(new_str)
|
||||
|
||||
if (!diagram())
|
||||
return;
|
||||
|
||||
ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(dti);
|
||||
if (!eti)
|
||||
return;
|
||||
|
||||
QString tagg = eti->tagg();
|
||||
if (m_element_informations.contains(tagg))
|
||||
{
|
||||
DiagramContext dc = m_element_informations;
|
||||
dc.addValue(tagg, eti->toPlainText(), dc.keyMustShow(tagg));
|
||||
if (tagg == "label")
|
||||
dc.addValue("formula", eti->toPlainText(), dc.keyMustShow("formula"));
|
||||
|
||||
diagram()->undoStack().push(new ChangeElementInformationCommand(this, m_element_informations, dc));
|
||||
}
|
||||
else
|
||||
{
|
||||
diagram()->undoStack().push(new ChangeDiagramTextCommand(eti, old_str, eti->toPlainText()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Element::getPrefix
|
||||
* get Element Prefix
|
||||
@ -1376,15 +1232,7 @@ void Element::setPrefix(QString prefix) {
|
||||
*/
|
||||
void Element::freezeLabel(bool freeze)
|
||||
{
|
||||
if (m_freeze_label != freeze)
|
||||
{
|
||||
m_freeze_label = freeze;
|
||||
QString f = m_element_informations["formula"].toString();
|
||||
setUpConnectionForFormula(f,f);
|
||||
|
||||
if (m_freeze_label == true)
|
||||
updateLabel();
|
||||
}
|
||||
m_freeze_label = freeze;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1397,45 +1245,3 @@ void Element::freezeNewAddedElement() {
|
||||
}
|
||||
else return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Element::setUpConnectionForFormula
|
||||
* setup connection according to the variable of formula
|
||||
* @param old_formula
|
||||
* @param new_formula
|
||||
*/
|
||||
void Element::setUpConnectionForFormula(QString old_formula, QString new_formula)
|
||||
{
|
||||
//Because the variable %F is a reference to another text which can contain variables,
|
||||
//we must to replace %F by the real text, to check if the real text contain the variable %id
|
||||
if (diagram() && old_formula.contains("%F"))
|
||||
{
|
||||
disconnect(&diagram()->border_and_titleblock, &BorderTitleBlock::titleBlockFolioChanged, this, &Element::updateLabel);
|
||||
old_formula.replace("%F", m_F_str);
|
||||
}
|
||||
|
||||
if (diagram() && (old_formula.contains("%f") || old_formula.contains("%id")))
|
||||
disconnect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &Element::updateLabel);
|
||||
if (old_formula.contains("%l"))
|
||||
disconnect(this, &Element::yChanged, this, &Element::updateLabel);
|
||||
if (old_formula.contains("%c"))
|
||||
disconnect(this, &Element::xChanged, this, &Element::updateLabel);
|
||||
|
||||
//Label is frozen, so we don't update it.
|
||||
if (m_freeze_label == true)
|
||||
return;
|
||||
|
||||
if (diagram() && new_formula.contains("%F"))
|
||||
{
|
||||
m_F_str = diagram()->border_and_titleblock.folio();
|
||||
new_formula.replace("%F", m_F_str);
|
||||
connect(&diagram()->border_and_titleblock, &BorderTitleBlock::titleBlockFolioChanged, this, &Element::updateLabel);
|
||||
}
|
||||
|
||||
if (diagram() && (new_formula.contains("%f") || new_formula.contains("%id")))
|
||||
connect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &Element::updateLabel);
|
||||
if (new_formula.contains("%l"))
|
||||
connect(this, &Element::yChanged, this, &Element::updateLabel);
|
||||
if (new_formula.contains("%c"))
|
||||
connect(this, &Element::xChanged, this, &Element::updateLabel);
|
||||
}
|
||||
|
@ -24,7 +24,6 @@
|
||||
#include "assignvariables.h"
|
||||
#include <algorithm>
|
||||
|
||||
class ElementTextItem;
|
||||
class QETProject;
|
||||
class Terminal;
|
||||
class Conductor;
|
||||
@ -81,10 +80,6 @@ class Element : public QetGraphicsItem
|
||||
virtual QList<Terminal *> terminals() const = 0;
|
||||
/// @return the list of conductors attached to this element
|
||||
virtual QList<Conductor *> conductors() const = 0;
|
||||
/// @return the list of text items attached to this element
|
||||
virtual QList<ElementTextItem *> texts() const = 0;
|
||||
/// @return the text field tagged with @tagg or NULL if text field isn't found
|
||||
virtual ElementTextItem* taggedText(const QString &tagg) const = 0;
|
||||
/// @return the list of lines items in this element
|
||||
virtual QList<QLineF *> lines() const = 0;
|
||||
/// @return the list of rectangles items in this element
|
||||
@ -126,12 +121,10 @@ class Element : public QetGraphicsItem
|
||||
QList <QUuid> tmp_uuids_link;
|
||||
QUuid uuid_;
|
||||
kind m_link_type;
|
||||
ElementTextItem* setTaggedText(const QString &tagg, const QString &newstr, const bool noeditable=false);
|
||||
|
||||
signals:
|
||||
void linkedElementChanged(); //This signal is emited when the linked elements with this element change
|
||||
void elementInfoChange(DiagramContext old_info, DiagramContext new_info);
|
||||
void updateLabel(); //This signal is emited to update element's label
|
||||
void textAdded(DynamicElementTextItem *deti);
|
||||
void textRemoved(DynamicElementTextItem *deti);
|
||||
void textsGroupAdded(ElementTextItemGroup *group);
|
||||
@ -141,7 +134,6 @@ class Element : public QetGraphicsItem
|
||||
|
||||
//METHODS related to information
|
||||
public:
|
||||
void textItemChanged(DiagramTextItem *dti, QString old_str, QString new_str);
|
||||
DiagramContext elementInformations ()const {return m_element_informations;}
|
||||
DiagramContext& rElementInformations () {return m_element_informations;}
|
||||
virtual void setElementInformations (DiagramContext dc);
|
||||
@ -159,9 +151,6 @@ class Element : public QetGraphicsItem
|
||||
bool isFreezeLabel() const {return m_freeze_label;}
|
||||
void freezeNewAddedElement();
|
||||
|
||||
protected:
|
||||
virtual void setUpConnectionForFormula(QString old_formula, QString new_formula);
|
||||
|
||||
//ATTRIBUTES
|
||||
protected:
|
||||
DiagramContext m_element_informations, m_kind_informations;
|
||||
@ -224,7 +213,6 @@ class Element : public QetGraphicsItem
|
||||
void drawSelection(QPainter *, const QStyleOptionGraphicsItem *);
|
||||
void drawHighlight(QPainter *, const QStyleOptionGraphicsItem *);
|
||||
void updatePixmap();
|
||||
void etiToElementLabels(ElementTextItem*);
|
||||
|
||||
protected:
|
||||
void mouseMoveEvent ( QGraphicsSceneMouseEvent *event ) override;
|
||||
|
@ -1,373 +0,0 @@
|
||||
/*
|
||||
Copyright 2006-2017 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/>.
|
||||
*/
|
||||
#include "elementtextitem.h"
|
||||
#include "element.h"
|
||||
#include <QTextDocument>
|
||||
#include "diagram.h"
|
||||
#include "diagramcommands.h"
|
||||
|
||||
/**
|
||||
Constructeur
|
||||
@param parent_element Le QGraphicsItem parent du champ de texte
|
||||
@param parent_diagram Le schema auquel appartient le champ de texte
|
||||
*/
|
||||
ElementTextItem::ElementTextItem(Element *parent_element) :
|
||||
DiagramTextItem(parent_element),
|
||||
parent_element_(parent_element),
|
||||
follow_parent_rotations(false),
|
||||
original_rotation_angle_(0.0)
|
||||
{build();}
|
||||
|
||||
/**
|
||||
Constructeur
|
||||
@param parent_element L'element parent du champ de texte
|
||||
@param parent_diagram Le schema auquel appartient le champ de texte
|
||||
@param text Le texte affiche par le champ de texte
|
||||
*/
|
||||
ElementTextItem::ElementTextItem(const QString &text, Element *parent_element) :
|
||||
DiagramTextItem(text, parent_element),
|
||||
parent_element_(parent_element),
|
||||
follow_parent_rotations(false),
|
||||
original_rotation_angle_(0.0)
|
||||
{build();}
|
||||
|
||||
void ElementTextItem::build() {
|
||||
adjustItemPosition(1);
|
||||
// ajuste la position du QGraphicsItem lorsque le QTextDocument change
|
||||
connect(document(), SIGNAL(blockCountChanged(int)), this, SLOT(adjustItemPosition(int)));
|
||||
connect(document(), SIGNAL(contentsChanged()), this, SLOT(adjustItemPosition()));
|
||||
}
|
||||
|
||||
/// Destructeur
|
||||
ElementTextItem::~ElementTextItem() {
|
||||
}
|
||||
|
||||
/**
|
||||
@return L'element parent de ce champ de texte, ou 0 si celui-ci n'en a pas.
|
||||
*/
|
||||
Element *ElementTextItem::parentElement() const {
|
||||
return(parent_element_);
|
||||
}
|
||||
|
||||
/**
|
||||
Permet de lire le texte a mettre dans le champ a partir d'un element XML.
|
||||
Cette methode se base sur la position du champ pour assigner ou non la
|
||||
valeur a ce champ.
|
||||
@param e L'element XML representant le champ de texte
|
||||
*/
|
||||
void ElementTextItem::fromXml(const QDomElement &e) {
|
||||
QPointF _pos = pos();
|
||||
if (
|
||||
qFuzzyCompare(qreal(e.attribute("x").toDouble()), _pos.x()) &&
|
||||
qFuzzyCompare(qreal(e.attribute("y").toDouble()), _pos.y())
|
||||
) {
|
||||
setPlainText(e.attribute("text"));
|
||||
|
||||
qreal user_pos_x, user_pos_y;
|
||||
if (
|
||||
QET::attributeIsAReal(e, "userx", &user_pos_x) &&
|
||||
QET::attributeIsAReal(e, "usery", &user_pos_y)
|
||||
) {
|
||||
setPos(user_pos_x, user_pos_y);
|
||||
}
|
||||
|
||||
qreal xml_rotation_angle;
|
||||
if (QET::attributeIsAReal(e, "userrotation", &xml_rotation_angle)) {
|
||||
setRotationAngle(xml_rotation_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@param document Le document XML a utiliser
|
||||
@return L'element XML representant ce champ de texte
|
||||
*/
|
||||
QDomElement ElementTextItem::toXml(QDomDocument &document) const {
|
||||
QDomElement result = document.createElement("input");
|
||||
|
||||
result.setAttribute("x", QString("%1").arg(originalPos().x()));
|
||||
result.setAttribute("y", QString("%1").arg(originalPos().y()));
|
||||
|
||||
if (pos() != originalPos()) {
|
||||
result.setAttribute("userx", QString("%1").arg(pos().x()));
|
||||
result.setAttribute("usery", QString("%1").arg(pos().y()));
|
||||
}
|
||||
|
||||
result.setAttribute("text", toPlainText());
|
||||
|
||||
if (rotationAngle() != originalRotationAngle()) {
|
||||
result.setAttribute("userrotation", QString("%1").arg(rotationAngle()));
|
||||
}
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
/**
|
||||
@param p Position originale / de reference pour ce champ
|
||||
Cette position est utilisee lors de l'export en XML
|
||||
*/
|
||||
void ElementTextItem::setOriginalPos(const QPointF &p) {
|
||||
original_position = p;
|
||||
}
|
||||
|
||||
/**
|
||||
@return la position originale / de reference pour ce champ
|
||||
*/
|
||||
QPointF ElementTextItem::originalPos() const {
|
||||
return(original_position);
|
||||
}
|
||||
|
||||
/**
|
||||
Definit l'angle de rotation original de ce champ de texte
|
||||
@param rotation_angle un angle de rotation
|
||||
*/
|
||||
void ElementTextItem::setOriginalRotationAngle(const qreal &rotation_angle) {
|
||||
original_rotation_angle_ = QET::correctAngle(rotation_angle);
|
||||
}
|
||||
|
||||
/**
|
||||
@return l'angle de rotation original de ce champ de texte
|
||||
*/
|
||||
qreal ElementTextItem::originalRotationAngle() const {
|
||||
return(original_rotation_angle_);
|
||||
}
|
||||
|
||||
/**
|
||||
Set the font used to render the text item to \a font.
|
||||
*/
|
||||
void ElementTextItem::setFont(const QFont &font) {
|
||||
DiagramTextItem::setFont(font);
|
||||
adjustItemPosition(1);
|
||||
}
|
||||
|
||||
/**
|
||||
Cette methode s'assure que la position de l'ElementTextItem est coherente
|
||||
en ajustant :
|
||||
* la transformation de base qui permet de considerer que l'origine
|
||||
correspond au milieu du bord gauche du champ de texte
|
||||
* l'origine utilisee lors des appels a setRotation et setScale
|
||||
@param new_block_count Nombre de blocs dans l'ElementTextItem
|
||||
*/
|
||||
void ElementTextItem::adjustItemPosition(int new_block_count) {
|
||||
Q_UNUSED(new_block_count);
|
||||
qreal origin_offset = boundingRect().bottom() / 2.0;
|
||||
|
||||
QTransform base_translation;
|
||||
base_translation.translate(0.0, -origin_offset);
|
||||
setTransform(base_translation, false);
|
||||
setTransformOriginPoint(0.0, origin_offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ElementTextItem::mouseDoubleClickEvent
|
||||
* @param event
|
||||
*/
|
||||
void ElementTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
/*
|
||||
* Before revision 3559, report element haven't got text tagged label
|
||||
* so if parent is a report and haven't got text tagged label,
|
||||
* we know if this text is used has tagged label.
|
||||
*/
|
||||
bool report_text = false;
|
||||
if (parent_element_ -> linkType() & Element::AllReport && !parent_element_ -> taggedText("label"))
|
||||
{
|
||||
//This is the first of list, so this text is used to display
|
||||
//pos of linked report.
|
||||
if (parent_element_ -> texts().first() == this)
|
||||
report_text = true;
|
||||
}
|
||||
|
||||
if ( (tagg_ == "label" || report_text) && !parent_element_ -> isFree())
|
||||
{
|
||||
//If parent is linked, show the linked element
|
||||
if ( parent_element_ -> linkType() & (Element::AllReport | Element::Slave) )
|
||||
{
|
||||
//Unselect and ungrab mouse to prevent unwanted
|
||||
//move when linked element is in the same scene of this.
|
||||
setSelected(false);
|
||||
ungrabMouse();
|
||||
|
||||
//Show and select the linked element
|
||||
Element *linked = parent_element_ -> linkedElements().first();
|
||||
if (scene() != linked -> scene())
|
||||
linked -> diagram() -> showMe();
|
||||
linked -> setSelected(true);
|
||||
|
||||
//Zoom to the linked element
|
||||
foreach(QGraphicsView *view, linked -> diagram() -> views()) {
|
||||
QRectF fit = linked -> sceneBoundingRect();
|
||||
fit.adjust(-200, -200, 200, 200);
|
||||
view -> fitInView(fit, Qt::KeepAspectRatioByExpanding);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DiagramTextItem::mouseDoubleClickEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ElementTextItem::mouseMoveEvent
|
||||
* @param e
|
||||
*/
|
||||
void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
|
||||
if (textInteractionFlags() & Qt::TextEditable) {
|
||||
DiagramTextItem::mouseMoveEvent(event);
|
||||
} else if ((flags() & QGraphicsItem::ItemIsMovable) && (event -> buttons() & Qt::LeftButton)) {
|
||||
QPointF old_pos = pos();
|
||||
|
||||
/*
|
||||
* Use e -> pos() directly will be have for behavior to pos the origin
|
||||
* of the text field to the position pointed by the cursor, that isn't the wanted effect.
|
||||
* Instead of this, we apply to the actual pos,
|
||||
* the vector defined by the movement of cursor since the last pos clicked by left button
|
||||
*/
|
||||
QPointF movement = event -> pos() - event -> buttonDownPos(Qt::LeftButton);
|
||||
|
||||
/*
|
||||
* the method pos() and setPos() always work with coordinate of parent item
|
||||
* (or scene if there isn't parent) we don't forget to map the movemement to parent
|
||||
* before applyRotation
|
||||
*/
|
||||
QPointF new_pos = pos() + mapMovementToParent(movement);
|
||||
event -> modifiers() == Qt::ControlModifier ? setPos(new_pos) : setPos(Diagram::snapToGrid(new_pos));
|
||||
|
||||
Diagram *diagram_ptr = diagram();
|
||||
if (diagram_ptr) {
|
||||
if (m_first_move) {
|
||||
//We signal the beginning of movement to the parent diagram
|
||||
int moved_texts_count = diagram_ptr -> beginMoveElementTexts(this);
|
||||
parent_element_ -> setHighlighted(true);
|
||||
|
||||
//If there is one texte to move, we highlight the parent element.
|
||||
if (moved_texts_count == 1 && parent_element_) {
|
||||
parent_element_ -> setHighlighted(true);
|
||||
parent_element_ -> update();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Comme setPos() n'est pas oblige d'appliquer exactement la
|
||||
valeur qu'on lui fournit, on calcule le mouvement reellement
|
||||
applique.
|
||||
*/
|
||||
QPointF effective_movement = pos() - old_pos;
|
||||
QPointF scene_effective_movement = mapMovementToScene(mapMovementFromParent(effective_movement));
|
||||
|
||||
// on applique le mouvement subi aux autres textes a deplacer
|
||||
diagram_ptr -> continueMoveElementTexts(event);
|
||||
}
|
||||
} else event -> ignore();
|
||||
|
||||
if (m_first_move) {
|
||||
m_first_move = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ElementTextItem::mouseReleaseEvent
|
||||
* @param e
|
||||
*/
|
||||
void ElementTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
|
||||
if (Diagram *diagram_ptr = diagram()) {
|
||||
if (parent_element_) {
|
||||
if (parent_element_ -> isHighlighted()) {
|
||||
parent_element_ -> setHighlighted(false);
|
||||
}
|
||||
}
|
||||
|
||||
diagram_ptr -> endMoveElementTexts();
|
||||
}
|
||||
if (!(event -> modifiers() & Qt::ControlModifier)) {
|
||||
QGraphicsTextItem::mouseReleaseEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ElementTextItem::hoverEnterEvent
|
||||
* @param event
|
||||
*/
|
||||
void ElementTextItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
||||
{
|
||||
/*
|
||||
* Before revision 3559, report element haven't got text tagged label
|
||||
* so if parent is a report and haven't got text tagged label,
|
||||
* we know if this text is used has tagged label.
|
||||
*/
|
||||
bool report_text = false;
|
||||
if (parent_element_ -> linkType() & Element::AllReport && !parent_element_ -> taggedText("label"))
|
||||
{
|
||||
//This is the first of list, so this text is used to display
|
||||
//pos of linked report.
|
||||
if (parent_element_ -> texts().first() == this)
|
||||
report_text = true;
|
||||
}
|
||||
|
||||
if (tagg_ == "label" || report_text)
|
||||
{
|
||||
if (parent_element_ -> linkType() & (Element::AllReport | Element::Slave) && !parent_element_->isFree()) {
|
||||
|
||||
setDefaultTextColor(Qt::blue);
|
||||
|
||||
//Also color the child text if parent is a slave and linked
|
||||
if (parent_element_-> linkType() == Element::Slave && !parent_element_ -> isFree())
|
||||
foreach (QGraphicsItem *qgi, childItems())
|
||||
if (QGraphicsTextItem *qgti = qgraphicsitem_cast<QGraphicsTextItem *> (qgi))
|
||||
qgti -> setDefaultTextColor(Qt::blue);
|
||||
}
|
||||
}
|
||||
|
||||
DiagramTextItem::hoverEnterEvent(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ElementTextItem::hoverLeaveEvent
|
||||
* @param event
|
||||
*/
|
||||
void ElementTextItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
|
||||
{
|
||||
/*
|
||||
* Before revision 3559, report element haven't got text tagged label
|
||||
* so if parent is a report and haven't got text tagged label,
|
||||
* we know if this text is used has tagged label.
|
||||
*/
|
||||
bool report_text = false;
|
||||
if (parent_element_ -> linkType() & Element::AllReport && !parent_element_ -> taggedText("label"))
|
||||
{
|
||||
//This is the first of list, so this text is used to display
|
||||
//pos of linked report.
|
||||
if (parent_element_ -> texts().first() == this)
|
||||
report_text = true;
|
||||
}
|
||||
|
||||
if (tagg_ == "label" || report_text)
|
||||
{
|
||||
if (defaultTextColor() != Qt::black)
|
||||
setDefaultTextColor(Qt::black);
|
||||
|
||||
//Also color the child text if parent is a slave and linked
|
||||
if (parent_element_-> linkType() == Element::Slave && !parent_element_ -> isFree())
|
||||
foreach (QGraphicsItem *qgi, childItems())
|
||||
if (QGraphicsTextItem *qgti = qgraphicsitem_cast<QGraphicsTextItem *> (qgi))
|
||||
qgti -> setDefaultTextColor(Qt::black);
|
||||
}
|
||||
|
||||
DiagramTextItem::hoverLeaveEvent(event);
|
||||
}
|
@ -1,98 +0,0 @@
|
||||
/*
|
||||
Copyright 2006-2017 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/>.
|
||||
*/
|
||||
#ifndef ELEMENT_TEXT_ITEM_H
|
||||
#define ELEMENT_TEXT_ITEM_H
|
||||
|
||||
#include "diagramtextitem.h"
|
||||
|
||||
class Element;
|
||||
|
||||
/**
|
||||
This class represents a text item attached to an element. Users can change its
|
||||
value, adjust its position (defined relatively to its parent element), and
|
||||
direct it to any angle.
|
||||
*/
|
||||
class ElementTextItem : public DiagramTextItem {
|
||||
Q_OBJECT
|
||||
// constructors, destructor
|
||||
public:
|
||||
ElementTextItem(Element * = nullptr);
|
||||
ElementTextItem(const QString &, Element * = nullptr);
|
||||
~ElementTextItem() override;
|
||||
|
||||
// attributes
|
||||
public:
|
||||
enum { Type = UserType + 1003 };
|
||||
int type () const override { return Type; }
|
||||
|
||||
private:
|
||||
Element *parent_element_;
|
||||
bool follow_parent_rotations;
|
||||
QPointF original_position;
|
||||
qreal original_rotation_angle_;
|
||||
QString tagg_;
|
||||
|
||||
// methods
|
||||
public:
|
||||
Element *parentElement () const;
|
||||
void fromXml ( const QDomElement & ) override;
|
||||
QDomElement toXml ( QDomDocument & ) const override;
|
||||
void setOriginalPos ( const QPointF & );
|
||||
QPointF originalPos () const;
|
||||
void setOriginalRotationAngle ( const qreal & );
|
||||
qreal originalRotationAngle () const;
|
||||
virtual void setFont ( const QFont & );
|
||||
void setTagg ( const QString &str ) {tagg_ = str;}
|
||||
QString tagg () const {return tagg_;}
|
||||
void setFollowParentRotations ( bool fpr);
|
||||
bool followParentRotations () const;
|
||||
|
||||
public slots:
|
||||
void adjustItemPosition(int = 0);
|
||||
|
||||
protected:
|
||||
void mouseDoubleClickEvent ( QGraphicsSceneMouseEvent *event ) override;
|
||||
void mouseMoveEvent ( QGraphicsSceneMouseEvent *event ) override;
|
||||
void mouseReleaseEvent ( QGraphicsSceneMouseEvent *event ) override;
|
||||
void hoverEnterEvent ( QGraphicsSceneHoverEvent *event ) override;
|
||||
void hoverLeaveEvent ( QGraphicsSceneHoverEvent *event ) override;
|
||||
|
||||
private:
|
||||
void build ();
|
||||
};
|
||||
|
||||
/**
|
||||
Element text items can optionally be applied a counter-rotation when their
|
||||
parent element is rotated, thus preserving their readability.
|
||||
@return whether this text item follows the rotations of its parent element.
|
||||
*/
|
||||
inline bool ElementTextItem::followParentRotations() const {
|
||||
return(follow_parent_rotations);
|
||||
}
|
||||
|
||||
/**
|
||||
Element text items can optionally be applied a counter-rotation when their
|
||||
parent element is rotated, thus preserving their readability.
|
||||
@param frp whether this text item should follow the rotations of its parent
|
||||
element.
|
||||
*/
|
||||
inline void ElementTextItem::setFollowParentRotations(bool frp) {
|
||||
follow_parent_rotations = frp;
|
||||
}
|
||||
|
||||
#endif
|
@ -18,7 +18,6 @@
|
||||
#include "ghostelement.h"
|
||||
#include "qet.h"
|
||||
#include "terminal.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "diagramcommands.h"
|
||||
|
||||
/**
|
||||
|
@ -17,7 +17,6 @@
|
||||
*/
|
||||
#include "masterelement.h"
|
||||
#include "crossrefitem.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "diagram.h"
|
||||
#include "dynamicelementtextitem.h"
|
||||
#include <QRegularExpression>
|
||||
@ -34,9 +33,6 @@ MasterElement::MasterElement(const ElementsLocation &location, QGraphicsItem *qg
|
||||
CustomElement(location, qgi, state)
|
||||
{
|
||||
m_link_type = Element::Master;
|
||||
|
||||
connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
|
||||
connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -114,7 +110,6 @@ void MasterElement::unlinkElement(Element *elmt)
|
||||
void MasterElement::initLink(QETProject *project) {
|
||||
//Create the link with other element if needed
|
||||
CustomElement::initLink(project);
|
||||
updateLabel(DiagramContext(), elementInformations());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -130,38 +125,6 @@ QRectF MasterElement::XrefBoundingRect() const
|
||||
return QRectF();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief MasterElement::updateLabel
|
||||
* update label of this element
|
||||
* and the comment item if he's displayed.
|
||||
*/
|
||||
void MasterElement::updateLabel(DiagramContext old_info, DiagramContext new_info)
|
||||
{
|
||||
QString old_formula = old_info["formula"].toString();
|
||||
QString new_formula = new_info["formula"].toString();
|
||||
|
||||
setUpConnectionForFormula(old_formula, new_formula);
|
||||
|
||||
QString label = autonum::AssignVariables::formulaToLabel(new_formula, m_autoNum_seq, diagram(), this);
|
||||
|
||||
if (label.isEmpty())
|
||||
{
|
||||
setTaggedText("label", new_info["label"].toString());
|
||||
}
|
||||
else
|
||||
{
|
||||
bool visible = m_element_informations.contains("label") ? m_element_informations.keyMustShow("label") : true;
|
||||
m_element_informations.addValue("label", label, visible);
|
||||
setTaggedText("label", label);
|
||||
}
|
||||
|
||||
if (ElementTextItem *eti = taggedText("label"))
|
||||
{
|
||||
new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QVariant MasterElement::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
|
||||
{
|
||||
if(change == QGraphicsItem::ItemSceneHasChanged && m_first_scene_change)
|
||||
|
@ -41,9 +41,6 @@ class MasterElement : public CustomElement
|
||||
void unlinkElement (Element *elmt) override;
|
||||
void initLink (QETProject *project) override;
|
||||
QRectF XrefBoundingRect() const;
|
||||
|
||||
public slots:
|
||||
void updateLabel(DiagramContext old_info, DiagramContext new_info);
|
||||
|
||||
protected:
|
||||
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
|
||||
|
@ -16,7 +16,6 @@
|
||||
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "reportelement.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "diagramposition.h"
|
||||
#include "qetproject.h"
|
||||
#include "diagram.h"
|
||||
@ -25,31 +24,10 @@
|
||||
#include "dynamicelementtextitem.h"
|
||||
|
||||
ReportElement::ReportElement(const ElementsLocation &location, QString link_type,QGraphicsItem *qgi, int *state) :
|
||||
CustomElement(location, qgi, state),
|
||||
m_text_field (nullptr),
|
||||
m_watched_conductor(nullptr)
|
||||
{
|
||||
/*
|
||||
* Get text tagged label. This is work for report
|
||||
* create after the revision 3559.
|
||||
* for report create before, we take the first text field
|
||||
* because report haven't got a text field tagged label
|
||||
*/
|
||||
m_text_field = taggedText("label");
|
||||
if (!m_text_field && !texts().isEmpty())
|
||||
m_text_field = texts().first();
|
||||
if (m_text_field)
|
||||
m_text_field -> setNoEditable();
|
||||
|
||||
CustomElement(location, qgi, state)
|
||||
{
|
||||
link_type == "next_report"? m_link_type=NextReport : m_link_type=PreviousReport;
|
||||
link_type == "next_report"? m_inverse_report=PreviousReport : m_inverse_report=NextReport;
|
||||
|
||||
//We make these connections, to be always aware about the conductor properties
|
||||
if (terminals().size())
|
||||
{
|
||||
connect (terminals().first(), &Terminal::conductorWasAdded, this, &ReportElement::conductorWasAdded);
|
||||
connect (terminals().first(), &Terminal::conductorWasRemoved, this, &ReportElement::conductorWasRemoved);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -61,8 +39,6 @@ ReportElement::~ReportElement()
|
||||
unlinkAllElements();
|
||||
if (terminals().size())
|
||||
disconnect(terminals().first(), nullptr, nullptr, nullptr);
|
||||
if (m_watched_conductor)
|
||||
disconnect(m_watched_conductor, &Conductor::propertiesChange, this, &ReportElement::updateLabel);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -89,24 +65,7 @@ void ReportElement::linkToElement(Element * elmt)
|
||||
{
|
||||
unlinkAllElements();
|
||||
connected_elements << elmt;
|
||||
m_formula = diagram()->project()->defaultReportProperties();
|
||||
setConnectionForFormula(m_formula);
|
||||
connect(diagram()->project(), &QETProject::reportPropertiesChanged, this, &ReportElement::reportPropertiesChange);
|
||||
connect(diagram()->project(), &QETProject::diagramRemoved, this, &ReportElement::updateLabel);
|
||||
|
||||
if (elmt->terminals().size())
|
||||
{
|
||||
connect(elmt->terminals().first(), &Terminal::conductorWasAdded, this, &ReportElement::conductorWasAdded);
|
||||
connect(elmt->terminals().first(), &Terminal::conductorWasRemoved, this, &ReportElement::conductorWasRemoved);
|
||||
}
|
||||
|
||||
if (!m_watched_conductor && elmt->conductors().size())
|
||||
conductorWasAdded(elmt->conductors().first());
|
||||
else
|
||||
updateLabel();
|
||||
|
||||
elmt->linkToElement(this);
|
||||
|
||||
emit linkedElementChanged();
|
||||
}
|
||||
}
|
||||
@ -123,22 +82,7 @@ void ReportElement::unlinkAllElements()
|
||||
const QList <Element *> tmp_elmt = connected_elements;
|
||||
|
||||
for (Element *elmt : tmp_elmt)
|
||||
{
|
||||
removeConnectionForFormula(m_formula);
|
||||
disconnect(diagram()->project(), &QETProject::reportPropertiesChanged, this, &ReportElement::reportPropertiesChange);
|
||||
disconnect(diagram()->project(), &QETProject::diagramRemoved, this, &ReportElement::updateLabel);
|
||||
|
||||
if (elmt->terminals().size())
|
||||
{
|
||||
disconnect(elmt->terminals().first(), &Terminal::conductorWasAdded, this, &ReportElement::conductorWasAdded);
|
||||
disconnect(elmt->terminals().first(), &Terminal::conductorWasRemoved, this, &ReportElement::conductorWasRemoved);
|
||||
}
|
||||
connected_elements.removeAll(elmt);
|
||||
//if elmt is the owner of m_watched_conductor, we remove it
|
||||
if (elmt->conductors().contains(m_watched_conductor))
|
||||
conductorWasRemoved(m_watched_conductor);
|
||||
}
|
||||
updateLabel();
|
||||
|
||||
for(Element *elmt : tmp_elmt)
|
||||
{
|
||||
@ -159,151 +103,3 @@ void ReportElement::unlinkElement(Element *elmt) {
|
||||
Q_UNUSED (elmt);
|
||||
unlinkAllElements();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ReportElement::conductorWasAdded
|
||||
* This method is called when a conduxtor is added to the potential
|
||||
* @param conductor : added conductor
|
||||
*/
|
||||
void ReportElement::conductorWasAdded(Conductor *conductor)
|
||||
{
|
||||
if (m_watched_conductor) return;
|
||||
|
||||
m_watched_conductor = conductor;
|
||||
connect(m_watched_conductor, &Conductor::propertiesChange, this, &ReportElement::updateLabel);
|
||||
updateLabel();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ReportElement::conductorWasRemoved
|
||||
* This method is called when a conductor is removed to the potential
|
||||
* @param conductor : removed conductor
|
||||
*/
|
||||
void ReportElement::conductorWasRemoved(Conductor *conductor)
|
||||
{
|
||||
if (m_watched_conductor != conductor) return;
|
||||
|
||||
disconnect(m_watched_conductor, &Conductor::propertiesChange, this, &ReportElement::updateLabel);
|
||||
m_watched_conductor = nullptr;
|
||||
|
||||
//Get another conductor to be always up to date about the properties of the potential.
|
||||
|
||||
//Get a conducteur docked to this report
|
||||
if (conductors().size())
|
||||
conductorWasAdded(conductors().first());
|
||||
//Else we get a conductor of the linked report (if any)
|
||||
else if (linkedElements().size() && linkedElements().first()->conductors().size())
|
||||
conductorWasAdded(linkedElements().first()->conductors().first());
|
||||
else
|
||||
updateLabel();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ReportElement::setFormula
|
||||
* Set new Formula and call updatelabel
|
||||
* @param formula : the new formula
|
||||
*/
|
||||
void ReportElement::setFormula(QString formula)
|
||||
{
|
||||
removeConnectionForFormula(m_formula);
|
||||
m_formula = formula;
|
||||
setConnectionForFormula(m_formula);
|
||||
updateLabel();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ReportElement::updateLabel
|
||||
* Update the displayed label.
|
||||
* ie the folio and position of the linked folio report
|
||||
*/
|
||||
void ReportElement::updateLabel()
|
||||
{
|
||||
if (!m_text_field) return;
|
||||
|
||||
if (!connected_elements.isEmpty())
|
||||
{
|
||||
Element *elmt = connected_elements.at(0);
|
||||
QString label = m_formula;
|
||||
label = autonum::AssignVariables::formulaToLabel(label, elmt->rSequenceStruct(), elmt->diagram(), elmt);
|
||||
m_text_field -> setPlainText(label);
|
||||
}
|
||||
else
|
||||
m_text_field -> setPlainText("/");
|
||||
|
||||
setTaggedText("function", (m_watched_conductor? m_watched_conductor->properties().m_function : ""));
|
||||
setTaggedText("tension-protocol", (m_watched_conductor? m_watched_conductor->properties().m_tension_protocol : ""));
|
||||
}
|
||||
|
||||
void ReportElement::reportPropertiesChange(const QString &old_str, const QString &new_str)
|
||||
{
|
||||
Q_UNUSED(old_str);
|
||||
setFormula(new_str);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ReportElement::setConnectionForFormula
|
||||
* Set up the required connection for the formula @str.
|
||||
* @param str
|
||||
*/
|
||||
void ReportElement::setConnectionForFormula(const QString &str)
|
||||
{
|
||||
if (connected_elements.isEmpty() || str.isEmpty())
|
||||
return;
|
||||
|
||||
QString string = str;
|
||||
Element *other_elmt = connected_elements.first();
|
||||
Diagram *other_diagram = other_elmt->diagram();
|
||||
|
||||
//Because the variable %F is a reference to another text which can contain variables,
|
||||
//we must to replace %F by the real text, to check if the real text contain the variable %id
|
||||
if (other_diagram && string.contains("%F"))
|
||||
{
|
||||
m_F_str = other_diagram->border_and_titleblock.folio();
|
||||
string.replace("%F", m_F_str);
|
||||
connect(&other_diagram->border_and_titleblock, &BorderTitleBlock::titleBlockFolioChanged, this, &ReportElement::updateFormulaConnection);
|
||||
}
|
||||
|
||||
if (other_diagram && (string.contains("%f") || string.contains("%id")))
|
||||
connect(other_diagram->project(), &QETProject::projectDiagramsOrderChanged, this, &ReportElement::updateLabel);
|
||||
if (string.contains("%l"))
|
||||
connect(other_elmt, &Element::yChanged, this, &ReportElement::updateLabel);
|
||||
if (string.contains("%c"))
|
||||
connect(other_elmt, &Element::xChanged, this, &ReportElement::updateLabel);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ReportElement::removeConnectionForFormula
|
||||
* Remove the existing connection made for the formula @str
|
||||
* @param str
|
||||
*/
|
||||
void ReportElement::removeConnectionForFormula(const QString &str)
|
||||
{
|
||||
if (connected_elements.isEmpty() || str.isEmpty())
|
||||
return;
|
||||
|
||||
QString string = str;
|
||||
Element *other_element = connected_elements.first();
|
||||
Diagram *other_diagram = other_element->diagram();
|
||||
|
||||
//Because the variable %F is a reference to another text which can contain variables,
|
||||
//we must to replace %F by the real text, to check if the real text contain the variable %id
|
||||
if (other_diagram && string.contains("%F"))
|
||||
{
|
||||
string.replace("%F", m_F_str);
|
||||
disconnect(&other_diagram->border_and_titleblock, &BorderTitleBlock::titleBlockFolioChanged, this, &ReportElement::updateFormulaConnection);
|
||||
}
|
||||
|
||||
if (other_diagram && (string.contains("%f") || string.contains("%id")))
|
||||
disconnect(other_diagram->project(), &QETProject::projectDiagramsOrderChanged, this, &ReportElement::updateLabel);
|
||||
if (string.contains("%l"))
|
||||
disconnect(other_element, &Element::yChanged, this, &ReportElement::updateLabel);
|
||||
if (string.contains("%c"))
|
||||
disconnect(other_element, &Element::xChanged, this, &ReportElement::updateLabel);
|
||||
}
|
||||
|
||||
void ReportElement::updateFormulaConnection()
|
||||
{
|
||||
removeConnectionForFormula(m_formula);
|
||||
setConnectionForFormula(m_formula);
|
||||
updateLabel();
|
||||
}
|
||||
|
@ -20,8 +20,6 @@
|
||||
|
||||
#include "customelement.h"
|
||||
|
||||
class ElementTextItem;
|
||||
|
||||
/**
|
||||
* @brief The ReportElement class
|
||||
*this class represent an element that can be linked to an other ReportElement
|
||||
@ -38,21 +36,8 @@ class ReportElement : public CustomElement
|
||||
void unlinkAllElements() override;
|
||||
void unlinkElement(Element *elmt) override;
|
||||
|
||||
private:
|
||||
void conductorWasAdded(Conductor *conductor);
|
||||
void conductorWasRemoved(Conductor *conductor);
|
||||
void setFormula (QString label);
|
||||
void updateLabel();
|
||||
void reportPropertiesChange(const QString &old_str, const QString &new_str);
|
||||
void setConnectionForFormula(const QString &str);
|
||||
void removeConnectionForFormula(const QString &str);
|
||||
void updateFormulaConnection();
|
||||
|
||||
private:
|
||||
int m_inverse_report;
|
||||
QString m_formula;
|
||||
ElementTextItem *m_text_field;
|
||||
Conductor *m_watched_conductor;
|
||||
};
|
||||
|
||||
#endif // REPORTELEMENT_H
|
||||
|
@ -17,7 +17,6 @@
|
||||
*/
|
||||
#include "simpleelement.h"
|
||||
#include "commentitem.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "diagram.h"
|
||||
|
||||
/**
|
||||
@ -33,8 +32,6 @@ SimpleElement::SimpleElement(const ElementsLocation &location, QGraphicsItem *qg
|
||||
m_location_item (nullptr)
|
||||
{
|
||||
m_link_type = Simple;
|
||||
connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
|
||||
connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -52,49 +49,4 @@ SimpleElement::~SimpleElement() {
|
||||
*/
|
||||
void SimpleElement::initLink(QETProject *project) {
|
||||
CustomElement::initLink(project);
|
||||
updateLabel(DiagramContext(), elementInformations());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief SimpleElement::updateLabel
|
||||
* update label of this element
|
||||
*/
|
||||
void SimpleElement::updateLabel(DiagramContext old_info, DiagramContext new_info)
|
||||
{
|
||||
QString old_formula = old_info["formula"].toString();
|
||||
QString new_formula = new_info["formula"].toString();
|
||||
|
||||
setUpConnectionForFormula(old_formula, new_formula);
|
||||
|
||||
QString label = autonum::AssignVariables::formulaToLabel(new_formula, m_autoNum_seq, diagram(), this);
|
||||
|
||||
if (label.isEmpty())
|
||||
{
|
||||
setTaggedText("label", new_info["label"].toString());
|
||||
}
|
||||
else
|
||||
{
|
||||
bool visible = m_element_informations.contains("label") ? m_element_informations.keyMustShow("label") : true;
|
||||
m_element_informations.addValue("label", label, visible);
|
||||
setTaggedText("label", label);
|
||||
}
|
||||
|
||||
if (ElementTextItem *eti = taggedText("label"))
|
||||
{
|
||||
new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
|
||||
}
|
||||
|
||||
// //Comment and Location of element
|
||||
// QString comment = new_info["comment"].toString();
|
||||
// bool must_show = new_info.keyMustShow("comment");
|
||||
// QString location = new_info["location"].toString();
|
||||
// bool must_show_location = new_info.keyMustShow("location");
|
||||
|
||||
// if ((!(comment.isEmpty() || !must_show) && !m_comment_item)||(!(location.isEmpty() || !must_show_location) && !m_comment_item)) {
|
||||
// m_comment_item = new CommentItem(this);
|
||||
// }
|
||||
// else if (((comment.isEmpty() || !must_show) && m_comment_item) && ((location.isEmpty() || !must_show_location) && m_comment_item)) {
|
||||
// delete m_comment_item;
|
||||
// m_comment_item = nullptr;
|
||||
// }
|
||||
}
|
||||
|
@ -37,9 +37,6 @@ class SimpleElement : public CustomElement {
|
||||
|
||||
void initLink(QETProject *project) override;
|
||||
|
||||
public slots:
|
||||
void updateLabel(DiagramContext old_info, DiagramContext new_info);
|
||||
|
||||
private:
|
||||
CommentItem *m_comment_item;
|
||||
CommentItem *m_location_item;
|
||||
|
@ -18,7 +18,6 @@
|
||||
#include "slaveelement.h"
|
||||
#include "diagramposition.h"
|
||||
#include "qetapp.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "diagram.h"
|
||||
#include "dynamicelementtextitem.h"
|
||||
|
||||
@ -35,8 +34,6 @@ SlaveElement::SlaveElement(const ElementsLocation &location, QGraphicsItem *qgi,
|
||||
{
|
||||
m_xref_item = nullptr;
|
||||
m_link_type = Slave;
|
||||
|
||||
connect(this, SIGNAL(updateLabel()), this, SLOT(updateLabel()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,23 +57,9 @@ void SlaveElement::linkToElement(Element *elmt)
|
||||
{
|
||||
if(!isFree())
|
||||
unlinkAllElements();
|
||||
|
||||
for(QMetaObject::Connection c : m_connections)
|
||||
this->disconnect(c);
|
||||
m_connections.clear();
|
||||
|
||||
connected_elements << elmt;
|
||||
|
||||
QETProject *project = elmt->diagram()->project();
|
||||
m_connections << connect(elmt, SIGNAL(xChanged()), this, SLOT(updateLabel()));
|
||||
m_connections << connect(elmt, SIGNAL(yChanged()), this, SLOT(updateLabel()));
|
||||
m_connections << connect(elmt, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel()));
|
||||
m_connections << connect(project, SIGNAL(projectDiagramsOrderChanged(QETProject*,int,int)), this, SLOT(updateLabel()));
|
||||
m_connections << connect(project, SIGNAL(diagramRemoved(QETProject*,Diagram*)), this, SLOT(updateLabel()));
|
||||
m_connections << connect(project, SIGNAL(XRefPropertiesChanged()), this, SLOT(updateLabel()));
|
||||
m_connections << connect(elmt, SIGNAL(updateLabel()), this, SLOT(updateLabel()));
|
||||
|
||||
updateLabel();
|
||||
elmt -> linkToElement(this);
|
||||
emit linkedElementChanged();
|
||||
}
|
||||
@ -109,66 +92,8 @@ void SlaveElement::unlinkElement(Element *elmt)
|
||||
{
|
||||
connected_elements.removeOne(elmt);
|
||||
|
||||
disconnect(elmt, SIGNAL(xChanged()), this, SLOT(updateLabel()));
|
||||
disconnect(elmt, SIGNAL(yChanged()), this, SLOT(updateLabel()));
|
||||
disconnect(elmt, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)),this, SLOT(updateLabel()));
|
||||
disconnect(diagram()->project(), SIGNAL(projectDiagramsOrderChanged(QETProject*,int,int)), this, SLOT(updateLabel()));
|
||||
disconnect(diagram()->project(), SIGNAL(diagramRemoved(QETProject*,Diagram*)), this, SLOT(updateLabel()));
|
||||
disconnect(elmt -> diagram(), SIGNAL(XRefPropertiesChanged()), this, SLOT(updateLabel()));
|
||||
disconnect(elmt, SIGNAL(updateLabel()), this, SLOT(updateLabel()));
|
||||
|
||||
delete m_xref_item; m_xref_item = nullptr;
|
||||
|
||||
if (ElementTextItem *eti = this->taggedText("label"))
|
||||
eti->setPlainText("_");
|
||||
|
||||
updateLabel();
|
||||
elmt -> unlinkElement (this) ;
|
||||
elmt -> setHighlighted (false);
|
||||
emit linkedElementChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief SlaveElement::updateLabel
|
||||
* update the label (tagged with label) of this element.
|
||||
* If this element is connected to a master,
|
||||
* the label show the string tagged by "label" of the master
|
||||
* and add a qgraphicstextitem for show the position of the master
|
||||
*/
|
||||
void SlaveElement::updateLabel()
|
||||
{
|
||||
QString label;
|
||||
if (ElementTextItem *eti = this->taggedText("label"))
|
||||
label = eti->toPlainText();
|
||||
QString Xreflabel;
|
||||
bool no_editable = false;
|
||||
|
||||
//must be linked to set the label of master
|
||||
if (linkedElements().count())
|
||||
{
|
||||
no_editable = true;
|
||||
Element *elmt = linkedElements().first();
|
||||
label = elmt->elementInformations()["label"].toString();
|
||||
|
||||
XRefProperties xrp = elmt->diagram()->project()->defaultXRefProperties(elmt->kindInformations()["type"].toString());
|
||||
Xreflabel = xrp.slaveLabel();
|
||||
Xreflabel = autonum::AssignVariables::formulaToLabel(Xreflabel, elmt->rSequenceStruct(), elmt->diagram(), elmt);
|
||||
}
|
||||
else
|
||||
label = autonum::AssignVariables::formulaToLabel(label, m_autoNum_seq, diagram(), this);
|
||||
|
||||
// set the new label
|
||||
ElementTextItem *eti = setTaggedText("label", label, no_editable);
|
||||
if (eti && !isFree())
|
||||
{
|
||||
if (m_xref_item)
|
||||
m_xref_item->setPlainText(Xreflabel);
|
||||
else
|
||||
{
|
||||
m_xref_item = new QGraphicsTextItem(Xreflabel, eti);
|
||||
m_xref_item->setFont(QETApp::diagramTextsFont(5));
|
||||
m_xref_item->setPos(eti -> boundingRect().bottomLeft());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,20 +25,14 @@ class SlaveElement : public CustomElement
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit SlaveElement (const ElementsLocation &, QGraphicsItem * = nullptr, int * = nullptr);
|
||||
~SlaveElement() override;
|
||||
void linkToElement(Element *elmt) override;
|
||||
void unlinkAllElements() override;
|
||||
void unlinkElement(Element *elmt) override;
|
||||
|
||||
signals:
|
||||
|
||||
private slots:
|
||||
void updateLabel();
|
||||
|
||||
explicit SlaveElement (const ElementsLocation &, QGraphicsItem * = nullptr, int * = nullptr);
|
||||
~SlaveElement() override;
|
||||
void linkToElement(Element *elmt) override;
|
||||
void unlinkAllElements() override;
|
||||
void unlinkElement(Element *elmt) override;
|
||||
|
||||
private:
|
||||
QGraphicsTextItem *m_xref_item;
|
||||
QList<QMetaObject::Connection> m_connections;
|
||||
};
|
||||
|
||||
#endif // SLAVEELEMENT_H
|
||||
|
@ -17,7 +17,6 @@
|
||||
*/
|
||||
#include "terminalelement.h"
|
||||
#include "commentitem.h"
|
||||
#include "elementtextitem.h"
|
||||
|
||||
/**
|
||||
* @brief TerminalElement::TerminalElement
|
||||
@ -33,9 +32,6 @@ TerminalElement::TerminalElement(const ElementsLocation &location, QGraphicsItem
|
||||
m_location_item (nullptr)
|
||||
{
|
||||
m_link_type = Terminale;
|
||||
|
||||
connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
|
||||
connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
|
||||
}
|
||||
|
||||
TerminalElement::~TerminalElement() {
|
||||
@ -48,50 +44,5 @@ if (m_comment_item) delete m_comment_item;
|
||||
*/
|
||||
void TerminalElement::initLink(QETProject *project) {
|
||||
CustomElement::initLink(project);
|
||||
updateLabel(DiagramContext(), elementInformations());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief SimpleElement::updateLabel
|
||||
* update label of this element
|
||||
*/
|
||||
void TerminalElement::updateLabel(DiagramContext old_info, DiagramContext new_info)
|
||||
{
|
||||
QString old_formula = old_info["formula"].toString();
|
||||
QString new_formula = new_info["formula"].toString();
|
||||
|
||||
setUpConnectionForFormula(old_formula, new_formula);
|
||||
|
||||
QString label = autonum::AssignVariables::formulaToLabel(new_formula, m_autoNum_seq, diagram(), this);
|
||||
|
||||
if (label.isEmpty())
|
||||
{
|
||||
setTaggedText("label", new_info["label"].toString());
|
||||
}
|
||||
else
|
||||
{
|
||||
bool visible = m_element_informations.contains("label") ? m_element_informations.keyMustShow("label") : true;
|
||||
m_element_informations.addValue("label", label, visible);
|
||||
setTaggedText("label", label);
|
||||
}
|
||||
|
||||
if (ElementTextItem *eti = taggedText("label"))
|
||||
{
|
||||
new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
|
||||
}
|
||||
|
||||
// //Comment and Location of element
|
||||
// QString comment = new_info["comment"].toString();
|
||||
// bool must_show = new_info.keyMustShow("comment");
|
||||
// QString location = new_info["location"].toString();
|
||||
// bool must_show_location = new_info.keyMustShow("location");
|
||||
|
||||
// if ((!(comment.isEmpty() || !must_show) && !m_comment_item)||(!(location.isEmpty() || !must_show_location) && !m_comment_item)) {
|
||||
// m_comment_item = new CommentItem(this);
|
||||
// }
|
||||
// else if (((comment.isEmpty() || !must_show) && m_comment_item) && ((location.isEmpty() || !must_show_location) && m_comment_item)) {
|
||||
// delete m_comment_item;
|
||||
// m_comment_item = nullptr;
|
||||
// }
|
||||
}
|
||||
|
||||
|
@ -31,9 +31,6 @@ class TerminalElement : public CustomElement
|
||||
~TerminalElement() override;
|
||||
void initLink(QETProject *project) override;
|
||||
|
||||
public slots:
|
||||
void updateLabel(DiagramContext old_info, DiagramContext new_info);
|
||||
|
||||
private:
|
||||
CommentItem *m_comment_item;
|
||||
CommentItem *m_location_item;
|
||||
|
@ -19,7 +19,6 @@
|
||||
#include "element.h"
|
||||
#include "conductortextitem.h"
|
||||
#include "independenttextitem.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "dynamicelementtextitem.h"
|
||||
#include "elementtextitemgroup.h"
|
||||
#include "diagramimageitem.h"
|
||||
@ -50,10 +49,6 @@ m_angle(angle)
|
||||
case IndependentTextItem::Type:
|
||||
m_text << static_cast<DiagramTextItem *>(item);
|
||||
break;
|
||||
case ElementTextItem::Type:
|
||||
if(item->parentItem() && !item->parentItem()->isSelected())
|
||||
m_text << static_cast<DiagramTextItem *>(item);
|
||||
break;
|
||||
case DynamicElementTextItem::Type:
|
||||
if(item->parentItem() && !item->parentItem()->isSelected())
|
||||
m_text << static_cast<DiagramTextItem *>(item);
|
||||
|
Loading…
x
Reference in New Issue
Block a user