[qet] qet/qet: [5737] Diagram editor : add a new widget in the " curent selection dock" for edit the independent text.

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 5737
Author:   blacksun
Date:     2019-02-19 17:42:07 +0100 (Tue, 19 Feb 2019)
Log Message:
-----------
Diagram editor : add a new widget in the "curent selection dock" for edit the independent text. WIP

Modified Paths:
--------------
    trunk/sources/diagram.cpp
    trunk/sources/diagram.h
    trunk/sources/qetgraphicsitem/conductor.cpp
    trunk/sources/qetgraphicsitem/diagramtextitem.cpp
    trunk/sources/qetgraphicsitem/diagramtextitem.h
    trunk/sources/qetgraphicsitem/independenttextitem.cpp
    trunk/sources/qetgraphicsitem/independenttextitem.h
    trunk/sources/ui/diagrampropertieseditordockwidget.cpp
    trunk/sources/ui/diagrampropertieseditordockwidget.h

Added Paths:
-----------
    trunk/sources/ui/inditextpropertieswidget.cpp
    trunk/sources/ui/inditextpropertieswidget.h
    trunk/sources/ui/inditextpropertieswidget.ui

Modified: trunk/sources/diagram.cpp
===================================================================
--- trunk/sources/diagram.cpp	2019-02-13 16:24:17 UTC (rev 5736)
+++ trunk/sources/diagram.cpp	2019-02-19 16:42:07 UTC (rev 5737)
@@ -1068,14 +1068,9 @@
 			conductor->terminal1->addConductor(conductor);
 			conductor->terminal2->addConductor(conductor);
 			conductor->calculateTextItemPosition();
-		}
 			break;
-
-		case IndependentTextItem::Type:
-		{
-			const IndependentTextItem *text = static_cast<const IndependentTextItem *>(item);
-			connect(text, &IndependentTextItem::diagramTextChanged, this, &Diagram::diagramTextChanged);
 		}
+		default: {break;}
 	}
 }
 
@@ -1095,21 +1090,16 @@
 		{
 			Element *elmt = static_cast<Element*>(item);
 			elmt->unlinkAllElements();
+			break;
 		}
-			break;
 		case Conductor::Type:
 		{
 			Conductor *conductor = static_cast<Conductor *>(item);
 			conductor->terminal1->removeConductor(conductor);
 			conductor->terminal2->removeConductor(conductor);
-		}
 			break;
-
-		case IndependentTextItem::Type:
-		{
-			const IndependentTextItem *text = static_cast<const IndependentTextItem *>(item);
-			disconnect(text, &IndependentTextItem::diagramTextChanged, this, &Diagram::diagramTextChanged);
 		}
+		default: {break;}
 	}
 
 	QGraphicsScene::removeItem(item);
