rock_widget_collection  0.1
Timeline.cc
Go to the documentation of this file.
1 #include "Timeline.h"
2 #include <iostream>
3 #include <algorithm>
4 #include <QPixmap>
5 
6 #include <base-logging/Logging.hpp>
7 
8 
9 Timeline::Timeline(QWidget *parent) {
10  setParent(parent);
11 
12  // Default property values
13  bookmarkHeight = 6;
14  marginTopBot = 5;
15  marginLR = 5;
16  bgColor = QColor(Qt::white);
17  ordered_width = 400;
18  minIndex = 0;
19  steps = 10;
20  stepSize = 1;
21 
22  reconfigure_slidebar = false;
23 
24  setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
25  setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
26 
27  // Setup scene
28  scene = new QGraphicsScene;
29  scene->setBackgroundBrush(getBackgroundColor());
30  setAlignment(Qt::AlignLeft | Qt::AlignTop);
31  setScene(scene);
32  setRenderHint(QPainter::Antialiasing);
33  setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
34 
35  // Add items
36  slidebar = new SlideBarItem(getMinIndex(), getSteps(), getStepSize());
38  slidebar->setWidth(ordered_width - getMarginLR()*2);
39  slidebar->setHeight(ordered_width - height());
40 
41  scene->addItem(slidebar);
42 
43  startmarker = new BoundarySlider(slidebar, getMinIndex());
44  slidebar->addTimeMarker(startmarker);
45 
46  endmarker = new BoundarySlider(slidebar, getMaxIndex());
47  slidebar->addTimeMarker(endmarker);
48 
49  connect(slidebar->getIndexSlider(), SIGNAL(sliderReleased(Slider*, int)), this, SLOT(sliderReleased(Slider*, int)));
50  connect(startmarker, SIGNAL(sliderReleased(Slider*, int)), this, SLOT(sliderReleased(Slider*, int)));
51  connect(endmarker, SIGNAL(sliderReleased(Slider*, int)), this, SLOT(sliderReleased(Slider*, int)));
52  connect(slidebar->getIndexSlider(), SIGNAL(sliderMoved(Slider*, int)), this, SLOT(sliderMoved(Slider*, int)));
53  connect(startmarker, SIGNAL(sliderMoved(Slider*, int)), this, SLOT(sliderMoved(Slider*, int)));
54  connect(endmarker, SIGNAL(sliderMoved(Slider*, int)), this, SLOT(sliderMoved(Slider*, int)));
55  connect(slidebar->getIndexSlider(), SIGNAL(sliderClicked(Slider*)), this, SLOT(sliderClicked(Slider*)));
56  connect(startmarker, SIGNAL(sliderClicked(Slider*)), this, SLOT(sliderClicked(Slider*)));
57  connect(endmarker, SIGNAL(sliderClicked(Slider*)), this, SLOT(sliderClicked(Slider*)));
58  connect(slidebar, SIGNAL(bookmarkClicked(int)), this, SLOT(bookmarkClickedSlot(int)));
59 
60  /* Timeout, at the moment only used for TestWidget */
61  timer = new QTimer(this);
62  timer->setInterval(25);
63  connect(timer, SIGNAL(timeout()), this, SLOT(fireTimeout()));
64  timer->start();
65 
66  updateScene();
67 }
68 
70  return bookmarkHeight;
71 }
72 
73 void Timeline::setBookmarkHeight(int height) {
74  bookmarkHeight = height;
75 }
76 
78  return marginTopBot;
79 }
80 
81 void Timeline::setMarginTopBot(int margin) {
82  marginTopBot = margin;
83 }
84 
86  return marginLR;
87 }
88 
89 void Timeline::setMarginLR(int margin) {
90  marginLR = margin;
91 }
92 
93 const QColor& Timeline::getBackgroundColor() const {
94  return bgColor;
95 }
96 
97 void Timeline::setBackgroundColor(const QColor & color) {
98  bgColor = color;
99 }
100 
102  return ordered_width;
103 }
104 
106  ordered_width = width;
107 }
108 
110  return minIndex;
111 }
112 
113 void Timeline::setMinIndex(int minIndex) {
114  this->minIndex = minIndex;
115  reconfigure_slidebar = true;
116 }
117 
119  return steps;
120 }
121 
122 void Timeline::setSteps(int steps) {
123  this->steps = steps;
124  reconfigure_slidebar = true;
125 }
126 
128  return stepSize;
129 }
130 
131 void Timeline::setStepSize(int stepSize) {
132  this->stepSize = stepSize;
133  reconfigure_slidebar = true;
134 }
135 
137  return slidebar->getIndexSlider()->getLastIndex();
138 }
139 
141  return startmarker->getLastIndex();
142 }
143 
145  setSliderIndex(idx, startmarker);
146 
147 }
148 
150  return endmarker->getLastIndex();
151 }
152 
154  setSliderIndex(idx, endmarker);
155 }
156 
158  setSliderIndex(idx, slidebar->getIndexSlider());
159 }
160 
161 // This method is private!
162 void Timeline::setSliderIndex(int idx, Slider* slider) {
163  // TODO check boundaries!!!
164  slider->setLastIndex(idx);
165  updateScene();
166 }
167 
168 void Timeline::addBookmark(int idx) {
169  if(hasBookmarkAtIndex(idx)) {
170  return;
171  }
172 
173  QVector<int> vec;
174  vec << idx;
175  addBookmarks(vec);
176 }
177 
178 void Timeline::addBookmarks(QVector<int> bookmarks) {
179  Q_FOREACH(int bookmark, bookmarks) {
180  this->bookmarks << bookmark;
181  }
182  slidebar->updateBookmarks(this->bookmarks);
183 }
184 
186  for(int i = 0; i < bookmarks.size(); i++) {
187  if (bookmarks.at(i) == idx) {
188  bookmarks.remove(i);
189  emit bookmarkRemoved(idx);
190  slidebar->updateBookmarks(bookmarks);
191  break;
192  }
193  }
194 }
195 
197  bookmarks.clear();
198  slidebar->updateBookmarks(bookmarks);
199 }
200 
202  for(int i = 0; i < bookmarks.size(); i++) {
203  if (bookmarks.at(i) == idx) {
204  return true;
205  }
206  }
207  return false;
208 }
209 
210 void Timeline::resizeEvent(QResizeEvent * event) {
211  QSize size = event->size();
212  updateScene(size);
213 }
214 
215 void Timeline::updateScene() {
216  updateScene(size());
217 }
218 
219 void Timeline::updateScene(QSizeF newSize) {
220  if(reconfigure_slidebar) {
221  reconfigureSlidebar();
222  }
223 
224  scene->setBackgroundBrush(getBackgroundColor());
225  scene->setSceneRect(0, 0, newSize.width(), newSize.height());
226 
227  slidebar->setWidth(newSize.width() - getMarginLR()*2);
228  slidebar->setHeight(newSize.height() - getMarginTopBot()*2);
229  slidebar->setPos(getMarginLR(),getMarginTopBot());
230 
231  Q_FOREACH(Slider *slider, slidebar->getAllSliders()) {
232  slider->setPos(slidebar->markerPositionForIndex(slider->getLastIndex()),newSize.height()*0.5-getMarginTopBot());
233  }
234  update();
235 }
236 
237 void Timeline::bookmarkClickedSlot(int idx) {
238  LOG_DEBUG("BOOKMARK clicked at index %d", idx);
239  emit bookmarkClicked(idx);
240 }
241 
242 void Timeline::fireTimeout() {
243  emit timeout();
244 }
245 
246 void Timeline::sliderReleased(Slider* slider, int idx) {
247  Slider* indexSlider = slidebar->getIndexSlider();
248 
249  if(slider == indexSlider) {
250  emit indexSliderReleased(idx);
251  LOG_DEBUG("INDEX SLIDER released at index %d", idx);
252  } else if (slider == startmarker) {
253  emit startMarkerReleased(idx);
254  LOG_DEBUG("START MARKER released at index %d", idx);
255  } else if (slider == endmarker) {
256  emit endMarkerReleased(idx);
257  LOG_DEBUG("END MARKER released at index %d", idx);
258  } else {
259  LOG_WARN("UNKNOWN SLIDER released at index %d", idx);
260  }
261 }
262 
263 void Timeline::sliderMoved(Slider* slider, int idx) {
264 
265  Slider* indexSlider = slidebar->getIndexSlider();
266  if(slider == indexSlider) {
267  emit indexSliderMoved(idx);
268  } else if (slider == startmarker) {
269  emit startMarkerMoved(idx);
270  } else if (slider == endmarker) {
271  emit endMarkerMoved(idx);
272  } else {
273  LOG_WARN("UNKNOWN SLIDER released at index %d", idx);
274  }
275 }
276 void Timeline::sliderClicked(Slider* slider) {
277 
278  Slider* indexSlider = slidebar->getIndexSlider();
279  if(slider == indexSlider) {
280  emit indexSliderClicked();
281  } else if (slider == startmarker) {
282  emit startMarkerClicked();
283  } else if (slider == endmarker) {
284  emit endMarkerClicked();
285  } else {
286  LOG_WARN("UNKNOWN SLIDER clicked");
287  }
288 }
289 void Timeline::reconfigureSlidebar() {
290  reconfigure_slidebar = false;
291  slidebar->reconfigure(getMinIndex(), getSteps(), getStepSize());
294 }
295 
297  return getMinIndex() + getSteps() * getStepSize();
298 }
void bookmarkRemoved(int idx)
int getMarginLR()
Definition: Timeline.cc:85
Definition: Slider.h:7
const QList< Slider * > & getAllSliders()
Definition: SlideBarItem.cc:82
void addBookmarks(QVector< int > bookmarks)
Definition: Timeline.cc:178
int getStartMarkerIndex()
Definition: Timeline.cc:140
void setBookmarkHeight(int height)
Definition: Timeline.cc:73
int getSteps()
Definition: Timeline.cc:118
int markerPositionForIndex(unsigned index)
void indexSliderClicked()
bool hasBookmarkAtIndex(int idx)
Definition: Timeline.cc:201
void reconfigure(unsigned startIndex, unsigned steps, unsigned stepSize)
Definition: SlideBarItem.cc:17
unsigned getLastIndex()
Definition: Slider.cc:51
void removeBookmark(int idx)
Definition: Timeline.cc:185
void setStartMarkerIndex(int idx)
Definition: Timeline.cc:144
void setMinIndex(int minIndex)
Definition: Timeline.cc:113
void setSliderIndex(int idx)
Definition: Timeline.cc:157
int getBookmarkHeight() const
Definition: Timeline.cc:69
void setHeight(int width)
Definition: SlideBarItem.cc:60
void timeout()
void updateBookmarks(QVector< int > &bookmarks)
int getSliderIndex()
Definition: Timeline.cc:136
void setBackgroundColor(const QColor &color)
Definition: Timeline.cc:97
void removeAllBookmarks()
Definition: Timeline.cc:196
Timeline(QWidget *parent=0)
Definition: Timeline.cc:9
void addTimeMarker(BoundarySlider *marker)
Definition: SlideBarItem.cc:72
void bookmarkClicked(int idx)
void setStepSize(int stepSize)
Definition: Timeline.cc:131
void setEndMarkerIndex(int idx)
Definition: Timeline.cc:153
IndexSlider * getIndexSlider()
int getWidth()
Definition: Timeline.cc:101
void setBookmarkHeight(qreal height)
Definition: SlideBarItem.cc:52
int getStepSize()
Definition: Timeline.cc:127
void startMarkerMoved(int idx)
void setSteps(int steps)
Definition: Timeline.cc:122
void endMarkerClicked()
int getMinIndex()
Definition: Timeline.cc:109
void endMarkerMoved(int idx)
int getMaxIndex()
Definition: Timeline.cc:296
void setLastIndex(unsigned index)
Definition: Slider.cc:55
void indexSliderReleased(int idx)
const QColor & getBackgroundColor() const
Definition: Timeline.cc:93
void endMarkerReleased(int idx)
void setWidth(int width)
Definition: SlideBarItem.cc:56
void resizeEvent(QResizeEvent *event)
Definition: Timeline.cc:210
void setMarginLR(int margin)
Definition: Timeline.cc:89
void indexSliderMoved(int idx)
int getMarginTopBot()
Definition: Timeline.cc:77
int getEndMarkerIndex()
Definition: Timeline.cc:149
void startMarkerClicked()
void startMarkerReleased(int idx)
void setWidth(int width)
Definition: Timeline.cc:105
void addBookmark(int idx)
Definition: Timeline.cc:168
int width
Definition: Timeline.h:32
void setMarginTopBot(int margin)
Definition: Timeline.cc:81