Files
qt5-legatus-legacy/Lts/Viewer/SituationMap/Rubberbands/event_dispatcher.h
T
2026-08-13 18:33:10 +02:00

141 lines
8.0 KiB
Objective-C
Executable File

/**
**
** @RDE_HEADER@
** Event Dispatcher for Qt5 to handle mouse and keyboard event
** $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 .........:
**
** 28.04.2003, JT : First edition for use with Qt4 in START Feature Editor fee
** 25.03.2015, JT : Refactoring for use with Qt5
**
** -----------------------------------------------------------------------------------------------
*/
#pragma once
#include "abstract_event_dispatcher.h"
class QGestureEvent;
class QWheelEvent;
namespace SituationMap { namespace RB
{
/**
@class EventDispatcher event_dispatcher.h
@brief Event filter that handles events when a rubberband it active.
Implements class \c AbstractEventDispatcher to manage event handling for rubberbands. Following events are handled:
| Input-Event | Interface Function | Description |
| :--------------------------------------------- | : ----------------- | : ------------------------------------------------------------------------------------------------------ |
| Mouse move without any modifier | moveAction | Move Cursor or preview |
| Mouse move with pressed left button | movePickedAction | Move selected items. If movePickedAction == false redirect to \c EventMouseNavigator for panning of map. |
| Mouse move with pressed middle button | | Redirect to \c EventMouseNavigator for panning of map |
| Mouse wheel | | Redirect to \c EventMouseNavigator for zooming of map |
| Left mouse button press | selectAction | Do selection of single item or panning of map. |
| Left mouse button press with pressed SHIFT key | multiSelectAction | Do selection of multiple items. |
| Left mouse button release | setCoordinateAction | Set final coordinate to selected items and deselects item. |
| Double click left mouse button | completeStateAction | Finish input. |
| Right mouse button release | contextMenuAction | Show context menu. |
| Key release CTRL-Z | undoMenuAction | Undo last left mouse button click if possible. |
| Key release Delete | deleteMenuAction | Delete selected item. |
| Key release ESC | abortAction | Abort rubberband without saving data. The rubberband emits the abort signal. |
| Key release RETURN | applyAndEndAction | Finish rubberband. The rubberband emits the apply signal. |
| Key release UP | moveAction | Moves 1 pixel up. |
| Key release DOWN | moveAction | Moves 1 pixel down. |
| Key release LEFT | moveAction | Moves 1 pixel left. |
| Key release RIGHT | moveAction | Moves 1 pixel right. |
| Key release UP with SHIFT key pressed | moveAction | Moves 10 pixel up. |
| Key release DOWN with SHIFT key pressed | moveAction | Moves 10 pixel down. |
| Key release LEFT with SHIFT key pressed | moveAction | Moves 10 pixel left. |
| Key release RIGHT with SHIFT key pressed | moveAction | Moves 10 pixel right. |
@see AbstractEventDispatcher, EventDelegater, EventMouseNavigator,
Rubberband, RubberbandPointFeature, RubberbandPointCluster,
RubberbandMultiPointFeature, RubberbandCorridor, RubberbandRectangle, RubberbandEllipse,
EventMouseNavigator
*/
class EventDispatcher final : public AbstractEventDispatcher
{
friend class RubberbandBase;
Q_OBJECT
public:
/**
@name Construction & Destruction
@{
*/
explicit EventDispatcher( QWidget * getEventsFrom );
explicit EventDispatcher( QWidget * getEventsFrom, EventActionInterface* );
~EventDispatcher() = default;
EventDispatcher(const EventDispatcher &) = delete;
EventDispatcher & operator = (const EventDispatcher &) = delete;
/** @} */
inline void setSnapEnabled(bool) {}
inline bool SnapEnabled() { return _snapEnabled; }
signals:
/**
Signal will be emitted if a mouse move is done (and if event is handled)
*/
void mouseMovedEvent(int windowPosX, int windowPosY);
protected:
bool eventFilter(QObject*, QEvent*) override;
bool eventFilterKey( int key, Qt::KeyboardModifiers mod );
bool eventFilterGesture( QGestureEvent * gestureEvent );
bool eventFilterWheel( QWheelEvent * );
private:
bool onMove (int x, int y, Qt::MouseButtons buttons, Qt::KeyboardModifiers mod); //!< Handle a mouse move event.
bool onPress ( int x, int y, Qt::KeyboardModifiers mod); //!< Handle left mouse button press event.
bool onClick ( int x, int y, Qt::KeyboardModifiers mod); //!< Handle left mouse button release event.
bool onMenuPress ( int x, int y, Qt::KeyboardModifiers mod); //!< Handle right mouse button press event.
bool onMenuClick ( int x, int y, Qt::KeyboardModifiers mod); //!< Handle right mouse button release event.
bool onDoubleClick( int x, int y, Qt::KeyboardModifiers mod); //!< Handle left mouse button double click event.
bool onDoDelete(); //!< Handle del key press event.
bool onDoUndo(); //!< Handle ctrl-c key press event.
bool onDoEscape(); //!< Handle esc key press event.
bool onDoEnd(); //!< Handle enter key press event.
bool _snapEnabled;
uint _snapRatio;
bool _drawRatio;
bool _doubleClickHandled;
bool _leftPressHandled;
}; /* EventDispatcher */
} } /* namespace SituationMap::RB */