@@ -1120,17 +1110,6 @@
 }
 
 /**
-	Gere le fait qu'un texte du schema ait ete modifie
-	@param text_item Texte modifie
-	@param old_text Ancien texte
-	@param new_text Nouveau texte
-*/
-void Diagram::diagramTextChanged(DiagramTextItem *text_item, const QString &old_text, const QString &new_text) {
-	if (!text_item) return;
-	undoStack().push(new ChangeDiagramTextCommand(text_item, old_text, new_text));
-}
-
-/**
 	This slot may be used to inform the diagram object that the given title
 	block template has changed. The diagram will thus flush its title
 	block-dedicated rendering cache.

Modified: trunk/sources/diagram.h
===================================================================
--- trunk/sources/diagram.h	2019-02-13 16:24:17 UTC (rev 5736)
+++ trunk/sources/diagram.h	2019-02-19 16:42:07 UTC (rev 5737)
@@ -216,7 +216,6 @@
 	public slots:
 		void adjustSceneRect ();
 		void titleChanged(const QString &);
-		void diagramTextChanged(DiagramTextItem *, const QString &, const QString &);
 		void titleBlockTemplateChanged(const QString &);
 		void titleBlockTemplateRemoved(const QString &, const QString & = QString());
 		void setTitleBlockTemplate(const QString &);

Modified: trunk/sources/qetgraphicsitem/conductor.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/conductor.cpp	2019-02-13 16:24:17 UTC (rev 5736)
+++ trunk/sources/qetgraphicsitem/conductor.cpp	2019-02-19 16:42:07 UTC (rev 5737)
@@ -119,7 +119,7 @@
 	
 		// Add the text field
 	m_text_item = new ConductorTextItem(m_properties.text, this);
-	connect(m_text_item, &ConductorTextItem::diagramTextChanged, this, &Conductor::displayedTextChanged);
+	connect(m_text_item, &ConductorTextItem::textEdited, this, &Conductor::displayedTextChanged);
 
 		//Set the default conductor properties.
 	if (p1->diagram())

Modified: trunk/sources/qetgraphicsitem/diagramtextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/diagramtextitem.cpp	2019-02-13 16:24:17 UTC (rev 5736)
+++ trunk/sources/qetgraphicsitem/diagramtextitem.cpp	2019-02-19 16:42:07 UTC (rev 5737)
@@ -1,5 +1,5 @@
 /*
-	Copyright 2006-2013 QElectroTech Team
+	Copyright 2006-2019 QElectroTech Team
 	This file is part of QElectroTech.
 	
 	QElectroTech is free software: you can redistribute it and/or modify
@@ -210,6 +210,22 @@
 	return QRectF(pos, size);
 }
 
+void DiagramTextItem::setHtml(const QString &text)
+{
+	QGraphicsTextItem::setHtml(text);
+	m_is_html = true;
+}
+
+void DiagramTextItem::setPlainText(const QString &text)
+{
+	QGraphicsTextItem::setPlainText(text);
+	m_is_html = false;
+}
+
+bool DiagramTextItem::isHtml() const {
+	return m_is_html;
+}
+
 /**
  * @brief DiagramTextItem::paint
  * Draw this text field. This method draw the text by calling QGraphicsTextItem::paint.
@@ -267,8 +283,6 @@
 {
 	QGraphicsTextItem::focusOutEvent(event);
 
-	if (toHtml() != m_previous_html_text)
-		emit(diagramTextChanged(this, m_previous_html_text, toHtml()));
 	if(toPlainText() != m_previous_text)
 		emit textEdited(m_previous_text, toPlainText());
 	
@@ -303,13 +317,14 @@
  * @brief DiagramTextItem::mousePressEvent
  * @param event
  */
-void DiagramTextItem::mousePressEvent (QGraphicsSceneMouseEvent *event) {
-	m_first_move = true;
-	if (event -> modifiers() & Qt::ControlModifier) {
-		setSelected(!isSelected());
+void DiagramTextItem::mousePressEvent (QGraphicsSceneMouseEvent *event)
+{
+	if (event->button() == Qt::LeftButton)
+	{
+		m_first_move = true;
+			//Save the pos of item at the beggining of the movement
+		m_mouse_to_origin_movement = pos() - event->scenePos();
 	}
-	//Save the pos of item at the beggining of the movement
-	m_mouse_to_origin_movement = pos() - event->scenePos();
 	QGraphicsTextItem::mousePressEvent(event);
 }
 
@@ -348,13 +363,25 @@
  * @brief DiagramTextItem::mouseReleaseEvent
  * @param event
  */
-void DiagramTextItem::mouseReleaseEvent (QGraphicsSceneMouseEvent *event) {
-	//Signal to diagram movement is finish
-	if (diagram())
+void DiagramTextItem::mouseReleaseEvent (QGraphicsSceneMouseEvent *event)
+{
+		//Signal to diagram movement is finish
+	if (diagram() && (event->button() == Qt::LeftButton))
+	{
 		diagram()->elementsMover().endMovement();
-
-	if (!(event -> modifiers() & Qt::ControlModifier))
+		event->accept();
+		if (event->buttonDownScenePos(Qt::LeftButton) != event->scenePos()) {
+			return;
+		}
+	}
+	if (event->modifiers() & Qt::ControlModifier && (event->button() == Qt::LeftButton))
+	{
+		setSelected(!isSelected());
+		event->accept();
+	}
+	else {
 		QGraphicsTextItem::mouseReleaseEvent(event);
+	}	
 }
 
 /**
@@ -459,7 +486,6 @@
 */
 void DiagramTextItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *e) {
 	Q_UNUSED(e);
-	//qDebug() << "Leave mouse over";
 	m_mouse_hover = false;
 	update();
 }

Modified: trunk/sources/qetgraphicsitem/diagramtextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/diagramtextitem.h	2019-02-13 16:24:17 UTC (rev 5736)
+++ trunk/sources/qetgraphicsitem/diagramtextitem.h	2019-02-19 16:42:07 UTC (rev 5737)
@@ -36,12 +36,13 @@
     Q_PROPERTY(int fontSize READ fontSize WRITE setFontSize NOTIFY fontSizeChanged)
     Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
 	Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged)
+	Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText)
 	
