Engauge Digitizer  2
SegmentLine.cpp
1 #include "DataKey.h"
2 #include "EnumsToQt.h"
3 #include "GraphicsItemType.h"
4 #include "Logger.h"
5 #include <QGraphicsScene>
6 #include <QPen>
7 #include "Segment.h"
8 #include "SegmentLine.h"
9 
10 const double ZVALUE_SEGMENT = 50; // Less than z value for GraphicsPoint
11 
12 SegmentLine::SegmentLine(QGraphicsScene &scene,
13  const DocumentModelSegments &modelSegments,
14  Segment *segment) :
15  m_modelSegments (modelSegments),
16  m_segment (segment)
17 {
18  LOG4CPP_DEBUG_S ((*mainCat)) << "SegmentLine::SegmentLine"
19  << " address=0x" << std::hex << (unsigned long) this;
20 
21  setData (DATA_KEY_GRAPHICS_ITEM_TYPE, QVariant (GRAPHICS_ITEM_TYPE_SEGMENT));
22 
23  // Make this transparent now, but always visible so hover events work
24  scene.addItem (this);
25  setPen (QPen (Qt::transparent));
26  setZValue (ZVALUE_SEGMENT);
27  setVisible (true);
28  setAcceptHoverEvents (true);
29  setHover (false); // Initially the cursor is not hovering over this object. Later a hover event will change this state
30  setFlags (QGraphicsItem::ItemIsFocusable);
31 
32  connect (this, SIGNAL (signalHover (bool)), segment, SLOT (slotHover (bool)));
33 }
34 
35 SegmentLine::~SegmentLine ()
36 {
37  LOG4CPP_DEBUG_S ((*mainCat)) << "SegmentLine::~SegmentLine"
38  << " address=0x" << std::hex << (unsigned long) this;
39 }
40 
41 void SegmentLine::hoverEnterEvent(QGraphicsSceneHoverEvent * /* event */)
42 {
43  LOG4CPP_INFO_S ((*mainCat)) << "SegmentLine::hoverEnterEvent";
44 
45  emit (signalHover (true));
46 }
47 
48 void SegmentLine::hoverLeaveEvent(QGraphicsSceneHoverEvent * /* event */)
49 {
50  LOG4CPP_INFO_S ((*mainCat)) << "SegmentLine::hoverLeaveEvent";
51 
52  emit (signalHover (false));
53 }
54 
55 void SegmentLine::mousePressEvent(QGraphicsSceneMouseEvent * /* event */)
56 {
57  LOG4CPP_INFO_S ((*mainCat)) << "SegmentLine::mousePressEvent";
58 
59  m_segment->forwardMousePress();
60 }
61 
63 {
64  return m_segment;
65 }
66 
67 void SegmentLine::setHover (bool hover)
68 {
69  if (hover) {
70 
71  QColor color (ColorPaletteToQColor (m_modelSegments.lineColor()));
72 
73  setPen (QPen (QBrush (color),
74  m_modelSegments.lineWidth()));
75 
76  } else {
77 
78  setPen (QPen (Qt::transparent));
79 
80  }
81 }
82 
84 {
85  LOG4CPP_INFO_S ((*mainCat)) << "SegmentLine::updateModelSegment";
86 
87  m_modelSegments = modelSegments;
88 }
ColorPalette lineColor() const
Get method for line color.
SegmentLine(QGraphicsScene &scene, const DocumentModelSegments &modelSegments, Segment *segment)
Single constructor.
Definition: SegmentLine.cpp:12
void signalHover(bool)
Pass hover enter/leave events to Segment that owns this.
void updateModelSegment(const DocumentModelSegments &modelSegments)
Update this segment line with new settings.
Definition: SegmentLine.cpp:83
Segment * segment() const
Segment that owns this line.
Definition: SegmentLine.cpp:62
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Highlight this and all other SegmentLines belonging to the same Segment upon hover enter...
Definition: SegmentLine.cpp:41
void forwardMousePress()
Forward mouse press event from a component SegmentLine that was just clicked on.
Definition: Segment.cpp:295
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event)
Create points along this curve.
Definition: SegmentLine.cpp:55
Selectable piecewise-defined line that follows a filtered line in the image.
Definition: Segment.h:15
double lineWidth() const
Get method for line width.
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Unset highlighting triggered by hover enter.
Definition: SegmentLine.cpp:48
Model for DlgSettingsSegments and CmdSettingsSegments.
void setHover(bool hover)
Apply/remove highlighting triggered by hover enter/leave.
Definition: SegmentLine.cpp:67