DragDropHelper.cpp
105 lines
| 2.9 KiB
| text/x-c
|
CppLexer
r840 | #include "DragDropHelper.h" | |||
#include "Visualization/VisualizationDragWidget.h" | ||||
#include "SqpApplication.h" | ||||
#include <QDragMoveEvent> | ||||
#include <QDragEnterEvent> | ||||
#include <QScrollBar> | ||||
#include <QScrollArea> | ||||
#include <QVBoxLayout> | ||||
#include <QTimer> | ||||
#include <QDir> | ||||
const QString DragDropHelper::MIME_TYPE_GRAPH = "scqlop/graph"; | ||||
const QString DragDropHelper::MIME_TYPE_ZONE = "scqlop/zone"; | ||||
struct DragDropHelper::DragDropHelperPrivate { | ||||
VisualizationDragWidget* m_currentDragWidget = nullptr; | ||||
std::unique_ptr<QWidget> m_placeHolder = nullptr; | ||||
std::unique_ptr<DragDropScroller> m_dragDropScroller = nullptr; | ||||
QString m_imageTempUrl; //Temporary file for image url generated by the drag & drop. Not using QTemporaryFile to have a name which is not generated. | ||||
explicit DragDropHelperPrivate() | ||||
: m_placeHolder{std::make_unique<QWidget>()}, | ||||
m_dragDropScroller{std::make_unique<DragDropScroller>()} | ||||
{ | ||||
m_placeHolder->setStyleSheet("background-color: #BBD5EE; border:2px solid #2A7FD4"); | ||||
sqpApp->installEventFilter(m_dragDropScroller.get()); | ||||
m_imageTempUrl = QDir::temp().absoluteFilePath("Scqlop_graph.png"); | ||||
} | ||||
void preparePlaceHolder() const | ||||
{ | ||||
if (m_currentDragWidget) | ||||
{ | ||||
m_placeHolder->setMinimumSize(m_currentDragWidget->size()); | ||||
m_placeHolder->setSizePolicy(m_currentDragWidget->sizePolicy()); | ||||
} | ||||
else | ||||
{ | ||||
m_placeHolder->setMinimumSize(200, 200); | ||||
} | ||||
} | ||||
}; | ||||
DragDropHelper::DragDropHelper() : | ||||
impl{spimpl::make_unique_impl<DragDropHelperPrivate>()} | ||||
{ | ||||
} | ||||
DragDropHelper::~DragDropHelper() | ||||
{ | ||||
QFile::remove(impl->m_imageTempUrl); | ||||
} | ||||
void DragDropHelper::setCurrentDragWidget(VisualizationDragWidget *dragWidget) | ||||
{ | ||||
impl->m_currentDragWidget = dragWidget; | ||||
} | ||||
VisualizationDragWidget *DragDropHelper::getCurrentDragWidget() const | ||||
{ | ||||
return impl->m_currentDragWidget; | ||||
} | ||||
QWidget& DragDropHelper::placeHolder() const | ||||
{ | ||||
return *impl->m_placeHolder; | ||||
} | ||||
void DragDropHelper::insertPlaceHolder(QVBoxLayout *layout, int index) | ||||
{ | ||||
removePlaceHolder(); | ||||
impl->preparePlaceHolder(); | ||||
layout->insertWidget(index, impl->m_placeHolder.get()); | ||||
impl->m_placeHolder->show(); | ||||
} | ||||
void DragDropHelper::removePlaceHolder() | ||||
{ | ||||
auto parentWidget = impl->m_placeHolder->parentWidget(); | ||||
if (parentWidget) | ||||
{ | ||||
parentWidget->layout()->removeWidget(impl->m_placeHolder.get()); | ||||
impl->m_placeHolder->setParent(nullptr); | ||||
impl->m_placeHolder->hide(); | ||||
} | ||||
} | ||||
bool DragDropHelper::isPlaceHolderSet() const | ||||
{ | ||||
return impl->m_placeHolder->parentWidget(); | ||||
} | ||||
QUrl DragDropHelper::imageTemporaryUrl(const QImage& image) const | ||||
{ | ||||
image.save(impl->m_imageTempUrl); | ||||
return QUrl::fromLocalFile(impl->m_imageTempUrl); | ||||
} | ||||