[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/kugar/lib
From: Adam Treat <treat () kde ! org>
Date: 2005-10-06 0:05:52
Message-ID: 1128557152.881794.5541.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 467696 by treat:
* Only draw the detail header once per detail level.
M +64 -48 mreportengine.cpp
M +0 -1 mreportsection.h
--- trunk/koffice/kugar/lib/mreportengine.cpp #467695:467696
@@ -1,11 +1,11 @@
/***************************************************************************
- mreportengine.cpp - Kugar report engine
- -------------------
- begin : Sun Aug 15 1999
- copyright : (C) 1999 by Mutiny Bay Software
- email : info@mutinybaysoftware.com
- copyright : (C) 2002 Alexander Dymo
- email : cloudtemple@mksat.net
+ mreportengine.cpp - Kugar report engine
+ -------------------
+ begin : Sun Aug 15 1999
+ copyright : (C) 1999 by Mutiny Bay Software
+ email : info@mutinybaysoftware.com
+ copyright : (C) 2002 Alexander Dymo
+ email : cloudtemple@mksat.net
***************************************************************************/
#include <qfile.h>
@@ -60,7 +60,7 @@
}
/** Copy constructor */
-MReportEngine::MReportEngine( const MReportEngine& mReportEngine ) /*: \
QObject((QObject &) mReportEngine)*/ +MReportEngine::MReportEngine( const \
MReportEngine& mReportEngine ) /*: QObject((QObject &) mReportEngine)*/ {
copy( &mReportEngine );
}
@@ -87,7 +87,7 @@
grandTotal.clear();
if ( m_pageCollection )
m_pageCollection->removeRef();
- kdDebug(31000) << k_funcinfo << endl;
+ kdDebug( 31000 ) << k_funcinfo << endl;
}
void MReportEngine::addRef()
@@ -269,7 +269,6 @@
*/
MPageCollection* MReportEngine::renderReport()
{
-
if ( !m_needRegeneration )
return m_pageCollection;
if ( m_pageCollection )
@@ -308,7 +307,6 @@
}
}
-
// Initialize the grand total array
grandTotal.clear();
for ( int i = 0; i < rFooter.getCalcFieldCount(); i++ )
@@ -321,6 +319,8 @@
int chkRow = 0;
int curDetailLevel = 0;
int prevDetailLevel = -1;
+ int curDetailHeader = -1;
+ int curDetailFooter = -1;
for ( j = 0; j < rowCount; j++ )
{
@@ -349,6 +349,10 @@
detailValue = fields.namedItem( "level" ).nodeValue();
curDetailLevel = detailValue.toInt();
+ // Reset the header/footer detail levels?
+ curDetailHeader = curDetailLevel > curDetailHeader ? -1 : \
curDetailHeader; + curDetailFooter = curDetailLevel > curDetailFooter ? -1 \
: curDetailFooter; +
// Draw detail footer if appropriate
if ( curDetailLevel <= prevDetailLevel )
{
@@ -373,23 +377,52 @@
}
}
+ MReportDetail *detail = findDetail( detailValue.toInt() );
+ detail->setPageNumber( currPage );
+ detail->setReportDate( currDate );
+
+ int headerHeight = 0;
+ MReportSection * header = findDetailHeader( curDetailLevel );
+ if ( header && curDetailHeader != curDetailLevel )
+ headerHeight = header->getHeight();
+
+ bool repeating = ( currY + detail->getHeight() + headerHeight ) > \
currHeight || + ( detail->getRepeat() && currY + \
heightOfDetails > currHeight ); + if ( repeating )
+ {
+ newPage( pages );
+
+ MReportDetail *sec;
+ for ( sec = details.first(); sec; sec = details.next() )
+ {
+ if ( sec->getLevel() != curDetailLevel && sec->getRepeat() )
+ {
+ sec->draw( &p, leftMargin, currY );
+ currY += sec->getHeight();
+ }
+ }
+ }
+
// Draw detail header for level curDetailLevel
- MReportSection *header = findDetailHeader( curDetailLevel );
- if ( header )
+ // if it hasn't already been drawn
+ if ( curDetailHeader != curDetailLevel || repeating )
{
- header->setPageNumber( currPage );
- header->setReportDate( currDate );
- if ( ( currY + header->getHeight() ) > currHeight )
+ MReportSection * header = findDetailHeader( curDetailLevel );
+ if ( header )
{
- newPage( pages );
+ header->setPageNumber( currPage );
+ header->setReportDate( currDate );
+ if ( ( currY + header->getHeight() ) > currHeight )
+ {
+ newPage( pages );
+ }
+ header->draw( &p, leftMargin, currY );
+ currY += header->getHeight();
+ curDetailHeader = curDetailLevel;
}
- header->draw( &p, leftMargin, currY );
- currY += header->getHeight();
}
- MReportDetail *detail = findDetail( detailValue.toInt() );
unsigned int fieldCount = detail->getFieldCount();
-
for ( i = 0; i < fieldCount; i++ )
{
// Get the field value
@@ -406,24 +439,6 @@
}
}
- detail->setPageNumber( currPage );
- detail->setReportDate( currDate );
- if ( ( currY + detail->getHeight() ) > currHeight ||
- ( detail->getRepeat() && currY + heightOfDetails > currHeight ) \
)
- {
- newPage( pages );
-
- MReportDetail *sec;
- for ( sec = details.first(); sec; sec = details.next() )
- {
- if ( sec->getLevel() != curDetailLevel && sec->getRepeat() )
- {
- sec->draw( &p, leftMargin, currY );
- currY += sec->getHeight();
- }
- }
- }
-
detail->draw( &p, leftMargin, currY );
currY += detail->getHeight();
prevDetailLevel = curDetailLevel;
@@ -676,6 +691,7 @@
heightOfDetails = 0;
#ifdef Q_WS_WIN
+
recalcDimensions();
#endif
@@ -743,16 +759,16 @@
pageWidth = ps.width();
pageHeight = ps.height();
- widthDelta = (float)pageWidth / templateWidth;
- heightDelta = (float)pageHeight / templateheight;
+ widthDelta = ( float ) pageWidth / templateWidth;
+ heightDelta = ( float ) pageHeight / templateheight;
- kdDebug(30001) << "pagewidth: " << pageWidth
- << " pageheight: " << pageHeight << "\n"
- << "templateWidth: " << templateWidth
- << " templateheight: " << templateheight << "\n"
- << "widthDelta: " << widthDelta
- << " heightDelta: " << heightDelta
- << endl;
+ kdDebug( 30001 ) << "pagewidth: " << pageWidth
+ << " pageheight: " << pageHeight << "\n"
+ << "templateWidth: " << templateWidth
+ << " templateheight: " << templateheight << "\n"
+ << "widthDelta: " << widthDelta
+ << " heightDelta: " << heightDelta
+ << endl;
topMargin = scaleDeltaHeight( attributes.namedItem( "TopMargin" \
).nodeValue().toInt() );
bottomMargin = scaleDeltaHeight( attributes.namedItem( "BottomMargin" \
).nodeValue().toInt() );
--- trunk/koffice/kugar/lib/mreportsection.h #467695:467696
@@ -121,7 +121,6 @@
* Used by the copy constructor and assignment operator
*/
void copy( const MReportSection* mReportSection );
-
};
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic