diff --git a/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp b/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp index 8cb26eefb1b46eb28b5945383a7986af38e6fbf6..5aacfdadaf7c25d298d26d5c8f9b70d2f75e1f81 100644 --- a/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp +++ b/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp @@ -146,11 +146,13 @@ void DesignerScene::updateScene() void DesignerScene::onRowsInserted(const QModelIndex & /* parent */, int /* first */, int /* last */) { + qDebug() << "DesignerScene::onRowsInserted"; updateScene(); } void DesignerScene::onRowsRemoved(const QModelIndex & /* parent */, int /* first */, int /* last */) { + qDebug() << "DesignerScene::onRowsRemoved"; updateScene(); } @@ -286,15 +288,15 @@ void DesignerScene::alignViews() } //! runs recursively through model's item and schedules view removal -void DesignerScene::deleteViews(const QModelIndex &parentIndex) +void DesignerScene::deleteViews(const QModelIndex &viewIndex) { - qDebug() << "DesignerScene::deleteViews()" << parentIndex; + qDebug() << "DesignerScene::deleteViews()" << viewIndex; - for (int i_row = 0; i_row < m_sampleModel->rowCount(parentIndex); ++i_row) { - QModelIndex itemIndex = m_sampleModel->index(i_row, 0, parentIndex); + for (int i_row = 0; i_row < m_sampleModel->rowCount(viewIndex); ++i_row) { + QModelIndex itemIndex = m_sampleModel->index(i_row, 0, viewIndex); if (SessionItem *item = m_sampleModel->itemForIndex(itemIndex)) { - + qDebug() << " deleteViews" << item->modelType() << item->displayName(); removeItemViewFromScene(item); } else { @@ -302,21 +304,24 @@ void DesignerScene::deleteViews(const QModelIndex &parentIndex) } deleteViews(itemIndex); } - removeItemViewFromScene(m_sampleModel->itemForIndex(parentIndex)); // deleting parent item + removeItemViewFromScene(m_sampleModel->itemForIndex(viewIndex)); // deleting view itself } //! removes view from scene corresponding to given item void DesignerScene::removeItemViewFromScene(SessionItem *item) { - qDebug() << "DesignerScene::removeItemFromScene()" << item->modelType(); + Q_ASSERT(item); + + qDebug() << "DesignerScene::removeItemFromScene()" << item->modelType() << item->displayName(); for (QMap<SessionItem *, IView *>::iterator it = m_ItemToView.begin(); it != m_ItemToView.end(); ++it) { if (it.key() == item) { IView *view = it.value(); view->setSelected(false); m_ItemToView.erase(it); - emit view->aboutToBeDeleted(); +// emit view->aboutToBeDeleted(); view->deleteLater(); +// delete view; update(); break; } @@ -339,6 +344,7 @@ void DesignerScene::deleteSelectedItems() // Since we don't know the order of items and their parent/child relationship, we need this while (indexes.size()) { QModelIndex current = m_proxy->mapToSource(indexes.back()); + qDebug() << " DesignerScene::deleteSelectedItems() current.selected" << current; m_sampleModel->removeRows(current.row(), 1, current.parent()); indexes = m_selectionModel->selectedIndexes(); } @@ -396,8 +402,10 @@ void DesignerScene::onEstablishedConnection(NodeEditorConnection *connection) if (connection->getInputPort()->getPortType() == NodeEditorPort::TRANSFORMATION) tag = ParticleItem::T_TRANSFORMATION; } + qDebug() << "onEstablishedConnection deleting just created connection"; delete connection; // deleting just created connection because it will be recreated from the // model + qDebug() << "onEstablishedConnection preparing to move"; m_sampleModel->moveParameterizedItem(childView->getItem(), parentView->getItem(), -1, tag); } diff --git a/GUI/coregui/Views/SampleDesigner/IView.cpp b/GUI/coregui/Views/SampleDesigner/IView.cpp index cf4e6606554e936ad44ca035d61ee12e60c7d172..0dd6d1ecb3d46342cfa0392dabad744724241796 100644 --- a/GUI/coregui/Views/SampleDesigner/IView.cpp +++ b/GUI/coregui/Views/SampleDesigner/IView.cpp @@ -57,7 +57,7 @@ void IView::setParameterizedItem(SessionItem *item) m_item->mapper()->setOnItemDestroy( [this](SessionItem *) { m_item = 0; - }); + }, this); update_appearance(); diff --git a/GUI/coregui/Views/SampleDesigner/LayerView.cpp b/GUI/coregui/Views/SampleDesigner/LayerView.cpp index 12993439794eb7bc95eb7d12c311557d6b50e1a7..9fa5432aa8718e7ea81ee5c49f09c73c6358f082 100644 --- a/GUI/coregui/Views/SampleDesigner/LayerView.cpp +++ b/GUI/coregui/Views/SampleDesigner/LayerView.cpp @@ -20,6 +20,7 @@ #include "SessionItem.h" #include "MaterialProperty.h" #include "tooltipdatabase.h" +#include "MultiLayerView.h" #include <QPainter> #include <QStyleOptionGraphicsItem> #include <QDebug> @@ -38,6 +39,16 @@ LayerView::LayerView(QGraphicsItem *parent) addPort(QString(), NodeEditorPort::INPUT, NodeEditorPort::PARTICLE_LAYOUT); } +LayerView::~LayerView() +{ + qDebug() << "LayerView::~LayerView()"; + // FIXME replace with onChildrenChange inside MultiLayerView + MultiLayerView *mlView = dynamic_cast<MultiLayerView *>(parentItem()); + if(mlView) { + mlView->removeLayer(this); + } +} + void LayerView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { diff --git a/GUI/coregui/Views/SampleDesigner/LayerView.h b/GUI/coregui/Views/SampleDesigner/LayerView.h index ca3c72c0bc1cb484040f8728c0787f44612d9636..7c787ce97e878134a467c47c2b04007408de4970 100644 --- a/GUI/coregui/Views/SampleDesigner/LayerView.h +++ b/GUI/coregui/Views/SampleDesigner/LayerView.h @@ -27,7 +27,7 @@ public: enum { TYPE = DesignerHelper::LAYER }; LayerView(QGraphicsItem *parent = 0); - virtual ~LayerView() { } + virtual ~LayerView(); virtual int type() const { return TYPE; } diff --git a/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp b/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp index 7531b584380c9f191734385dfc02bb4d7e24a5f0..723132983b7ad5bd87b7d4dca9af2c180b39e4a5 100644 --- a/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp +++ b/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp @@ -77,8 +77,8 @@ void MultiLayerView::addNewLayer(ILayerView *layer, int row) { qDebug() << "MultiLayerView::addNewLayer(), row" << row; m_layers.insert(row, layer); - connect(layer, SIGNAL(heightChanged()), this, SLOT(updateHeight()) ); - connect(layer, SIGNAL(aboutToBeDeleted()), this, SLOT(onLayerAboutToBeDeleted()) ); + connect(layer, SIGNAL(heightChanged()), this, SLOT(updateHeight()), Qt::UniqueConnection); + connect(layer, SIGNAL(aboutToBeDeleted()), this, SLOT(onLayerAboutToBeDeleted()), Qt::UniqueConnection); layer->setParentItem(this); } @@ -287,3 +287,9 @@ QVariant MultiLayerView::itemChange(QGraphicsItem::GraphicsItemChange change, co { return QGraphicsItem::itemChange(change, value); } + +void MultiLayerView::onSiblingsChange() +{ + qDebug() << "MultiLayerView::onSiblingsChange()"; + +} diff --git a/GUI/coregui/Views/SampleDesigner/MultiLayerView.h b/GUI/coregui/Views/SampleDesigner/MultiLayerView.h index e5387c3bd1a908a3fe4d7b65fe2d7aa68ed63860..7b281480484cea08a88bc795c9be412caee94282 100644 --- a/GUI/coregui/Views/SampleDesigner/MultiLayerView.h +++ b/GUI/coregui/Views/SampleDesigner/MultiLayerView.h @@ -59,6 +59,7 @@ protected: void dragMoveEvent(QGraphicsSceneDragDropEvent *event); const DesignerMimeData *checkDragEvent(QGraphicsSceneDragDropEvent * event); QVariant itemChange(GraphicsItemChange change, const QVariant &value); + virtual void onSiblingsChange(); private: QList<ILayerView *> m_layers; diff --git a/GUI/coregui/Views/SampleDesigner/NodeEditorConnection.cpp b/GUI/coregui/Views/SampleDesigner/NodeEditorConnection.cpp index 17ad23dca110a415baf95a4440adab48d3e100c6..594aef5e1abd6addb0fa605e85eba71edd588406 100644 --- a/GUI/coregui/Views/SampleDesigner/NodeEditorConnection.cpp +++ b/GUI/coregui/Views/SampleDesigner/NodeEditorConnection.cpp @@ -17,32 +17,36 @@ #include "NodeEditorConnection.h" #include "NodeEditorPort.h" #include "ConnectableView.h" - #include <QBrush> #include <QPen> #include <QGraphicsScene> #include <QPainter> -#include <iostream> +#include <QDebug> NodeEditorConnection::NodeEditorConnection(QGraphicsItem *parent, QGraphicsScene *scene) : QGraphicsPathItem(parent) + , m_port1(0) + , m_port2(0) { setFlag(QGraphicsItem::ItemIsSelectable, true); setPen(QPen(Qt::darkGray, 2)); setBrush(Qt::NoBrush); setZValue(-1); - m_port1 = 0; - m_port2 = 0; if(scene) scene->addItem(this); } NodeEditorConnection::~NodeEditorConnection() { - if (m_port1) - m_port1->connections().remove(m_port1->connections().indexOf(this)); - if (m_port2) - m_port2->connections().remove(m_port2->connections().indexOf(this)); + qDebug() << "NodeEditorConnection::~NodeEditorConnection()" << this; + if (m_port1) { + qDebug() << " NodeEditorConnection removeAll from " << m_port1; + m_port1->connections().removeAll(this); + } + if (m_port2) { + qDebug() << " NodeEditorConnection removeAll from " << m_port2; + m_port2->connections().removeAll(this); + } } void NodeEditorConnection::setPos1(const QPointF &p) @@ -64,7 +68,6 @@ void NodeEditorConnection::setPort1(NodeEditorPort *p) setPos1(p->scenePos()); } - void NodeEditorConnection::setPort2(NodeEditorPort *p) { m_port2 = p; @@ -72,7 +75,6 @@ void NodeEditorConnection::setPort2(NodeEditorPort *p) setPos2(p->scenePos()); } - void NodeEditorConnection::updatePosFromPorts() { pos1 = m_port1->scenePos(); diff --git a/GUI/coregui/Views/SampleDesigner/NodeEditorPort.cpp b/GUI/coregui/Views/SampleDesigner/NodeEditorPort.cpp index 016f91c37bac017f315f1c0582830356a6a0b3fc..61c8e148a34052b0aa43d09c1bcecafffaf6d0c1 100644 --- a/GUI/coregui/Views/SampleDesigner/NodeEditorPort.cpp +++ b/GUI/coregui/Views/SampleDesigner/NodeEditorPort.cpp @@ -16,12 +16,12 @@ #include "NodeEditorPort.h" #include "NodeEditorConnection.h" - #include <QGraphicsScene> #include <QFontMetrics> #include <QPen> #include <QPainter> -#include <iostream> +#include <QDebug> + NodeEditorPort::NodeEditorPort(QGraphicsItem *parent, const QString &name, NodeEditorPort::EPortDirection direction, @@ -57,7 +57,8 @@ NodeEditorPort::NodeEditorPort(QGraphicsItem *parent, const QString &name, NodeEditorPort::~NodeEditorPort() { - foreach (NodeEditorConnection *conn, m_connections) { + QVector<NodeEditorConnection *> connections = m_connections; + foreach (NodeEditorConnection *conn, connections) { conn->setSelected(false); delete conn; } diff --git a/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp b/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp index 5f0e9d5829ac003fb10fb04aebc95cba3cccef34..5c4cdd21499102ad882390394e745bd9ac1937ed 100644 --- a/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp +++ b/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp @@ -34,6 +34,11 @@ ParticleLayoutView::ParticleLayoutView(QGraphicsItem *parent) m_roundpar = 3; } +ParticleLayoutView::~ParticleLayoutView() +{ + qDebug() << "ParticleLayoutView::~ParticleLayoutView()"; +} + void ParticleLayoutView::addView(IView *childView, int /* row */) { qDebug() << "ParticleLayoutView::addView() xxx " << m_item->itemName() diff --git a/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.h b/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.h index e7517c318824ae7049c9f99677fc9f7f1313e9a4..e1a12bed7d0d3a7110eb0b8e5cf8effd149e9e69 100644 --- a/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.h +++ b/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.h @@ -25,6 +25,7 @@ public: enum { TYPE = DesignerHelper::PARTICLE_LAYOUT }; ParticleLayoutView(QGraphicsItem *parent = 0); + ~ParticleLayoutView(); int type() const { return TYPE; }