##// END OF EJS Templates
Integrates the drag&drop classes into the existing visualization classes.
Integrates the drag&drop classes into the existing visualization classes.

File last commit:

r840:deba06e71141
r842:5f082699d3e8
Show More
DragDropHelper.cpp
105 lines | 2.9 KiB | text/x-c | CppLexer
/ gui / src / DragDropHelper.cpp
#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);
}