diff --git a/sources/editor/elementscene.cpp b/sources/editor/elementscene.cpp index e29f03765..29a57493b 100644 --- a/sources/editor/elementscene.cpp +++ b/sources/editor/elementscene.cpp @@ -79,14 +79,6 @@ void ElementScene::slot_addTerminal() { if (m_event_interface) delete m_event_interface; m_event_interface = nullptr; } -/** - Passe la scene en mode "ajout de champ de texte" -*/ -void ElementScene::slot_addTextField() { - behavior = TextField; - if (m_event_interface) delete m_event_interface; m_event_interface = nullptr; -} - /** Gere les mouvements de la souris @param e objet decrivant l'evenement @@ -155,7 +147,6 @@ void ElementScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) { if (mustSnapToGrid(e)) event_pos = snapToGrid(event_pos); PartTerminal *terminal; - PartTextField *textfield; if (behavior == PasteArea) { defined_paste_area_ = paste_area_ -> rect(); @@ -174,13 +165,6 @@ void ElementScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) { emit(partsAdded()); endCurrentBehavior(e); break; - case TextField: - textfield = new PartTextField(element_editor, 0, this); - textfield -> setPos(event_pos); - undo_stack.push(new AddPartCommand(tr("champ de texte"), this, textfield)); - emit(partsAdded()); - endCurrentBehavior(e); - break; case Normal: default: // detecte les deplacements de parties diff --git a/sources/editor/elementscene.h b/sources/editor/elementscene.h index 84c69b6fc..95f7ee27a 100644 --- a/sources/editor/elementscene.h +++ b/sources/editor/elementscene.h @@ -41,7 +41,7 @@ class ElementScene : public QGraphicsScene { // enum public: - enum Behavior { Normal, Terminal, TextField, PasteArea }; + enum Behavior { Normal, Terminal, PasteArea }; enum ItemOption { SortByZValue = 1, IncludeTerminals = 2, @@ -162,7 +162,6 @@ class ElementScene : public QGraphicsScene { public slots: void slot_move(); void slot_addTerminal(); - void slot_addTextField(); void slot_select(const ElementContent &); void slot_selectAll(); void slot_deselectAll(); diff --git a/sources/editor/esevent/eseventaddtextfield.cpp b/sources/editor/esevent/eseventaddtextfield.cpp new file mode 100644 index 000000000..23f0de73d --- /dev/null +++ b/sources/editor/esevent/eseventaddtextfield.cpp @@ -0,0 +1,76 @@ +/* + 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 . +*/ +#include + +#include "parttextfield.h" +#include "editorcommands.h" +#include "elementscene.h" +#include "eseventaddtextfield.h" + +/** + * @brief ESEventAddTextField::ESEventAddTextField + * @param scene + */ +ESEventAddTextField::ESEventAddTextField(ElementScene *scene) : + ESEventInterface(scene) +{ + m_text = new PartTextField(m_editor, 0, m_scene); + m_running = true; +} + +/** + * @brief ESEventAddTextField::~ESEventAddTextField + */ +ESEventAddTextField::~ESEventAddTextField() { + delete m_text; +} + +/** + * @brief ESEventAddTextField::ESEventAddTextField + * @param event + * @return + */ +bool ESEventAddTextField::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { + QPointF pos = m_scene -> snapToGrid(event -> scenePos()); + updateHelpCross(pos); + m_text->setPos(pos); + return true; +} + +/** + * @brief ESEventAddTextField::ESEventAddTextField + * @param event + * @return + */ +bool ESEventAddTextField::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { + if (event->button() == Qt::LeftButton) { + m_scene -> undoStack().push(new AddPartCommand(QObject::tr("Champ texte"), m_scene, m_text)); + + //Set new text + m_text = new PartTextField(m_editor, 0, m_scene); + m_text -> setPos(m_scene -> snapToGrid(event -> scenePos())); + + return true; + } + else if (event->button() == Qt::RightButton) { + m_running = false; + return true; + } + + return false; +} diff --git a/sources/editor/esevent/eseventaddtextfield.h b/sources/editor/esevent/eseventaddtextfield.h new file mode 100644 index 000000000..47b009f7c --- /dev/null +++ b/sources/editor/esevent/eseventaddtextfield.h @@ -0,0 +1,44 @@ +/* + 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 . +*/ +#ifndef ESEVENTADDTEXTFIELD_H +#define ESEVENTADDTEXTFIELD_H + +#include "eseventinterface.h" + +class ElementScene; +class PartTextField; +class QGraphicsSceneMouseEvent; + +/** + * @brief The ESEventAddTextField class + * This ESEvent manage creation of text field in an ElementScene + */ +class ESEventAddTextField : public ESEventInterface +{ + public: + ESEventAddTextField(ElementScene *scene); + virtual ~ESEventAddTextField(); + + virtual bool mouseMoveEvent (QGraphicsSceneMouseEvent *event); + virtual bool mouseReleaseEvent (QGraphicsSceneMouseEvent *event); + + private: + PartTextField *m_text; +}; + +#endif // ESEVENTADDTEXTFIELD_H diff --git a/sources/editor/qetelementeditor.cpp b/sources/editor/qetelementeditor.cpp index 1b5e0360d..dc4e593c7 100644 --- a/sources/editor/qetelementeditor.cpp +++ b/sources/editor/qetelementeditor.cpp @@ -47,6 +47,7 @@ #include "eseventaddpolygon.h" #include "eseventaddarc.h" #include "eseventaddtext.h" +#include "eseventaddtextfield.h" #include /* @@ -258,7 +259,7 @@ void QETElementEditor::setupActions() { connect(add_text, SIGNAL(triggered()), this, SLOT(addText())); connect(add_arc, SIGNAL(triggered()), this, SLOT(addArc())); connect(add_terminal, SIGNAL(triggered()), ce_scene, SLOT(slot_addTerminal())); - connect(add_textfield, SIGNAL(triggered()), ce_scene, SLOT(slot_addTextField())); + connect(add_textfield, SIGNAL(triggered()), this, SLOT(addTextField())); connect(move, SIGNAL(triggered()), this, SLOT(slot_setRubberBandToView())); connect(add_line, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView())); @@ -975,6 +976,14 @@ void QETElementEditor::addText() { ce_scene -> setEventInterface(new ESEventAddText(ce_scene)); } +/** + * @brief QETElementEditor::addTextField + * Set text field interface to scene + */ +void QETElementEditor::addTextField() { + ce_scene -> setEventInterface(new ESEventAddTextField(ce_scene)); +} + /** Lance l'assistant de creation d'un nouvel element. */ diff --git a/sources/editor/qetelementeditor.h b/sources/editor/qetelementeditor.h index bb17ba572..75ffa992e 100644 --- a/sources/editor/qetelementeditor.h +++ b/sources/editor/qetelementeditor.h @@ -134,6 +134,7 @@ class QETElementEditor : public QETMainWindow { void addPolygon(); void addArc(); void addText(); + void addTextField(); void slot_new(); void slot_open();