rock_widget_collection  0.1
RockSlider.cc
Go to the documentation of this file.
1 #include <RockSlider.h>
2 #include <QStyle>
3 #include <QStyleOption>
4 #include <QPainter>
5 
6 RockSlider::RockSlider(QWidget *parent):
7  QSlider(parent)
8 {
9 }
10 
12 {
13 }
14 
15 
16 void RockSlider::addMarker(int position, std::string comment){
17  Entry e;
18  e.position = position;
19  e.comment = comment;
20  markers.push_back(e);
21 }
22 
24 {
25  QStyleOptionSlider opt;
26  initStyleOption(&opt);
27  QRect gr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderGroove, this);
28  QRect sr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);
29  int sliderMin, sliderMax, sliderLength;
30 
31  if (orientation() == Qt::Horizontal) {
32  sliderLength = sr.width();
33  sliderMin = gr.x();
34  sliderMax = gr.right() - sliderLength + 1;
35  } else {
36  sliderLength = sr.height();
37  sliderMin = gr.y();
38  sliderMax = gr.bottom() - sliderLength + 1;
39  }
40  //TODO Dosn't fit perfect, a few pixel misaligment is there, reason unknown...
41  return QStyle::sliderPositionFromValue(minimum(), maximum(), pos, sliderMax - sliderMin, opt.upsideDown) + sliderLength/2.0;
42 }
43 
44 void RockSlider::paint_p(QPainter *painter)
45 {
46  QStyleOptionSlider opt;
47  initStyleOption(&opt);
48  QRect gr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderGroove, this);
49 // QRect sr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);
50 
51  for(int i=0;i<markers.size();i++){
52  int pos = rangeValueToPixelPos(markers[i].position);
53  if(orientation() == Qt::Horizontal){
54  painter->drawLine(pos,gr.top(),pos,gr.bottom());
55  }else{
56  painter->drawLine(gr.left(),pos,gr.right(),pos);
57  }
58  }
59 }
60 
61 
62 void RockSlider::paintEvent(QPaintEvent *e)
63 {
64  QSlider::paintEvent(e);
65  QPainter p(this);
66  paint_p(&p);
67 }
68 
void addMarker(int position, std::string comment="")
Definition: RockSlider.cc:16
void paintEvent(QPaintEvent *)
Definition: RockSlider.cc:62
void paint_p(QPainter *painter)
Definition: RockSlider.cc:44
RockSlider(QWidget *parent)
Definition: RockSlider.cc:6
int rangeValueToPixelPos(int pos) const
Definition: RockSlider.cc:23
std::vector< Entry > markers
Definition: RockSlider.h:25