##// END OF EJS Templates
drop of variable inside an existing graph
trabillard -
r875:0e9a8e47fcce
parent child
Show More
@@ -54,6 +54,7 public:
54 54 QUrl imageTemporaryUrl(const QImage &image) const;
55 55
56 56 void setHightlightedDragWidget(VisualizationDragWidget *dragWidget);
57 VisualizationDragWidget *getHightlightedDragWidget() const;
57 58
58 59 private:
59 60 class DragDropHelperPrivate;
@@ -17,7 +17,8 class VisualizationDragDropContainer : public QWidget {
17 17 Q_OBJECT
18 18
19 19 signals:
20 void dropOccured(int dropIndex, const QMimeData *mimeData);
20 void dropOccuredInContainer(int dropIndex, const QMimeData *mimeData);
21 void dropOccuredOnWidget(VisualizationDragWidget *dragWidget, const QMimeData *mimeData);
21 22
22 23 public:
23 24 using AcceptMimeDataFunction = std::function<bool(const QMimeData *mimeData)>;
@@ -85,6 +85,7 private slots:
85 85 void onVariableAboutToBeRemoved(std::shared_ptr<Variable> variable);
86 86
87 87 void dropMimeData(int index, const QMimeData *mimeData);
88 void dropMimeDataOnGraph(VisualizationDragWidget *dragWidget, const QMimeData *mimeData);
88 89 };
89 90
90 91 #endif // SCIQLOP_VISUALIZATIONZONEWIDGET_H
@@ -281,6 +281,11 void DragDropHelper::setHightlightedDragWidget(VisualizationDragWidget *dragWidg
281 281 impl->m_HighlightedDragWidget = dragWidget;
282 282 }
283 283
284 VisualizationDragWidget *DragDropHelper::getHightlightedDragWidget() const
285 {
286 return impl->m_HighlightedDragWidget;
287 }
288
284 289 bool DragDropHelper::checkMimeDataForVisualization(const QMimeData *mimeData,
285 290 VisualizationDragDropContainer *dropContainer)
286 291 {
@@ -264,10 +264,12 void VisualizationDragDropContainer::dragMoveEvent(QDragMoveEvent *event)
264 264
265 265 void VisualizationDragDropContainer::dropEvent(QDropEvent *event)
266 266 {
267 auto &helper = sqpApp->dragDropHelper();
268
267 269 if (impl->acceptMimeData(event->mimeData())) {
268 auto dragWidget = sqpApp->dragDropHelper().getCurrentDragWidget();
270 auto dragWidget = helper.getCurrentDragWidget();
269 271 if (impl->hasPlaceHolder()) {
270 auto &helper = sqpApp->dragDropHelper();
272 // drop where the placeHolder is located
271 273
272 274 auto droppedIndex = impl->m_Layout->indexOf(&helper.placeHolder());
273 275
@@ -287,13 +289,22 void VisualizationDragDropContainer::dropEvent(QDropEvent *event)
287 289
288 290 helper.removePlaceHolder();
289 291
290 emit dropOccured(droppedIndex, event->mimeData());
292 emit dropOccuredInContainer(droppedIndex, event->mimeData());
291 293 }
292 else {
293 qCWarning(LOG_VisualizationDragDropContainer())
294 << tr("VisualizationDragDropContainer::dropEvent, couldn't drop because the "
295 "placeHolder is not found.");
296 // Q_ASSERT(false);
294 else if (helper.getHightlightedDragWidget()) {
295 // drop on the highlighted widget
296
297 auto canMerge = impl->allowMergeMimeData(event->mimeData());
298 if (canMerge) {
299 event->acceptProposedAction();
300 emit dropOccuredOnWidget(helper.getHightlightedDragWidget(), event->mimeData());
301 }
302 else {
303 qCWarning(LOG_VisualizationDragDropContainer())
304 << tr("VisualizationDragDropContainer::dropEvent, dropping on a widget, but "
305 "the merge is forbidden.");
306 Q_ASSERT(false);
307 }
297 308 }
298 309 }
299 310 else {
@@ -70,7 +70,7 VisualizationTabWidget::VisualizationTabWidget(const QString &name, QWidget *par
70 70
71 71 ui->dragDropContainer->setAcceptedMimeTypes(
72 72 {MIME_TYPE_GRAPH, MIME_TYPE_ZONE, MIME_TYPE_VARIABLE_LIST});
73 connect(ui->dragDropContainer, &VisualizationDragDropContainer::dropOccured, this,
73 connect(ui->dragDropContainer, &VisualizationDragDropContainer::dropOccuredInContainer, this,
74 74 &VisualizationTabWidget::dropMimeData);
75 75 ui->dragDropContainer->setAcceptMimeDataFunction([this](auto mimeData) {
76 76 return sqpApp->dragDropHelper().checkMimeDataForVisualization(mimeData,
@@ -91,8 +91,11 VisualizationZoneWidget::VisualizationZoneWidget(const QString &name, QWidget *p
91 91 return sqpApp->dragDropHelper().checkMimeDataForVisualization(mimeData,
92 92 ui->dragDropContainer);
93 93 });
94 connect(ui->dragDropContainer, &VisualizationDragDropContainer::dropOccured, this,
94
95 connect(ui->dragDropContainer, &VisualizationDragDropContainer::dropOccuredInContainer, this,
95 96 &VisualizationZoneWidget::dropMimeData);
97 connect(ui->dragDropContainer, &VisualizationDragDropContainer::dropOccuredOnWidget, this,
98 &VisualizationZoneWidget::dropMimeDataOnGraph);
96 99
97 100 // 'Close' options : widget is deleted when closed
98 101 setAttribute(Qt::WA_DeleteOnClose);
@@ -381,6 +384,31 void VisualizationZoneWidget::dropMimeData(int index, const QMimeData *mimeData)
381 384 }
382 385 }
383 386
387 void VisualizationZoneWidget::dropMimeDataOnGraph(VisualizationDragWidget *dragWidget,
388 const QMimeData *mimeData)
389 {
390 auto graphWidget = qobject_cast<VisualizationGraphWidget *>(dragWidget);
391 if (!graphWidget) {
392 qCWarning(LOG_VisualizationZoneWidget())
393 << tr("VisualizationZoneWidget::dropMimeDataOnGraph, dropping in an unknown widget, "
394 "drop aborted");
395 Q_ASSERT(false);
396 return;
397 }
398
399 if (mimeData->hasFormat(MIME_TYPE_VARIABLE_LIST)) {
400 auto variables = sqpApp->variableController().variablesForMimeData(
401 mimeData->data(MIME_TYPE_VARIABLE_LIST));
402 for (const auto &var : variables) {
403 graphWidget->addVariable(var, graphWidget->graphRange());
404 }
405 }
406 else {
407 qCWarning(LOG_VisualizationZoneWidget())
408 << tr("VisualizationZoneWidget::dropMimeDataOnGraph, unknown MIME data received.");
409 }
410 }
411
384 412 void VisualizationZoneWidget::VisualizationZoneWidgetPrivate::dropGraph(
385 413 int index, VisualizationZoneWidget *zoneWidget)
386 414 {
General Comments 0
You need to be logged in to leave comments. Login now