Mapper  0.9.0
API documentation
Public Types | Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
OpenOrienteering::MapEditorTool Class Referenceabstract

An abstract tool for editing a map. More...

#include <tool.h>

Inheritance diagram for OpenOrienteering::MapEditorTool:
Inheritance graph
[legend]
Collaboration diagram for OpenOrienteering::MapEditorTool:
Collaboration graph
[legend]

Public Types

enum  Type {
  EditPoint = 1, EditLine = 2, DrawPoint = 3, DrawPath = 4,
  DrawCircle = 5, DrawRectangle = 6, DrawText = 7, DrawFreehand = 8,
  Pan = 9, Scribble = 10, Other = 0
}
 Types of tool. More...
 

Public Member Functions

 MapEditorTool (MapEditorController *editor, Type type, QAction *tool_action=nullptr)
 Constructs a new MapEditorTool. More...
 
 ~MapEditorTool () override
 Destructs the MapEditorTool. More...
 
virtual void init ()
 Performs initialization when the tool becomes active. More...
 
virtual void deactivate ()
 Makes this tool inactive in the editor. More...
 
virtual void switchToDefaultDrawTool (const Symbol *symbol) const
 Switch to a default draw tool for the given symbol. More...
 
virtual const QCursorgetCursor () const =0
 Returns the cursor which should be used for the tool in the editor windows. More...
 
virtual void draw (QPainter *painter, MapWidget *widget)
 Draws the tool's visualisation for a map widget. More...
 
virtual bool mousePressEvent (QMouseEvent *event, const MapCoordF &map_coord, MapWidget *widget)
 
virtual bool mouseMoveEvent (QMouseEvent *event, const MapCoordF &map_coord, MapWidget *widget)
 
virtual bool mouseReleaseEvent (QMouseEvent *event, const MapCoordF &map_coord, MapWidget *widget)
 
virtual bool mouseDoubleClickEvent (QMouseEvent *event, const MapCoordF &map_coord, MapWidget *widget)
 
virtual void leaveEvent (QEvent *event)
 
virtual bool keyPressEvent (QKeyEvent *event)
 
virtual bool keyReleaseEvent (QKeyEvent *event)
 
virtual void focusOutEvent (QFocusEvent *event)
 
virtual bool inputMethodEvent (QInputMethodEvent *event)
 
virtual QVariant inputMethodQuery (Qt::InputMethodQuery property, const QVariant &argument) const
 
virtual bool gestureEvent (QGestureEvent *event, MapWidget *widget)
 
virtual void gestureStarted ()
 This is called to signal the start of a gesture. More...
 
Type toolType () const
 Returns the type of this tool. More...
 
QActiontoolAction () const
 Returns the action which represents this tool. More...
 
bool usesTouchCursor () const
 Returns whether to use the touch helper cursor for this tool. More...
 
Mapmap () const
 Returns the map being edited. More...
 
MapWidgetmapWidget () const
 Returns the map widget being operated on. More...
 
MainWindowmainWindow () const
 Returns the main window the controller is attached to. More...
 
QWidgetwindow () const
 Returns the main window the controller is attached to as a QWidget. More...
 
bool drawOnRightClickEnabled () const
 Returns true if Mapper is configured to finish drawing on right click. More...
 
bool editingInProgress () const
 Returns whether an editing operation is currently in progress. More...
 
virtual void finishEditing ()
 Finishes editing if it is currently in progress. More...
 
bool isDrawTool () const
 Returns true if the given tool is for drawing new objects. More...
 
const PointHandlespointHandles () const
 Returns the point handles utility for this tool. More...
 
unsigned int scaleFactor () const
 The factor by which all drawing shall be scaled. More...
 
qreal clickTolerance () const
 A value representing how close the user must click or hover to select a point. More...
 
int startDragDistance () const
 The number of pixels the mouse has to be moved to start dragging. More...
 
- Public Member Functions inherited from QObject
virtual const QMetaObjectmetaObject () const const
 
 QObject (QObject *parent)
 
virtual ~QObject ()
 
virtual bool event (QEvent *e)
 
virtual bool eventFilter (QObject *watched, QEvent *event)
 
QString objectName () const const
 
void setObjectName (const QString &name)
 
bool isWidgetType () const const
 
bool isWindowType () const const
 
bool signalsBlocked () const const
 