+	
 	signals:
 		void fontSizeChanged(int size);
 		void colorChanged(QColor color);
 		void alignmentChanged(Qt::Alignment alignment);
-		void diagramTextChanged(DiagramTextItem *, const QString &, const QString &);
 		void textEdited(const QString &old_str, const QString &new_str);
 
 	public:
@@ -78,6 +79,10 @@
 		bool m_block_alignment = false;
 		
 		QRectF frameRect() const;
+		
+		void setHtml(const QString &text);
+		void setPlainText(const QString &text);
+		bool isHtml() const;
 
 	protected:
 		void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) override;
@@ -101,7 +106,8 @@
 	protected:
 		bool m_mouse_hover = false,
 			 m_first_move = true,
-		     m_no_editable;
+		     m_no_editable,
+			 m_is_html = false;
 
 		QString m_previous_html_text,
 				m_previous_text;

Modified: trunk/sources/qetgraphicsitem/independenttextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/independenttextitem.cpp	2019-02-13 16:24:17 UTC (rev 5736)
+++ trunk/sources/qetgraphicsitem/independenttextitem.cpp	2019-02-19 16:42:07 UTC (rev 5737)
@@ -17,6 +17,8 @@
 */
 #include "independenttextitem.h"
 #include "qet.h"
+#include "diagram.h"
+#include "diagramcommands.h"
 #include <QDomElement>
 
 /**
@@ -56,13 +58,21 @@
 	@param document Le document XML a utiliser
 	@return L'element XML representant ce champ de texte
 */
-QDomElement IndependentTextItem::toXml(QDomDocument &document) const {
+QDomElement IndependentTextItem::toXml(QDomDocument &document) const
+{
 	QDomElement result = document.createElement("input");
 	result.setAttribute("x", QString("%1").arg(pos().x()));
 	result.setAttribute("y", QString("%1").arg(pos().y()));
 	result.setAttribute("text", toHtml());
-	if (rotation()) {
-		result.setAttribute("rotation", QString::number(QET::correctAngle(rotation())));
-	}
+	result.setAttribute("rotation", QString::number(QET::correctAngle(rotation())));
+	
 	return(result);
 }
+
+void IndependentTextItem::focusOutEvent(QFocusEvent *event)
+{
+	DiagramTextItem::focusOutEvent(event);
+	if (diagram() && (m_previous_html_text != this->toHtml())) {
+		diagram()->undoStack().push(new ChangeDiagramTextCommand(this, m_previous_html_text, this->toHtml()));
+	}
+}

Modified: trunk/sources/qetgraphicsitem/independenttextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/independenttextitem.h	2019-02-13 16:24:17 UTC (rev 5736)
+++ trunk/sources/qetgraphicsitem/independenttextitem.h	2019-02-19 16:42:07 UTC (rev 5737)
@@ -24,30 +24,26 @@
 	This class represents an independent text field on a particular diagram.
 	It may be moved, edited, and rotated.
 */
-class IndependentTextItem : public DiagramTextItem {
+class IndependentTextItem : public DiagramTextItem
+{
 	Q_OBJECT
-	// constructors, destructor
+		
+		// constructors, destructor
 	public:
-	IndependentTextItem();
-	IndependentTextItem(const QString &);
-	~IndependentTextItem() override;
+		IndependentTextItem();
+		IndependentTextItem(const QString &);
+		~IndependentTextItem() override;
 	
-	// attributes
+		// attributes
 	public:
-	enum { Type = UserType + 1005 };
-	
-	// methods
-	public:
-	/**
-		Enable the use of qgraphicsitem_cast to safely cast a QGraphicsItem into an
-		IndependentTextItem.
-		@return le type de QGraphicsItem
-	*/
-	int type() const override { return Type; }
-	void fromXml(const QDomElement &) override;
-	QDomElement toXml(QDomDocument &) const override;
-	
-	private:
-	QPointF mouse_to_origin_movement_;
+		enum { Type = UserType + 1005 };
+		int type() const override { return Type; }
+		
+		void fromXml(const QDomElement &) override;
+		QDomElement toXml(QDomDocument &) const override;
+		
+	protected:
+		void focusOutEvent(QFocusEvent *event) override;
+		
 };
 #endif

Modified: trunk/sources/ui/diagrampropertieseditordockwidget.cpp
===================================================================
--- trunk/sources/ui/diagrampropertieseditordockwidget.cpp	2019-02-13 16:24:17 UTC (rev 5736)
+++ trunk/sources/ui/diagrampropertieseditordockwidget.cpp	2019-02-19 16:42:07 UTC (rev 5737)
@@ -1,5 +1,5 @@
 /*
-	Copyright 2006-2019 The QElectroTech Team
+	Copyright 2006-2017 The QElectroTech Team
 	This file is part of QElectroTech.
 
 	QElectroTech is free software: you can redistribute it and/or modify
@@ -25,6 +25,8 @@
 #include "shapegraphicsitempropertieswidget.h"
 #include "dynamicelementtextitem.h"
 #include "elementtextitemgroup.h"
+#include "independenttextitem.h"
+#include "inditextpropertieswidget.h"
 
 /**
  * @brief DiagramPropertiesEditorDockWidget::DiagramPropertiesEditorDockWidget
@@ -91,7 +93,7 @@
 
 	switch (type_)
 	{
-		case Element::Type:
+		case Element::Type: //1000
 		{
 				//We already edit an element, just update the editor with a new element
 			if (m_edited_qgi_type == type_)
@@ -105,14 +107,27 @@
 			addEditor(new ElementPropertiesWidget(static_cast<Element*>(item), this));
 			break;
 		}
-		case DiagramImageItem::Type:
+		case IndependentTextItem::Type: //1005
 		{
+			if (m_edited_qgi_type == type_)
+			{
+				static_cast<IndiTextPropertiesWidget*>(editors().first())->setText(static_cast<IndependentTextItem*>(item));
+				return;
+			}
+			
 			clear();
 			m_edited_qgi_type = type_;
+			addEditor(new IndiTextPropertiesWidget(static_cast<IndependentTextItem*>(item), this));
+			break;
+		}
+		case DiagramImageItem::Type: //1007
+		{
+			clear();
+			m_edited_qgi_type = type_;
 			addEditor(new ImagePropertiesWidget(static_cast<DiagramImageItem*>(item), this));
 			break;
 		}
-		case QetShapeItem::Type:
+		case QetShapeItem::Type: //1008
 		{
 			if (m_edited_qgi_type == type_)
 			{
@@ -125,7 +140,7 @@
 			addEditor(new ShapeGraphicsItemPropertiesWidget(static_cast<QetShapeItem*>(item), this));
 			break;
 		}
-		case DynamicElementTextItem::Type:
+		case DynamicElementTextItem::Type: //1010
 		{
 			DynamicElementTextItem *deti = static_cast<DynamicElementTextItem *>(item);
 			

Modified: trunk/sources/ui/diagrampropertieseditordockwidget.h
===================================================================
--- trunk/sources/ui/diagrampropertieseditordockwidget.h	2019-02-13 16:24:17 UTC (rev 5736)
+++ trunk/sources/ui/diagrampropertieseditordockwidget.h	2019-02-19 16:42:07 UTC (rev 5737)
@@ -1,5 +1,5 @@
 /*
-	Copyright 2006-2019 The QElectroTech Team
+	Copyright 2006-2017 The QElectroTech Team
 	This file is part of QElectroTech.
 
 	QElectroTech is free software: you can redistribute it and/or modify

Added: trunk/sources/ui/inditextpropertieswidget.cpp
===================================================================
--- trunk/sources/ui/inditextpropertieswidget.cpp	                        (rev 0)
+++ trunk/sources/ui/inditextpropertieswidget.cpp	2019-02-19 16:42:07 UTC (rev 5737)
@@ -0,0 +1,228 @@
+/*
+	Copyright 2006-2019 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 "inditextpropertieswidget.h"
+#include "ui_inditextpropertieswidget.h"
+#include "independenttextitem.h"
+#include "QPropertyUndoCommand/qpropertyundocommand.h"
+#include "diagram.h"
+#include "diagramcommands.h"
+#include <QtGlobal>
+#include <QLineEdit>
+
+/**
+ * @brief IndiTextPropertiesWidget::IndiTextPropertiesWidget
+ * @param text : the text to edit
+ * @param parent : the parent widget of this widget
+ */
+IndiTextPropertiesWidget::IndiTextPropertiesWidget(IndependentTextItem *text, QWidget *parent) :
+	PropertiesEditorWidget(parent),
+	ui(new Ui::IndiTextPropertiesWidget)
+{
+	ui->setupUi(this);
+	if (text) {
+		setText(text);
+	}
+}
+
+/**
+ * @brief IndiTextPropertiesWidget::~IndiTextPropertiesWidget
+ */
+IndiTextPropertiesWidget::~IndiTextPropertiesWidget() {
+	delete  ui;
+}
+
+/**
+ * @brief IndiTextPropertiesWidget::setText
+ * @param text : set @text as edited text
+ */
+void IndiTextPropertiesWidget::setText(IndependentTextItem *text)
+{
+	if (m_text) {
+		for (QMetaObject::Connection c : m_connect_list) {
+			disconnect(c);
+		}
+	}
+	
+	m_text = text;
+	m_connect_list.clear();
+	m_connect_list << connect(m_text.data(), &IndependentTextItem::xChanged, this, &IndiTextPropertiesWidget::updateUi);
+	m_connect_list << connect(m_text.data(), &IndependentTextItem::yChanged, this, &IndiTextPropertiesWidget::updateUi);
+	m_connect_list << connect(m_text.data(), &IndependentTextItem::rotationChanged, this, &IndiTextPropertiesWidget::updateUi);
+	m_connect_list << connect(m_text.data(), &IndependentTextItem::fontSizeChanged, this, &IndiTextPropertiesWidget::updateUi);
+	m_connect_list << connect(m_text.data(), &IndependentTextItem::textEdited, this, &IndiTextPropertiesWidget::updateUi);
+
+	updateUi();
+}
+
+/**
+ * @brief IndiTextPropertiesWidget::apply
+ * Apply the current edition through a QUndoCommand pushed
+ * to the undo stack of text's diagram.
+ */
+void IndiTextPropertiesWidget::apply()
+{
+	if (m_text && m_text->diagram())
+	{
+		QUndoCommand *undo = associatedUndo();
+		if (undo) {
+			m_text->diagram()->undoStack().push(undo);
+		}
+	}
+}
+
+/**
+ * @brief IndiTextPropertiesWidget::setLiveEdit
+ * @param live_edit
+ * @return 
+ */
+bool IndiTextPropertiesWidget::setLiveEdit(bool live_edit)
+{
+	if (m_live_edit == live_edit) {
+		return true;
+	}
+	m_live_edit = live_edit;
+	
+	if (m_live_edit) {
+		setUpEditConnection();
+	}
+	else {
+		for (QMetaObject::Connection c : m_edit_connection) {
+			disconnect(c);
+		}
+		m_edit_connection.clear();
+	}
+	return true;
+}
+
+/**
+ * @brief IndiTextPropertiesWidget::associatedUndo
+ * @return 
+ */
+QUndoCommand *IndiTextPropertiesWidget::associatedUndo() const
+{
+	if (m_live_edit)
+	{
+		QPropertyUndoCommand *undo = nullptr;
+		if(ui->m_x_sb->value() != m_text->pos().x()) {
+			undo = new QPropertyUndoCommand(m_text.data(), "x", QVariant(m_text->pos().x()), QVariant(ui->m_x_sb->value()));
+			undo->setAnimated(true, false);
+			undo->setText(tr("Déplacer un champ texte"));
+		}
+		if(ui->m_y_sb->value() != m_text->pos().y()) {
+			undo = new QPropertyUndoCommand(m_text.data(), "y", QVariant(m_text->pos().y()), QVariant(ui->m_y_sb->value()));
+			undo->setAnimated(true, false);
+			undo->setText(tr("Déplacer un champ texte"));
+		}
+		if(ui->m_angle_sb->value() != m_text->rotation()) {
+			undo = new QPropertyUndoCommand(m_text.data(), "rotation", QVariant(m_text->rotation()), QVariant(ui->m_angle_sb->value()));
+			undo->setAnimated(true, false);
+			undo->setText(tr("Pivoter un champ texte"));
+		}
+		if (ui->m_line_edit->text() != m_text->toPlainText()) {
+			undo = new QPropertyUndoCommand(m_text.data(), "plainText", m_text->toPlainText(), ui->m_line_edit->text());
+			undo->setText(tr("Modifier un champ texte"));
+		}
+		if (ui->m_size_sb->value() != m_text->fontSize()) {
+			undo = new QPropertyUndoCommand(m_text.data(), "fontSize", m_text->fontSize(), ui->m_size_sb->value());
+			undo->setAnimated(true, false);
+			undo->setText(tr("Modifier la taille d'un champ texte"));
+		}
+		
+		return undo;
+	}
+	else
+	{
+		QUndoCommand *undo = new QUndoCommand(tr("Modifier les propriétées d'un texte"));
+		if(ui->m_x_sb->value() != m_text->pos().x()) {
+			new QPropertyUndoCommand(m_text.data(), "x", QVariant(m_text->pos().x()), QVariant(ui->m_x_sb->value()), undo);
+		}
+		if(ui->m_y_sb->value() != m_text->pos().y()) {
+			new QPropertyUndoCommand(m_text.data(), "y", QVariant(m_text->pos().y()), QVariant(ui->m_y_sb->value()), undo);
+		}
+		if(ui->m_angle_sb->value() != m_text->rotation()) {
+			new QPropertyUndoCommand(m_text.data(), "rotation", QVariant(m_text->rotation()), QVariant(ui->m_angle_sb->value()), undo);
+		}
+		if (ui->m_line_edit->text() != m_text->toPlainText()) {
+			new ChangeDiagramTextCommand(m_text.data(), m_text->toHtml(), ui->m_line_edit->text(), undo);
+		}
+		if (ui->m_size_sb->value() != m_text->fontSize()) {
+			new QPropertyUndoCommand(m_text.data(), "fontSize", m_text->fontSize(), ui->m_size_sb->value(), undo);
+		}
+		
+		if (undo->childCount()) {
+			return undo;
+		} else {
+			return nullptr;
+		}
+	}
+}
+
+/**
+ * @brief IndiTextPropertiesWidget::setUpEditConnection
+ * Disconnect the previous connection, and reconnect the connection between the editors widgets and apply function
+ */
+void IndiTextPropertiesWidget::setUpEditConnection()
+{
+	for (QMetaObject::Connection c : m_edit_connection) {
+		disconnect(c);
+	}
+	m_edit_connection.clear();
+	m_edit_connection << connect(ui->m_x_sb, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &IndiTextPropertiesWidget::apply);
+	m_edit_connection << connect(ui->m_y_sb, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &IndiTextPropertiesWidget::apply);
+	m_edit_connection << connect(ui->m_angle_sb, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &IndiTextPropertiesWidget::apply);
+	m_edit_connection << connect(ui->m_line_edit, &QLineEdit::textEdited, this, &IndiTextPropertiesWidget::apply);
+	m_edit_connection << connect(ui->m_size_sb, QOverload<int>::of(&QSpinBox::valueChanged), this, &IndiTextPropertiesWidget::apply);
+}
+
+/**
+ * @brief IndiTextPropertiesWidget::updateUi
+ */
+void IndiTextPropertiesWidget::updateUi()
+{
+	if (!m_text) {
+		return;
+	}
+
+		//Disconnect every connections of editor widgets
+		//to avoid an unwanted edition (QSpinBox emit valueChanged no matter if changer by user or by program)
+	for (QMetaObject::Connection c : m_edit_connection) {
+		disconnect(c);
+	}
+	m_edit_connection.clear();
+	
+	ui->m_x_sb->setValue(m_text->pos().x());
+	ui->m_y_sb->setValue(m_text->pos().y());
+	ui->m_angle_sb->setValue(m_text->rotation());
+	ui->m_line_edit->setText(m_text->toPlainText());
+	ui->m_size_sb->setValue(m_text->fontSize());
+	
+	ui->m_line_edit->setDisabled(m_text->isHtml() ? true : false);
+	ui->m_size_sb->setDisabled(m_text->isHtml() ? true : false);
+	
+		//Set the connection now
+	setUpEditConnection();
+}
+
+/**
+ * @brief IndiTextPropertiesWidget::on_m_advanced_editor_pb_clicked
+ */
+void IndiTextPropertiesWidget::on_m_advanced_editor_pb_clicked() {
+	if (m_text) {
+		m_text->edit();
+	}
+}

Added: trunk/sources/ui/inditextpropertieswidget.h
===================================================================
--- trunk/sources/ui/inditextpropertieswidget.h	                        (rev 0)
+++ trunk/sources/ui/inditextpropertieswidget.h	2019-02-19 16:42:07 UTC (rev 5737)
@@ -0,0 +1,60 @@
+/*
+	Copyright 2006-2019 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 INDITEXTPROPERTIESWIDGET_H
+#define INDITEXTPROPERTIESWIDGET_H
+
+#include "PropertiesEditor/propertieseditorwidget.h"
+#include <QPointer>
+class IndependentTextItem;
+
+namespace Ui {
+	class IndiTextPropertiesWidget;
+}
+
+/**
+ * @brief The IndiTextPropertiesWidget class
+ * This widget is used to edit the properties of an independent text item
+ */
+class IndiTextPropertiesWidget : public PropertiesEditorWidget
+{
+	Q_OBJECT
+	
+	public:
+		IndiTextPropertiesWidget(IndependentTextItem *text = nullptr, QWidget *parent = nullptr);
+		~IndiTextPropertiesWidget() override;
+		void setText (IndependentTextItem *text);
+		
+		void apply() override;
+		bool setLiveEdit(bool live_edit) override;
+		QUndoCommand* associatedUndo() const override;
+		
+	private slots:
+		void on_m_advanced_editor_pb_clicked();
+		
+	private:
+		void setUpEditConnection();
+		void updateUi() override;
+		
+	private:
+		Ui::IndiTextPropertiesWidget *ui;
+		QPointer <IndependentTextItem> m_text;
+		QList <QMetaObject::Connection> m_connect_list,
+										m_edit_connection;
+};
+
+#endif // INDITEXTPROPERTIESWIDGET_H

Added: trunk/sources/ui/inditextpropertieswidget.ui
===================================================================
--- trunk/sources/ui/inditextpropertieswidget.ui	                        (rev 0)
+++ trunk/sources/ui/inditextpropertieswidget.ui	2019-02-19 16:42:07 UTC (rev 5737)
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IndiTextPropertiesWidget</class>
+ <widget class="QWidget" name="IndiTextPropertiesWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>299</width>
+    <height>237</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="2" column="1">
+    <widget class="QDoubleSpinBox" name="m_x_sb">
+     <property name="suffix">
+      <string>px</string>
+     </property>
+     <property name="decimals">
+      <number>0</number>
+     </property>
+     <property name="maximum">
+      <double>10000.000000000000000</double>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="4">
+    <widget class="QPushButton" name="m_advanced_editor_pb">
+     <property name="text">
+      <string>Éditeur avancé</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string>Angle :</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1">
+    <widget class="QDoubleSpinBox" name="m_angle_sb">
+     <property name="wrapping">
+      <bool>true</bool>
+     </property>
+     <property name="suffix">
+      <string>°</string>
+     </property>
+     <property name="decimals">
+      <number>0</number>
+     </property>
+     <property name="maximum">
+      <double>359.000000000000000</double>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" colspan="4">
+    <widget class="QLineEdit" name="m_line_edit">
+     <property name="placeholderText">
+      <string>Texte</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="3">
+    <widget class="QDoubleSpinBox" name="m_y_sb">
+     <property name="suffix">
+      <string>px</string>
+     </property>
+     <property name="decimals">
+      <number>0</number>
+     </property>
+     <property name="maximum">
+      <double>10000.000000000000000</double>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>X :</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Y :</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="3">
+    <widget class="QSpinBox" name="m_size_sb">
+     <property name="minimum">
+      <number>4</number>
+     </property>
+     <property name="maximum">
+      <number>50</number>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="2">
+    <widget class="QLabel" name="label_4">
+     <property name="text">
+      <string>Taille :</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/