2010-09-02 19:11 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)

* contrib/hbide/hbqreportsmanager.prg
    ! c++ => .prg.
This commit is contained in:
Pritpal Bedi
2010-09-03 02:12:49 +00:00
parent f898b3b1a8
commit f8247a7685
2 changed files with 141 additions and 2 deletions

View File

@@ -16,6 +16,10 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-09-02 19:11 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbide/hbqreportsmanager.prg
! c++ => .prg.
2010-09-01 18:45 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
+ contrib/hbqt/qtgui/doc/en/class_qdoublevalidator.txt
+ contrib/hbqt/qtgui/doc/en/class_qintvalidator.txt

View File

@@ -1368,6 +1368,11 @@ STATIC FUNCTION rmgr_a2arrayStr( aArray )
/*----------------------------------------------------------------------*/
STATIC FUNCTION rmgr_generateNextColor()
RETURN QColor():new( hb_random( 0,255 ), hb_random( 0,255 ), hb_random( 0,255 ), 255 )
/*----------------------------------------------------------------------*/
STATIC FUNCTION rmgr_keyValuePair( s, cKey, cVal, cDlm )
LOCAL n
@@ -1660,16 +1665,16 @@ CLASS HqrGraphicsItem
DATA aPos INIT {}
DATA aGeometry INIT {}
DATA data INIT NIL
DATA xData INIT NIL
METHOD new( oRM, cParent, cType, cName, aPos, aGeometry )
* METHOD create( oRM, cParent, cType, cName )
METHOD text( ... ) SETGET
METHOD pen( ... ) SETGET
METHOD brush( ... ) SETGET
METHOD bgBrush( ... ) SETGET
METHOD draw( ... )
METHOD drawBarChart( qPainter, qRect )
ENDCLASS
@@ -1735,4 +1740,134 @@ METHOD HqrGraphicsItem:draw( ... )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD HqrGraphicsItem:drawBarChart( qPainter, qRect )
LOCAL qFMetrix, maxpv, minnv, absMaxVal, powVal, chartStep, powStep, maxHeight, valstep, maxLabelWidth, minpv
LOCAL pw, rc, maxval, y, i, x, cv, barWidth, lg, py, f, cMaxVal, nDec
LOCAL m_drawBorder := .t.
LOCAL m_showLabels := .t.
LOCAL m_barsIdentation := 1
LOCAL m_showGrid := .t.
LOCAL m_toColorFactor := 1.7
HB_SYMBOL_UNUSED( qPainter )
HB_SYMBOL_UNUSED( qRect )
qFMetrix := QFontMetrics():from( qPainter:fontMetrics() )
IF empty( ::xData )
::xData := {}
aadd( ::xData, { "Bananas", 040.0, rmgr_generateNextColor() } )
aadd( ::xData, { "Oranges", 150.0, rmgr_generateNextColor() } )
aadd( ::xData, { "Mangoes", 120.0, rmgr_generateNextColor() } )
ENDIF
maxpv := 0
minnv := 0
aeval( ::xData, {|e_| iif( e_[ 2 ] < 0, minpv := min( minpv, e_[ 2 ] ), NIL ), iif( e_[ 2 ] < 0, maxpv := max( maxpv, e_[ 2 ] ), NIL ) } )
absMaxVal := maxpv - minnv
cMaxVal := hb_ntos( absMaxVal )
nDec := at( ".", cMaxVal )
powVal := iif( absMaxVal < 1, 10.0^( len( substr( cMaxVal, nDec + 1 ) ) + 1 ), 1 )
maxpv *= powVal
minnv *= powVal
maxpv := maxpv
minnv := -minnv
minnv := -minnv
qPainter:fillRect( qRect, ::brush() )
IF m_drawBorder
qPainter:drawqRect( qRect )
ENDIF
pw := iif( abs( ::pen():widthF() ) > 0, abs( ::pen():widthF() ), 1 )
rc := QRectF():from( qRect:adjusted( pw / 2, pw / 2, -pw, -pw ) )
f := 2
chartStep := ( 10.0 ^ ( len( substr( cMaxval, 1, nDec - 1 ) ) - 1 ) ) / f
powStep := iif( chartStep < 1, 10, 1 )
chartStep *= powStep
maxpv *= powStep
minnv *= powStep
powVal *= powStep
maxpv := maxpv + ( iif( ( maxpv % chartStep ) != 0, ( chartStep - ( maxpv % chartStep ) ), 0 ) ) / powVal
minnv := minnv - ( iif( ( - minnv % chartStep ) != 0, ( chartStep - ( - minnv % chartStep ) ), 0 ) ) / powVal
maxVal := maxpv - minnv
maxHeight := rc:height() - qFMetrix:height()
valstep := maxHeight / ( maxVal / chartStep )
IF ( valstep < qFMetrix:height() )
chartStep *= ( ( ( qFMetrix:height() / valstep ) ) + 1 )
valstep := ( ( ( qFMetrix:height() / valstep ) ) + 1 ) * valstep
ENDIF
IF m_showLabels
maxLabelWidth := 0
FOR i := 0 TO maxVal / chartStep + 1 + iif( ( maxVal % chartStep ) != 0, 1, 0 )
IF ( maxLabelWidth < qFMetrix:width( hb_ntos( ( maxVal * i - chartStep * i ) / powVal ) ) )
maxLabelWidth := qFMetrix:width( hb_ntos( ( maxVal * i - chartStep * i ) / powVal ) )
ENDIF
NEXT
y := 0
FOR i := 0 TO maxVal / chartStep + 1 + iif( ( maxVal % chartStep ) != 0, 1, 0 )
qPainter:drawText( QRectF( rc:x(), rc:y() + y, maxLabelWidth, qFMetrix:height() ), ;
Qt_AlignRight + Qt_AlignVCenter, hb_ntos( ( maxpv - chartStep * i ) / powVal ) )
y += valstep
NEXT
qPainter:drawLine( rc:x() + maxLabelWidth + 1 / UNIT / 4, rc:y(), rc:x() + maxLabelWidth + 1 / UNIT / 4, rc:y() + qRect:height() )
rc := QRectF():from( rc:adjusted( maxLabelWidth + 1 / UNIT / 4, 0, 0, 0 ) )
ENDIF
IF ( m_showGrid )
y := qFMetrix:height() / 2
FOR i := 0 TO maxVal / chartStep + 1 + ( iif( maxVal % chartStep !=0, 1, 0 ) )
qPainter:drawLine( rc:x(), rc:y() + y, rc:x() + rc:width(), rc:y() + y )
y += valstep
NEXT
ENDIF
rc := rc:adjusted( 0, qFMetrix:height() / 2, 0, 0 )
x := m_barsIdentation
barWidth := ( rc:width() - m_barsIdentation * ( len( ::aData ) + 1 ) ) / len( ::aData )
py := maxHeight / maxVal
FOR EACH cv IN ::xData
lg := QLinearGradient():new( QPointF():new( x + barWidth / 2, 0 ), QPointF():new( x + barWidth , 0 ) )
lg:setSpread( QGradient_ReflectSpread )
lg:setColorAt( 0, cv[ 3 ] )
lg:setColorAt( 1, QColor( cv[ 3 ]:red() * m_toColorFactor, cv[ 3 ]:green() * m_toColorFactor, cv[ 3 ]:blue() * m_toColorFactor, cv[ 3 ]:alpha() ) )
qPainter:fillqRect( QRectF( rc:x() + x, rc:y() + py * maxpv - py * cv[ 2 ] * powVal, barWidth, py * cv[ 2 ] * powVal ), QBrush():new( "QGradient", lg ) )
IF ( m_showLabels )
qPainter:drawText( QRectF( rc:x() + x - m_barsIdentation / 2, rc:y() + py * maxpv - iif( cv[ 2 ] >= 0, qFMetrix:height(), 0 ), ;
barWidth + m_barsIdentation, qFMetrix:height() ), Qt_AlignCenter, hb_ntos( cv[ 2 ] ) )
ENDIF
x += barWidth + m_barsIdentation
NEXT
#if 0 /* Legend */
qPainter:fillqRect( qRect, ::brush() )
qPainter:drawqRect( qRect )
qPainter:translate( qRect:topLeft() )
qreal y := 1 / UNIT
qreal vstep := ( qRect:height() - y - 1 / UNIT * val:size() ) / len( ::aData )
FOR EACH cv IN ::aData
{
qPainter:fillqRect( QRectF( 1 / UNIT / 2, y, m_legendColorqRectWidth, vstep ), QBrush():new( cv[ 3 ] ) )
qPainter:drawText( QRectF( 1 / UNIT + m_legendColorqRectWidth, y, qRect:width() - ( 1 / UNIT + m_legendColorqRectWidth ), vstep ),
Qt_AlignVCenter + Qt_AlignLeft, cv[ 1 ] )
y += vstep + 1 / UNIT
}
#endif
RETURN Self
/*----------------------------------------------------------------------*/