summaryrefslogtreecommitdiffstats
path: root/kugar/lib/mreportviewer.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kugar/lib/mreportviewer.cpp
downloadkoffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz
koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kugar/lib/mreportviewer.cpp')
-rw-r--r--kugar/lib/mreportviewer.cpp411
1 files changed, 411 insertions, 0 deletions
diff --git a/kugar/lib/mreportviewer.cpp b/kugar/lib/mreportviewer.cpp
new file mode 100644
index 00000000..da825f7a
--- /dev/null
+++ b/kugar/lib/mreportviewer.cpp
@@ -0,0 +1,411 @@
+/***************************************************************************
+ mreportviewer.cpp - Kugar QT report viewer widget
+ -------------------
+ begin : Fri Aug 13 1999
+ copyright : (C) 1999 by Mutiny Bay Software
+ email : info@mutinybaysoftware.com
+ copyright : (C) 2002 Alexander Dymo
+ email : cloudtemple@mksat.net
+***************************************************************************/
+
+#include <qapplication.h>
+#include <kmessagebox.h>
+#include <kprinter.h>
+#include <klocale.h>
+
+#include "mreportviewer.h"
+
+namespace Kugar
+{
+
+/** Constructor */
+MReportViewer::MReportViewer( MReportEngine *engine, QWidget *parent, const char *name ) : QWidget( parent, name ), progress( 0 )
+{
+ rptEngine = engine;
+ rptEngine->addRef();
+ init();
+}
+
+MReportViewer::MReportViewer( QWidget *parent, const char *name ) : QWidget( parent, name ), progress( 0 )
+{
+ // Create the scrollview
+ rptEngine = new MReportEngine();
+ init();
+}
+
+void MReportViewer::init()
+{
+ scroller = new QScrollView( this );
+
+ // Connect the rendering update signal and slot
+ connect( rptEngine, SIGNAL( signalRenderStatus( int ) ),
+ SLOT( slotRenderProgress( int ) ) );
+
+ connect( rptEngine, SIGNAL( preferedTemplate( const QString & ) ),
+ SIGNAL( preferedTemplate( const QString & ) ) );
+
+ // Get the current color palette
+ QPalette p = palette();
+ QColorGroup g = p.active();
+
+ // Set the scroller's background color
+ scroller->viewport() ->setBackgroundColor( g.mid() );
+
+ // Create the report display widget
+ display = new MPageDisplay( scroller->viewport() );
+
+ // Set the display's default background color
+ display->setBackgroundColor( white );
+
+ // Add the display to the scrollview
+ scroller->addChild( display );
+
+ //Hide the display, we don't have a report yet ..
+ display->hide();
+}
+
+/** Destructor */
+MReportViewer::~MReportViewer()
+{
+ clearReport();
+ rptEngine->removeRef();
+}
+
+/** Report viewer's paint event */
+void MReportViewer::paintEvent( QPaintEvent* event )
+{}
+
+/** Report viewer's resize event */
+void MReportViewer::resizeEvent( QResizeEvent* event )
+{
+ scroller->resize( event->size() );
+}
+
+// Set the report's data from an in-line string.
+
+bool MReportViewer::setReportData( const QString &data )
+{
+ return rptEngine -> setReportData( data );
+}
+
+
+// Set the report's data from an i/o device.
+
+bool MReportViewer::setReportData( QIODevice *dev )
+{
+ return rptEngine -> setReportData( dev );
+}
+
+
+// Set the report's template from an in-line string.
+
+bool MReportViewer::setReportTemplate( const QString &tpl )
+{
+ return rptEngine -> setReportTemplate( tpl );
+}
+
+
+// Set the report's template from an i/o device.
+
+bool MReportViewer::setReportTemplate( QIODevice *dev )
+{
+ return rptEngine -> setReportTemplate( dev );
+}
+
+
+/** Generates the report's page collection */
+bool MReportViewer::renderReport()
+{
+ // Render the report
+ report = rptEngine->renderReport();
+
+ // Display the first page of the report
+ if ( report && report->getFirstPage() != 0 )
+ {
+ display->setPageDimensions( report->pageDimensions() );
+ display->setPage( report->getFirstPage() );
+ display->show();
+
+ return true;
+ }
+
+ return false;
+}
+
+/** Clears the report's page collection */
+void MReportViewer::clearReport()
+{
+ // Hide the display
+ display->hide();
+}
+
+/** Prints the rendered report to the selected printer - displays KDE print dialog */
+void MReportViewer::printReport()
+{
+ // Check for a report
+ if ( !report )
+ return ;
+
+ // Get the page count
+ int cnt = report->pageCount();
+
+ // Check if there is a report or any pages to print
+ if ( cnt == 0 )
+ {
+ KMessageBox::error( this, i18n( "There are no pages in the\nreport to print." ) );
+ return ;
+ }
+
+ // Set the printer dialog
+ KPrinter printer;
+
+ setupPrinter( printer );
+ if ( printer.setup( this ) )
+ printReport( printer );
+}
+
+/** Shows the first page in the report */
+void MReportViewer::slotFirstPage()
+{
+ QPicture * page;
+
+ if ( !report )
+ return ;
+
+ if ( ( page = report->getFirstPage() ) != 0 )
+ {
+ display->setPage( page );
+ display->repaint();
+ }
+}
+
+/** Shows the next page in the report */
+void MReportViewer::slotNextPage()
+{
+ QPicture * page;
+
+ if ( !report )
+ return ;
+
+ int index = report->getCurrentIndex();
+
+ if ( ( page = report->getNextPage() ) != 0 )
+ {
+ display->setPage( page );
+ display->repaint();
+ }
+ else
+ report->setCurrentPage( index );
+}
+
+/** Shows the prevoius page in the report */
+void MReportViewer::slotPrevPage()
+{
+ QPicture * page;
+
+ if ( !report )
+ return ;
+
+ int index = report->getCurrentIndex();
+
+ if ( ( page = report->getPreviousPage() ) != 0 )
+ {
+ display->setPage( page );
+ display->repaint();
+ }
+ else
+ report->setCurrentPage( index );
+}
+
+/** Shows the last page in the report */
+void MReportViewer::slotLastPage()
+{
+ QPicture * page;
+
+ if ( !report )
+ return ;
+
+ if ( ( page = report->getLastPage() ) != 0 )
+ {
+ display->setPage( page );
+ display->repaint();
+ }
+}
+
+/** Cancel printing of the report */
+void MReportViewer::slotCancelPrinting()
+{
+ printer->abort();
+}
+
+/** Updates rendering progress */
+void MReportViewer::slotRenderProgress( int p )
+{
+
+ // Check if the dialog was created
+ if ( progress == 0 )
+ {
+ totalSteps = rptEngine->getRenderSteps();
+ progress = new QProgressDialog( i18n("Creating report..."), i18n("Cancel"),
+ totalSteps, this, "progress", true );
+ progress->setMinimumDuration( M_PROGRESS_DELAY );
+ }
+
+ // Update the dialog
+ progress->setProgress( p );
+ qApp->processEvents();
+
+ // Check if the action was canceled
+ if ( progress->wasCancelled() )
+ {
+ progress->setProgress( totalSteps );
+ rptEngine->slotCancelRendering();
+ }
+
+ // Cleanup dialog if necessary
+ if ( progress->progress() == -1 )
+ {
+ delete progress;
+ progress = 0;
+ }
+}
+
+
+// Return the preferred size.
+
+QSize MReportViewer::sizeHint() const
+{
+ return scroller -> sizeHint();
+}
+
+void MReportViewer::printReport( KPrinter &printer )
+{
+ // Check for a report
+ if ( !report )
+ return ;
+
+ // Get the page count
+ int cnt = report->pageCount();
+
+ // Check if there is a report or any pages to print
+ if ( cnt == 0 )
+ {
+ KMessageBox::error( this, i18n( "There are no pages in the\nreport to print." ) );
+ return ;
+ }
+
+
+ QPicture* page;
+ QPainter painter;
+ bool printRev;
+
+ // Save the viewer's page index
+ int viewIdx = report->getCurrentIndex();
+
+ // Check the order we are printing the pages
+ if ( printer.pageOrder() == KPrinter::FirstPageFirst )
+ printRev = false;
+ else
+ printRev = true;
+
+ // Get the count of pages and copies to print
+ int printFrom = printer.fromPage() - 1;
+ int printTo = printer.toPage();
+ int printCnt = ( printTo - printFrom );
+ int printCopies = printer.numCopies();
+ int totalSteps = printCnt * printCopies;
+ int currentStep = 1;
+
+ // Set copies to 1, KPrinter copies does not appear to work ...
+ printer.setNumCopies( 1 );
+
+ // Setup the progress dialog
+ QProgressDialog progress( i18n( "Printing report..." ),
+ i18n( "Cancel" ),
+ totalSteps, this, "progress", true );
+ progress.setMinimumDuration( M_PROGRESS_DELAY );
+ QObject::connect( &progress, SIGNAL( cancelled() ), this, SLOT( slotCancelPrinting() ) );
+ progress.setProgress( 0 );
+ qApp->processEvents();
+
+ // Start the printer
+ painter.begin( &printer );
+
+ // Print each copy
+ for ( int j = 0; j < printCopies; j++ )
+ {
+ // Print each page in the collection
+ for ( int i = printFrom ; i < printTo; i++, currentStep++ )
+ {
+ if ( !printer.aborted() )
+ {
+ progress.setProgress( currentStep );
+ qApp->processEvents();
+
+ if ( printRev )
+ report->setCurrentPage( ( printCnt == 1 ) ? i : ( printCnt - 1 ) - i );
+ else
+ report->setCurrentPage( i );
+
+ page = report->getCurrentPage();
+ page->play( &painter );
+ if ( i < printCnt - 1 )
+ printer.newPage();
+ }
+ else
+ {
+ j = printCopies;
+ break;
+ }
+ }
+ if ( j < printCopies - 1 )
+ printer.newPage();
+ }
+
+ // Cleanup printing
+ setCursor( arrowCursor );
+ painter.end();
+ report->setCurrentPage( viewIdx );
+}
+
+void MReportViewer::setupPrinter( KPrinter &printer )
+{
+ int cnt = report->pageCount();
+
+ printer.setPageSize( ( KPrinter::PageSize ) report->pageSize() );
+ printer.setOrientation( ( KPrinter::Orientation ) report->pageOrientation() );
+ printer.setMinMax( 1, cnt );
+ printer.setFromTo( 1, cnt );
+ printer.setFullPage( true );
+}
+
+void MReportViewer::printReportSilent( int printFrom, int printTo, int printCopies, QString printerName )
+{
+ int cnt = report->pageCount();
+ if ( printFrom == -1 )
+ printFrom = 1;
+ if ( printTo == -1 )
+ printTo = cnt;
+ if ( printCopies == -1 )
+ printCopies = 1;
+
+
+ printer = new KPrinter();
+
+ printer->setPageSize( ( KPrinter::PageSize ) report->pageSize() );
+ printer->setOrientation( ( KPrinter::Orientation ) report->pageOrientation() );
+ printer->setMinMax( 1, cnt );
+ printer->setFullPage( true );
+ printer->setNumCopies( printCopies );
+ printer->setFromTo( printFrom, printTo );
+ if ( !printerName.isEmpty() )
+ printer->setPrinterName( printerName );
+
+ printReport( *printer );
+
+ delete printer;
+}
+
+}
+
+#include "mreportviewer.moc"