bool blockSignals (bool block)
 
QThreadthread () const const
 
void moveToThread (QThread *targetThread)
 
int startTimer (int interval, Qt::TimerType timerType)
 
int startTimer (std::chrono::milliseconds time, Qt::TimerType timerType)
 
void killTimer (int id)
 
findChild (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegExp &regExp, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegularExpression &re, Qt::FindChildOptions options) const const
 
const QObjectListchildren () const const
 
void setParent (QObject *parent)
 
void installEventFilter (QObject *filterObj)
 
void removeEventFilter (QObject *obj)
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const const
 
bool disconnect (const char *signal, const QObject *receiver, const char *method) const const
 
bool disconnect (const QObject *receiver, const char *method) const const
 
void dumpObjectTree ()
 
void dumpObjectInfo ()
 
void dumpObjectTree () const const
 
void dumpObjectInfo () const const
 
bool setProperty (const char *name, const QVariant &value)
 
QVariant property (const char *name) const const
 
QList< QByteArraydynamicPropertyNames () const const
 
void destroyed (QObject *obj)
 
void objectNameChanged (const QString &objectName)
 
QObjectparent () const const
 
bool inherits (const char *className) const const
 
void deleteLater ()
 
 Q_DISABLE_COPY (Class)
 
 Q_DISABLE_MOVE (Class)
 
 Q_DISABLE_COPY_MOVE (Class)
 
qobject_cast (QObject *object)
 
qobject_cast (const QObject *object)
 
qFindChild (const QObject *obj, const QString &name)
 
QList< T > qFindChildren (const QObject *obj, const QString &name)
 
QList< T > qFindChildren (const QObject *obj, const QRegExp &regExp)
 
 Q_CLASSINFO (Name, Value)
 
 Q_INTERFACES (...)
 
 Q_PROPERTY (...)
 
 Q_ENUMS (...)
 
 Q_FLAGS (...)
 
 Q_ENUM (...)
 
 Q_FLAG (...)
 
 Q_ENUM_NS (...)
 
 Q_FLAG_NS (...)
 
 Q_OBJECT Q_OBJECT
 
 Q_GADGET Q_GADGET
 
 Q_NAMESPACE Q_NAMESPACE
 
 Q_SIGNALS Q_SIGNALS
 
 Q_SIGNAL Q_SIGNAL
 
 Q_SLOTS Q_SLOTS
 
 Q_SLOT Q_SLOT
 
 Q_EMIT Q_EMIT
 
 Q_INVOKABLE Q_INVOKABLE
 
 Q_REVISION Q_REVISION
 
 Q_SET_OBJECT_NAME (Object)
 
 QT_NO_NARROWING_CONVERSIONS_IN_CONNECT QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
 

Static Public Attributes

static const QRgb inactive_color = qRgb(0, 0, 255)
 Color for normal (not active) elements. More...
 
static const QRgb active_color = qRgb(255, 150, 0)
 Color for active elements (which are hovered over by the cursor) More...
 
static const QRgb selection_color = qRgb(210, 0, 229)
 Color for selected elements. More...
 

Protected Member Functions

void useTouchCursor (bool enabled)
 Sets the flag which indicates whether the touch cursor shall be used. More...
 
void setEditingInProgress (bool state)
 Sets a flag which indicates an active editing operation. More...
 
void setStatusBarText (const QString &text)
 Sends text to the window's status bar. More...
 
void drawSelectionBox (QPainter *painter, MapWidget *widget, const MapCoordF &corner1, const MapCoordF &corner2) const
 Draws a selection box for the given corner points. More...
 
MapCoordVector::size_type findHoverPoint (const QPointF &cursor, const MapWidget *widget, const Object *object, bool include_curve_handles, MapCoordF *out_handle_pos=nullptr) const
 Finds and returns the point of the given object over which the cursor hovers. More...
 
bool containsDrawingButtons (Qt::MouseButtons buttons) const
 Checks if the given buttons contain one which controls drawing. More...
 
bool isDrawingButton (Qt::MouseButton button) const
 Checks if the given event was triggered by press or release of a mouse button for drawing. More...
 
- Protected Member Functions inherited from QObject
QObjectsender () const const
 
int senderSignalIndex () const const
 
int receivers (const char *signal) const const
 
bool isSignalConnected (const QMetaMethod &signal) const const
 
