DragDropHelper.h
91 lines
| 2.9 KiB
| text/x-c
|
CLexer
r847 | #ifndef SCIQLOP_DRAGDROPHELPER_H | |||
#define SCIQLOP_DRAGDROPHELPER_H | ||||
r840 | ||||
#include <Common/spimpl.h> | ||||
r852 | #include <QLoggingCategory> | |||
r840 | #include <QWidget> | |||
class QVBoxLayout; | ||||
class QScrollArea; | ||||
class VisualizationDragWidget; | ||||
r852 | class VisualizationDragDropContainer; | |||
r840 | class QMimeData; | |||
r852 | Q_DECLARE_LOGGING_CATEGORY(LOG_DragDropHelper) | |||
r843 | ||||
r840 | /** | |||
* @brief Helper class for drag&drop operations. | ||||
r852 | * @note The helper is accessible from the sqpApp singleton and has the same life as the whole | |||
* application (like a controller). But contrary to a controller, it doesn't live in a thread and | ||||
* can interect with the gui. | ||||
* @see SqpApplication | ||||
r840 | */ | |||
r847 | class DragDropHelper { | |||
r840 | public: | |||
static const QString MIME_TYPE_GRAPH; | ||||
static const QString MIME_TYPE_ZONE; | ||||
r887 | enum class PlaceHolderType { Default, Graph, Zone }; | |||
r847 | DragDropHelper(); | |||
virtual ~DragDropHelper(); | ||||
r852 | /// Resets some internal variables. Must be called before any new drag&drop operation. | |||
void resetDragAndDrop(); | ||||
/// Sets the visualization widget currently being drag on the visualization. | ||||
r847 | void setCurrentDragWidget(VisualizationDragWidget *dragWidget); | |||
r852 | ||||
/// Returns the visualization widget currently being drag on the visualization. | ||||
/// Can be null if a new visualization widget is intended to be created by the drag&drop | ||||
/// operation. | ||||
r847 | VisualizationDragWidget *getCurrentDragWidget() const; | |||
r840 | ||||
QWidget &placeHolder() const; | ||||
r887 | void insertPlaceHolder(QVBoxLayout *layout, int index, PlaceHolderType type, | |||
const QString &topLabelText); | ||||
r840 | void removePlaceHolder(); | |||
bool isPlaceHolderSet() const; | ||||
r852 | /// Checks if the specified mime data is valid for a drop in the visualization | |||
bool checkMimeDataForVisualization(const QMimeData *mimeData, | ||||
VisualizationDragDropContainer *dropContainer); | ||||
r847 | void addDragDropScrollArea(QScrollArea *scrollArea); | |||
void removeDragDropScrollArea(QScrollArea *scrollArea); | ||||
r840 | ||||
r847 | QUrl imageTemporaryUrl(const QImage &image) const; | |||
r840 | ||||
r879 | void setHightlightedDragWidget(VisualizationDragWidget *dragWidget); | |||
r881 | VisualizationDragWidget *getHightlightedDragWidget() const; | |||
r879 | ||||
r840 | private: | |||
class DragDropHelperPrivate; | ||||
spimpl::unique_impl_ptr<DragDropHelperPrivate> impl; | ||||
}; | ||||
r852 | /** | |||
* @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<DragDropScrollerPrivate> impl; | ||||
private slots: | ||||
void onTimer(); | ||||
}; | ||||
r847 | #endif // SCIQLOP_DRAGDROPHELPER_H | |||