Files
qt5-legatus-legacy/Lts/Plugins/PlanEditor/drop_event_manager.h
T
2026-08-13 18:33:10 +02:00

195 lines
5.3 KiB
C++
Executable File

/**
**
** @RDE_HEADER@
** drop_event_manager.h
** $Id$
** $HeadURL$
** $Author$
**
** -----------------------------------------------------------------------------------------------
**
** Hardware-Environment: Intel-PC
** Software-Environment: Windows 7, Qt 5.4. ArcGIS 10.2.5
**
** Language ........: C++ 11
**
** -----------------------------------------------------------------------------------------------
**
** Author ...........: Jörg Turla, SPD G, Tel. 3132
**
** -----------------------------------------------------------------------------------------------
**
** Notes .........:
**
** 13.06.2016, JT : First edition for use with Qt5
**
** -----------------------------------------------------------------------------------------------
*/
#pragma once
#include "plan_editor.h"
#include <Map/drop_event_manager.h>
#include <LtsWidgets/lts_drop_handler.h>
#include <QtCore/QMimeData>
namespace PlanEditor
{
class DropEventManager : public SituationMap::DropEventManager
{
public:
DropEventManager() = default;
virtual ~DropEventManager()
{
// delete all dropHandler
qDeleteAll(m_dropHandlerMap);
} // ~DropEventManager()
QString mimeFormatString() const override { return QLatin1String("DropHandlerPtr"); }
void manageDrop(QPoint windowPos, const QMimeData *mimeData) override
{
bool ok = false;
qulonglong dropHandlerAddress = mimeData->data(mimeFormatString()).toULongLong(&ok);
if (ok)
{
// qWarning() << __FUNCTION__ << "key : " << dropHandlerAddress << "mimeData :" << mimeData->data( QLatin1String("DropHandlerPtr") );
auto dropHandler = m_dropHandlerMap.find(dropHandlerAddress);
if (dropHandler != m_dropHandlerMap.end())
(*dropHandler)->doDrop(windowPos.x(), windowPos.y(), mimeData);
}
} // manageDrop( const QMimeData * mimeData )
qulonglong add(LtsWidgets::LtsDropHandler *dropHandler)
{
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* DropEvewntManager get ownership of dropHandler and delete them in dtor.
* See dtor above.
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
qulonglong key = qulonglong(dropHandler);
if (dropHandler)
{
// qWarning() << __FUNCTION__ << "key : " << key;
m_dropHandlerMap[key] = dropHandler;
}
return key;
} // add(LtsWidgets::LtsDropHandler * dropHandler)
protected:
QHash<qulonglong, LtsWidgets::LtsDropHandler *> m_dropHandlerMap;
}; // DropEventManager
class DropCreateLine : public LtsWidgets::LtsDropHandler
{
PlanEditor *m_planEditor;
PlanEditor::InternalData *m_planEditorInternal;
public:
DropCreateLine(PlanEditor *planEditor, PlanEditor::InternalData *planEditorInternal)
: LtsWidgets::LtsDropHandler()
, m_planEditor(planEditor)
, m_planEditorInternal(planEditorInternal) {;}
virtual ~DropCreateLine() = default;
void doDrop(int x, int y, const QMimeData *mimeData) const override;
}; // DropCreateLine
class DropCreatePolyLine : public LtsWidgets::LtsDropHandler
{
PlanEditor *m_planEditor;
PlanEditor::InternalData *m_planEditorInternal;
bool m_smooth;
public:
DropCreatePolyLine(PlanEditor *planEditor, PlanEditor::InternalData *planEditorInternal, bool smooth = false)
: LtsWidgets::LtsDropHandler()
, m_planEditor(planEditor)
, m_planEditorInternal(planEditorInternal)
, m_smooth(smooth) {;}
virtual ~DropCreatePolyLine() = default;
void doDrop(int x, int y, const QMimeData *mimeData) const override;
}; // DropCreatePolyLine
class DropCreatePolygon : public LtsWidgets::LtsDropHandler
{
PlanEditor *m_planEditor;
PlanEditor::InternalData *m_planEditorInternal;
bool m_smooth;
public:
DropCreatePolygon(PlanEditor *planEditor, PlanEditor::InternalData *planEditorInternal, bool smooth = false)
: LtsWidgets::LtsDropHandler()
, m_planEditor(planEditor)
, m_planEditorInternal(planEditorInternal)
, m_smooth(smooth) {;}
virtual ~DropCreatePolygon() = default;
void doDrop(int x, int y, const QMimeData *mimeData) const override;
}; // DropCreatePolygon
class DropCreateRectangle : public LtsWidgets::LtsDropHandler
{
PlanEditor *m_planEditor;
PlanEditor::InternalData *m_planEditorInternal;
bool m_ellipse;
public:
DropCreateRectangle(PlanEditor *planEditor, PlanEditor::InternalData *planEditorInternal, bool ellipse = false)
: LtsWidgets::LtsDropHandler()
, m_planEditor(planEditor)
, m_planEditorInternal(planEditorInternal)
, m_ellipse(ellipse) {;}
virtual ~DropCreateRectangle() = default;
void doDrop(int x, int y, const QMimeData *mimeData) const override;
}; // DropCreateRectangle
class DropCreateTextLine : public LtsWidgets::LtsDropHandler
{
PlanEditor *m_planEditor;
PlanEditor::InternalData *m_planEditorInternal;
public:
DropCreateTextLine(PlanEditor *planEditor, PlanEditor::InternalData *planEditorInternal)
: LtsWidgets::LtsDropHandler()
, m_planEditor(planEditor)
, m_planEditorInternal(planEditorInternal) {;}
virtual ~DropCreateTextLine() = default;
void doDrop(int x, int y, const QMimeData *mimeData) const override;
}; // DropCreateTextLine
} // namespace PlanEditor