virtual void timerEvent (QTimerEvent *event)
 
virtual void childEvent (QChildEvent *event)
 
virtual void customEvent (QEvent *event)
 
virtual void connectNotify (const QMetaMethod &signal)
 
virtual void disconnectNotify (const QMetaMethod &signal)
 

Static Protected Member Functions

static QCursor scaledToScreen (const QCursor &unscaled_cursor)
 Returns a cursor which is scaled to the screen's resolution. More...
 

Protected Attributes

MapEditorController *const editor
 The map editor which uses this tool. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from QObject
QString tr (const char *sourceText, const char *disambiguation, int n)
 
QString trUtf8 (const char *sourceText, const char *disambiguation, int n)
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, Functor functor)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
 
bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method)
 
bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
 
bool disconnect (const QMetaObject::Connection &connection)
 
bool disconnect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
 
- Public Attributes inherited from QObject
typedef QObjectList
 
- Properties inherited from QObject
 objectName
 

Detailed Description

An abstract tool for editing a map.

A map editor tool uses mouse and key input to modify a map.

The given tool_button is unchecked when the tool is destroyed.

When deriving from MapEditorTool, do not make changes on the map editor or window (e.g. status bar text) in the constructor. Another tool might still be active at that point in time! Instead, reimplement the init() method.

This class provides a general but cumbersome interface. If you want to write a simple tool and can live with some limitations, consider using MapEditorToolBase instead.

Member Enumeration Documentation

◆ Type

Types of tool.

Enumerator
EditPoint 
EditLine 
DrawPoint 
DrawPath 
DrawCircle 
DrawRectangle 
DrawText 
DrawFreehand 
Pan 
Scribble 
Other 

Constructor & Destructor Documentation

◆ MapEditorTool()

OpenOrienteering::MapEditorTool::MapEditorTool ( MapEditorController editor,
Type  type,
QAction tool_action = nullptr 
)

Constructs a new MapEditorTool.

Parameters
editorThe MapEditorController in which the tool is used.
typeThe type of the tool. It is safe to use Other if it is not necessary to query for this type somewhere.
tool_actionOptional button which will be unchecked on destruction of this tool.

◆ ~MapEditorTool()

OpenOrienteering::MapEditorTool::~MapEditorTool ( )
override

Destructs the MapEditorTool.

Member Function Documentation

◆ clickTolerance()

qreal OpenOrienteering::MapEditorTool::clickTolerance ( ) const
inline

A value representing how close the user must click or hover to select a point.

◆ containsDrawingButtons()

bool OpenOrienteering::MapEditorTool::containsDrawingButtons ( Qt::MouseButtons  buttons) const
protected

Checks if the given buttons contain one which controls drawing.

To be used for mouse move events.

◆ deactivate()

void OpenOrienteering::MapEditorTool::deactivate ( )
virtual

Makes this tool inactive in the editor.

Remplementations shall call parent implementations.

This implementation will always schedule the tool's deletion. But marking the tool's action as not checked is left to the destructor

◆ draw()

void OpenOrienteering::MapEditorTool::draw ( QPainter painter,
MapWidget widget 
)
virtual

Draws the tool's visualisation for a map widget.

All dynamic drawing must be done here using the given painter. Drawing is only possible in the area specified by calling map->setDrawingBoundingBox().

Reimplemented in OpenOrienteering::TemplateAdjustAddTool, OpenOrienteering::TemplateAdjustEditTool, OpenOrienteering::MapEditorToolBase, OpenOrienteering::PrintTool, OpenOrienteering::PaintOnTemplateTool, OpenOrienteering::CutHoleTool, OpenOrienteering::DrawPathTool, OpenOrienteering::DrawRectangleTool, OpenOrienteering::DrawFreehandTool, and OpenOrienteering::DrawCircleTool.

◆ drawOnRightClickEnabled()

bool OpenOrienteering::MapEditorTool::drawOnRightClickEnabled ( ) const
inline

Returns true if Mapper is configured to finish drawing on right click.

◆ drawSelectionBox()

void OpenOrienteering::MapEditorTool::drawSelectionBox ( QPainter painter,
MapWidget widget,
const MapCoordF corner1,
const MapCoordF corner2 
) const
protected

Draws a selection box for the given corner points.

A selection box is drawn while selecting objects by dragging.

◆ editingInProgress()

