#ifndef SCIQLOP_DRAGDROPHELPER_H #define SCIQLOP_DRAGDROPHELPER_H #include #include class QVBoxLayout; class QScrollArea; class VisualizationDragWidget; class QMimeData; /** * @brief Event filter class which manage the scroll of QScrollArea during a drag&drop operation. * @note A QScrollArea inside an other QScrollArea is not fully supported. */ class DragDropScroller : public QObject { Q_OBJECT public: DragDropScroller(QObject *parent = nullptr); void addScrollArea(QScrollArea *scrollArea); void removeScrollArea(QScrollArea *scrollArea); protected: bool eventFilter(QObject *obj, QEvent *event); private: class DragDropScrollerPrivate; spimpl::unique_impl_ptr impl; private slots: void onTimer(); }; /** * @brief Helper class for drag&drop operations. */ class DragDropHelper { public: static const QString MIME_TYPE_GRAPH; static const QString MIME_TYPE_ZONE; DragDropHelper(); virtual ~DragDropHelper(); void setCurrentDragWidget(VisualizationDragWidget *dragWidget); VisualizationDragWidget *getCurrentDragWidget() const; QWidget &placeHolder() const; void insertPlaceHolder(QVBoxLayout *layout, int index); void removePlaceHolder(); bool isPlaceHolderSet() const; void addDragDropScrollArea(QScrollArea *scrollArea); void removeDragDropScrollArea(QScrollArea *scrollArea); QUrl imageTemporaryUrl(const QImage &image) const; private: class DragDropHelperPrivate; spimpl::unique_impl_ptr impl; }; #endif // SCIQLOP_DRAGDROPHELPER_H