int w=size().width();
int xd;
int yd;
- int th=10;
+ int th=m_tickLength;
// int y = pgs->y;
// int x = pgs->x;
char s[80];
QFontMetrics fm(m_font);
int fontHeight=fm.ascent();
- if (m_style == UP) {
+ if ((m_style == UP) || (m_style == COMPASS_UP)) {
xd = 1;
yd = 0;
}
// float low = floor(m_value - ((h * m_tickIncrement)/(m_tickSpacing * 2))/m_tickIncrement)*m_tickIncrement; // Lowest value to display
float vof = floor(m_value / m_tickIncrement) * m_tickIncrement; // Value rounded to lover tick increment
float tmod= fmod (m_value,m_tickIncrement) * m_tickSpacing/m_tickIncrement; // Modulus as pixels
- ntic=ceil(h/(m_tickSpacing));
+ ntic=ceil((yd?h:w)/(m_tickSpacing));
float low=vof-(ntic/2)*m_tickIncrement;
// fval = (m_value - ((tin + 1) * m_tickIncrement)) - (m_value%m_tickIncrement);
// t = h - tin * m_tickSpacing - ((m_value%m_tickIncrement) * tpix/m_tickIncrement);
v = low;
int vpix=tmod+(ntic+1)*m_tickSpacing;
- if(yd) {
- QBrush brush(m_backColor);
- painter->setBrush(brush);
+
+ QBrush bbrush(m_backColor);
+ painter->setBrush(bbrush);
painter->drawRect(0,0, w,h);
- painter->drawLine(0,h/2,w,h/2);
+ if(yd) painter->drawLine(0,h/2,w,h/2);
+ else painter->drawLine(w/2,0,w/2,h);
painter->setClipRect(QRect(0,0,w,h));
- }
+
//qDebug() << "m_value=" << m_value << " vof=" << vof << " low=" << low << " vpix=" << vpix << " ntic=" << ntic << " tmod=" <<tmod;
int i=0;
while(vpix >0) {
-
- sprintf(s,"%3.0f",v);
+ int vv=v;
+ if(m_style == COMPASS_UP) {
+ vv=(vv+360)%360;
+ sprintf(s,"%3d",vv);
+ if(vv==0) strcpy(s," N");
+ if(vv==90) strcpy(s," E");
+ if(vv==180) strcpy(s," S");
+ if(vv==270) strcpy(s," W");
+ } else
+ sprintf(s,"%3.0f",v);
v+=m_tickIncrement;
vpix-=m_tickSpacing;
i++;
painter->drawLine(0,vpix,th,vpix);
for(i=0;i<m_tickMinor;i++) painter->drawLine(0,vpix+i*(m_tickSpacing/m_tickMinor),th/2,vpix+i*(m_tickSpacing/m_tickMinor));
}
- else painter->drawText(QPoint(vpix-20,30),s);
-
- // printf("t=%d v=%d x=%d y=%d %s\n",t,v,x+20,y+t,s);
+ else {
+ painter->drawText(QPoint(w-vpix-20,fontHeight+th),s);
+ painter->drawLine(w-vpix,th,w-vpix,0);
+ 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);
+ }
}
painter->restore(); // Restore and remove clicping rectabgle