rock_widget_collection  0.1
Slider.cc
Go to the documentation of this file.
1 #include "Slider.h"
2 #include "SlideBarItem.h"
3 #include <iostream>
4 
6 
7 }
8 
9 Slider::Slider(QGraphicsItem* parent, unsigned initIdx) {
10  setParentItem(parent);
11  this->initIdx = initIdx;
12 }
13 
14 unsigned Slider::getInitIdx() {
15  return initIdx;
16 }
17 
18 QPointF Slider::boundarySnapPos(QPointF eventPos, qreal clickPosOffsetX, qreal leftBoundary, qreal rightBoundary) {
19 
20  QPointF newPos;
21 
22  // Restricting the sliding area. The left and right boundaries of the slider bar
23  // cannot be surpassed.
24  if(mapToParent(eventPos).x() - clickPosOffsetX < leftBoundary) {
25  // Stepped over left boundary.
26  newPos = QPointF(leftBoundary, pos().y());
27  } else if (mapToParent(eventPos).x() - clickPosOffsetX > rightBoundary) {
28  // Stepped over right boundary.
29  newPos = QPointF(rightBoundary, pos().y());
30  } else {
31  // Slider position is within boundaries.
32  newPos = QPointF(mapToParent(eventPos).x() - clickPosOffsetX /*- getPointingOffset()*/,
33  pos().y() );
34  }
35  return newPos;
36 }
37 
38 qreal Slider::getClickPosOffsetX(QGraphicsSceneMouseEvent *event) {
39  // Offset of clicked x coordinate of time marker item w.r.t. item origin.x
40  return mapToParent(event->buttonDownPos((Qt::LeftButton))).x() - pos().x();
41 }
42 
43 int Slider::height() const {
44  return pixmap().height();
45 }
46 
47 int Slider::width() const {
48  return pixmap().width();
49 }
50 
52  return lastIndex;
53 }
54 
55 void Slider::setLastIndex(unsigned index) {
56  if(index != lastIndex)
57  emit sliderMoved(this, index);
58  this->lastIndex = index;
59 }
60 
61 void Slider::mousePressEvent(QGraphicsSceneMouseEvent *event)
62 {
63  sliderClicked(this);
64 }
65 
66 void Slider::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
67  /* Sliding bounds in parent's coords */
68  qreal leftBoundary = parentItem()->boundingRect().left();
69  qreal rightBoundary = parentItem()->boundingRect().right();
70 
71  QPointF newPos = boundarySnapPos(event->pos(), getClickPosOffsetX(event), leftBoundary, rightBoundary);
72  setPos(newPos);
73 
74  unsigned index = ((SlideBarItem*)parentItem())->markerIndex(this);
75 
76  setLastIndex(index);
77 
78 // std::cout << "Logical marker position: " << index << std::endl;
79 // std::cout << "Computed real position for that index: " << ((SlideBarItem*)parentItem())->markerPositionForIndex(index) << std::endl;
80  update();
81 }
82 
83 void Slider::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
84  emit sliderReleased(this, getLastIndex());
85 }
qreal getClickPosOffsetX(QGraphicsSceneMouseEvent *event)
Definition: Slider.cc:38
Slider()
Definition: Slider.cc:5
void sliderMoved(Slider *slider, int idx)
unsigned getLastIndex()
Definition: Slider.cc:51
virtual int height() const
Definition: Slider.cc:43
virtual int width() const
Definition: Slider.cc:47
QPointF boundarySnapPos(QPointF eventPos, qreal clickPosOffsetX, qreal leftBoundary, qreal rightBoundary)
Definition: Slider.cc:18
void mousePressEvent(QGraphicsSceneMouseEvent *event)
Definition: Slider.cc:61
unsigned getInitIdx()
Definition: Slider.cc:14
unsigned initIdx
Definition: Slider.h:34
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition: Slider.cc:83
void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Definition: Slider.cc:66
void sliderReleased(Slider *slider, int idx)
void setLastIndex(unsigned index)
Definition: Slider.cc:55
unsigned lastIndex
Definition: Slider.h:35
void sliderClicked(Slider *slider)