7 GaugeTape::GaugeTape(QGraphicsItem *parent) :
12 void GaugeTape::paint(QPainter *painter,const QStyleOptionGraphicsItem *option,
15 int tpix; // tick division in pixels
17 int fval; // First value visible
23 int h=size().height();
32 // linc = pgs->linc ? pgs->linc: 10;
33 // tpix = m_tspc ? m_tspc: 20;
34 // tinc = pgs->tinc ? pgs->tinc: 5;
37 painter->setTransform(QTransform().translate(scenePos().x(),scenePos().y()).scale(m_scale,m_scale));
39 QBrush brush(m_backColor);
40 painter->setFont(m_font);
42 painter->setBrush(brush);
43 QFontMetrics fm(m_font);
44 int fontHeight=fm.ascent();
46 if ((m_style == UP) || (m_style == COMPASS_UP)) {
51 if (m_style == RIGHT) {
56 if (m_style == DOWN) {
61 if (m_style == LEFT) {
65 // printf("draw_tape 1 %s x=%3d y=%3d h=%3d w=%3d linc=%d tpix=%d tinc=%d\n",name.c_str(),x,y,h,w,linc,tpix,tinc);
70 // float low = floor(m_value - ((h * m_tickIncrement)/(m_tickSpacing * 2))/m_tickIncrement)*m_tickIncrement; // Lowest value to display
71 float vof = floor(m_value / m_tickIncrement) * m_tickIncrement; // Value rounded to lover tick increment
72 float tmod= fmod (m_value,m_tickIncrement) * m_tickSpacing/m_tickIncrement; // Modulus as pixels
73 ntic=ceil((yd?h:w)/(m_tickSpacing));
74 float low=vof-(ntic/2)*m_tickIncrement;
75 // fval = (m_value - ((tin + 1) * m_tickIncrement)) - (m_value%m_tickIncrement);
76 // t = h - tin * m_tickSpacing - ((m_value%m_tickIncrement) * tpix/m_tickIncrement);
77 // ntic=h/(m_tickSpacing/m_tickMinor);
78 // printf("paintTape %s val=%d tin=%d tpix=%d tinc=%d h2=%d tio=%d fval=%d t=%d low=%d yd=%d\n",m_name.toStdString().c_str(),m_value,tin,tpix,m_tickIncrement,h2,tio,fval,t,low,yd);
82 int vpix=tmod+(ntic+1)*m_tickSpacing;
84 QBrush bbrush(m_backColor);
85 painter->setBrush(bbrush);
86 painter->drawRect(0,0, w,h);
87 if(yd) painter->drawLine(0,h/2,w,h/2);
88 else painter->drawLine(w/2,0,w/2,h);
89 painter->setClipRect(QRect(0,0,w,h));
93 //qDebug() << "m_value=" << m_value << " vof=" << vof << " low=" << low << " vpix=" << vpix << " ntic=" << ntic << " tmod=" <<tmod;
97 if(m_style == COMPASS_UP) {
100 if(vv==0) strcpy(s," N");
101 if(vv==90) strcpy(s," E");
102 if(vv==180) strcpy(s," S");
103 if(vv==270) strcpy(s," W");
105 sprintf(s,"%3.0f",v);
109 // qDebug() << v << vpix;
111 painter->drawText(QPoint(20, vpix+fontHeight/2),s);
112 painter->drawLine(0,vpix,th,vpix);
113 for(i=0;i<m_tickMinor;i++) painter->drawLine(0,vpix+i*(m_tickSpacing/m_tickMinor),th/2,vpix+i*(m_tickSpacing/m_tickMinor));
116 painter->drawText(QPoint(w-vpix-20,fontHeight+th),s);
117 painter->drawLine(w-vpix,th,w-vpix,0);
118 for(i=0;i<m_tickMinor;i++) painter->drawLine(w-(vpix+i*(m_tickSpacing/m_tickMinor)),th/2,w-(vpix+i*(m_tickSpacing/m_tickMinor)),0);
122 painter->restore(); // Restore and remove clicping rectabgle