@@ -174,7 +174,7 void DataSourceController::finalize() | |||||
174 |
|
174 | |||
175 | void DataSourceController::requestVariable(const QVariantHash &productData) |
|
175 | void DataSourceController::requestVariable(const QVariantHash &productData) | |
176 | { |
|
176 | { | |
177 |
|
|
177 | auto sourceItem = impl->findDataSourceItem(productData); | |
178 |
|
178 | |||
179 | if (sourceItem) { |
|
179 | if (sourceItem) { | |
180 | auto sourceName = sourceItem->rootItem().name(); |
|
180 | auto sourceName = sourceItem->rootItem().name(); |
@@ -131,8 +131,7 DataSourceItem *DataSourceItem::findItem(const QVariantHash &data, bool recursiv | |||||
131 | } |
|
131 | } | |
132 |
|
132 | |||
133 | if (recursive) { |
|
133 | if (recursive) { | |
134 |
|
|
134 | if (auto foundItem = child->findItem(data, true)) { | |
135 | if (foundItem) { |
|
|||
136 | return foundItem; |
|
135 | return foundItem; | |
137 | } |
|
136 | } | |
138 | } |
|
137 | } |
@@ -312,7 +312,7 bool VariableModel::canDropMimeData(const QMimeData *data, Qt::DropAction action | |||||
312 | bool VariableModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, |
|
312 | bool VariableModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, | |
313 | const QModelIndex &parent) |
|
313 | const QModelIndex &parent) | |
314 | { |
|
314 | { | |
315 |
|
|
315 | auto dropDone = false; | |
316 |
|
316 | |||
317 | if (data->hasFormat(MIME_TYPE_PRODUCT_LIST)) { |
|
317 | if (data->hasFormat(MIME_TYPE_PRODUCT_LIST)) { | |
318 | QDataStream stream(data->data(MIME_TYPE_PRODUCT_LIST)); |
|
318 | QDataStream stream(data->data(MIME_TYPE_PRODUCT_LIST)); |
@@ -149,6 +149,9 struct DragDropHelper::DragDropHelperPrivate { | |||||
149 |
|
149 | |||
150 | VisualizationDragWidget *m_HighlightedDragWidget = nullptr; |
|
150 | VisualizationDragWidget *m_HighlightedDragWidget = nullptr; | |
151 |
|
151 | |||
|
152 | QMetaObject::Connection m_DragWidgetDestroyedConnection; | |||
|
153 | QMetaObject::Connection m_HighlightedWidgetDestroyedConnection; | |||
|
154 | ||||
152 | explicit DragDropHelperPrivate() |
|
155 | explicit DragDropHelperPrivate() | |
153 | : m_PlaceHolder{std::make_unique<QWidget>()}, |
|
156 | : m_PlaceHolder{std::make_unique<QWidget>()}, | |
154 | m_DragDropScroller{std::make_unique<DragDropScroller>()} |
|
157 | m_DragDropScroller{std::make_unique<DragDropScroller>()} | |
@@ -194,6 +197,18 void DragDropHelper::resetDragAndDrop() | |||||
194 |
|
197 | |||
195 | void DragDropHelper::setCurrentDragWidget(VisualizationDragWidget *dragWidget) |
|
198 | void DragDropHelper::setCurrentDragWidget(VisualizationDragWidget *dragWidget) | |
196 | { |
|
199 | { | |
|
200 | if (impl->m_CurrentDragWidget) { | |||
|
201 | ||||
|
202 | QObject::disconnect(impl->m_DragWidgetDestroyedConnection); | |||
|
203 | } | |||
|
204 | ||||
|
205 | if (dragWidget) { | |||
|
206 | // ensures the impl->m_CurrentDragWidget is reset when the widget is destroyed | |||
|
207 | impl->m_DragWidgetDestroyedConnection | |||
|
208 | = QObject::connect(dragWidget, &VisualizationDragWidget::destroyed, | |||
|
209 | [this]() { impl->m_CurrentDragWidget = nullptr; }); | |||
|
210 | } | |||
|
211 | ||||
197 | impl->m_CurrentDragWidget = dragWidget; |
|
212 | impl->m_CurrentDragWidget = dragWidget; | |
198 | } |
|
213 | } | |
199 |
|
214 | |||
@@ -251,12 +266,19 void DragDropHelper::setHightlightedDragWidget(VisualizationDragWidget *dragWidg | |||||
251 | { |
|
266 | { | |
252 | if (impl->m_HighlightedDragWidget) { |
|
267 | if (impl->m_HighlightedDragWidget) { | |
253 | impl->m_HighlightedDragWidget->highlightForMerge(false); |
|
268 | impl->m_HighlightedDragWidget->highlightForMerge(false); | |
|
269 | QObject::disconnect(impl->m_HighlightedWidgetDestroyedConnection); | |||
254 | } |
|
270 | } | |
255 |
|
271 | |||
256 | if (dragWidget) { |
|
272 | if (dragWidget) { | |
257 | impl->m_HighlightedDragWidget = dragWidget; |
|
273 | dragWidget->highlightForMerge(true); | |
258 | impl->m_HighlightedDragWidget->highlightForMerge(true); |
|
274 | ||
|
275 | // ensures the impl->m_HighlightedDragWidget is reset when the widget is destroyed | |||
|
276 | impl->m_DragWidgetDestroyedConnection | |||
|
277 | = QObject::connect(dragWidget, &VisualizationDragWidget::destroyed, | |||
|
278 | [this]() { impl->m_HighlightedDragWidget = nullptr; }); | |||
259 | } |
|
279 | } | |
|
280 | ||||
|
281 | impl->m_HighlightedDragWidget = dragWidget; | |||
260 | } |
|
282 | } | |
261 |
|
283 | |||
262 | bool DragDropHelper::checkMimeDataForVisualization(const QMimeData *mimeData, |
|
284 | bool DragDropHelper::checkMimeDataForVisualization(const QMimeData *mimeData, |
@@ -75,10 +75,7 struct VisualizationDragDropContainer::VisualizationDragDropContainerPrivate { | |||||
75 |
|
75 | |||
76 | bool cursorIsInContainer(QWidget *container) const |
|
76 | bool cursorIsInContainer(QWidget *container) const | |
77 | { |
|
77 | { | |
78 | auto adustNum = 18; // to be safe, in case of scrollbar on the side |
|
78 | return container->isAncestorOf(sqpApp->widgetAt(QCursor::pos())); | |
79 | auto containerRect = QRect(QPoint(), container->contentsRect().size()) |
|
|||
80 | .adjusted(adustNum, adustNum, -adustNum, -adustNum); |
|
|||
81 | return containerRect.contains(container->mapFromGlobal(QCursor::pos())); |
|
|||
82 | } |
|
79 | } | |
83 |
|
80 | |||
84 | int countDragWidget(const QWidget *parent) const |
|
81 | int countDragWidget(const QWidget *parent) const | |
@@ -171,6 +168,10 void VisualizationDragDropContainer::startDrag(VisualizationDragWidget *dragWidg | |||||
171 | helper.insertPlaceHolder(impl->m_Layout, dragWidgetIndex); |
|
168 | helper.insertPlaceHolder(impl->m_Layout, dragWidgetIndex); | |
172 | dragWidget->setVisible(false); |
|
169 | dragWidget->setVisible(false); | |
173 | } |
|
170 | } | |
|
171 | else { | |||
|
172 | // The drag starts directly outside the drop zone | |||
|
173 | // do not add the placeHolder | |||
|
174 | } | |||
174 |
|
175 | |||
175 | // Note: The exec() is blocking on windows but not on linux and macOS |
|
176 | // Note: The exec() is blocking on windows but not on linux and macOS | |
176 | drag->exec(Qt::MoveAction | Qt::CopyAction); |
|
177 | drag->exec(Qt::MoveAction | Qt::CopyAction); |
General Comments 0
You need to be logged in to leave comments.
Login now