summaryrefslogtreecommitdiffstats
path: root/kspread/kspread_sheetprint.cc
diff options
context:
space:
mode:
Diffstat (limited to 'kspread/kspread_sheetprint.cc')
-rw-r--r--kspread/kspread_sheetprint.cc1807
1 files changed, 0 insertions, 1807 deletions
diff --git a/kspread/kspread_sheetprint.cc b/kspread/kspread_sheetprint.cc
deleted file mode 100644
index 3cc26bf3e..000000000
--- a/kspread/kspread_sheetprint.cc
+++ /dev/null
@@ -1,1807 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>,
- 2003 Philipp Mller <philipp.mueller@gmx.de>
- 2005 Raphael Langerhorst <raphael.langerhorst@kdemail.net>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
-*/
-
-#include "kspread_sheet.h"
-#include "selection.h"
-#include "kspread_locale.h"
-#include "kspread_doc.h"
-#include "kspread_undo.h"
-
-#include "kspread_sheetprint.h"
-
-#include "commands.h"
-#include <KoDocumentInfo.h>
-
-#include <tdemessagebox.h>
-#include <kprinter.h>
-#include <kdebug.h>
-
-#include <tqregexp.h>
-
-#include <pwd.h>
-#include <unistd.h>
-
-#include "kspread_sheetprint.moc"
-
-#define NO_MODIFICATION_POSSIBLE \
-do { \
- KMessageBox::error( 0, i18n ( "You cannot change a protected sheet" ) ); return; \
-} while(0)
-
-using namespace KSpread;
-
-SheetPrint::SheetPrint( Sheet* sheet )
-{
- m_pSheet = sheet;
- m_pDoc = m_pSheet->doc();
-
- m_bPrintGrid = false;
- m_bPrintCommentIndicator = false;
- m_bPrintFormulaIndicator = false;
- m_bPrintObjects = true;
- m_bPrintCharts = true;
- m_bPrintGraphics = true;
-
- m_leftBorder = 20.0;
- m_rightBorder = 20.0;
- m_topBorder = 20.0;
- m_bottomBorder = 20.0;
-
- m_paperFormat = KoPageFormat::defaultFormat();
- m_orientation = PG_PORTRAIT;
- m_paperWidth = MM_TO_POINT( KoPageFormat::width( m_paperFormat, m_orientation ) );
- m_paperHeight = MM_TO_POINT( KoPageFormat::height( m_paperFormat, m_orientation ) );
- m_printRange = TQRect( TQPoint( 1, 1 ), TQPoint( KS_colMax, KS_rowMax ) );
- m_lnewPageListX.append( 1 );
- m_lnewPageListY.append( 1 );
- m_maxCheckedNewPageX = 1;
- m_maxCheckedNewPageY = 1;
- m_dPrintRepeatColumnsWidth = 0.0;
- m_dPrintRepeatRowsHeight = 0.0;
- m_printRepeatColumns = tqMakePair( 0, 0 );
- m_printRepeatRows = tqMakePair( 0, 0 );
- m_dZoom = 1.0;
- m_iPageLimitX = 0;
- m_iPageLimitY = 0;
-
- calcPaperSize();
-}
-
-SheetPrint::~SheetPrint()
-{
- // nothing todo yet
-}
-
-TQString SheetPrint::saveOasisSheetStyleLayout( KoGenStyles &mainStyles )
-{
- KoGenStyle pageLayout( KoGenStyle::STYLE_PAGELAYOUT );
- //pageLayout.addAttribute( "style:page-usage", "all" ); FIXME
- pageLayout.addPropertyPt( "fo:page-width", MM_TO_POINT( paperWidth() ) );
- pageLayout.addPropertyPt( "fo:page-height", MM_TO_POINT( paperHeight() ) );
- pageLayout.addProperty( "style:print-orientation", orientation() == PG_LANDSCAPE ? "landscape" : "portrait" );
- pageLayout.addPropertyPt( "fo:margin-left", MM_TO_POINT(leftBorder() ) );
- pageLayout.addPropertyPt( "fo:margin-top", MM_TO_POINT(topBorder() ) );
- pageLayout.addPropertyPt( "fo:margin-right", MM_TO_POINT(rightBorder() ) );
- pageLayout.addPropertyPt( "fo:margin-bottom", MM_TO_POINT(bottomBorder() ) );
- //necessary for print setup
- m_pSheet->saveOasisPrintStyleLayout( pageLayout );
-
- return mainStyles.lookup( pageLayout, "pm" );
-}
-
-
-TQRect SheetPrint::cellsPrintRange()
-{
- // Find maximum right/bottom cell with content
- TQRect cell_range;
- cell_range.setCoords( 1, 1, 1, 1 );
-
- Cell* c = m_pSheet->firstCell();
- for( ;c; c = c->nextCell() )
- {
- if ( c->needsPrinting() )
- {
- if ( c->column() > cell_range.right() )
- cell_range.setRight( c->column() );
- if ( c->row() > cell_range.bottom() )
- cell_range.setBottom( c->row() );
- }
- }
-
- // Now look at the children
- TQPtrListIterator<KoDocumentChild> cit( m_pDoc->children() );
- double dummy;
- int i;
- for( ; cit.current(); ++cit )
- {
- //TQRect, because KoChild doesn't use KoRect yet
- TQRect bound = cit.current()->boundingRect();
-
- i = m_pSheet->leftColumn( bound.right(), dummy );
- if ( i > cell_range.right() )
- cell_range.setRight( i );
-
- i = m_pSheet->topRow( bound.bottom(), dummy );
- if ( i > cell_range.bottom() )
- cell_range.setBottom( i );
- }
- cell_range = cell_range.intersect( m_printRange );
-
- return cell_range;
-}
-
-int SheetPrint::pagesX( const TQRect& cellsPrintRange )
-{
- int pages = 0;
-
- updateNewPageX( m_pSheet->rightColumn( m_pSheet->dblColumnPos( cellsPrintRange.right() ) + prinsheetWidthPts() ) );
-
- for( int i = cellsPrintRange.left(); i <= cellsPrintRange.right(); i++ )
- {
- if( isOnNewPageX( i ) )
- pages++;
- }
- return pages;
-}
-
-int SheetPrint::pagesY( const TQRect& cellsPrintRange )
-{
- int pages = 0;
-
- updateNewPageY( m_pSheet->bottomRow( m_pSheet->dblRowPos( cellsPrintRange.bottom() ) + prinsheetHeightPts() ) );
-
- for( int i = cellsPrintRange.top(); i <= cellsPrintRange.bottom(); i++ )
- {
- if( isOnNewPageY( i ) )
- pages++;
- }
- return pages;
-}
-
-
-bool SheetPrint::pageNeedsPrinting( TQRect& page_range )
-{
- // bool filled = false;
-
- // Look at the cells
- for( int r = page_range.top(); r <= page_range.bottom() ; ++r )
- for( int c = page_range.left(); c <= page_range.right() ; ++c )
- if ( m_pSheet->cellAt( c, r )->needsPrinting() )
- {
- return true;
- }
- // filled = true;
-
- //Page empty, but maybe children on it?
-
- TQRect intView = TQRect( TQPoint( m_pDoc->zoomItX( m_pSheet->dblColumnPos( page_range.left() ) ),
- m_pDoc->zoomItY( m_pSheet->dblRowPos( page_range.top() ) ) ),
- TQPoint( m_pDoc->zoomItX( m_pSheet->dblColumnPos( page_range.right() ) +
- m_pSheet->columnFormat( page_range.right() )->dblWidth() ),
- m_pDoc->zoomItY( m_pSheet->dblRowPos( page_range.bottom() ) +
- m_pSheet->rowFormat( page_range.bottom() )->dblHeight() ) ) );
-
- TQPtrListIterator<KoDocumentChild> it( m_pDoc->children() );
- for( ;it.current(); ++it )
- {
- TQRect bound = it.current()->boundingRect();
- if ( bound.intersects( intView ) )
- {
- return true;
- }
- //filled = true;
- }
-
-
- //Page has no visible content on it, so we don't need to paint it
- return false;
-}
-
-bool SheetPrint::print( TQPainter &painter, KPrinter *_printer )
-{
- kdDebug(36001)<<"PRINTING ...."<<endl;
-
- // Override the current grid pen setting, when set to disable
- TQPen gridPen;
- bool oldShowGrid = m_pSheet->getShowGrid();
- m_pSheet->setShowGrid( m_bPrintGrid );
- if ( !m_bPrintGrid )
- {
- gridPen = TQPen( m_pDoc->gridColor(), 1, TQt::SolidLine );
- TQPen nopen;
- nopen.setStyle( Qt::NoPen );
- m_pDoc->setGridColor( TQt::white );
- }
-
- //Update m_dPrintRepeatColumnsWidth for repeated columns
- //just in case it isn't done yet
- if ( !m_pSheet->isShowPageBorders() && m_printRepeatColumns.first != 0 )
- updatePrintRepeatColumnsWidth();
-
- //Update m_dPrintRepeatRowsHeight for repeated rows
- //just in case it isn't done yet
- if ( !m_pSheet->isShowPageBorders() && m_printRepeatRows.first != 0 )
- updatePrintRepeatRowsHeight();
-
- //Calculate the range to be printed
- TQRect cell_range = cellsPrintRange();
- kdDebug()<<"cellsPrintRange() :"<<cellsPrintRange()<<endl;
- //Ensure, that our newPage lists are generated for the whole sheet to print
- //For this we add to the lists the width/height of 1 page
- updateNewPageX( m_pSheet->rightColumn( m_pSheet->dblColumnPos( cell_range.right() ) + prinsheetWidthPts() ) );
- updateNewPageY( m_pSheet->bottomRow( m_pSheet->dblRowPos( cell_range.bottom() ) + prinsheetHeightPts() ) );
-
- // Find out how many pages need printing
- // and which cells to print on which page.
- TQValueList<TQRect> page_list; //contains the cols and rows of a page
- TQValueList<KoRect> page_frame_list; //contains the coordinate range of a page
- TQValueList<KoPoint> page_frame_list_offset; //contains the offset of the not repeated area
-
- TQValueList<PrintNewPageEntry>::iterator itX;
- TQValueList<PrintNewPageEntry>::iterator itY;
- for( itX = m_lnewPageListX.begin(); itX != m_lnewPageListX.end(); ++itX )
- {
- for( itY = m_lnewPageListY.begin(); itY != m_lnewPageListY.end(); ++itY )
- {
- TQRect page_range( TQPoint( (*itX).startItem(), (*itY).startItem() ),
- TQPoint( (*itX).endItem(), (*itY).endItem() ) );
- kdDebug()<<" page_range :"<<page_range<<endl;
- //Append page when there is something to print
- if ( pageNeedsPrinting( page_range ) )
- {
- KoRect view = KoRect( KoPoint( m_pSheet->dblColumnPos( page_range.left() ),
- m_pSheet->dblRowPos( page_range.top() ) ),
- KoPoint( m_pSheet->dblColumnPos( page_range.right() ) +
- m_pSheet->columnFormat( page_range.right() )->dblWidth(),
- m_pSheet->dblRowPos( page_range.bottom() ) +
- m_pSheet->rowFormat( page_range.bottom() )->dblHeight() ) );
- page_list.append( page_range );
- page_frame_list.append( view );
- page_frame_list_offset.append( KoPoint( (*itX).offset(), (*itY).offset() ) );
- }
- }
- }
-
-
- kdDebug(36001) << "PRINTING " << page_list.count() << " pages" << endl;
- m_uprintPages = page_list.count();
-
-
- //Cache all object so they only need to be repainted once.
- TQPtrListIterator<EmbeddedObject> itObject( m_pDoc->embeddedObjects() );
- for ( ; itObject.current(); ++itObject )
- {
- EmbeddedObject *obj = itObject.current();
- if ( obj->sheet() != m_pSheet ||
- !( (( obj->getType() == OBJECT_KOFFICE_PART || obj->getType() == OBJECT_PICTURE ) && m_bPrintObjects) ||
- ( obj->getType() == OBJECT_CHART && m_bPrintCharts ) ) )
- continue;
-
- TQRect zoomRect = m_pDoc->zoomRect( itObject.current()->geometry() );
- TQPixmap *p = new TQPixmap( zoomRect.size() );
- TQPainter painter(p);
- painter.fillRect( p->rect(), TQColor("white") );
- painter.translate( -zoomRect.x(), -zoomRect.y() ); //we cant to paint at (0,0)
- bool const isSelected = itObject.current()->isSelected();
- itObject.current()->setSelected( false );
- itObject.current()->draw( &painter );
- painter.end();
- itObject.current()->setSelected( isSelected );
-
- PrintObject *po = new PrintObject();
- m_printObjects.append( po );
- po->obj = itObject.current();
- po->p = p;
- }
-
- if ( page_list.count() == 0 )
- {
- // nothing to print
- painter.setPen( TQPen( TQt::black, 1 ) );
- painter.drawPoint( 1, 1 );
- }
- else
- {
-
- int pageNo = 1;
-
- //
- // Print all pages in the list
- //
- TQValueList<TQRect>::Iterator it = page_list.begin();
- TQValueList<KoRect>::Iterator fit = page_frame_list.begin();
- TQValueList<KoPoint>::Iterator fito = page_frame_list_offset.begin();
-
- for( ; it != page_list.end(); ++it, ++fit, ++fito, ++pageNo )
- {
- painter.setClipRect( 0, 0, m_pDoc->zoomItX( paperWidthPts() ),
- m_pDoc->zoomItY( paperHeightPts() ) );
- printHeaderFooter( painter, pageNo );
-
- painter.translate( m_pDoc->zoomItX( leftBorderPts() ),
- m_pDoc->zoomItY( topBorderPts() ) );
-
- // Print the page
- printPage( painter, *it, *fit, *fito );
-
- painter.translate( - m_pDoc->zoomItX( leftBorderPts() ),
- - m_pDoc->zoomItY( topBorderPts() ) );
-
- if ( pageNo < (int)page_list.count() )
- _printer->newPage();
- }
- }
-
- if ( !m_bPrintGrid )
- {
- // Restore the grid pen
- m_pDoc->setGridColor( gridPen.color() );
- }
- m_pSheet->setShowGrid( oldShowGrid );
-
- TQValueList<PrintObject *>::iterator it;
- for ( it = m_printObjects.begin(); it != m_printObjects.end(); ++it )
- delete (*it)->p;
- m_printObjects.clear();
-
- return ( page_list.count() > 0 );
-}
-
-void SheetPrint::printPage( TQPainter &_painter, const TQRect& page_range,
- const KoRect& view, const KoPoint _childOffset )
-{
- kdDebug(36001) << "Rect x=" << page_range.left() << " y=" << page_range.top() << ", r="
- << page_range.right() << " b=" << page_range.bottom() << " offsetx: "<< _childOffset.x()
- << " offsety: " << _childOffset.y() <<" view-x: "<<view.x()<< endl;
-
- //Don't paint on the page borders
- TQRegion clipRegion( m_pDoc->zoomItX( leftBorderPts() ),
- m_pDoc->zoomItY( topBorderPts() ),
- m_pDoc->zoomItX( view.width() + _childOffset.x() ),
- m_pDoc->zoomItY( view.height() + _childOffset.y() ) );
- _painter.setClipRegion( clipRegion );
-
- //
- // Draw the cells.
- //
- //Check if we have to repeat some rows and columns (top left rect)
- if ( ( _childOffset.x() != 0.0 ) && ( _childOffset.y() != 0.0 ) )
- {
- //TQRect(left,top,width,height) <<<< WIDTH AND HEIGHT!!!
- TQRect _printRect( m_printRepeatColumns.first, m_printRepeatRows.first,
- m_printRepeatColumns.second - m_printRepeatColumns.first + 1,
- m_printRepeatRows.second - m_printRepeatRows.first + 1);
- KoPoint _topLeft( 0.0, 0.0 );
-
- printRect( _painter, _topLeft, _printRect, view, clipRegion );
- }
-
- //Check if we have to repeat some rows (left rect)
- if ( _childOffset.y() != 0 )
- {
- TQRect _printRect( page_range.left(), m_printRepeatRows.first,
- page_range.right() - page_range.left() + 1,
- m_printRepeatRows.second - m_printRepeatRows.first + 1);
- KoPoint _topLeft( _childOffset.x(), 0.0 );
-
- printRect( _painter, _topLeft, _printRect, view, clipRegion );
- }
-
- //Check if we have to repeat some columns (top right rect)
- if ( _childOffset.x() != 0 )
- {
- TQRect _printRect( m_printRepeatColumns.first, page_range.top(),
- m_printRepeatColumns.second - m_printRepeatColumns.first + 1,
- page_range.bottom() - page_range.top() + 1);
- KoPoint _topLeft( 0.0, _childOffset.y() );
-
- printRect( _painter, _topLeft, _printRect, view, clipRegion );
- }
-
-
- //Print the cells (right data rect)
- KoPoint _topLeft( _childOffset.x(), _childOffset.y() );
-
- printRect( _painter, _topLeft, page_range, view, clipRegion );
-}
-
-
-void SheetPrint::printRect( TQPainter& painter, const KoPoint& topLeft,
- const TQRect& printRect, const KoRect& view,
- TQRegion &clipRegion )
-{
- //
- // Draw the cells.
- //
- Cell *cell;
- RowFormat *row_lay;
- ColumnFormat *col_lay;
-
- double xpos = 0;
- double ypos = topLeft.y();
-
- int regionBottom = printRect.bottom();
- int regionRight = printRect.right();
- int regionLeft = printRect.left();
- int regionTop = printRect.top();
-
- //Calculate the output rect
- KoPoint bottomRight( topLeft );
- for ( int x = regionLeft; x <= regionRight; ++x )
- bottomRight.setX( bottomRight.x()
- + m_pSheet->columnFormat( x )->dblWidth() );
- for ( int y = regionTop; y <= regionBottom; ++y )
- bottomRight.setY( bottomRight.y()
- + m_pSheet->rowFormat( y )->dblHeight() );
- KoRect rect( topLeft, bottomRight );
-
- TQValueList<TQPoint> mergedCellsPainted;
- for ( int y = regionTop; y <= regionBottom; ++y )
- {
- row_lay = m_pSheet->rowFormat( y );
- xpos = topLeft.x();
-
- for ( int x = regionLeft; x <= regionRight; ++x )
- {
- col_lay = m_pSheet->columnFormat( x );
-
- cell = m_pSheet->cellAt( x, y );
-
- bool paintBordersBottom = false;
- bool paintBordersRight = false;
- bool paintBordersLeft = false;
- bool paintBordersTop = false;
-
- TQPen rightPen = cell->effRightBorderPen( x, y );
- TQPen leftPen = cell->effLeftBorderPen( x, y );
- TQPen bottomPen = cell->effBottomBorderPen( x, y );
- TQPen topPen = cell->effTopBorderPen( x, y );
-
- // paint right border if rightmost cell or if the pen is more "worth" than the left border pen
- // of the cell on the left or if the cell on the right is not painted. In the latter case get
- // the pen that is of more "worth"
- if ( x >= KS_colMax )
- paintBordersRight = true;
- else
- if ( x == regionRight )
- {
- paintBordersRight = true;
- if ( cell->effRightBorderValue( x, y ) < m_pSheet->cellAt( x + 1, y )->effLeftBorderValue( x + 1, y ) )
- rightPen = m_pSheet->cellAt( x + 1, y )->effLeftBorderPen( x + 1, y );
- }
- else
- {
- paintBordersRight = true;
- if ( cell->effRightBorderValue( x, y ) < m_pSheet->cellAt( x + 1, y )->effLeftBorderValue( x + 1, y ) )
- rightPen = m_pSheet->cellAt( x + 1, y )->effLeftBorderPen( x + 1, y );
- }
-
- // similiar for other borders...
- // bottom border:
- if ( y >= KS_rowMax )
- paintBordersBottom = true;
- else
- if ( y == regionBottom )
- {
- paintBordersBottom = true;
- if ( cell->effBottomBorderValue( x, y ) < m_pSheet->cellAt( x, y + 1 )->effTopBorderValue( x, y + 1) )
- bottomPen = m_pSheet->cellAt( x, y + 1 )->effTopBorderPen( x, y + 1 );
- }
- else
- {
- paintBordersBottom = true;
- if ( cell->effBottomBorderValue( x, y ) < m_pSheet->cellAt( x, y + 1 )->effTopBorderValue( x, y + 1) )
- bottomPen = m_pSheet->cellAt( x, y + 1 )->effTopBorderPen( x, y + 1 );
- }
-
- // left border:
- if ( x == 1 )
- paintBordersLeft = true;
- else
- if ( x == regionLeft )
- {
- paintBordersLeft = true;
- if ( cell->effLeftBorderValue( x, y ) < m_pSheet->cellAt( x - 1, y )->effRightBorderValue( x - 1, y ) )
- leftPen = m_pSheet->cellAt( x - 1, y )->effRightBorderPen( x - 1, y );
- }
- else
- {
- paintBordersLeft = true;
- if ( cell->effLeftBorderValue( x, y ) < m_pSheet->cellAt( x - 1, y )->effRightBorderValue( x - 1, y ) )
- leftPen = m_pSheet->cellAt( x - 1, y )->effRightBorderPen( x - 1, y );
- }
-
- // top border:
- if ( y == 1 )
- paintBordersTop = true;
- else
- if ( y == regionTop )
- {
- paintBordersTop = true;
- if ( cell->effTopBorderValue( x, y ) < m_pSheet->cellAt( x, y - 1 )->effBottomBorderValue( x, y - 1 ) )
- topPen = m_pSheet->cellAt( x, y - 1 )->effBottomBorderPen( x, y - 1 );
- }
- else
- {
- paintBordersTop = true;
- if ( cell->effTopBorderValue( x, y ) < m_pSheet->cellAt( x, y - 1 )->effBottomBorderValue( x, y - 1 ) )
- topPen = m_pSheet->cellAt( x, y - 1 )->effBottomBorderPen( x, y - 1 );
- }
-
- int paintBorder=Cell::Border_None;
- if (paintBordersLeft) paintBorder |= Cell::Border_Left;
- if (paintBordersRight) paintBorder |= Cell::Border_Right;
- if (paintBordersTop) paintBorder |= Cell::Border_Top;
- if (paintBordersBottom) paintBorder |= Cell::Border_Bottom;
-
- TQPen highlightPen;
-
- if ( m_pSheet->layoutDirection()==Sheet::RightToLeft )
- cell->paintCell( rect, painter, NULL,
- KoPoint( view.width() - xpos -
- col_lay->dblWidth(), ypos ), TQPoint( x, y ),
- paintBorder,
- rightPen, bottomPen, leftPen, topPen,
- mergedCellsPainted);
- else
- cell->paintCell( rect, painter, NULL,
- KoPoint( xpos, ypos ), TQPoint( x, y ),
- paintBorder,
- rightPen, bottomPen, leftPen, topPen,
- mergedCellsPainted);
-
- xpos += col_lay->dblWidth();
- }
-
- ypos += row_lay->dblHeight();
- }
-
- //
- // Draw the children
- //
- TQRect zoomedView = m_pDoc->zoomRect( view );
- //TQPtrListIterator<KoDocumentChild> it( m_pDoc->children() );
- //TQPtrListIterator<EmbeddedObject> itObject( m_pDoc->embeddedObjects() );
-
- TQValueList<PrintObject *>::iterator itObject;
- for ( itObject = m_printObjects.begin(); itObject != m_printObjects.end(); ++itObject ) {
- EmbeddedObject *obj = (*itObject)->obj;
-// TQString tmp=TQString("Testing child %1/%2 %3/%4 against view %5/%6 %7/%8")
-// .arg(it.current()->contentRect().left())
-// .arg(it.current()->contentRect().top())
-// .arg(it.current()->contentRect().right())
-// .arg(it.current()->contentRect().bottom())
-// .arg(view.left()).arg(view.top()).arg(zoomedView.right()).arg(zoomedView.bottom());
-// kdDebug(36001)<<tmp<<" offset "<<_childOffset.x()<<"/"<<_childOffset.y()<<endl;
-
- KoRect const bound = obj->geometry();
- TQRect zoomedBound = m_pDoc->zoomRect( KoRect(bound.left(), bound.top(),
- bound.width(),
- bound.height() ) );
-#if 1
-// kdDebug(36001) << "printRect(): Bounding rect of view: " << view
-// << endl;
-// kdDebug(36001) << "printRect(): Bounding rect of zoomed view: "
-// << zoomedView << endl;
-// kdDebug(36001) << "printRect(): Bounding rect of child: " << bound
-// << endl;
-// kdDebug(36001) << "printRect(): Bounding rect of zoomed child: "
-// << zoomedBound << endl;
-#endif
- if ( obj->sheet() == m_pSheet && zoomedBound.intersects( zoomedView ) )
- {
- painter.save();
-
- painter.translate( -zoomedView.left() + m_pDoc->zoomItX( topLeft.x() ),
- -zoomedView.top() + m_pDoc->zoomItY( topLeft.y() ) );
-
- //obj->draw( &painter );
- painter.drawPixmap( m_pDoc->zoomRect( obj->geometry() ).topLeft(), *(*itObject)->p ); //draw the cached object
-
- //painter.fillRect(zoomedBound, TQBrush("red")); //for debug purpose
- painter.restore();
- }
- }
-
- //Don't let obscuring cells and children overpaint this area
- clipRegion -= TQRegion ( m_pDoc->zoomItX( leftBorderPts() + topLeft.x() ),
- m_pDoc->zoomItY( topBorderPts() + topLeft.y() ),
- m_pDoc->zoomItX( xpos ),
- m_pDoc->zoomItY( ypos ) );
- painter.setClipRegion( clipRegion );
-}
-
-
-void SheetPrint::printHeaderFooter( TQPainter &painter, int pageNo )
-{
- double w;
- double headFootDistance = MM_TO_POINT( 10.0 /*mm*/ ) / m_dZoom;
- TQFont font( "Times" );
- font.setPointSizeFloat( 0.01 * m_pDoc->zoom() *
- /* Font size of 10 */ 10.0 / m_dZoom );
- painter.setFont( font );
- TQFontMetrics fm = painter.fontMetrics();
-
- // print head line left
- w = fm.width( headLeft( pageNo, m_pSheet->sheetName() ) ) / m_dZoom;
- if ( w > 0 )
- painter.drawText( m_pDoc->zoomItX( leftBorderPts() ),
- m_pDoc->zoomItY( headFootDistance ),
- headLeft( pageNo, m_pSheet->sheetName() ) );
- // print head line middle
- w = fm.width( headMid( pageNo, m_pSheet->sheetName() ) ) / m_dZoom;
- if ( w > 0 )
- painter.drawText( (int) ( m_pDoc->zoomItX( leftBorderPts() ) +
- ( m_pDoc->zoomItX( prinsheetWidthPts() ) -
- w ) / 2.0 ),
- m_pDoc->zoomItY( headFootDistance ),
- headMid( pageNo, m_pSheet->sheetName() ) );
- // print head line right
- w = fm.width( headRight( pageNo, m_pSheet->sheetName() ) ) / m_dZoom;
- if ( w > 0 )
- painter.drawText( m_pDoc->zoomItX( leftBorderPts() +
- prinsheetWidthPts() ) - (int) w,
- m_pDoc->zoomItY( headFootDistance ),
- headRight( pageNo, m_pSheet->sheetName() ) );
-
- // print foot line left
- w = fm.width( footLeft( pageNo, m_pSheet->sheetName() ) ) / m_dZoom;
- if ( w > 0 )
- painter.drawText( m_pDoc->zoomItX( leftBorderPts() ),
- m_pDoc->zoomItY( paperHeightPts() - headFootDistance ),
- footLeft( pageNo, m_pSheet->sheetName() ) );
- // print foot line middle
- w = fm.width( footMid( pageNo, m_pSheet->sheetName() ) ) / m_dZoom;
- if ( w > 0 )
- painter.drawText( (int) ( m_pDoc->zoomItX( leftBorderPts() ) +
- ( m_pDoc->zoomItX( prinsheetWidthPts() ) -
- w ) / 2.0 ),
- m_pDoc->zoomItY( paperHeightPts() - headFootDistance ),
- footMid( pageNo, m_pSheet->sheetName() ) );
- // print foot line right
- w = fm.width( footRight( pageNo, m_pSheet->sheetName() ) ) / m_dZoom;
- if ( w > 0 )
- painter.drawText( m_pDoc->zoomItX( leftBorderPts() +
- prinsheetWidthPts() ) -
- (int) w,
- m_pDoc->zoomItY( paperHeightPts() - headFootDistance ),
- footRight( pageNo, m_pSheet->sheetName() ) );
-}
-
-
-bool SheetPrint::isOnNewPageX( int _column )
-{
- if( _column > m_maxCheckedNewPageX )
- updateNewPageX( _column );
-
- //Are these the edges of the print range?
- if ( _column == m_printRange.left() || _column == m_printRange.right() + 1 )
- {
- return true;
- }
-
- //beyond the print range it's always false
- if ( _column < m_printRange.left() || _column > m_printRange.right() )
- {
- return false;
- }
-
- //Now check if we find the column already in the list
- if ( m_lnewPageListX.findIndex( _column ) != -1 )
- {
- if( _column > m_maxCheckedNewPageX )
- m_maxCheckedNewPageX = _column;
- return true;
- }
- return false;
-}
-
-
-void SheetPrint::updateNewPageX( int _column )
-{
- float offset = 0.0;
-
- //Are these the edges of the print range?
- if ( _column == m_printRange.left() || _column == m_printRange.right() + 1 )
- {
- if( _column > m_maxCheckedNewPageX )
- m_maxCheckedNewPageX = _column;
- return;
- }
-
- //We don't check beyond the print range
- if ( _column < m_printRange.left() || _column > m_printRange.right() )
- {
- if( _column > m_maxCheckedNewPageX )
- m_maxCheckedNewPageX = _column;
- if ( _column > m_printRange.right() )
- {
- if ( m_lnewPageListX.last().endItem()==0 )
- m_lnewPageListX.last().setEndItem( m_printRange.right() );
- }
- return;
- }
-
- //If we start, then add the left printrange
- if ( m_lnewPageListX.empty() )
- m_lnewPageListX.append( m_printRange.left() ); //Add the first entry
-
- //If _column is greater than the last entry, we need to calculate the result
- if ( _column > m_lnewPageListX.last().startItem() &&
- _column > m_maxCheckedNewPageX ) //this columns hasn't been calculated before
- {
- int startCol = m_lnewPageListX.last().startItem();
- int col = startCol;
- double x = m_pSheet->columnFormat( col )->dblWidth();
-
- //Add repeated column width, when necessary
- if ( col > m_printRepeatColumns.first )
- {
- x += m_dPrintRepeatColumnsWidth;
- offset = m_dPrintRepeatColumnsWidth;
- }
-
- while ( ( col <= _column ) && ( col < m_printRange.right() ) )
- {
- if ( x > prinsheetWidthPts() ) //end of page?
- {
- //We found a new page, so add it to the list
- m_lnewPageListX.append( col );
-
- //Now store into the previous entry the enditem and the width
- TQValueList<PrintNewPageEntry>::iterator it;
- it = findNewPageColumn( startCol );
- (*it).setEndItem( col - 1 );
- (*it).setSize( x - m_pSheet->columnFormat( col )->dblWidth() );
- (*it).setOffset( offset );
-
- //start a new page
- startCol = col;
- if ( col == _column )
- {
- if( _column > m_maxCheckedNewPageX )
- m_maxCheckedNewPageX = _column;
- return;
- }
- else
- {
- x = m_pSheet->columnFormat( col )->dblWidth();
- if ( col >= m_printRepeatColumns.first )
- {
- x += m_dPrintRepeatColumnsWidth;
- offset = m_dPrintRepeatColumnsWidth;
- }
- }
- }
-
- col++;
- x += m_pSheet->columnFormat( col )->dblWidth();
- }
- }
-
- if( _column > m_maxCheckedNewPageX )
- m_maxCheckedNewPageX = _column;
-}
-
-
-bool SheetPrint::isOnNewPageY( int _row )
-{
- if( _row > m_maxCheckedNewPageY )
- updateNewPageY( _row );
-
- //Are these the edges of the print range?
- if ( _row == m_printRange.top() || _row == m_printRange.bottom() + 1 )
- {
- return true;
- }
-
- //beyond the print range it's always false
- if ( _row < m_printRange.top() || _row > m_printRange.bottom() )
- {
- return false;
- }
-
- //Now check if we find the row already in the list
- if ( m_lnewPageListY.findIndex( _row ) != -1 )
- {
- if( _row > m_maxCheckedNewPageY )
- m_maxCheckedNewPageY = _row;
- return true;
- }
-
- return false;
-}
-
-
-void SheetPrint::updateNewPageY( int _row )
-{
- float offset = 0.0;
-
- //Are these the edges of the print range?
- if ( _row == m_printRange.top() || _row == m_printRange.bottom() + 1 )
- {
- if( _row > m_maxCheckedNewPageY )
- m_maxCheckedNewPageY = _row;
- return;
- }
-
- //beyond the print range it's always false
- if ( _row < m_printRange.top() || _row > m_printRange.bottom() )
- {
- if( _row > m_maxCheckedNewPageY )
- m_maxCheckedNewPageY = _row;
- if ( _row > m_printRange.bottom() )
- {
- if ( m_lnewPageListY.last().endItem()==0 )
- m_lnewPageListY.last().setEndItem( m_printRange.bottom() );
- }
- return;
- }
-
- //If we start, then add the top printrange
- if ( m_lnewPageListY.empty() )
- m_lnewPageListY.append( m_printRange.top() ); //Add the first entry
-
- //If _column is greater than the last entry, we need to calculate the result
- if ( _row > m_lnewPageListY.last().startItem() &&
- _row > m_maxCheckedNewPageY ) //this columns hasn't been calculated before
- {
- int startRow = m_lnewPageListY.last().startItem();
- int row = startRow;
- double y = m_pSheet->rowFormat( row )->dblHeight();
-
- //Add repeated row height, when necessary
- if ( row > m_printRepeatRows.first )
- {
- y += m_dPrintRepeatRowsHeight;
- offset = m_dPrintRepeatRowsHeight;
- }
-
- while ( ( row <= _row ) && ( row < m_printRange.bottom() ) )
- {
- if ( y > prinsheetHeightPts() )
- {
- //We found a new page, so add it to the list
- m_lnewPageListY.append( row );
-
- //Now store into the previous entry the enditem and the width
- TQValueList<PrintNewPageEntry>::iterator it;
- it = findNewPageRow( startRow );
- (*it).setEndItem( row - 1 );
- (*it).setSize( y - m_pSheet->rowFormat( row )->dblHeight() );
- (*it).setOffset( offset );
-
- //start a new page
- startRow = row;
- if ( row == _row )
- {
- if( _row > m_maxCheckedNewPageY )
- m_maxCheckedNewPageY = _row;
- return;
- }
- else
- {
- y = m_pSheet->rowFormat( row )->dblHeight();
- if ( row >= m_printRepeatRows.first )
- {
- y += m_dPrintRepeatRowsHeight;
- offset = m_dPrintRepeatRowsHeight;
- }
- }
- }
-
- row++;
- y += m_pSheet->rowFormat( row )->dblHeight();
- }
- }
-
- if( _row > m_maxCheckedNewPageY )
- m_maxCheckedNewPageY = _row;
-}
-
-
-void SheetPrint::updateNewPageListX( int _col )
-{
- //If the new range is after the first entry, we need to delete the whole list
- if ( m_lnewPageListX.first().startItem() != m_printRange.left() ||
- _col == 0 )
- {
- m_lnewPageListX.clear();
- m_maxCheckedNewPageX = m_printRange.left();
- m_lnewPageListX.append( m_printRange.left() );
- return;
- }
-
- if ( _col < m_lnewPageListX.last().startItem() )
- {
- //Find the page entry for this column
- TQValueList<PrintNewPageEntry>::iterator it;
- it = m_lnewPageListX.find( _col );
- while ( ( it == m_lnewPageListX.end() ) && _col > 0 )
- {
- _col--;
- it = m_lnewPageListX.find( _col );
- }
-
- //Remove later pages
- while ( it != m_lnewPageListX.end() )
- it = m_lnewPageListX.remove( it );
-
- //Add default page when list is now empty
- if ( m_lnewPageListX.empty() )
- m_lnewPageListX.append( m_printRange.left() );
- }
-
- m_maxCheckedNewPageX = _col;
-}
-
-void SheetPrint::updateNewPageListY( int _row )
-{
- //If the new range is after the first entry, we need to delete the whole list
- if ( m_lnewPageListY.first().startItem() != m_printRange.top() ||
- _row == 0 )
- {
- m_lnewPageListY.clear();
- m_maxCheckedNewPageY = m_printRange.top();
- m_lnewPageListY.append( m_printRange.top() );
- return;
- }
-
- if ( _row < m_lnewPageListY.last().startItem() )
- {
- //Find the page entry for this row
- TQValueList<PrintNewPageEntry>::iterator it;
- it = m_lnewPageListY.find( _row );
- while ( ( it == m_lnewPageListY.end() ) && _row > 0 )
- {
- _row--;
- it = m_lnewPageListY.find( _row );
- }
-
- //Remove later pages
- while ( it != m_lnewPageListY.end() )
- it = m_lnewPageListY.remove( it );
-
- //Add default page when list is now empty
- if ( m_lnewPageListY.empty() )
- m_lnewPageListY.append( m_printRange.top() );
- }
-
- m_maxCheckedNewPageY = _row;
-}
-
-void SheetPrint::definePrintRange( Selection* selectionInfo )
-{
- if ( !selectionInfo->isSingular() )
- {
- KCommand* command = new DefinePrintRangeCommand( m_pSheet );
- m_pDoc->addCommand( command );
- setPrintRange( selectionInfo->selection() );
- }
-}
-
-void SheetPrint::resetPrintRange ()
-{
- KCommand* command = new DefinePrintRangeCommand( m_pSheet );
- m_pDoc->addCommand( command );
- setPrintRange( TQRect( TQPoint( 1, 1 ), TQPoint( KS_colMax, KS_rowMax ) ) );
-}
-
-void SheetPrint::replaceHeadFootLineMacro ( TQString &_text, const TQString &_search, const TQString &_replace )
-{
- if ( _search != _replace )
- _text.replace ( TQString( "<" + _search + ">" ), "<" + _replace + ">" );
-}
-
-TQString SheetPrint::localizeHeadFootLine ( const TQString &_text )
-{
- TQString tmp = _text;
-
- /*
- i18n:
- Please use the same words (even upper/lower case) as in
- KoPageLayoutDia.cc function setupTab2(), without the brakets "<" and ">"
- */
- replaceHeadFootLineMacro ( tmp, "page", i18n("page") );
- replaceHeadFootLineMacro ( tmp, "pages", i18n("pages") );
- replaceHeadFootLineMacro ( tmp, "file", i18n("file") );
- replaceHeadFootLineMacro ( tmp, "name", i18n("name") );
- replaceHeadFootLineMacro ( tmp, "time", i18n("time") );
- replaceHeadFootLineMacro ( tmp, "date", i18n("date") );
- replaceHeadFootLineMacro ( tmp, "author", i18n("author") );
- replaceHeadFootLineMacro ( tmp, "email", i18n("email") );
- replaceHeadFootLineMacro ( tmp, "org", i18n("org") );
- replaceHeadFootLineMacro ( tmp, "sheet", i18n("sheet") );
-
- return tmp;
-}
-
-
-TQString SheetPrint::delocalizeHeadFootLine ( const TQString &_text )
-{
- TQString tmp = _text;
-
- /*
- i18n:
- Please use the same words (even upper/lower case) as in
- KoPageLayoutDia.cc function setupTab2(), without the brakets "<" and ">"
- */
- replaceHeadFootLineMacro ( tmp, i18n("page"), "page" );
- replaceHeadFootLineMacro ( tmp, i18n("pages"), "pages" );
- replaceHeadFootLineMacro ( tmp, i18n("file"), "file" );
- replaceHeadFootLineMacro ( tmp, i18n("name"), "name" );
- replaceHeadFootLineMacro ( tmp, i18n("time"), "time" );
- replaceHeadFootLineMacro ( tmp, i18n("date"), "date" );
- replaceHeadFootLineMacro ( tmp, i18n("author"), "author" );
- replaceHeadFootLineMacro ( tmp, i18n("email"), "email" );
- replaceHeadFootLineMacro ( tmp, i18n("org"), "org" );
- replaceHeadFootLineMacro ( tmp, i18n("sheet"), "sheet" );
-
- return tmp;
-}
-
-
-KoHeadFoot SheetPrint::headFootLine() const
-{
- KoHeadFoot hf;
- hf.headLeft = m_headLeft;
- hf.headRight = m_headRight;
- hf.headMid = m_headMid;
- hf.footLeft = m_footLeft;
- hf.footRight = m_footRight;
- hf.footMid = m_footMid;
-
- return hf;
-}
-
-
-void SheetPrint::setHeadFootLine( const TQString &_headl, const TQString &_headm, const TQString &_headr,
- const TQString &_footl, const TQString &_footm, const TQString &_footr )
-{
- if ( m_pSheet->isProtected() )
- NO_MODIFICATION_POSSIBLE;
-
- m_headLeft = _headl;
- m_headRight = _headr;
- m_headMid = _headm;
- m_footLeft = _footl;
- m_footRight = _footr;
- m_footMid = _footm;
-
- m_pDoc->setModified( true );
-}
-
-void SheetPrint::setPaperOrientation( KoOrientation _orient )
-{
- if ( m_pSheet->isProtected() )
- NO_MODIFICATION_POSSIBLE;
-
- m_orientation = _orient;
- calcPaperSize();
- updatePrintRepeatColumnsWidth();
- updatePrintRepeatRowsHeight();
- updateNewPageListX( m_printRange.left() ); //Reset the list
- updateNewPageListY( m_printRange.top() ); //Reset the list
-
- if( m_pSheet->isShowPageBorders() )
- emit sig_updateView( m_pSheet );
-}
-
-
-KoPageLayout SheetPrint::paperLayout() const
-{
- KoPageLayout pl;
- pl.format = m_paperFormat;
- pl.orientation = m_orientation;
- pl.ptWidth = m_paperWidth;
- pl.ptHeight = m_paperHeight;
- pl.ptLeft = m_leftBorder;
- pl.ptRight = m_rightBorder;
- pl.ptTop = m_topBorder;
- pl.ptBottom = m_bottomBorder;
- return pl;
-}
-
-
-void SheetPrint::setPaperLayout( float _leftBorder, float _topBorder,
- float _rightBorder, float _bottomBorder,
- KoFormat _paper,
- KoOrientation _orientation )
-{
- if ( m_pSheet->isProtected() )
- NO_MODIFICATION_POSSIBLE;
-
- m_leftBorder = _leftBorder;
- m_rightBorder = _rightBorder;
- m_topBorder = _topBorder;
- m_bottomBorder = _bottomBorder;
- m_paperFormat = _paper;
-
- setPaperOrientation( _orientation ); //calcPaperSize() is done here already
-
-// TQPtrListIterator<KoView> it( views() );
-// for( ;it.current(); ++it )
-// {
-// View *v = static_cast<View *>( it.current() );
- // We need to trigger the appropriate repaintings in the cells near the
- // border of the page. The easiest way for this is to turn the borders
- // off and on (or on and off if they were off).
-// bool bBorderWasShown = v->activeSheet()->isShowPageBorders();
-// v->activeSheet()->setShowPageBorders( !bBorderWasShown );
-// v->activeSheet()->setShowPageBorders( bBorderWasShown );
-// }
-
- m_pDoc->setModified( true );
-}
-
-void SheetPrint::setPaperLayout( float _leftBorder, float _topBorder,
- float _rightBorder, float _bottomBorder,
- const TQString& _paper,
- const TQString& _orientation )
-{
- if ( m_pSheet->isProtected() )
- NO_MODIFICATION_POSSIBLE;
-
- KoFormat f = paperFormat();
- KoOrientation newOrientation = orientation();
-
- if ( _orientation == "Portrait" )
- newOrientation = PG_PORTRAIT;
- else if ( _orientation == "Landscape" )
- newOrientation = PG_LANDSCAPE;
-
-
- TQString paper( _paper );
- if ( paper[0].isDigit() ) // Custom format
- {
- const int i = paper.find( 'x' );
- if ( i < 0 )
- {
- // We have nothing useful, so assume ISO A4
- f = PG_DIN_A4;
- }
- else
- {
- f = PG_CUSTOM;
- m_paperWidth = paper.left(i).toFloat();
- m_paperHeight = paper.mid(i+1).toFloat();
- if ( m_paperWidth < 10.0 )
- m_paperWidth = KoPageFormat::width( PG_DIN_A4, newOrientation );
- if ( m_paperHeight < 10.0 )
- m_paperHeight = KoPageFormat::height( PG_DIN_A4, newOrientation );
- }
- }
- else
- {
- f = KoPageFormat::formatFromString( paper );
- if ( f == PG_CUSTOM )
- // We have no idea about height or width, therefore assume ISO A4
- f = PG_DIN_A4;
- }
- setPaperLayout( _leftBorder, _topBorder, _rightBorder, _bottomBorder, f, newOrientation );
-}
-
-void SheetPrint::calcPaperSize()
-{
- if ( m_paperFormat != PG_CUSTOM )
- {
- m_paperWidth = KoPageFormat::width( m_paperFormat, m_orientation );
- m_paperHeight = KoPageFormat::height( m_paperFormat, m_orientation );
- }
-}
-
-TQValueList<PrintNewPageEntry>::iterator SheetPrint::findNewPageColumn( int col )
-{
- TQValueList<PrintNewPageEntry>::iterator it;
- for( it = m_lnewPageListX.begin(); it != m_lnewPageListX.end(); ++it )
- {
- if( (*it).startItem() == col )
- return it;
- }
- return it;
-// TQValueList<PrintNewPageEntry>::iterator it;
-// it = m_lnewPageListX.find( startCol );
-}
-
-TQValueList<PrintNewPageEntry>::iterator SheetPrint::findNewPageRow( int row )
-{
- TQValueList<PrintNewPageEntry>::iterator it;
- for( it = m_lnewPageListY.begin(); it != m_lnewPageListY.end(); ++it )
- {
- if( (*it).startItem() == row )
- return it;
- }
- return it;
-}
-
-
-TQString SheetPrint::paperFormatString()const
-{
- if ( m_paperFormat == PG_CUSTOM )
- {
- TQString tmp;
- tmp.sprintf( "%fx%f", m_paperWidth, m_paperHeight );
- return tmp;
- }
-
- return KoPageFormat::formatString( m_paperFormat );
-}
-
-const char* SheetPrint::orientationString() const
-{
- switch( m_orientation )
- {
- case KPrinter::Portrait:
- return "Portrait";
- case KPrinter::Landscape:
- return "Landscape";
- }
-
- kdWarning(36001)<<"SheetPrint: Unknown orientation, using now portrait"<<endl;
- return 0;
-}
-
-TQString SheetPrint::completeHeading( const TQString &_data, int _page, const TQString &_sheet ) const
-{
- TQString page( TQString::number( _page) );
- TQString pages( TQString::number( m_uprintPages ) );
-
- TQString pathFileName(m_pDoc->url().path());
- if ( pathFileName.isNull() )
- pathFileName="";
-
- TQString fileName(m_pDoc->url().fileName());
- if( fileName.isNull())
- fileName="";
-
- TQString t(TQTime::currentTime().toString());
- TQString d(TQDate::currentDate().toString());
- TQString ta;
- if ( !_sheet.isEmpty() )
- ta = _sheet;
-
- KoDocumentInfo * info = m_pDoc->documentInfo();
- KoDocumentInfoAuthor * authorPage = static_cast<KoDocumentInfoAuthor *>(info->page( "author" ));
- TQString full_name;
- TQString email_addr;
- TQString organization;
- TQString tmp;
- if ( !authorPage )
- kdWarning() << "Author information not found in Document Info !" << endl;
- else
- {
- full_name = authorPage->fullName();
- email_addr = authorPage->email();
- organization = authorPage->company();
- }
-
- char hostname[80];
- struct passwd *p;
-
- p = getpwuid(getuid());
- gethostname(hostname, sizeof(hostname));
-
- if(full_name.isEmpty())
- full_name=p->pw_gecos;
-
- if( email_addr.isEmpty())
- email_addr = TQString("%1@%2").arg(p->pw_name).arg(hostname);
-
- tmp = _data;
- int pos = 0;
- while ( ( pos = tmp.find( "<page>", pos ) ) != -1 )
- tmp.replace( pos, 6, page );
- pos = 0;
- while ( ( pos = tmp.find( "<pages>", pos ) ) != -1 )
- tmp.replace( pos, 7, pages );
- pos = 0;
- while ( ( pos = tmp.find( "<file>", pos ) ) != -1 )
- tmp.replace( pos, 6, pathFileName );
- pos = 0;
- while ( ( pos = tmp.find( "<name>", pos ) ) != -1 )
- tmp.replace( pos, 6, fileName );
- pos = 0;
- while ( ( pos = tmp.find( "<time>", pos ) ) != -1 )
- tmp.replace( pos, 6, t );
- pos = 0;
- while ( ( pos = tmp.find( "<date>", pos ) ) != -1 )
- tmp.replace( pos, 6, d );
- pos = 0;
- while ( ( pos = tmp.find( "<author>", pos ) ) != -1 )
- tmp.replace( pos, 8, full_name );
- pos = 0;
- while ( ( pos = tmp.find( "<email>", pos ) ) != -1 )
- tmp.replace( pos, 7, email_addr );
- pos = 0;
- while ( ( pos = tmp.find( "<org>", pos ) ) != -1 )
- tmp.replace( pos, 5, organization );
- pos = 0;
- while ( ( pos = tmp.find( "<sheet>", pos ) ) != -1 )
- tmp.replace( pos, 7, ta );
-
- return tmp;
-}
-
-void SheetPrint::setPrintRange( const TQRect &_printRange )
-{
- if ( m_pSheet->isProtected() )
- NO_MODIFICATION_POSSIBLE;
-
-
- if ( m_printRange == _printRange )
- return;
-
- int oldLeft = m_printRange.left();
- int oldTop = m_printRange.top();
- m_printRange = _printRange;
-
- //Refresh calculation of stored page breaks, the lower one of old and new
- if ( oldLeft != _printRange.left() )
- updateNewPageListX( TQMIN( oldLeft, _printRange.left() ) );
- if ( oldTop != _printRange.top() )
- updateNewPageListY( TQMIN( oldTop, _printRange.top() ) );
-
- m_pDoc->setModified( true );
-
- emit sig_updateView( m_pSheet );
-
-}
-
-void SheetPrint::setPageLimitX( int pages )
-{
- //We do want an update in any case because the sheet content
- //could have changed, thus we need to recalculate although
- //it's the same setting!
-// if( m_iPageLimitX == pages )
-// return;
-
- m_iPageLimitX = pages;
-
- if( pages == 0 )
- return;
-
- calculateZoomForPageLimitX();
-}
-
-void SheetPrint::setPageLimitY( int pages )
-{
- //We do want an update in any case because the sheet content
- //could have changed, thus we need to recalculate although
- //it's the same setting!
-// if( m_iPageLimitY == pages )
-// return;
-
- m_iPageLimitY = pages;
-
- if( pages == 0 )
- return;
-
- calculateZoomForPageLimitY();
-}
-
-void SheetPrint::calculateZoomForPageLimitX()
-{
- kdDebug() << "Calculating zoom for X limit" << endl;
- if( m_iPageLimitX == 0 )
- return;
-
- double origZoom = m_dZoom;
-
- if( m_dZoom < 1.0 )
- m_dZoom = 1.0;
-
- TQRect printRange = cellsPrintRange();
- updateNewPageX( m_pSheet->rightColumn( m_pSheet->dblColumnPos( printRange.right() ) + prinsheetWidthPts() ) );
- int currentPages = pagesX( printRange );
-
- if (currentPages <= m_iPageLimitX)
- return;
-
- //calculating a factor for scaling the zoom down makes it lots faster
- double factor = (double)m_iPageLimitX/(double)currentPages +
- 1-(double)currentPages/((double)currentPages+1); //add possible error;
- kdDebug() << "Calculated factor for scaling m_dZoom: " << factor << endl;
- m_dZoom = m_dZoom*factor;
-
- kdDebug() << "New exact zoom: " << m_dZoom << endl;
-
- if (m_dZoom < 0.01)
- m_dZoom = 0.01;
- if (m_dZoom > 1.0)
- m_dZoom = 1.0;
-
- m_dZoom = (((int)(m_dZoom*100 + 0.5))/100.0);
-
- kdDebug() << "New rounded zoom: " << m_dZoom << endl;
-
- updatePrintRepeatColumnsWidth();
- updateNewPageListX( 0 );
- updateNewPageX( m_pSheet->rightColumn( m_pSheet->dblColumnPos( printRange.right() ) + prinsheetWidthPts() ) );
- currentPages = pagesX( printRange );
-
- kdDebug() << "Number of pages with this zoom: " << currentPages << endl;
-
- while( ( currentPages > m_iPageLimitX ) && ( m_dZoom > 0.01 ) )
- {
- m_dZoom -= 0.01;
- updatePrintRepeatColumnsWidth();
- updateNewPageListX( 0 );
- updateNewPageX( m_pSheet->rightColumn( m_pSheet->dblColumnPos( printRange.right() ) + prinsheetWidthPts() ) );
- currentPages = pagesX( printRange );
- kdDebug() << "Looping -0.01; current zoom: " << m_dZoom << endl;
- }
-
- if ( m_dZoom < origZoom )
- {
- double newZoom = m_dZoom;
- m_dZoom += 1.0; //set it to something different
- setZoom( newZoom, false );
- }
- else
- m_dZoom = origZoom;
-}
-
-void SheetPrint::calculateZoomForPageLimitY()
-{
- kdDebug() << "Calculating zoom for Y limit" << endl;
- if( m_iPageLimitY == 0 )
- return;
-
- double origZoom = m_dZoom;
-
- if( m_dZoom < 1.0 )
- m_dZoom = 1.0;
-
- TQRect printRange = cellsPrintRange();
- updateNewPageY( m_pSheet->bottomRow( m_pSheet->dblRowPos( printRange.bottom() ) + prinsheetHeightPts() ) );
- int currentPages = pagesY( printRange );
-
- if (currentPages <= m_iPageLimitY)
- return;
-
- double factor = (double)m_iPageLimitY/(double)currentPages +
- 1-(double)currentPages/((double)currentPages+1); //add possible error
- kdDebug() << "Calculated factor for scaling m_dZoom: " << factor << endl;
- m_dZoom = m_dZoom*factor;
-
- kdDebug() << "New exact zoom: " << m_dZoom << endl;
-
- if (m_dZoom < 0.01)
- m_dZoom = 0.01;
- if (m_dZoom > 1.0)
- m_dZoom = 1.0;
-
- m_dZoom = (((int)(m_dZoom*100 + 0.5))/100.0);
-
- kdDebug() << "New rounded zoom: " << m_dZoom << endl;
-
- updatePrintRepeatRowsHeight();
- updateNewPageListY( 0 );
- updateNewPageY( m_pSheet->bottomRow( m_pSheet->dblRowPos( printRange.bottom() ) + prinsheetHeightPts() ) );
- currentPages = pagesY( printRange );
-
- kdDebug() << "Number of pages with this zoom: " << currentPages << endl;
-
- while( ( currentPages > m_iPageLimitY ) && ( m_dZoom > 0.01 ) )
- {
- m_dZoom -= 0.01;
- updatePrintRepeatRowsHeight();
- updateNewPageListY( 0 );
- updateNewPageY( m_pSheet->bottomRow( m_pSheet->dblRowPos( printRange.bottom() ) + prinsheetHeightPts() ) );
- currentPages = pagesY( printRange );
- kdDebug() << "Looping -0.01; current zoom: " << m_dZoom << endl;
- }
-
- if ( m_dZoom < origZoom )
- {
- double newZoom = m_dZoom;
- m_dZoom += 1.0; //set it to something different
- setZoom( newZoom, false );
- }
- else
- m_dZoom = origZoom;
-}
-
-void SheetPrint::setPrintGrid( bool _printGrid )
-{
- if ( m_bPrintGrid == _printGrid )
- return;
-
- m_bPrintGrid = _printGrid;
- m_pDoc->setModified( true );
-}
-
-void SheetPrint::setPrintObjects( bool _printObjects )
-{
- if ( m_bPrintObjects == _printObjects )
- return;
-
- m_bPrintObjects = _printObjects;
- m_pDoc->setModified( true );
-}
-
-void SheetPrint::setPrintCharts( bool _printCharts )
-{
- if ( m_bPrintCharts == _printCharts )
- return;
-
- m_bPrintCharts = _printCharts;
- m_pDoc->setModified( true );
-}
-
-void SheetPrint::setPrintGraphics( bool _printGraphics )
-{
- if ( m_bPrintGraphics == _printGraphics )
- return;
-
- m_bPrintGraphics = _printGraphics;
- m_pDoc->setModified( true );
-}
-
-void SheetPrint::setPrintCommentIndicator( bool _printCommentIndicator )
-{
- if ( m_bPrintCommentIndicator == _printCommentIndicator )
- return;
-
- m_bPrintCommentIndicator = _printCommentIndicator;
- m_pDoc->setModified( true );
-}
-
-void SheetPrint::setPrintFormulaIndicator( bool _printFormulaIndicator )
-{
- if( m_bPrintFormulaIndicator == _printFormulaIndicator )
- return;
-
- m_bPrintFormulaIndicator = _printFormulaIndicator;
- m_pDoc->setModified( true );
-}
-void SheetPrint::updatePrintRepeatColumnsWidth()
-{
- m_dPrintRepeatColumnsWidth = 0.0;
- if( m_printRepeatColumns.first != 0 )
- {
- for( int i = m_printRepeatColumns.first; i <= m_printRepeatColumns.second; i++ )
- {
- m_dPrintRepeatColumnsWidth += m_pSheet->columnFormat( i )->dblWidth();
- }
- }
-}
-
-void SheetPrint::updatePrintRepeatRowsHeight()
-{
- m_dPrintRepeatRowsHeight = 0.0;
- if ( m_printRepeatRows.first != 0 )
- {
- for ( int i = m_printRepeatRows.first; i <= m_printRepeatRows.second; i++)
- {
- m_dPrintRepeatRowsHeight += m_pSheet->rowFormat( i )->dblHeight();
- }
- }
-}
-
-
-void SheetPrint::setPrintRepeatColumns( TQPair<int, int> _printRepeatColumns )
-{
- //Bring arguments in order
- if ( _printRepeatColumns.first > _printRepeatColumns.second )
- {
- int tmp = _printRepeatColumns.first;
- _printRepeatColumns.first = _printRepeatColumns.second;
- _printRepeatColumns.second = tmp;
- }
-
- //If old are equal to the new setting, nothing is to be done at all
- if ( m_printRepeatColumns == _printRepeatColumns )
- return;
-
- int oldFirst = m_printRepeatColumns.first;
- m_printRepeatColumns = _printRepeatColumns;
-
- //Recalcualte the space needed for the repeated columns
- updatePrintRepeatColumnsWidth();
-
- //Refresh calculation of stored page breaks, the lower one of old and new
- updateNewPageListX( TQMIN( oldFirst, _printRepeatColumns.first ) );
-
- //Refresh view, if page borders are shown
- if ( m_pSheet->isShowPageBorders() )
- emit sig_updateView( m_pSheet );
-
- m_pDoc->setModified( true );
-}
-
-void SheetPrint::setPrintRepeatRows( TQPair<int, int> _printRepeatRows )
-{
- //Bring arguments in order
- if ( _printRepeatRows.first > _printRepeatRows.second )
- {
- int tmp = _printRepeatRows.first;
- _printRepeatRows.first = _printRepeatRows.second;
- _printRepeatRows.second = tmp;
- }
-
- //If old are equal to the new setting, nothing is to be done at all
- if ( m_printRepeatRows == _printRepeatRows )
- return;
-
- int oldFirst = m_printRepeatRows.first;
- m_printRepeatRows = _printRepeatRows;
-
- //Recalcualte the space needed for the repeated rows
- updatePrintRepeatRowsHeight();
-
- //Refresh calculation of stored page breaks, the lower one of old and new
- updateNewPageListY( TQMIN( oldFirst, _printRepeatRows.first ) );
-
- //Refresh view, if page borders are shown
- if ( m_pSheet->isShowPageBorders() )
- emit sig_updateView( m_pSheet );
-
- m_pDoc->setModified( true );
-}
-
-void SheetPrint::insertColumn( int col, int nbCol )
-{
- //update print range, when it has been defined
- if ( m_printRange != TQRect( TQPoint(1, 1), TQPoint(KS_colMax, KS_rowMax) ) )
- {
- int left = m_printRange.left();
- int right = m_printRange.right();
-
- for( int i = 0; i <= nbCol; i++ )
- {
- if ( left >= col ) left++;
- if ( right >= col ) right++;
- }
- //Validity checks
- if ( left > KS_colMax ) left = KS_colMax;
- if ( right > KS_colMax ) right = KS_colMax;
- setPrintRange( TQRect( TQPoint( left, m_printRange.top() ),
- TQPoint( right, m_printRange.bottom() ) ) );
- }
-}
-
-void SheetPrint::insertRow( int row, int nbRow )
-{
- //update print range, when it has been defined
- if ( m_printRange != TQRect( TQPoint(1, 1), TQPoint(KS_colMax, KS_rowMax) ) )
- {
- int top = m_printRange.top();
- int bottom = m_printRange.bottom();
-
- for( int i = 0; i <= nbRow; i++ )
- {
- if ( top >= row ) top++;
- if ( bottom >= row ) bottom++;
- }
- //Validity checks
- if ( top > KS_rowMax ) top = KS_rowMax;
- if ( bottom > KS_rowMax ) bottom = KS_rowMax;
- setPrintRange( TQRect( TQPoint( m_printRange.left(), top ),
- TQPoint( m_printRange.right(), bottom ) ) );
- }
-}
-
-void SheetPrint::removeColumn( int col, int nbCol )
-{
- //update print range, when it has been defined
- if ( m_printRange != TQRect( TQPoint(1, 1), TQPoint(KS_colMax, KS_rowMax) ) )
- {
- int left = m_printRange.left();
- int right = m_printRange.right();
-
- for( int i = 0; i <= nbCol; i++ )
- {
- if ( left > col ) left--;
- if ( right >= col ) right--;
- }
- //Validity checks
- if ( left < 1 ) left = 1;
- if ( right < 1 ) right = 1;
- setPrintRange( TQRect( TQPoint( left, m_printRange.top() ),
- TQPoint( right, m_printRange.bottom() ) ) );
- }
-
- //update repeat columns, when it has been defined
- if ( m_printRepeatColumns.first != 0 )
- {
- int left = m_printRepeatColumns.first;
- int right = m_printRepeatColumns.second;
-
- for( int i = 0; i <= nbCol; i++ )
- {
- if ( left > col ) left--;
- if ( right >= col ) right--;
- }
- //Validity checks
- if ( left < 1 ) left = 1;
- if ( right < 1 ) right = 1;
- setPrintRepeatColumns ( tqMakePair( left, right ) );
- }
-}
-
-void SheetPrint::removeRow( int row, int nbRow )
-{
- //update print range, when it has been defined
- if ( m_printRange != TQRect( TQPoint(1, 1), TQPoint(KS_colMax, KS_rowMax) ) )
- {
- int top = m_printRange.top();
- int bottom = m_printRange.bottom();
-
- for( int i = 0; i <= nbRow; i++ )
- {
- if ( top > row ) top--;
- if ( bottom >= row ) bottom--;
- }
- //Validity checks
- if ( top < 1 ) top = 1;
- if ( bottom < 1 ) bottom = 1;
- setPrintRange( TQRect( TQPoint( m_printRange.left(), top ),
- TQPoint( m_printRange.right(), bottom ) ) );
- }
-
- //update repeat rows, when it has been defined
- if ( m_printRepeatRows.first != 0 )
- {
- int top = m_printRepeatRows.first;
- int bottom = m_printRepeatRows.second;
-
- for( int i = 0; i <= nbRow; i++ )
- {
- if ( top > row ) top--;
- if ( bottom >= row ) bottom--;
- }
- //Validity checks
- if ( top < 1 ) top = 1;
- if ( bottom < 1 ) bottom = 1;
- setPrintRepeatRows( tqMakePair( top, bottom ) );
- }
-}
-
-void SheetPrint::setZoom( double _zoom, bool checkPageLimit )
-{
- if( m_dZoom == _zoom )
- {
- return;
- }
-
- m_dZoom = _zoom;
- updatePrintRepeatColumnsWidth();
- updatePrintRepeatRowsHeight();
- updateNewPageListX( 0 );
- updateNewPageListY( 0 );
- if( m_pSheet->isShowPageBorders() )
- emit sig_updateView( m_pSheet );
-
- if( checkPageLimit )
- {
- calculateZoomForPageLimitX();
- calculateZoomForPageLimitY();
- }
-
- m_pDoc->setModified( true );
-}
-
-bool PrintNewPageEntry::operator==( PrintNewPageEntry const & entry ) const
-{
- return m_iStartItem == entry.m_iStartItem;
-}
-