Source Code (Use browser search to find items of interest.)
Class Index
kspread'AIStrip (./koffice/kspread/qtai_strip.h:37)
class AIStrip : public AIPlot
{
Q_OBJECT
public:
AIStrip(QWidget *parent,const char *name,int b=1,int t=1);
void addData(double xp,double *yp);
void setViewRange(double xr,double ymn,double ymx);
void setGridUnit(double wox); // Width between of X Axis Scales
double xrange;
protected:
void drawGrid( QPainter *p );
void drawScale( QPainter *p,int direction,int w,int h);
void drawLabel( QPainter *p,int direction,int w,int rw,int h,int rh);
private:
double w_of_x;
};
/*******************************************************************/
/********* End Draw Window Definition *****************************/
/*******************************************************************/
kspread'AIStrip::AIStrip() (./koffice/kspread/qtai_strip.cpp:41)
AIStrip::AIStrip(QWidget *parent,const char *name,int b,int t)
: AIPlot(parent,name,b,t)
{
int i;
for (i=0;i<traces;i++)
qn[0]=0;
xrange=1.0;
w_of_x=10;
xmax=1;
xmax=0;
}
kspread'AIStrip::addData() (./koffice/kspread/qtai_strip.cpp:53)
void AIStrip::addData(double xp,double *yp)
{
int i;
if (qn[0]>=bufsize) {
qn[0]=bufsize-1;
for (i=0;i<traces;i++) {
calced[i]=FALSE;
memmove((char*)&xtrace[i][0],
(char*)&xtrace[i][1],
(bufsize-1)*sizeof(double));
memmove((char*)&ytrace[i][0],
(char*)&ytrace[i][1],
(bufsize-1)*sizeof(double));
}
}
// Set all X Traces
for (i=0;i<traces;i++) {
xtrace[i][qn[0]]=xp;
calced[i]=FALSE;
ytrace[i][qn[0]]=yp[i];
qn[i]=qn[0];
}
// ... BUT Check only on trace 0,
// CAUSE in Strip all Data is based on one time trace
if (xtrace[0][qn[0]]>=getXmax()){
setXRange(xtrace[0][qn[0]]-xrange,xtrace[0][qn[0]]);
} else {
setXRange(xtrace[0][0],xtrace[0][0]+xrange);
}
qn[0]++;
// Hide Cursor, maybe we should use a p_curs..->hide()
for (i=0;i<2;i++)
p_curs[i].set(p_curs[i].x(),p_curs[i].y());
}
kspread'AIStrip::setViewRange() (./koffice/kspread/qtai_strip.cpp:93)
void AIStrip::setViewRange(double xr,double ymn,double ymx)
{
xrange=xr;
setRanges(0,xrange,ymn,ymx);
}
kspread'AIStrip::drawScale() (./koffice/kspread/qtai_strip.cpp:99)
void AIStrip::drawScale( QPainter *p,int direction,int w,int h)
{
int y;
int maxx=8,maxy=8;
int spos,pos;
double shift;
int zx1,zx2,zy1,zy2;
//p->fillRect(0,0,w,h,c_bg);
p->setPen(c_grid);
if (direction & HORIZONTAL) {
zx1=(int)(zoomx1[zoomed_in]*(double)w/100.0f);
zx2=(int)((zoomx2[zoomed_in]-zoomx1[zoomed_in])*(double)w/100.0f);
p->setWindow(zx1,0,zx2,h);
shift=(double)((int)(xmin / w_of_x))*w_of_x;
while(1) {
spos=(int)(((double)shift-(double)xmin)/(double)(xmax-xmin)*(double)w);
if (spos>=zx1 && spos<=zx1+zx2) {
/*
if (!((int)shift % (int) (5*w_of_x))) {
p->drawLine(spos,(int)0,
spos,(int)h);
} else {
*/
p->drawLine(spos,(int)0,
spos,(int)h/2);
}
shift+=w_of_x;
if (shift>=xmax)
break;
}
p->drawLine(zx1,(int)0,zx1,(int)h);
p->drawLine(zx1+zx2,(int)0,zx1+zx2,(int)h);
}
else if (direction & VERTICAL) {
zy1=(int)(zoomy1[zoomed_in]*(double)h/100.0f);
zy2=(int)((zoomy2[zoomed_in]-zoomy1[zoomed_in])*(double)h/100.0f);
p->setWindow(0,zy1,w,zy2);
// Draw vertical scale
for (y=0;y<=maxy;y++) {
pos=(int)(y*h/maxy);
if (pos>=zy1 && pos<=zy1+zy2) {
p->drawLine((int)w/2,pos,(int)w,pos);
}
}
}
}
kspread'AIStrip::drawLabel() (./koffice/kspread/qtai_strip.cpp:157)
void AIStrip::drawLabel( QPainter *p,int direction,int w,int rw,int h,int rh)
{
int y;
int maxx=8,maxy=8;
int tpos;
QString str="";
QFont font("Helvetica",10);
QFontMetrics fm(font);
double rzb,rze;
double lw,lh;
static double lzx1,lzy1,lzx2,lzy2;
time_t tt=0;
struct tm *ts = NULL;
lzx1=zoomx1[zoomed_in],lzy1=zoomy1[zoomed_in];
lzx2=zoomx2[zoomed_in],lzy2=zoomy2[zoomed_in];
//p->fillRect(0,0,w,h,c_bg);
p->setPen(c_grid);
// Calculate begin and end of zoom area to the real world,
// means orig xmin,xmax
if (direction & HORIZONTAL) {
rzb=(double)lzx1*((double)xmax-(double)xmin)/
(double)100.0f + (double)xmin;
rze=(double)lzx2*((double)xmax-(double)xmin)/
(double)100.0f + (double)xmin;
} else if (direction & VERTICAL) {
rzb=(double)(100.0f-lzy1)*((double)ymax-(double)ymin)/
(double)100.0f + (double)ymin;
rze=(double)(100.0f-lzy2)*((double)ymax-(double)ymin)/
(double)100.0f + (double)ymin;
}
p->setFont(font);
// set original width,height e.g.:
// zoom(lzx1,lzx2,lzy1,lzy2) =0,0% to 50,50%,
// window width (rw)= 100 pixel
// => local virtual width,height (lw,hw)= 200 pixel
lw=rw*100.0f/(lzx2-lzx1);
lh=rh*100.0f/(lzy2-lzy1);
if (direction & HORIZONTAL) {
//shift=(double)((int)(xmin / w_of_x))*w_of_x;
#ifdef MOVE_X
while(1) {
spos=(int)(((double)shift-(double)xmin)/(double)(xmax-xmin)*(double)lw);
if (spos>=0) {
str.sprintf("%.2f\0",
(double)(xmin+(xmax-xmin)*(double)spos/(double)lw));
tpos=(int)(spos-lzx1*lw/100.0f-fm.width(str)/2+(w-rw)/2);
if (!(tpos<0 || tpos+fm.width(str)>w)) {
p->drawText(tpos,0+fm.height(),str);
}
}
shift+=w_of_x;
if (shift>=xmax)
break;
}
#else
if ((x_axis_display_type & X_AXIS_NUMBER)==X_AXIS_NUMBER) {
str.sprintf("%.2f\0",(double)rzb);
tpos=(w-rw)/2-fm.width(str)/2;
p->drawText(tpos,0+fm.height(),str);
str.sprintf("%.2f\0",(double)rze);
tpos=w-(w-rw)/2-fm.width(str)/2;
p->drawText(tpos,0+fm.height(),str);
} else if ((x_axis_display_type & X_AXIS_DATE)==X_AXIS_DATE) {
if ((x_axis_display_type & X_AXIS_UK)==X_AXIS_UK) {
} else {
if (rzb<=0.0)
return;
tt=(time_t)rzb;
ts = localtime(&tt);
if (ts==NULL)
return;
str.sprintf("%02d:%02d:%02d\0",
ts->tm_hour,ts->tm_min,ts->tm_sec);
tpos=(w-rw)/2-fm.width(str)/2;
p->drawText(tpos,0+fm.height(),str);
int year=0;
if (ts->tm_year<80) year=2000+ts->tm_year;
else year=1900+ts->tm_year;
str.sprintf("%02d.%02d.%04d\0",
ts->tm_mday,ts->tm_mon+1,year);
p->drawText(tpos,0+2*fm.height(),str);
tt=(time_t)rze;
ts = localtime(&tt);
str.sprintf("%02d:%02d:%02d\0",
ts->tm_hour,ts->tm_min,ts->tm_sec);
tpos=w-(w-rw)/2-fm.width(str)/2;
p->drawText(tpos,0+fm.height(),str);
}
}
#endif
}
else if (direction & VERTICAL) {
for (y=0;y<=maxy;y++) {
str.sprintf("%.2f\0",(double)(ymax+(ymin-ymax)*(double)y/(double)maxy));
tpos=(int)(y*lh/maxy-lzy1*lh/100.0f+fm.height()/2+(h-rh)/2);
if (!(tpos-fm.height()<0 || tpos+fm.height()>h))
p->drawText(w-fm.width(str),tpos,str);
}
}
}
kspread'AIStrip::drawGrid() (./koffice/kspread/qtai_strip.cpp:275)
void AIStrip::drawGrid( QPainter *p )
{
int y;
int maxx=8,maxy=8;
int w=width()*20,h=height()*20;
int spos;
double shift;
int n;
static int bw=-1,bh=-1; // BG Buffer
static QPixmap *bg_buf=NULL;
QPainter bg_p;
QPoint qp(0,0);
QColor c;
w=width();
h=height();
kspread'AIStrip::setGridUnit() (./koffice/kspread/qtai_strip.cpp:334)
void AIStrip::setGridUnit(double wox)
{
w_of_x=wox; // Set the width between 2 X Axis Scales
}