3 #include <QStylePainter>
8 #include "customruler.h"
12 #define INIT_MIN_VALUE 0
13 #define INIT_MAX_VALUE 100
14 #define INIT_TINY_MARK_DISTANCE 1
15 #define INIT_LITTLE_MARK_DISTANCE 5
16 #define INIT_MIDDLE_MARK_DISTANCE (INIT_LITTLE_MARK_DISTANCE * 2)
17 #define INIT_BIG_MARK_DISTANCE (INIT_LITTLE_MARK_DISTANCE * 10)
18 #define INIT_SHOW_TINY_MARK false
19 #define INIT_SHOW_LITTLE_MARK true
20 #define INIT_SHOW_MEDIUM_MARK true
21 #define INIT_SHOW_BIG_MARK true
22 #define INIT_SHOW_END_MARK true
23 #define INIT_SHOW_POINTER true
24 #define INIT_SHOW_END_LABEL true
26 #define INIT_PIXEL_PER_MARK (double)10.0 /* distance between 2 base marks in pixel */
27 #define INIT_OFFSET (-20)
28 #define INIT_LENGTH_FIX true
29 #define INIT_END_OFFSET 0
31 #define FIX_WIDTH 20 /* widget width in pixel */
32 #define LINE_END (FIX_WIDTH - 3)
33 #define END_MARK_LENGTH (FIX_WIDTH - 6)
34 #define END_MARK_X2 LINE_END
35 #define END_MARK_X1 (END_MARK_X2 - END_MARK_LENGTH)
36 #define BIG_MARK_LENGTH (END_MARK_LENGTH*3/4)
37 #define BIG_MARK_X2 LINE_END
38 #define BIG_MARK_X1 (BIG_MARK_X2 - BIG_MARK_LENGTH)
39 #define MIDDLE_MARK_LENGTH (END_MARK_LENGTH/2)
40 #define MIDDLE_MARK_X2 LINE_END
41 #define MIDDLE_MARK_X1 (MIDDLE_MARK_X2 - MIDDLE_MARK_LENGTH)
42 #define LITTLE_MARK_LENGTH (MIDDLE_MARK_LENGTH/2)
43 #define LITTLE_MARK_X2 LINE_END
44 #define LITTLE_MARK_X1 (LITTLE_MARK_X2 - LITTLE_MARK_LENGTH)
45 #define BASE_MARK_LENGTH (LITTLE_MARK_LENGTH/2)
46 #define BASE_MARK_X2 LINE_END
47 #define BASE_MARK_X1 (BASE_MARK_X2 - 3) //BASE_MARK_LENGTH
51 #define END_LABEL_Y (END_LABEL_X + LABEL_SIZE - 2)
56 const int CustomRuler::comboScale[] =
57 { 1, 2, 5, 10, 25, 50, 125, 250, 500, 725, 1500, 3000, 6000,
60 CustomRuler::CustomRuler(QWidget *parent)
64 setRulerMetricStyle(KRuler::Pixel);
68 setLittleMarkDistance (FRAME_SIZE);
69 setMediumMarkDistance (FRAME_SIZE * 25);
70 setBigMarkDistance (FRAME_SIZE * 25 * 60);
74 void CustomRuler::mousePressEvent ( QMouseEvent * event )
81 void CustomRuler::slotNewValue ( int _value )
83 m_cursorPosition = _value / pixelPerMark();
84 KRuler::slotNewValue(_value);
87 void CustomRuler::setPixelPerMark (double rate)
89 int scale = comboScale[(int) rate];
90 int newPos = m_cursorPosition * (1.0 / scale);
91 KRuler::setPixelPerMark(1.0 / scale);
92 KRuler::slotNewValue( newPos );
96 void CustomRuler::paintEvent(QPaintEvent * /*e*/)
98 // debug ("KRuler::drawContents, %s",(horizontal==dir)?"horizontal":"vertical");
100 QStylePainter p(this);
103 int value = this->value(),
107 + offset() - endOffset();
109 //ioffsetval = value-offset;
110 // pixelpm = (int)ppm;
111 // left = clip.left(),
112 // right = clip.right();
114 offsetmin=(double)(minval-offset()),
115 offsetmax=(double)(maxval-offset()),
116 fontOffset = (((double)minval)>offsetmin)?(double)minval:offsetmin;
119 QFont font = p.font();
120 font.setPointSize(LABEL_SIZE);
122 // draw littlemarklabel
124 // draw mediummarklabel
130 if (d->dir == Qt::Horizontal) {
131 p.translate( fontOffset, 0 );
132 p.drawText( END_LABEL_X, END_LABEL_Y, d->endlabel );
135 // draw the tiny marks
136 //if (showTinyMarks())
138 fend = pixelPerMark()*tinyMarkDistance();
139 if (fend > 5) for ( f=offsetmin; f<offsetmax; f+=fend ) {
140 p.drawLine((int)f, BASE_MARK_X1, (int)f, BASE_MARK_X2);
143 if (showLittleMarks()) {
144 // draw the little marks
145 fend = pixelPerMark()*littleMarkDistance();
146 if (fend > 5) for ( f=offsetmin; f<offsetmax; f+=fend ) {
147 p.drawLine((int)f, LITTLE_MARK_X1, (int)f, LITTLE_MARK_X2);
148 if (fend > 30) p.drawText( (int)f + 2, LABEL_SIZE, QString::number((f - offsetmin) / pixelPerMark() / FRAME_SIZE) );
151 if (showMediumMarks()) {
153 fend = pixelPerMark()*mediumMarkDistance();
154 if (fend > 5) for ( f=offsetmin; f<offsetmax; f+=fend ) {
155 p.drawLine((int)f, MIDDLE_MARK_X1, (int)f, MIDDLE_MARK_X2);
156 if (fend > 30) p.drawText( (int)f + 2, LABEL_SIZE, QString::number((f - offsetmin) / pixelPerMark() / FRAME_SIZE) );
159 if (showBigMarks()) {
161 fend = pixelPerMark()*bigMarkDistance();
162 if (fend > 5) for ( f=offsetmin; f<offsetmax; f+=fend ) {
163 p.drawLine((int)f, BIG_MARK_X1, (int)f, BIG_MARK_X2);
164 if (fend > 30) p.drawText( (int)f + 2, LABEL_SIZE, QString::number((f - offsetmin) / pixelPerMark() / FRAME_SIZE) );
169 if (d->dir == Qt::Horizontal) {
170 p.drawLine(minval-d->offset, END_MARK_X1, minval-d->offset, END_MARK_X2);
171 p.drawLine(maxval-d->offset, END_MARK_X1, maxval-d->offset, END_MARK_X2);
174 p.drawLine(END_MARK_X1, minval-d->offset, END_MARK_X2, minval-d->offset);
175 p.drawLine(END_MARK_X1, maxval-d->offset, END_MARK_X2, maxval-d->offset);
182 pa.setPoints(3, value-6, 9, value+6, 9, value/*+0*/, 16);
183 p.setBrush( QBrush(Qt::yellow) );
189 #include "customruler.moc"