[qet] [3379] Text item : reduce a lot of code for several text item |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 3379
Author: blacksun
Date: 2014-10-17 23:30:42 +0200 (Fri, 17 Oct 2014)
Log Message:
-----------
Text item : reduce a lot of code for several text item
Modified Paths:
--------------
trunk/sources/diagram.cpp
trunk/sources/diagram.h
trunk/sources/diagramcommands.cpp
trunk/sources/diagramcommands.h
trunk/sources/diagramcontent.cpp
trunk/sources/diagramcontent.h
trunk/sources/elementsmover.cpp
trunk/sources/elementsmover.h
trunk/sources/qetgraphicsitem/diagramtextitem.cpp
trunk/sources/qetgraphicsitem/diagramtextitem.h
trunk/sources/qetgraphicsitem/elementtextitem.cpp
trunk/sources/qetgraphicsitem/elementtextitem.h
trunk/sources/qetgraphicsitem/independenttextitem.cpp
trunk/sources/qetgraphicsitem/independenttextitem.h
Removed Paths:
-------------
trunk/sources/elementtextsmover.cpp
trunk/sources/elementtextsmover.h
Modified: trunk/sources/diagram.cpp
===================================================================
--- trunk/sources/diagram.cpp 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/diagram.cpp 2014-10-17 21:30:42 UTC (rev 3379)
@@ -26,7 +26,6 @@
#include "diagramposition.h"
#include "qetgraphicsitem/elementtextitem.h"
#include "elementsmover.h"
-#include "elementtextsmover.h"
#include "exportdialog.h"
#include "qetgraphicsitem/ghostelement.h"
#include "qetgraphicsitem/independenttextitem.h"
@@ -68,7 +67,6 @@
// initialise les objets gerant les deplacements
elements_mover_ = new ElementsMover(); // deplacements d'elements/conducteurs/textes
- element_texts_mover_ = new ElementTextsMover(); // deplacements d'ElementTextItem
connect(
&border_and_titleblock, SIGNAL(needTitleBlockTemplate(const QString &)),
@@ -94,7 +92,6 @@
// delete of object for manage movement
delete elements_mover_;
- delete element_texts_mover_;
// list removable items
QList<QGraphicsItem *> deletable_items;
@@ -1021,33 +1018,6 @@
}
/**
- Initialise un deplacement d'ElementTextItems
- @param driver_item Item deplace par la souris et ne necessitant donc pas
- d'etre deplace lors des appels a continueMovement.
- @see ElementTextsMover
-*/
-int Diagram::beginMoveElementTexts(QGraphicsItem *driver_item) {
- return(element_texts_mover_ -> beginMovement(this, driver_item));
-}
-
-/**
- Prend en compte un mouvement composant un deplacement d'ElementTextItems
- @param movement mouvement a ajouter au deplacement en cours
- @see ElementTextsMover
-*/
-void Diagram::continueMoveElementTexts(const QPointF &movement) {
- element_texts_mover_ -> continueMovement(movement);
-}
-
-/**
- Finalise un deplacement d'ElementTextItems
- @see ElementTextsMover
-*/
-void Diagram::endMoveElementTexts() {
- element_texts_mover_ -> endMovement();
-}
-
-/**
Permet de savoir si un element est utilise sur un schema
@param location Emplacement d'un element
@return true si l'element location est utilise sur ce schema, false sinon
@@ -1299,6 +1269,8 @@
dc.elements << elmt;
} else if (IndependentTextItem *iti = qgraphicsitem_cast<IndependentTextItem *>(item)) {
dc.textFields << iti;
+ } else if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(item)) {
+ dc.elementTextFields << eti;
} else if (Conductor *c = qgraphicsitem_cast<Conductor *>(item)) {
// recupere les conducteurs selectionnes isoles (= non deplacables mais supprimables)
if (
Modified: trunk/sources/diagram.h
===================================================================
--- trunk/sources/diagram.h 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/diagram.h 2014-10-17 21:30:42 UTC (rev 3379)
@@ -37,7 +37,6 @@
class ElementsLocation;
class ElementsMover;
class ElementTextItem;
-class ElementTextsMover;
class IndependentTextItem;
class QETProject;
class Terminal;
@@ -85,7 +84,6 @@
private:
QGraphicsLineItem *conductor_setter_;
ElementsMover *elements_mover_;
- ElementTextsMover *element_texts_mover_;
QGIManager *qgi_manager_;
QETProject *project_;
@@ -191,9 +189,6 @@
int beginMoveElements(QGraphicsItem * = 0);
void continueMoveElements(const QPointF &);
void endMoveElements();
- int beginMoveElementTexts(QGraphicsItem * = 0);
- void continueMoveElementTexts(const QPointF &);
- void endMoveElementTexts();
bool usesElement(const ElementsLocation &);
bool usesTitleBlockTemplate(const QString &);
Modified: trunk/sources/diagramcommands.cpp
===================================================================
--- trunk/sources/diagramcommands.cpp 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/diagramcommands.cpp 2014-10-17 21:30:42 UTC (rev 3379)
@@ -329,7 +329,13 @@
typedef DiagramContent dc;
//Move every movable item, except conductor
- foreach (QGraphicsItem *qgi, content_to_move.items(dc::Elements | dc::TextFields | dc::Images | dc::Shapes)) {
+ foreach (QGraphicsItem *qgi, content_to_move.items(dc::Elements | dc::TextFields | dc::ElementTextFields | dc::Images | dc::Shapes)) {
+ //If curent item have parent, and parent item is in content_to_move
+ //we don't apply movement to this item, because this item will be moved by is parent.
+ if (qgi->parentItem()) {
+ if (content_to_move.items().contains(qgi->parentItem()))
+ continue;
+ }
if(qgi->toGraphicsObject()) {
setupAnimation(qgi->toGraphicsObject(), "pos", qgi->pos(), qgi->pos() + actual_movement);
}
@@ -385,66 +391,6 @@
/**
Constructeur
@param diagram Schema sur lequel on deplace des champs de texte
- @param texts Liste des textes deplaces
- @param m translation subie par les elements
- @param parent QUndoCommand parent
-*/
-MoveElementsTextsCommand::MoveElementsTextsCommand(
- Diagram *diagram,
- const QSet<ElementTextItem *> &texts,
- const QPointF &m,
- QUndoCommand *parent
-) :
- QUndoCommand(parent),
- diagram(diagram),
- texts_to_move(texts),
- movement(m),
- first_redo(true)
-{
- QString moved_content_sentence = QET::ElementsAndConductorsSentence(0, 0, texts_to_move.count());
-
- setText(
- QString(
- QObject::tr(
- "d\351placer %1",
- "undo caption - %1 is a sentence listing the moved content"
- ).arg(moved_content_sentence)
- )
- );
-}
-
-/// Destructeur
-MoveElementsTextsCommand::~MoveElementsTextsCommand() {
-}
-
-/// annule le deplacement
-void MoveElementsTextsCommand::undo() {
- diagram -> showMe();
- move(-movement);
-}
-
-/// refait le deplacement
-void MoveElementsTextsCommand::redo() {
- diagram -> showMe();
- if (first_redo) first_redo = false;
- else move(movement);
-}
-
-/**
- deplace les elements et conducteurs
- @param actual_movement translation a effectuer sur les elements et conducteurs
-*/
-void MoveElementsTextsCommand::move(const QPointF &actual_movement) {
- // deplace les textes
- foreach(ElementTextItem *text, texts_to_move) {
- QPointF applied_movement = text -> mapMovementToParent(text -> mapMovementFromScene(actual_movement));
- text -> setPos(text -> pos() + applied_movement);
- }
-}
-
-/**
- Constructeur
- @param diagram Schema sur lequel on deplace des champs de texte
@param texts Textes deplaces : chaque ConductorTextItem est associe a un
couple de position : avant et apres le deplacement
@param m translation subie par les elements
Modified: trunk/sources/diagramcommands.h
===================================================================
--- trunk/sources/diagramcommands.h 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/diagramcommands.h 2014-10-17 21:30:42 UTC (rev 3379)
@@ -186,35 +186,6 @@
};
/**
- This command moves text items related to elements on a particular diagram.
-*/
-class MoveElementsTextsCommand : public QUndoCommand {
- // constructors, destructor
- public:
- MoveElementsTextsCommand(Diagram *, const QSet<ElementTextItem *> &, const QPointF &m, QUndoCommand * = 0);
- virtual ~MoveElementsTextsCommand();
- private:
- MoveElementsTextsCommand(const MoveElementsTextsCommand &);
-
- // methods
- public:
- virtual void undo();
- virtual void redo();
- virtual void move(const QPointF &);
-
- // attributes
- private:
- /// diagram the movement takes place on.
- Diagram *diagram;
- /// text items to be moved
- QSet<ElementTextItem *> texts_to_move;
- /// applied movement
- QPointF movement;
- /// prevent the first call to redo()
- bool first_redo;
-};
-
-/**
This command moves text items related to conductors on a particular
diagram.
*/
Modified: trunk/sources/diagramcontent.cpp
===================================================================
--- trunk/sources/diagramcontent.cpp 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/diagramcontent.cpp 2014-10-17 21:30:42 UTC (rev 3379)
@@ -17,10 +17,12 @@
*/
#include "diagramcontent.h"
#include <QGraphicsItem>
-#include "qetgraphicsitem/element.h"
-#include "qetgraphicsitem/independenttextitem.h"
-#include "qetgraphicsitem/conductor.h"
-#include "qetgraphicsitem/diagramimageitem.h"
+#include "element.h"
+#include "independenttextitem.h"
+#include "conductor.h"
+#include "diagramimageitem.h"
+#include "elementtextitem.h"
+#include "qetshapeitem.h"
/**
Constructeur par defaut. Ne contient rien.
@@ -34,6 +36,7 @@
DiagramContent::DiagramContent(const DiagramContent &other) :
elements(other.elements),
textFields(other.textFields),
+ elementTextFields(other.elementTextFields),
images(other.images),
shapes(other.shapes),
conductorsToUpdate(other.conductorsToUpdate),
@@ -71,6 +74,7 @@
void DiagramContent::clear() {
elements.clear();
textFields.clear();
+ elementTextFields.clear();
images.clear();
shapes.clear();
conductorsToUpdate.clear();
@@ -85,10 +89,13 @@
QList<QGraphicsItem *> DiagramContent::items(int filter) const {
QList<QGraphicsItem *> items_list;
foreach(QGraphicsItem *qgi, conductors(filter)) items_list << qgi;
- if (filter & Elements) foreach(QGraphicsItem *qgi, elements) items_list << qgi;
- if (filter & TextFields) foreach(QGraphicsItem *qgi, textFields) items_list << qgi;
- if (filter & Images) foreach(QGraphicsItem *qgi, images) items_list << qgi;
- if (filter & Shapes) foreach(QGraphicsItem *qgi, shapes) items_list << qgi;
+
+ if (filter & Elements) foreach(QGraphicsItem *qgi, elements) items_list << qgi;
+ if (filter & TextFields) foreach(QGraphicsItem *qgi, textFields) items_list << qgi;
+ if (filter & ElementTextFields) foreach(QGraphicsItem *qgi, elementTextFields) items_list << qgi;
+ if (filter & Images) foreach(QGraphicsItem *qgi, images) items_list << qgi;
+ if (filter & Shapes) foreach(QGraphicsItem *qgi, shapes) items_list << qgi;
+
if (filter & SelectedOnly) {
foreach(QGraphicsItem *qgi, items_list) {
if (!qgi -> isSelected()) items_list.removeOne(qgi);
@@ -106,6 +113,7 @@
if (filter & SelectedOnly) {
if (filter & Elements) foreach(Element *element, elements) { if (element -> isSelected()) ++ count; }
if (filter & TextFields) foreach(DiagramTextItem *dti, textFields) { if (dti -> isSelected()) ++ count; }
+ if (filter & ElementTextFields) foreach(DiagramTextItem *dti, elementTextFields) { if (dti -> isSelected()) ++ count; }
if (filter & Images) foreach(DiagramImageItem *dii, images) { if (dii -> isSelected()) ++ count; }
if (filter & Shapes) foreach(QetShapeItem *dsi, shapes) { if (dsi -> isSelected()) ++ count; }
if (filter & ConductorsToMove) foreach(Conductor *conductor, conductorsToMove) { if (conductor -> isSelected()) ++ count; }
@@ -115,6 +123,7 @@
else {
if (filter & Elements) count += elements.count();
if (filter & TextFields) count += textFields.count();
+ if (filter & ElementTextFields) count += elementTextFields.count();
if (filter & Images) count += images.count();
if (filter & Shapes) count += shapes.count();
if (filter & ConductorsToMove) count += conductorsToMove.count();
@@ -133,7 +142,7 @@
QString DiagramContent::sentence(int filter) const {
int elements_count = (filter & Elements) ? elements.count() : 0;
int conductors_count = conductors(filter).count();
- int textfields_count = (filter & TextFields) ? textFields.count() : 0;
+ int textfields_count = (filter & TextFields) ? (textFields.count() + elementTextFields.count()) : 0;
int images_count = (filter & Images) ? images.count() : 0;
int shapes_count = (filter & Shapes) ? shapes.count() : 0;
Modified: trunk/sources/diagramcontent.h
===================================================================
--- trunk/sources/diagramcontent.h 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/diagramcontent.h 2014-10-17 21:30:42 UTC (rev 3379)
@@ -17,12 +17,16 @@
*/
#ifndef DIAGRAM_CONTENT_H
#define DIAGRAM_CONTENT_H
-#include <QtGui>
-#include "qetgraphicsitem/qetshapeitem.h"
+
+#include <QSet>
+
+class QGraphicsItem;
class Conductor;
class Element;
class IndependentTextItem;
class DiagramImageItem;
+class ElementTextItem;
+class QetShapeItem;
/**
This class provides a container that makes the transmission of diagram content
@@ -43,20 +47,23 @@
enum Filter {
Elements = 1,
TextFields = 2,
- Images = 4,
- ConductorsToMove = 8,
- ConductorsToUpdate = 16,
- OtherConductors = 32,
- AnyConductor = 56,
- Shapes = 64,
- All = 127,
- SelectedOnly = 128
+ ElementTextFields = 4,
+ Images = 8,
+ ConductorsToMove = 16,
+ ConductorsToUpdate = 32,
+ OtherConductors = 64,
+ AnyConductor = 112,
+ Shapes = 128,
+ All = 255,
+ SelectedOnly = 256
};
/// Hold electrical elements
QSet<Element *> elements;
/// Hold independent text items
QSet<IndependentTextItem *> textFields;
+ /// Hold element text item
+ QSet <ElementTextItem *> elementTextFields;
/// Hold image
QSet<DiagramImageItem *> images;
/// Hold shape
Modified: trunk/sources/elementsmover.cpp
===================================================================
--- trunk/sources/elementsmover.cpp 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/elementsmover.cpp 2014-10-17 21:30:42 UTC (rev 3379)
@@ -16,13 +16,14 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "elementsmover.h"
-#include "qetgraphicsitem/conductor.h"
-#include "qetgraphicsitem/conductortextitem.h"
+#include "conductor.h"
+#include "conductortextitem.h"
#include "diagram.h"
#include "diagramcommands.h"
-#include "qetgraphicsitem/element.h"
-#include "qetgraphicsitem/independenttextitem.h"
-#include "qetgraphicsitem/diagramimageitem.h"
+#include "element.h"
+#include "independenttextitem.h"
+#include "diagramimageitem.h"
+#include "elementtextitem.h"
/**
* @brief ElementsMover::ElementsMover Constructor
@@ -74,6 +75,11 @@
current_movement_ = QPointF(0.0, 0.0);
moved_content_ = diagram -> selectedContent();
+
+ if (driver_item -> parentItem()) {
+ if (moved_content_.items().contains(driver_item -> parentItem()))
+ moved_content_.clear();
+ }
/* We need to save the position of conductor text (ConductorTextItem)
* if the position is defined by user
@@ -110,8 +116,12 @@
//Move every movable item, except conductor
typedef DiagramContent dc;
- foreach (QGraphicsItem *qgi, moved_content_.items(dc::Elements | dc::TextFields | dc::Images | dc::Shapes)) {
+ foreach (QGraphicsItem *qgi, moved_content_.items(dc::Elements | dc::TextFields | dc::ElementTextFields | dc::Images | dc::Shapes)) {
if (qgi == movement_driver_) continue;
+ if (qgi->parentItem()) {
+ if (moved_content_.items().contains(qgi->parentItem()))
+ continue;
+ }
qgi -> setPos(qgi->pos() + movement);
}
Modified: trunk/sources/elementsmover.h
===================================================================
--- trunk/sources/elementsmover.h 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/elementsmover.h 2014-10-17 21:30:42 UTC (rev 3379)
@@ -17,8 +17,10 @@
*/
#ifndef ELEMENTS_MOVER_H
#define ELEMENTS_MOVER_H
-#include <QtGui>
+
+#include <QPointF>
#include "diagramcontent.h"
+
class ConductorTextItem;
class Diagram;
/**
Deleted: trunk/sources/elementtextsmover.cpp
===================================================================
--- trunk/sources/elementtextsmover.cpp 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/elementtextsmover.cpp 2014-10-17 21:30:42 UTC (rev 3379)
@@ -1,141 +0,0 @@
-/*
- Copyright 2006-2014 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 "elementtextsmover.h"
-#include "qetgraphicsitem/conductor.h"
-#include "qetgraphicsitem/elementtextitem.h"
-#include "diagram.h"
-#include "diagramcommands.h"
-#include "qetgraphicsitem/element.h"
-#include "qetgraphicsitem/independenttextitem.h"
-
-/**
- Constructeur
-*/
-ElementTextsMover::ElementTextsMover() :
- movement_running_(false),
- current_movement_(),
- diagram_(0),
- movement_driver_(0),
- moved_texts_()
-{
-
-}
-
-/**
- Destructeur
-*/
-ElementTextsMover::~ElementTextsMover() {
-}
-
-/**
- @return true si ce gestionnaire de deplacement est pret a etre utilise,
- false sinon. Un gestionnaire de deplacement est pret a etre utilise a partir
- du moment ou le mouvement precedemment gere n'est plus en cours.
-*/
-bool ElementTextsMover::isReady() const {
- return(!movement_running_);
-}
-
-/**
- Demarre un nouveau mouvement d'ElementTextItems
- @param diagram Schema sur lequel se deroule le deplacement
- @param driver_item Item deplace par la souris et ne necessitant donc pas
- d'etre deplace lors des appels a continueMovement.
- @return le nombre d'items concernes par le deplacement, ou -1 si le
- mouvement n'a pas ete initie
-*/
-int ElementTextsMover::beginMovement(Diagram *diagram, QGraphicsItem *driver_item) {
- // il ne doit pas y avoir de mouvement en cours
- if (movement_running_) return(-1);
-
- // on s'assure que l'on dispose d'un schema pour travailler
- if (!diagram) return(-1);
- diagram_ = diagram;
-
- // on prend en compte le driver_item
- movement_driver_ = driver_item;
-
- // au debut du mouvement, le deplacement est nul
- current_movement_ = QPointF(0.0, 0.0);
-
- // on stocke dans cet objet les items concernes par le deplacement
- moved_texts_.clear();
- foreach(QGraphicsItem *item, diagram -> selectedItems()) {
- if (ElementTextItem *text_item = qgraphicsitem_cast<ElementTextItem *>(item)) {
- moved_texts_ << text_item;
- }
- }
-
- // on s'assure qu'il y a quelque chose a deplacer
- if (!moved_texts_.count()) return(-1);
-
- // a ce stade, on dispose de toutes les informations necessaires pour
- // prendre en compte les mouvements
-
- // il y a desormais un mouvement en cours
- movement_running_ = true;
-
- return(moved_texts_.count());
-}
-
-/**
- Ajoute un mouvement au deplacement en cours. Cette methode
- @param movement mouvement a ajouter au deplacement en cours
-*/
-void ElementTextsMover::continueMovement(const QPointF &movement) {
- // un mouvement doit avoir ete initie
- if (!movement_running_) return;
-
- // inutile de faire quoi que ce soit s'il n'y a pas eu de mouvement concret
- if (movement.isNull()) return;
-
- // prise en compte du mouvement
- current_movement_ += movement;
-
- // deplace les elements selectionnes
- foreach(ElementTextItem *text_item, moved_texts_) {
- if (movement_driver_ && text_item == movement_driver_) continue;
- QPointF applied_movement = text_item -> mapMovementToParent(text_item-> mapMovementFromScene(movement));
- text_item -> setPos(text_item -> pos() + applied_movement);
- }
-}
-
-/**
- Termine le deplacement en creant un objet d'annulation et en l'ajoutant a
- la QUndoStack du schema concerne.
- @see Diagram::undoStack()
-*/
-void ElementTextsMover::endMovement() {
- // un mouvement doit avoir ete initie
- if (!movement_running_) return;
-
- // inutile de faire quoi que ce soit s'il n'y a pas eu de mouvement concret
- if (!current_movement_.isNull()) {
- // cree un objet d'annulation pour le mouvement ainsi realise
- MoveElementsTextsCommand*undo_object = new MoveElementsTextsCommand(
- diagram_,
- moved_texts_,
- current_movement_
- );
-
- diagram_ -> undoStack().push(undo_object);
- }
-
- // il n'y a plus de mouvement en cours
- movement_running_ = false;
-}
Deleted: trunk/sources/elementtextsmover.h
===================================================================
--- trunk/sources/elementtextsmover.h 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/elementtextsmover.h 2014-10-17 21:30:42 UTC (rev 3379)
@@ -1,51 +0,0 @@
-/*
- Copyright 2006-2014 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_TEXTS_MOVER_H
-#define ELEMENT_TEXTS_MOVER_H
-#include <QtGui>
-#include "diagramcontent.h"
-class ElementTextItem;
-class Diagram;
-/**
- This class manages the interactive movement of element text items on a
- particular diagram.
-*/
-class ElementTextsMover {
- // constructors, destructor
- public:
- ElementTextsMover();
- virtual ~ElementTextsMover();
- private:
- ElementTextsMover(const ElementTextsMover &);
-
- // methods
- public:
- bool isReady() const;
- int beginMovement(Diagram *, QGraphicsItem * = 0);
- void continueMovement(const QPointF &);
- void endMovement();
-
- // attributes
- private:
- bool movement_running_;
- QPointF current_movement_;
- Diagram *diagram_;
- QGraphicsItem *movement_driver_;
- QSet<ElementTextItem *> moved_texts_;
-};
-#endif
Modified: trunk/sources/qetgraphicsitem/diagramtextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/diagramtextitem.cpp 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/qetgraphicsitem/diagramtextitem.cpp 2014-10-17 21:30:42 UTC (rev 3379)
@@ -17,7 +17,6 @@
*/
#include "diagramtextitem.h"
#include "diagramcommands.h"
-#include "qet.h"
#include "qetapp.h"
#include "richtext/richtexteditor_p.h"
#include "diagram.h"
@@ -30,7 +29,8 @@
DiagramTextItem::DiagramTextItem(QGraphicsItem *parent, Diagram *parent_diagram) :
QGraphicsTextItem(parent, parent_diagram),
previous_text_(),
- rotation_angle_(0.0)
+ rotation_angle_(0.0),
+ m_first_move (true)
{
//set Zvalue at 10 to be upper than the DiagramImageItem
setZValue(10);
@@ -261,6 +261,64 @@
}
/**
+ * @brief DiagramTextItem::mousePressEvent
+ * @param event
+ */
+void DiagramTextItem::mousePressEvent (QGraphicsSceneMouseEvent *event) {
+ m_first_move = true;
+ if (event -> modifiers() & Qt::ControlModifier) {
+ setSelected(!isSelected());
+ }
+ QGraphicsTextItem::mousePressEvent(event);
+}
+
+/**
+ * @brief DiagramTextItem::mouseMoveEvent
+ * @param event
+ */
+void DiagramTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
+ if (textInteractionFlags() & Qt::TextEditable) QGraphicsTextItem::mouseMoveEvent(event);
+
+ else if ((flags() & QGraphicsItem::ItemIsMovable) && (event -> buttons() & Qt::LeftButton)) {
+ Diagram *diagram_ = diagram();
+
+ //This is first move, we signal it to parent diagram
+ if(diagram_ && m_first_move)
+ diagram_ -> beginMoveElements(this);
+
+ QPointF old_pos = pos();
+
+ //Save the pos of item at the beggining of the movement
+ if (m_first_move)
+ m_mouse_to_origin_movement = old_pos - event->buttonDownScenePos(Qt::LeftButton);
+
+ //Set the actual pos
+ setPos(event->scenePos() + m_mouse_to_origin_movement);
+
+ //Update the actual movement for other selected item
+ if (diagram_)
+ diagram_ -> continueMoveElements(pos() - old_pos);
+ }
+
+ else event -> ignore();
+
+ m_first_move = false;
+}
+
+/**
+ * @brief DiagramTextItem::mouseReleaseEvent
+ * @param event
+ */
+void DiagramTextItem::mouseReleaseEvent (QGraphicsSceneMouseEvent *event) {
+ //Signal to diagram movement is finish
+ if (diagram())
+ diagram() -> endMoveElements();
+
+ if (!(event -> modifiers() & Qt::ControlModifier))
+ QGraphicsTextItem::mouseReleaseEvent(event);
+}
+
+/**
Effectue la rotation du texte en elle-meme
Pour les DiagramTextItem, la rotation s'effectue autour du point (0, 0).
Cette methode peut toutefois etre redefinie dans des classes filles
@@ -297,13 +355,6 @@
setPos(QPointF(x, y));
}
-/**
- @return la position du champ de texte
-*/
-QPointF DiagramTextItem::pos() const {
- return(QGraphicsTextItem::pos());
-}
-
/// Rend le champ de texte non focusable
void DiagramTextItem::setNonFocusable() {
setFlag(QGraphicsTextItem::ItemIsFocusable, false);
Modified: trunk/sources/qetgraphicsitem/diagramtextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/diagramtextitem.h 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/qetgraphicsitem/diagramtextitem.h 2014-10-17 21:30:42 UTC (rev 3379)
@@ -54,7 +54,6 @@
virtual QDomElement toXml(QDomDocument &) const = 0;
virtual void setPos(const QPointF &);
virtual void setPos(qreal, qreal);
- virtual QPointF pos() const;
qreal rotationAngle() const;
void setRotationAngle(const qreal &);
void rotateBy(const qreal &);
@@ -70,7 +69,12 @@
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
virtual void focusInEvent(QFocusEvent *);
virtual void focusOutEvent(QFocusEvent *);
- virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *);
+
+ virtual void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event);
+ virtual void mousePressEvent (QGraphicsSceneMouseEvent *event);
+ virtual void mouseMoveEvent (QGraphicsSceneMouseEvent *event);
+ virtual void mouseReleaseEvent (QGraphicsSceneMouseEvent *event);
+
virtual void applyRotation(const qreal &);
signals:
@@ -83,11 +87,13 @@
void setNonFocusable();
void setHtmlText(const QString &);
- private:
+ protected:
/// Previous text value
QString previous_text_;
/// angle of rotation of the text field
qreal rotation_angle_;
bool no_editable;
+ bool m_first_move;
+ QPointF m_mouse_to_origin_movement;
};
#endif
Modified: trunk/sources/qetgraphicsitem/elementtextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/elementtextitem.cpp 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/qetgraphicsitem/elementtextitem.cpp 2014-10-17 21:30:42 UTC (rev 3379)
@@ -16,9 +16,8 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "elementtextitem.h"
-#include "diagram.h"
-#include "diagramcommands.h"
#include "element.h"
+#include <QTextDocument>
/**
Constructeur
@@ -29,8 +28,7 @@
DiagramTextItem(parent_element, parent_diagram),
parent_element_(parent_element),
follow_parent_rotations(false),
- original_rotation_angle_(0.0),
- first_move_(true)
+ original_rotation_angle_(0.0)
{build();}
/**
@@ -43,13 +41,10 @@
DiagramTextItem(text, parent_element, parent_diagram),
parent_element_(parent_element),
follow_parent_rotations(false),
- original_rotation_angle_(0.0),
- first_move_(true)
+ original_rotation_angle_(0.0)
{build();}
void ElementTextItem::build() {
- setFlag(QGraphicsItem::ItemIsMovable, false);
- setToolTip(tr("Maintenir ctrl pour d\351placer", "tool tip for element text item"));
adjustItemPosition(1);
// ajuste la position du QGraphicsItem lorsque le QTextDocument change
connect(document(), SIGNAL(blockCountChanged(int)), this, SLOT(adjustItemPosition(int)));
@@ -85,13 +80,6 @@
}
/**
- @return La position (bidouillee) du champ de texte
-*/
-QPointF ElementTextItem::pos() const {
- return(QGraphicsTextItem::pos());
-}
-
-/**
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.
@@ -211,95 +199,23 @@
}
/**
- Gere le clic sur le champ de texte
- @param e Objet decrivant l'evenement souris
-*/
-void ElementTextItem::mousePressEvent(QGraphicsSceneMouseEvent *e) {
- first_move_ = true;
- if (e -> modifiers() & Qt::ControlModifier) {
- setSelected(true);
- setFlag(QGraphicsItem::ItemIsMovable, true);
- }
- else DiagramTextItem::mousePressEvent(e);
-}
+ * @brief ElementTextItem::mouseMoveEvent
+ * @param event
+ */
+void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
+ if (parent_element_)
+ parent_element_->setHighlighted(true);
-/**
- Gere les mouvements de souris lies au champ de texte
- @param e Objet decrivant l'evenement souris
-*/
-void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
- if (textInteractionFlags() & Qt::TextEditable) {
- DiagramTextItem::mouseMoveEvent(e);
- } else if ((flags() & QGraphicsItem::ItemIsMovable) && (e -> buttons() & Qt::LeftButton)) {
- QPointF old_pos = pos();
- /*
- Utiliser e -> pos() directement aurait pour effet de positionner
- l'origine du champ de texte a la position indiquee par le curseur,
- ce qui n'est pas l'effet recherche
- Au lieu de cela, on applique a la position actuelle le vecteur
- definissant le mouvement effectue depuis la derniere position
- cliquee avec le bouton gauche
- */
- QPointF movement = e -> pos() - e -> buttonDownPos(Qt::LeftButton);
-
- /*
- Les methodes pos() et setPos() travaillent toujours avec les
- coordonnees de l'item parent (ou de la scene s'il n'y a pas d'item
- parent). On n'oublie donc pas de mapper le mouvement fraichement
- calcule sur l'item parent avant de l'appliquer.
- */
- QPointF parent_movement = mapMovementToParent(movement);
- setPos(pos() + parent_movement);
-
- Diagram *diagram_ptr = diagram();
- if (diagram_ptr) {
- if (first_move_) {
- // on signale le debut d'un deplacement d'ElementTextItems au schema parent
- int moved_texts_count = diagram_ptr -> beginMoveElementTexts(this);
-
- // s'il n'y a qu'un seul texte deplace, on met en valeur l'element parent
- 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(scene_effective_movement);
- }
- } else e -> ignore();
-
- if (first_move_) {
- first_move_ = false;
- }
+ DiagramTextItem::mouseMoveEvent(event);
}
/**
- Gere le relachement de souris
- Cette methode cree un objet d'annulation pour le deplacement
- @param e Objet decrivant l'evenement souris
-*/
-void ElementTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
- if (Diagram *diagram_ptr = diagram()) {
- // on arrete de mettre en valeur l'element parent
- if (parent_element_) {
- if (parent_element_ -> isHighlighted()) {
- parent_element_ -> setHighlighted(false);
- }
- }
-
- diagram_ptr -> endMoveElementTexts();
- }
- if (!(e -> modifiers() & Qt::ControlModifier)) {
- QGraphicsTextItem::mouseReleaseEvent(e);
- }
- setFlag(QGraphicsItem::ItemIsMovable, false);
+ * @brief ElementTextItem::mouseReleaseEvent
+ * @param event
+ */
+void ElementTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
+ if (parent_element_)
+ parent_element_->setHighlighted(false);
+
+ DiagramTextItem::mouseReleaseEvent(event);
}
Modified: trunk/sources/qetgraphicsitem/elementtextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/elementtextitem.h 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/qetgraphicsitem/elementtextitem.h 2014-10-17 21:30:42 UTC (rev 3379)
@@ -45,7 +45,6 @@
bool follow_parent_rotations;
QPointF original_position;
qreal original_rotation_angle_;
- bool first_move_;
QString tagg_;
// methods
@@ -60,7 +59,6 @@
QDomElement toXml(QDomDocument &) const;
void setPos(const QPointF &);
void setPos(qreal, qreal);
- virtual QPointF pos() const;
void setOriginalPos(const QPointF &);
QPointF originalPos() const;
void setOriginalRotationAngle(const qreal &);
@@ -74,11 +72,10 @@
protected:
virtual void applyRotation(const qreal &);
- virtual void mousePressEvent(QGraphicsSceneMouseEvent *);
- virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *);
- virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
- virtual void focusOutEvent(QFocusEvent *e) {DiagramTextItem::focusOutEvent(e); setFlag(QGraphicsItem::ItemIsMovable, false);}
+ virtual void mouseMoveEvent (QGraphicsSceneMouseEvent *event);
+ virtual void mouseReleaseEvent (QGraphicsSceneMouseEvent *event);
+
private:
void build();
};
Modified: trunk/sources/qetgraphicsitem/independenttextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/independenttextitem.cpp 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/qetgraphicsitem/independenttextitem.cpp 2014-10-17 21:30:42 UTC (rev 3379)
@@ -16,17 +16,15 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "independenttextitem.h"
-#include "diagram.h"
+#include <QDomElement>
/**
Constructeur
@param parent_diagram Le schema auquel est rattache le champ de texte
*/
IndependentTextItem::IndependentTextItem(Diagram *parent_diagram) :
- DiagramTextItem(0, parent_diagram),
- first_move_(true)
-{
-}
+ DiagramTextItem(0, parent_diagram)
+{}
/**
Constructeur
@@ -34,10 +32,8 @@
@param parent_diagram Le schema auquel est rattache le champ de texte
*/
IndependentTextItem::IndependentTextItem(const QString &text, Diagram *parent_diagram) :
- DiagramTextItem(text, 0, parent_diagram),
- first_move_(true)
-{
-}
+ DiagramTextItem(text, 0, parent_diagram)
+{}
/// Destructeur
IndependentTextItem::~IndependentTextItem() {
@@ -69,72 +65,3 @@
}
return(result);
}
-
-/**
- Gere le clic sur le champ de texte
- @param e Objet decrivant l'evenement souris
-*/
-void IndependentTextItem::mousePressEvent(QGraphicsSceneMouseEvent *e) {
- first_move_ = true;
- if (e -> modifiers() & Qt::ControlModifier) {
- setSelected(!isSelected());
- }
- DiagramTextItem::mousePressEvent(e);
-}
-
-/**
- Gere les mouvements de souris lies au champ de texte
- @param e Objet decrivant l'evenement souris
-*/
-void IndependentTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
- if (textInteractionFlags() & Qt::TextEditable) {
- DiagramTextItem::mouseMoveEvent(e);
- } else if ((flags() & QGraphicsItem::ItemIsMovable) && isSelected() && (e -> buttons() & Qt::LeftButton)) {
- // le champ de texte est en train d'etre deplace
- Diagram *diagram_ptr = diagram();
- if (diagram_ptr) {
- if (first_move_) {
- // il s'agit du premier mouvement du deplacement, on le signale
- // au schema parent
- diagram_ptr -> beginMoveElements(this);
- }
- }
-
- // on applique le mouvement impose par la souris
- QPointF old_pos = pos();
- if (first_move_) {
- mouse_to_origin_movement_ = old_pos - e -> buttonDownScenePos(Qt::LeftButton);
- }
- QPointF expected_pos = e-> scenePos() + mouse_to_origin_movement_;
- setPos(expected_pos); // setPos() will snap the expected position to the grid
-
- // on calcule le mouvement reellement applique par setPos()
- QPointF effective_movement = pos() - old_pos;
- if (diagram_ptr) {
- // on signale le mouvement ainsi applique au schema parent, qui
- // l'appliquera aux autres items selectionnes selon son bon vouloir
- diagram_ptr -> continueMoveElements(effective_movement);
- }
- } else e -> ignore();
-
- if (first_move_) {
- first_move_ = false;
- }
-}
-
-/**
- Gere le relachement de souris
- Cette methode a ete reimplementee pour tenir a jour la liste des elements
- et conducteurs a deplacer au niveau du schema.
- @param e Objet decrivant l'evenement souris
-*/
-void IndependentTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
- if (flags() & QGraphicsItem::ItemIsMovable) {
- if (Diagram *diagram_ptr = diagram()) {
- diagram_ptr -> endMoveElements();
- }
- }
- if (!(e -> modifiers() & Qt::ControlModifier)) {
- DiagramTextItem::mouseReleaseEvent(e);
- }
-}
Modified: trunk/sources/qetgraphicsitem/independenttextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/independenttextitem.h 2014-10-16 20:35:32 UTC (rev 3378)
+++ trunk/sources/qetgraphicsitem/independenttextitem.h 2014-10-17 21:30:42 UTC (rev 3379)
@@ -47,13 +47,7 @@
virtual void fromXml(const QDomElement &);
virtual QDomElement toXml(QDomDocument &) const;
- protected:
- virtual void mousePressEvent(QGraphicsSceneMouseEvent *);
- virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *);
- virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
-
private:
- bool first_move_;
QPointF mouse_to_origin_movement_;
};
#endif