diff --git a/GUI/coregui/Views/Components/SampleEditor/DesignerMimeData.cpp b/GUI/coregui/Views/Components/SampleEditor/DesignerMimeData.cpp index dbfa2d357855d808588231ffadd00921e0468d61..e02dfe52aa9c6797e1aeb9fcb3eb59a682c5444f 100644 --- a/GUI/coregui/Views/Components/SampleEditor/DesignerMimeData.cpp +++ b/GUI/coregui/Views/Components/SampleEditor/DesignerMimeData.cpp @@ -24,7 +24,6 @@ DesignerMimeData::DesignerMimeData(const QString &entryname, const QString &xmld QByteArray itemData; QDataStream dataStream(&itemData, QIODevice::WriteOnly); dataStream << xmldescr; - //setData("bornagain/"+m_classname, itemData); setData("bornagain/widget", itemData); drag->setPixmap(getPixmap(m_classname)); diff --git a/GUI/coregui/Views/Components/SampleEditor/DesignerMimeData.h b/GUI/coregui/Views/Components/SampleEditor/DesignerMimeData.h index 74855445ab5fc9a758785df894f6e937de40964a..2acabd719d92f23aae5284800dfd70cf14f16daf 100644 --- a/GUI/coregui/Views/Components/SampleEditor/DesignerMimeData.h +++ b/GUI/coregui/Views/Components/SampleEditor/DesignerMimeData.h @@ -27,6 +27,7 @@ private: QString m_entryname; QString m_xmldescr; QString m_classname; + }; #endif // DESIGNERMIMEDATA_H diff --git a/GUI/coregui/Views/Components/SampleEditor/DesignerScene.cpp b/GUI/coregui/Views/Components/SampleEditor/DesignerScene.cpp index 8e2577288258d7b919b7f22e6b793a55953421d6..9769b641fa5890513c1c6d09cb4e511bbe907248 100644 --- a/GUI/coregui/Views/Components/SampleEditor/DesignerScene.cpp +++ b/GUI/coregui/Views/Components/SampleEditor/DesignerScene.cpp @@ -38,7 +38,7 @@ void DesignerScene::createLayerDock() { MultiLayerView *ml = new MultiLayerView(); ml->setColor(Qt::lightGray); - ml->allowDropType(QString("MultiLayerX")); + ml->allowDropType(QString("MultiLayer")); ml->addLayer(new LayerView()); ml->addLayer(new LayerView()); ml->setToolTip(QString("LayerDock")); diff --git a/GUI/coregui/Views/Components/SampleEditor/LayerView.cpp b/GUI/coregui/Views/Components/SampleEditor/LayerView.cpp index d1d4a2c05df66e410821e1e656240c38f4e6b561..b5558f0c772139082600b00457c98fc1050172c7 100644 --- a/GUI/coregui/Views/Components/SampleEditor/LayerView.cpp +++ b/GUI/coregui/Views/Components/SampleEditor/LayerView.cpp @@ -98,12 +98,12 @@ void LayerView::dragMoveEvent(QGraphicsSceneDragDropEvent *event) } -//QVariant LayerView::itemChange(GraphicsItemChange change, const QVariant &value) -// { -// if (change == ItemPositionChange && scene()) { -// //std::cout << "YYY itemChange " << x() << " " << y() << std::endl; -// // value is the new position. -// QPointF newPos = value.toPointF(); +QVariant LayerView::itemChange(GraphicsItemChange change, const QVariant &value) +{ + std::cout << "YYY itemChange " << x() << " " << y() << std::endl; + if (change == ItemPositionChange && scene()) { + // value is the new position. + QPointF newPos = value.toPointF(); // QRectF rect = parentItem()->boundingRect(); // //std::cout << "rect " << rect.x() << " " << rect.y() << " " << rect.width() << " " << rect.height() << std::endl; // rect.setY(rect.y() - boundingRect().height()/2.); @@ -113,62 +113,10 @@ void LayerView::dragMoveEvent(QGraphicsSceneDragDropEvent *event) // // Keep the item inside the scene rect. // newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top()))); // } -// newPos.setX(m_fixed_xpos); -// return newPos; -// } -// return QGraphicsItem::itemChange(change, value); -// } - - -//void ParticleView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) -//{ -// if (QLineF(event->screenPos(), event->buttonDownScreenPos(Qt::LeftButton)) -// .length() < QApplication::startDragDistance()) { -// return; -// } - -// QDrag *drag = new QDrag(event->widget()); -// QMimeData *mime = new QMimeData; -// drag->setMimeData(mime); - -// static int n = 0; -// if (n++ > 2 && (qrand() % 3) == 0) { -// QImage image(":/images/head.png"); -// mime->setImageData(image); - -// drag->setPixmap(QPixmap::fromImage(image).scaled(30, 40)); -// drag->setHotSpot(QPoint(15, 30)); - -// } else { -// mime->setColorData(color); -// mime->setText(QString("#%1%2%3") -// .arg(color.red(), 2, 16, QLatin1Char('0')) -// .arg(color.green(), 2, 16, QLatin1Char('0')) -// .arg(color.blue(), 2, 16, QLatin1Char('0'))); - -// QPixmap pixmap(34, 34); -// pixmap.fill(Qt::white); - -// QPainter painter(&pixmap); -// painter.translate(15, 15); -// painter.setRenderHint(QPainter::Antialiasing); -// paint(&painter, 0, 0); -// painter.end(); - -// pixmap.setMask(pixmap.createHeuristicMask()); - -// drag->setPixmap(pixmap); -// drag->setHotSpot(QPoint(15, 20)); -// } - -// drag->exec(); -// setCursor(Qt::OpenHandCursor); -//} - - -//void ParticleView::mouseReleaseEvent(QGraphicsSceneMouseEvent *) -//{ -// setCursor(Qt::OpenHandCursor); -//} + newPos.setX(m_fixed_xpos); + return newPos; + } + return QGraphicsItem::itemChange(change, value); + } diff --git a/GUI/coregui/Views/Components/SampleEditor/LayerView.h b/GUI/coregui/Views/Components/SampleEditor/LayerView.h index e4bc05fdb1a2449764832a898ac1c84234bfd776..d49dc64634a2b3e130dd824dfa845586416a0139 100644 --- a/GUI/coregui/Views/Components/SampleEditor/LayerView.h +++ b/GUI/coregui/Views/Components/SampleEditor/LayerView.h @@ -24,22 +24,23 @@ public: QRect rect() const { return m_rect; } void setFixedX() { m_fixed_xpos = x(); } + qreal getFixedX() { return m_fixed_xpos; } Q_SIGNALS: void LayerMoved(); protected: - void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - void mousePressEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); -// QVariant itemChange(GraphicsItemChange change, const QVariant &value); + QVariant itemChange(GraphicsItemChange change, const QVariant &value); - void dragEnterEvent(QGraphicsSceneDragDropEvent *event); - void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); - void dropEvent(QGraphicsSceneDragDropEvent *event); - void dragMoveEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event); + virtual void dropEvent(QGraphicsSceneDragDropEvent *event); + virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event); private: QColor m_color; diff --git a/GUI/coregui/Views/Components/SampleEditor/MultiLayerView.cpp b/GUI/coregui/Views/Components/SampleEditor/MultiLayerView.cpp index 1216f9a3ee7904e620f13acbaeba2e5edd3ba759..7e58d7d85a5b8fc41abc4b5b06397fe44a43d8de 100644 --- a/GUI/coregui/Views/Components/SampleEditor/MultiLayerView.cpp +++ b/GUI/coregui/Views/Components/SampleEditor/MultiLayerView.cpp @@ -21,7 +21,7 @@ MultiLayerView::MultiLayerView(QGraphicsItem *parent) - : ISampleView(parent) + : LayerView(parent) , m_color(Qt::blue) , m_rect(0, 0, DesignerHelper::getMultiLayerWidth(), DesignerHelper::getMultiLayerHeight()) { @@ -61,14 +61,17 @@ void MultiLayerView::allowDropType(const QString &name) { void MultiLayerView::addLayer(LayerView *layer, QPointF pos) { + std::cout << "MultiLayerView::addLayer" << std::endl; // adjusting main rectangle othervise item->setPos will not work due to 'LayerView::itemChange' m_rect.setHeight(m_rect.height()+layer->boundingRect().height()); - int xpos = (DesignerHelper::getMultiLayerWidth() - DesignerHelper::getLayerWidth())/2.; + int xpos = (DesignerHelper::getMultiLayerWidth() - layer->boundingRect().width())/2.; layer->setPos(xpos, pos.y()); layer->setFixedX(); connect(layer, SIGNAL(LayerMoved()), this, SLOT(updateHeight()) ); + connect(layer, SIGNAL(heightChanged()), this, SLOT(updateHeight()) ); layer->setParentItem(this); + //emit heightChanged(); } @@ -99,6 +102,7 @@ void MultiLayerView::updateHeight() m_rect.setHeight(total_height); update(); + emit heightChanged(); } @@ -127,7 +131,7 @@ QRectF MultiLayerView::boundingRect() const void MultiLayerView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(widget); - painter->setPen(Qt::blue); + painter->setPen(m_color); if (option->state & (QStyle::State_Selected | QStyle::State_HasFocus)) { painter->setPen(Qt::DashLine); } @@ -154,10 +158,20 @@ void MultiLayerView::dragLeaveEvent(QGraphicsSceneDragDropEvent *event) void MultiLayerView::dropEvent(QGraphicsSceneDragDropEvent *event) { + std::cout << "MultiLayerView::dropEvent() -> " << std::endl; + const DesignerMimeData *mimeData = checkDragEvent(event); if (mimeData) { - addLayer(new LayerView(), event->pos()); - update(); + LayerView *layer(0); + if(mimeData->getClassName() == QString("Layer") ) layer = new LayerView(); + if(mimeData->getClassName() == QString("MultiLayer") ) layer = new MultiLayerView(); + if(layer){ + std::cout << "MultiLayerView::dropEvent() -> adding layer or multilayer" << std::endl; + addLayer(layer, event->pos()); + update(); + } else { + std::cout << "MultiLayerView::dropEvent() -> Error. Can't create object " << mimeData->getClassName().toStdString() << std::endl; + } } } @@ -173,40 +187,23 @@ void MultiLayerView::dragMoveEvent(QGraphicsSceneDragDropEvent *event) } -void MultiLayerView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) -{ - std::cout << "MultiLayerView::mouseMoveEvent -> " << x() << " " << y() << std::endl; - QGraphicsObject::mouseMoveEvent(event); -} - - -void MultiLayerView::mousePressEvent(QGraphicsSceneMouseEvent *event) -{ - std::cout << "MultiLayerView::mousePressEvent -> " << x() << " " << y() << std::endl; - QGraphicsObject::mousePressEvent(event); -} +//void MultiLayerView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +//{ +// std::cout << "MultiLayerView::mouseMoveEvent -> " << x() << " " << y() << std::endl; +// QGraphicsObject::mouseMoveEvent(event); +//} -void MultiLayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) -{ - std::cout << "MultiLayerView::mouseReleaseEvent -> " << x() << " " << y() << std::endl; - QGraphicsObject::mouseReleaseEvent(event); -} +//void MultiLayerView::mousePressEvent(QGraphicsSceneMouseEvent *event) +//{ +// std::cout << "MultiLayerView::mousePressEvent -> " << x() << " " << y() << std::endl; +// QGraphicsObject::mousePressEvent(event); +//} -//const DesignerMimeData *MultiLayerView::checkDragEvent(QGraphicsSceneDragDropEvent * event) +//void MultiLayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) //{ -// const DesignerMimeData *mimeData = qobject_cast<const DesignerMimeData *>(event->mimeData()); -// if (!mimeData) { -// event->ignore(); -// return 0; -// } - -// if(mimeData->hasFormat("widget/Layer")) { -// event->setAccepted(true); -// } else { -// event->setAccepted(false); -// } -// return mimeData; +// std::cout << "MultiLayerView::mouseReleaseEvent -> " << x() << " " << y() << std::endl; +// QGraphicsObject::mouseReleaseEvent(event); //} diff --git a/GUI/coregui/Views/Components/SampleEditor/MultiLayerView.h b/GUI/coregui/Views/Components/SampleEditor/MultiLayerView.h index fc17cf5e2e7394fb9a6138136a799203098cb7bd..95d743f89d67841cbb8af0051d9c34c626cb32fa 100644 --- a/GUI/coregui/Views/Components/SampleEditor/MultiLayerView.h +++ b/GUI/coregui/Views/Components/SampleEditor/MultiLayerView.h @@ -10,10 +10,14 @@ #include "ISampleView.h" #include <QStringList> + class LayerView; class DesignerMimeData; -class MultiLayerView : public ISampleView +#include "LayerView.h" + +//class MultiLayerView : public ISampleView +class MultiLayerView : public LayerView { Q_OBJECT public: @@ -42,9 +46,9 @@ protected: void dropEvent(QGraphicsSceneDragDropEvent *event); void dragMoveEvent(QGraphicsSceneDragDropEvent *event); - void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - void mousePressEvent(QGraphicsSceneMouseEvent *event); - void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); +// void mouseMoveEvent(QGraphicsSceneMouseEvent *event); +// void mousePressEvent(QGraphicsSceneMouseEvent *event); +// void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); const DesignerMimeData *checkDragEvent(QGraphicsSceneDragDropEvent * event); diff --git a/GUI/coregui/Views/Components/SampleEditor/SampleEditor.pri b/GUI/coregui/Views/Components/SampleEditor/SampleEditor.pri index 9c0045902cc463e444259ba67d2b0cc684fb3a49..a746bd3d3a92a07557662bb82e4b55562e3b5b21 100644 --- a/GUI/coregui/Views/Components/SampleEditor/SampleEditor.pri +++ b/GUI/coregui/Views/Components/SampleEditor/SampleEditor.pri @@ -12,8 +12,7 @@ SOURCES += \ Views/Components/SampleEditor/DesignerScene.cpp \ Views/Components/SampleEditor/DesignerView.cpp \ Views/Components/SampleEditor/ISampleView.cpp \ - Views/Components/SampleEditor/DesignerWidgetFactory.cpp \ - Views/Components/SampleEditor/LayerDockView.cpp + Views/Components/SampleEditor/DesignerWidgetFactory.cpp HEADERS += \ Views/Components/SampleEditor/SampleEditor.h \ @@ -25,8 +24,7 @@ HEADERS += \ Views/Components/SampleEditor/DesignerMimeData.h \ Views/Components/SampleEditor/DesignerScene.h \ Views/Components/SampleEditor/DesignerView.h \ - Views/Components/SampleEditor/DesignerWidgetFactory.h \ - Views/Components/SampleEditor/LayerDockView.h + Views/Components/SampleEditor/DesignerWidgetFactory.h RESOURCES += Views/Components/SampleEditor/SampleEditor.qrc