bool OpenOrienteering::MapEditorTool::editingInProgress ( ) const
inline

Returns whether an editing operation is currently in progress.

Some editing operation, such as drawing a path, need several user inputs over some period of time. This flag indicates that such an operation is currently active, limiting the number of other actions which may be triggered in this time.

Returns
Returns true if there is an ongoing edition operation, false otherwise.

◆ findHoverPoint()

MapCoordVector::size_type OpenOrienteering::MapEditorTool::findHoverPoint ( const QPointF cursor,
const MapWidget widget,
const Object object,
bool  include_curve_handles,
MapCoordF out_handle_pos = nullptr 
) const
protected

Finds and returns the point of the given object over which the cursor hovers.

Returns no_point if not hovering over a point.

◆ finishEditing()

void OpenOrienteering::MapEditorTool::finishEditing ( )
virtual

Finishes editing if it is currently in progress.

Deriving functions shall call this class' implementation (which calls setEditingInProgress(false)).

Reimplemented in OpenOrienteering::MapEditorToolBase, OpenOrienteering::EditPointTool, OpenOrienteering::CutoutTool, OpenOrienteering::DrawTextTool, OpenOrienteering::CutHoleTool, and OpenOrienteering::DrawLineAndAreaTool.

◆ focusOutEvent()

void OpenOrienteering::MapEditorTool::focusOutEvent ( QFocusEvent event)
virtual

◆ gestureEvent()

bool OpenOrienteering::MapEditorTool::gestureEvent ( QGestureEvent event,
MapWidget widget 
)
virtual

◆ gestureStarted()

void OpenOrienteering::MapEditorTool::gestureStarted ( )
virtual

This is called to signal the start of a gesture.

Tools may reimplement this if they want to cancel ongoing interactions such as dragging.

Reimplemented in OpenOrienteering::MapEditorToolBase.

◆ getCursor()

virtual const QCursor& OpenOrienteering::MapEditorTool::getCursor ( ) const
pure virtual

◆ init()

void OpenOrienteering::MapEditorTool::init ( )
virtual

Performs initialization when the tool becomes active.

This method is called by the map editor when the tool shall become active. Reimplementations may make changes to the map editor or window (e.g. set status bar text) which are not allowed in the constructor.

Note that this method by call several times, without any deinitialization in between.

Reimplementations shall call parent implementations.

The implementation in this class marks the tool's action as checked.

Reimplemented in OpenOrienteering::GeoreferencingTool, OpenOrienteering::TemplateAdjustDeleteTool, OpenOrienteering::TemplateAdjustMoveTool, OpenOrienteering::PointSymbolEditorTool, OpenOrienteering::TemplateAdjustAddTool, OpenOrienteering::MapEditorToolBase, OpenOrienteering::PaintOnTemplateTool, OpenOrienteering::DrawPathTool, OpenOrienteering::CutHoleTool, OpenOrienteering::PrintTool, OpenOrienteering::DrawRectangleTool, OpenOrienteering::DrawFreehandTool, OpenOrienteering::DrawCircleTool, and OpenOrienteering::TemplateMoveTool.

◆ inputMethodEvent()

bool OpenOrienteering::MapEditorTool::inputMethodEvent ( QInputMethodEvent event)
virtual

◆ inputMethodQuery()

QVariant OpenOrienteering::MapEditorTool::inputMethodQuery ( Qt::InputMethodQuery  property,
const QVariant argument 
) const
virtual

◆ isDrawingButton()

bool OpenOrienteering::MapEditorTool::isDrawingButton ( Qt::MouseButton  button) const
protected

Checks if the given event was triggered by press or release of a mouse button for drawing.

To be used for press and release events.

◆ isDrawTool()

bool OpenOrienteering::MapEditorTool::isDrawTool ( ) const

Returns true if the given tool is for drawing new objects.

Todo:
This shall be rewritten as virtual/reimplemented function.

◆ keyPressEvent()

bool OpenOrienteering::MapEditorTool::keyPressEvent ( QKeyEvent event)
virtual

◆ keyReleaseEvent()

bool OpenOrienteering::MapEditorTool::keyReleaseEvent ( QKeyEvent event)
virtual

◆ leaveEvent()

void OpenOrienteering::MapEditorTool::leaveEvent ( QEvent event)
virtual

◆ mainWindow()

