250 const TQRect& ourClipRect,
263 uint chartDatasetStart,
264 uint chartDatasetEnd,
270 uint datasetNum = ( chartDatasetEnd - chartDatasetStart ) + 1;
272 double pixelsPerUnit = 0.0;
276 pixelsPerUnit = logHeight / 10;
279 double pointDist = logWidth / ( ( double ) datasetNum );
284 const int lineWidth =
static_cast<int>( pointDist / 66.0 ) * TQMAX(params()->lineWidth(), 1);
285 const int lineWidthD2 = lineWidth * 2 / 3;
287 const bool noBrush = TQt::NoBrush == params()->bWChartBrush().style();
290 for ( uint dataset = chartDatasetStart;
291 dataset <= chartDatasetEnd;
294 if( dataset >= datasetStart &&
295 dataset <= datasetEnd &&
296 0 < calculateStats( *data, dataset ) ) {
297 const TQColor color( params()->dataColor( dataset ) );
299 double drawUOF = stats[ KDChartParams::UpperOuterFence ] * pixelsPerUnit;
300 double drawUIF = stats[ KDChartParams::UpperInnerFence ] * pixelsPerUnit;
301 double drawQu3 = stats[ KDChartParams::Quartile3 ] * pixelsPerUnit;
302 double drawMed = stats[ KDChartParams::Median ] * pixelsPerUnit;
303 double drawQu1 = stats[ KDChartParams::Quartile1 ] * pixelsPerUnit;
304 double drawLIF = stats[ KDChartParams::LowerInnerFence ] * pixelsPerUnit;
305 double drawLOF = stats[ KDChartParams::LowerOuterFence ] * pixelsPerUnit;
306 double drawMax = stats[ KDChartParams::MaxValue ] * pixelsPerUnit;
307 double drawMin = stats[ KDChartParams::MinValue ] * pixelsPerUnit;
308 double drawMean= stats[ KDChartParams::MeanValue ] * pixelsPerUnit;
310 double drawUWhisker = TQMIN(drawUIF, drawMax);
311 double drawLWhisker = TQMAX(drawLIF, drawMin);
313 const int boxWidth = TQMAX( 6,
static_cast<int>( pointDist * 0.2 ) );
315 int markWidth = params()->bWChartOutValMarkerSize();
316 bool drawOutliers = ( 0 != markWidth );
319 markWidth = TQMAX( 4, markWidth * boxWidth / -100 );
321 markWidth = TQMAX( 4, markWidth );
324 markWidth = boxWidth * 25 / 100;
326 painter->setPen( TQPen( color, lineWidth ) );
327 painter->setBrush( params()->bWChartBrush() );
329 int boxWidthD2 = boxWidth / 2;
330 int xPos =
static_cast<int>(
331 pointDist * ( (double)(dataset - chartDatasetStart) + 0.5 )
333 painter->drawRect( xPos - boxWidthD2,
334 static_cast<int>( zeroXAxisI - drawQu3 ),
336 static_cast<int>( drawQu3 - drawQu1) + 1 );
338 painter->drawLine( xPos - boxWidthD2,
339 static_cast<int>( zeroXAxisI - drawMed ),
340 xPos - boxWidthD2 + boxWidth,
341 static_cast<int>( zeroXAxisI - drawMed ) );
343 painter->drawLine( xPos - boxWidthD2,
344 static_cast<int>( zeroXAxisI - drawUWhisker ),
345 xPos - boxWidthD2 + boxWidth,
346 static_cast<int>( zeroXAxisI - drawUWhisker ) );
347 painter->drawLine( xPos,
348 static_cast<int>( zeroXAxisI - drawUWhisker ),
350 static_cast<int>( zeroXAxisI - drawQu3 ) );
351 painter->drawLine( xPos - boxWidthD2,
352 static_cast<int>( zeroXAxisI - drawLWhisker ),
353 xPos - boxWidthD2 + boxWidth,
354 static_cast<int>( zeroXAxisI - drawLWhisker ) );
355 painter->drawLine( xPos,
356 static_cast<int>( zeroXAxisI - drawLWhisker ),
358 static_cast<int>( zeroXAxisI - drawQu1 ) );
360 int xPos2 =
static_cast<int>(
361 pointDist * ( (double)(dataset - chartDatasetStart) + 0.5 )
363 int markWidthD2 = TQMAX(markWidth / 2, 2);
364 int markWidthD25 = TQMAX(
static_cast<int>( 0.85 * markWidth / 2.0), 2);
365 int markWidthD35 = TQMAX(
static_cast<int>( 0.85 * markWidth / 3.0), 2);
371 for( uint i=0; i<nMax; ++i)
372 if( data->
cellCoord( dataset, i, vVal, 1 ) &&
373 TQVariant::Double == vVal.type() ) {
374 drawVal =
static_cast<int>( pixelsPerUnit * vVal.toDouble() );
375 if( drawLOF > drawVal || drawUOF < drawVal ) {
376 painter->setPen( TQt::NoPen );
377 painter->drawChord( xPos2 - markWidthD2,
378 static_cast<int>(zeroXAxisI - drawVal) - markWidthD2,
382 painter->setPen( TQPen( color, lineWidthD2 ) );
383 painter->drawArc( xPos2 - markWidthD2,
384 static_cast<int>(zeroXAxisI - drawVal) - markWidthD2,
388 }
else if( drawLIF > drawVal || drawUIF < drawVal ) {
389 painter->setPen( TQt::NoPen );
390 painter->drawChord( xPos2 - markWidthD2,
391 static_cast<int>( zeroXAxisI - drawVal) - markWidthD2,
395 painter->setPen( TQPen( color, lineWidthD2 ) );
396 painter->drawLine( xPos2,
397 static_cast<int>(zeroXAxisI - drawVal) - markWidthD2,
399 static_cast<int>(zeroXAxisI - drawVal) + markWidthD2 );
400 painter->drawLine( xPos2 - markWidthD25,
401 static_cast<int>(zeroXAxisI - drawVal) - markWidthD35,
402 xPos2 + markWidthD25,
403 static_cast<int>(zeroXAxisI - drawVal) + markWidthD35 );
404 painter->drawLine( xPos2 + markWidthD25,
405 static_cast<int>(zeroXAxisI - drawVal) - markWidthD35,
406 xPos2 - markWidthD25,
407 static_cast<int>(zeroXAxisI - drawVal) + markWidthD35 );
412 bool evenLineWidthD2 = floor( ((
double)lineWidthD2)/2.0 ) == ((double)lineWidthD2)/2.0;
413 painter->setPen( params()->bWChartBrush().color() );
414 painter->drawChord( xPos2 - markWidthD2-1 - (evenLineWidthD2 ? 0 : 1),
415 static_cast<int>( zeroXAxisI - drawMean ) - markWidthD2 - 1,
416 markWidthD2*2 + (evenLineWidthD2 ? 2 : 3),
417 markWidthD2*2 + (evenLineWidthD2 ? 2 : 3),
423 painter->setPen( TQPen( 128 > v ? color.light(150) : color.dark(150),
426 painter->setPen( TQPen( color, lineWidthD2 ) );
427 painter->drawLine( xPos2 - markWidthD2 - (evenLineWidthD2 ? 0 : 1),
428 static_cast<int>( zeroXAxisI - drawMean ),
430 static_cast<int>( zeroXAxisI - drawMean ) );
431 painter->drawLine( xPos2 - (evenLineWidthD2 ? 0 : 1),
432 static_cast<int>( zeroXAxisI - drawMean ) - markWidthD2,
433 xPos2 - (evenLineWidthD2 ? 0 : 1),
434 static_cast<int>( zeroXAxisI - drawMean ) + markWidthD2 + (evenLineWidthD2 ? 0 : 1) );
437 painter->setPen( TQt::NoPen );
438 for(
int ii = KDChartParams::BWStatValSTART;
439 ii <= KDChartParams::BWStatValEND;
442 if( params()->bWChartPrintStatistics( i ) ) {
443 TQFont statFont( params()->bWChartStatisticsFont( i ) );
444 float nTxtHeight = statFont.pointSizeFloat();
445 if ( params()->bWChartStatisticsUseRelSize( i ) ) {
446 nTxtHeight = params()->bWChartStatisticsFontRelSize( i )
448 statFont.setPointSizeFloat( nTxtHeight );
450 double drawStat = pixelsPerUnit * stats[i];
451 KDChartTextPiece statText( painter, TQString::number( stats[i] ),
453 int tw = statText.width();
454 int xDelta = ( KDChartParams::MaxValue == i
455 || KDChartParams::MeanValue == i
456 || KDChartParams::MinValue == i )
457 ? -1 * (tw +
static_cast<int>( 1.3*boxWidthD2 ))
458 :
static_cast<int>( 1.3*boxWidthD2 );
459 TQBrush brush( params()->bWChartStatisticsBrush( i ) );
460 painter->setBrush( brush );
461 int y =
static_cast<int>( zeroXAxisI - drawStat - nTxtHeight/2);
462 painter->drawRect( xPos + xDelta - 1,
465 TQMAX(
static_cast < int > ( nTxtHeight ), 8) + 1 );
466 statText.draw( painter,
470 params()->bWChartStatisticsColor( i ),