Engauge Digitizer 2
Loading...
Searching...
No Matches
GuidelineLine.cpp
Go to the documentation of this file.
1/******************************************************************************************************
2 * (C) 2019 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5 ******************************************************************************************************/
6
7#include "DataKey.h"
8#include "EngaugeAssert.h"
9#include "EnumsToQt.h"
10#include "GraphicsItemType.h"
11#include "GuidelineLine.h"
12#include "Guidelines.h"
14#include "Logger.h"
15#include <QGraphicsLineItem>
16#include <QGraphicsScene>
17#include <QGraphicsSceneMouseEvent>
18#include <QLineF>
19#include <qmath.h>
20#include <QMouseEvent>
21#include <QPen>
22#include <QWidget>
23#include "ZValues.h"
24
26 MainWindow &mainWindow,
27 Guidelines &guidelines,
28 GuidelineState guidelineStateInitial,
29 const QString &identifier) :
31 m_mainWindow (mainWindow)
32{
33 LOG4CPP_DEBUG_S ((*mainCat)) << "GuidelineLine::Guideline identifier=" << identifier.toLatin1().data();
34
35 // Create context after all virtual methods have been created
37 mainWindow,
38 guidelines,
39 guidelineStateInitial));
40
42 setData (DATA_KEY_IDENTIFIER, QVariant (identifier));
43
44 scene.addItem (this);
45}
46
50
52{
53 return acceptHoverEvents();
54}
55
57{
58 return QGraphicsLineItem::isSelected();
59}
60
61QGraphicsItem::GraphicsItemFlags GuidelineLine::graphicsItemFlags () const
62{
63 return QGraphicsLineItem::flags ();
64}
65
66void GuidelineLine::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
67{
69
70 QGraphicsLineItem::hoverEnterEvent (event);
71}
72
73void GuidelineLine::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
74{
76
77 QGraphicsLineItem::hoverLeaveEvent (event);
78}
79
81{
82 return data (DATA_KEY_IDENTIFIER).toString ();
83}
84
85void GuidelineLine::mouseMoveEvent (QGraphicsSceneMouseEvent *event)
86{
87 handleMouseMoveEvent (event->scenePos ());
88
89 QGraphicsLineItem::mouseMoveEvent (event);
90}
91
92void GuidelineLine::mousePressEvent(QGraphicsSceneMouseEvent *event)
93{
94 LOG4CPP_DEBUG_S ((*mainCat)) << "GuidelineLine::mousePressEvent";
95
96 handleMousePressEvent (event->scenePos ());
97
98 QGraphicsLineItem::mousePressEvent (event);
99}
100
101void GuidelineLine::mouseReleaseEvent (QGraphicsSceneMouseEvent *event)
102{
103 LOG4CPP_DEBUG_S ((*mainCat)) << "GuidelineLine::mouseReleaseEvent";
104
105 QGraphicsLineItem::mouseReleaseEvent (event);
106
107 handleMouseReleaseEvent (event->scenePos ());
108}
109
110void GuidelineLine::paint(QPainter *painter,
111 const QStyleOptionGraphicsItem *option,
112 QWidget *widget)
113{
114 if (context()->doPaint ()) {
115
116 QGraphicsLineItem::paint (painter,
117 option,
118 widget);
119 }
120}
121
123{
124 LOG4CPP_DEBUG_S ((*mainCat)) << "GuidelineLine::removeFromScene identifier="
125 << identifier().toLatin1().data();
126
127 scene->removeItem (this);
128}
129
131{
132 QGraphicsLineItem::setAcceptHoverEvents (accept);
133}
134
135void GuidelineLine::setGraphicsItemFlags (QGraphicsItem::GraphicsItemFlags flags)
136{
137 QGraphicsLineItem::setFlags (flags);
138}
139
140void GuidelineLine::setGraphicsItemLine (const QLineF &line)
141{
142 QGraphicsLineItem::setLine (line);
143}
144
145void GuidelineLine::setGraphicsItemPen (const QColor &color,
146 double lineWidth)
147{
148 QBrush brush (color);
149
150 setPen (QPen (brush,
151 lineWidth));
152}
153
155{
156 QGraphicsLineItem::setVisible (visible);
157}
158
160{
161 QGraphicsLineItem::setZValue (z);
162}
163
165{
166 // Apply color to brush and pen defined in setGraphicsItemPen.
167 // Alpha from alphaF() on QColor on QBrush is unused
168
169 QPen p = QGraphicsLineItem::pen();
170 QBrush br = p.brush();
171 double alphaF = br.color().alphaF();
172 double lineWidth = p.width ();
173
174 QColor color = ColorPaletteToQColor (context()->color());
175 color.setAlphaF (alphaF);
176
177 setGraphicsItemPen (color,
178 lineWidth);
179}
180
181void GuidelineLine::updateGeometry (double valueGraph)
182{
183 // Convert single graph coordinate, which is range, into screen point pair,
184 // then update with the screen point
185 updateGeometry (context ()->convertGraphCoordinateToScreenPoint (valueGraph));
186}
187
188void GuidelineLine::updateGeometry (const QPointF &posScreen)
189{
190 QLineF line = context()->pointToLine (posScreen);
191
192 setLine (line);
193
194 // Save the graph value for later
195 QPointF posGraph;
197 posGraph);
198 context()->setPosCursorGraph (posGraph);
199}
@ DATA_KEY_GRAPHICS_ITEM_TYPE
Definition DataKey.h:15
@ DATA_KEY_IDENTIFIER
Definition DataKey.h:14
QColor ColorPaletteToQColor(ColorPalette color)
Definition EnumsToQt.cpp:16
@ GRAPHICS_ITEM_TYPE_GUIDELINE
GuidelineState
Set of possible Guideline states. See class Guideline for more information.
log4cpp::Category * mainCat
Definition Logger.cpp:14
QGraphicsScene & scene()
GraphicsScene that owns this class.
void handleMousePressEvent(const QPointF &posScene)
Forward press event to state machine.
void setContext(GuidelineStateContext *context)
Create state machine after virtual methods of child classes have been defined.
void handleMouseMoveEvent(const QPointF &posScene)
Forward movements to visible Guideline.
void handleMouseReleaseEvent(const QPointF &posScene)
Cleanup after being dragged.
GuidelineStateContext * context()
State machine context owned by this class.
void handleHoverEnterEvent()
Highlight this Guideline upon hover enter.
void handleHoverLeaveEvent()
Unset highlighting triggered by hover enter.
GuidelineAbstract(QGraphicsScene &scene)
Single constructor.
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Unset highlighting triggered by hover enter.
virtual QGraphicsItem::GraphicsItemFlags graphicsItemFlags() const
Wraps QGraphicsItem::flags.
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Forward movements to visible Guideline.
GuidelineLine(QGraphicsScene &scene, MainWindow &mainWindow, Guidelines &guidelines, GuidelineState guidelineStateInitial, const QString &identifier)
Single constructor.
virtual void setGraphicsItemZValue(double z)
Wrapper for QGraphicsItem::setZValue.
virtual void updateGeometry(double valueGraph)
Update the geometry so it passes through the specified coordinate value in graph coordinates.
virtual QString identifier() const
Unique identifier from QGraphicsItem.
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Highlight this Guideline upon hover enter.
virtual void setGraphicsItemFlags(QGraphicsItem::GraphicsItemFlags flags)
Wrapper for QGraphicsItem::setFlags.
virtual void removeFromScene(QGraphicsScene *scene)
Make graphics item remove itself from the scene.
virtual void updateColor()
Force a color update.
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Cleanup after being dragged.
virtual void setGraphicsItemVisible(bool visible)
Wrapper for QGraphicsItem::setVisible.
virtual void setGraphicsItemLine(const QLineF &line)
Wrapper for QGraphicsLineItem::setLine.
virtual bool getGraphicsItemAcceptHover() const
Return true if accepting hover events.
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event)
Forward press event to state machine.
virtual bool getGraphicsItemSelected() const
Wrapper for QGraphicsItem::isSelected.
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=Q_NULLPTR)
Override painting so this disappears when selected. Selected Guidelines are never visible.
virtual void setGraphicsItemPen(const QColor &color, double lineWidth)
Wrapper for QGraphicsItem::setPen.
virtual void setGraphicsItemAcceptHoverEvents(bool accept)
Wrapper for QGraphicsItem::setAcceptHoverEvents.
Context class for state machine that belongs to the Guideline class.
Transformation transformation() const
Return copy of transformation owned by MainWindow.
void setPosCursorGraph(const QPointF &posGraph)
Pass the current cursor coordinate to the state so it can save the relevant coordinate for later adju...
QLineF pointToLine(const QPointF &posScreen) const
Return line parallel to an axis line, that passes through the specified point.
This class contains all Guideline objects.
Definition Guidelines.h:28
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition MainWindow.h:95
void transformScreenToRawGraph(const QPointF &coordScreen, QPointF &coordGraph) const
Transform from cartesian pixel screen coordinates to cartesian/polar graph coordinates.
#define LOG4CPP_DEBUG_S(logger)
Definition convenience.h:20