MainWindow * OpenOrienteering::MapEditorTool::mainWindow ( ) const

Returns the main window the controller is attached to.

◆ map()

Map * OpenOrienteering::MapEditorTool::map ( ) const

Returns the map being edited.

◆ mapWidget()

MapWidget * OpenOrienteering::MapEditorTool::mapWidget ( ) const

Returns the map widget being operated on.

◆ mouseDoubleClickEvent()

bool OpenOrienteering::MapEditorTool::mouseDoubleClickEvent ( QMouseEvent event,
const MapCoordF map_coord,
MapWidget widget 
)
virtual

◆ mouseMoveEvent()

bool OpenOrienteering::MapEditorTool::mouseMoveEvent ( QMouseEvent event,
const MapCoordF map_coord,
MapWidget widget 
)
virtual

◆ mousePressEvent()

bool OpenOrienteering::MapEditorTool::mousePressEvent ( QMouseEvent event,
const MapCoordF map_coord,
MapWidget widget 
)
virtual

◆ mouseReleaseEvent()

bool OpenOrienteering::MapEditorTool::mouseReleaseEvent ( QMouseEvent event,
const MapCoordF map_coord,
MapWidget widget 
)
virtual

◆ pointHandles()

const PointHandles& OpenOrienteering::MapEditorTool::pointHandles ( ) const
inline

Returns the point handles utility for this tool.

◆ scaledToScreen()

QCursor OpenOrienteering::MapEditorTool::scaledToScreen ( const QCursor unscaled_cursor)
staticprotected

Returns a cursor which is scaled to the screen's resolution.

Return standard cursor shapes unchanged, but scales pixmap cursors from (default) 96 dpi to the screen's physical dpi (according to the settings) if the difference is significant.

◆ scaleFactor()

unsigned int OpenOrienteering::MapEditorTool::scaleFactor ( ) const
inline

The factor by which all drawing shall be scaled.

See also
PointHandles::scaleFactor()

◆ setEditingInProgress()

void OpenOrienteering::MapEditorTool::setEditingInProgress ( bool  state)
protected

Sets a flag which indicates an active editing operation.

This function takes care of informing the MapEditorController about the change.

See also
editingInProgress()

◆ setStatusBarText()

void OpenOrienteering::MapEditorTool::setStatusBarText ( const QString text)
protected

Sends text to the window's status bar.

◆ startDragDistance()

int OpenOrienteering::MapEditorTool::startDragDistance ( ) const
inline

The number of pixels the mouse has to be moved to start dragging.

◆ switchToDefaultDrawTool()

void OpenOrienteering::MapEditorTool::switchToDefaultDrawTool ( const Symbol symbol) const
virtual

Switch to a default draw tool for the given symbol.

Makes this tool inactive and schedules its deletion.

Todo:
Review for refactoring: no reimplementation found, maybe not in right class?

◆ toolAction()

QAction* OpenOrienteering::MapEditorTool::toolAction ( ) const
inline

Returns the action which represents this tool.

◆ toolType()

Type OpenOrienteering::MapEditorTool::toolType ( ) const
inline

Returns the type of this tool.

◆ usesTouchCursor()

bool OpenOrienteering::MapEditorTool::usesTouchCursor ( ) const
inline

Returns whether to use the touch helper cursor for this tool.

◆ useTouchCursor()

void OpenOrienteering::MapEditorTool::useTouchCursor ( bool  enabled)
protected

Sets the flag which indicates whether the touch cursor shall be used.

See also
usesTouchCursor()

◆ window()

QWidget * OpenOrienteering::MapEditorTool::window ( ) const

Returns the main window the controller is attached to as a QWidget.

This function can be used without the need to include main_window.h.

Member Data Documentation

◆ active_color

const QRgb OpenOrienteering::MapEditorTool::active_color = qRgb(255, 150, 0)
static

Color for active elements (which are hovered over by the cursor)

◆ editor

MapEditorController* const OpenOrienteering::MapEditorTool::editor
protected

The map editor which uses this tool.

◆ inactive_color

const QRgb OpenOrienteering::MapEditorTool::inactive_color = qRgb(0, 0, 255)
static

Color for normal (not active) elements.

◆ selection_color

const QRgb OpenOrienteering::MapEditorTool::selection_color = qRgb(210, 0, 229)
static

Color for selected elements.


The documentation for this class was generated from the following files: