main/sc/source/ui/view/printfun.cxx
//	bNew = TRUE:	benutzten Bereich aus dem Dokument suchen
//	bNew = FALSE:	nur ganze Zeilen/Spalten begrenzen
bNew = TRUE:    benutzten Bereich aus dem Dokument suchen
bNew = FALSE:   nur ganze Zeilen/Spalten begrenzen
bNew = TRUE : benutzten Bereich aus dem Dokument suchen bNew = FALSE : nur ganze Zeilen / Spalten begrenzen
sal_Bool ScPrintFunc::AdjustPrintArea( sal_Bool bNew )
{
	SCCOL nOldEndCol = nEndCol;	
	SCROW nOldEndRow = nEndRow;
	sal_Bool bChangeCol = sal_True;			
	sal_Bool bChangeRow = sal_True;
	sal_Bool bNotes = aTableParam.bNotes;
	if ( bNew )
	{
		nStartCol = 0;
		nStartRow = 0;
		if (!pDoc->GetPrintArea( nPrintTab, nEndCol, nEndRow, bNotes ))
			return sal_False;	
	}
	else
	{
		sal_Bool bFound = sal_True;
		bChangeCol = ( nStartCol == 0 && nEndCol == MAXCOL );
		bChangeRow = ( nStartRow == 0 && nEndRow == MAXROW );
        sal_Bool bForcedChangeRow = sal_False;
        if (!bChangeRow && nStartRow == 0)
        {
            SCROW nPAEndRow;
            bFound = pDoc->GetPrintAreaVer( nPrintTab, nStartCol, nEndCol, nPAEndRow, bNotes );
            const SCROW nFuzzy = 23*42;
            if (nPAEndRow + nFuzzy < nEndRow)
            {
                bForcedChangeRow = sal_True;
                nEndRow = nPAEndRow;
            }
            else
                bFound = sal_True;  
        }
		if ( bChangeCol && bChangeRow )
			bFound = pDoc->GetPrintArea( nPrintTab, nEndCol, nEndRow, bNotes );
		else if ( bChangeCol )
			bFound = pDoc->GetPrintAreaHor( nPrintTab, nStartRow, nEndRow, nEndCol, bNotes );
		else if ( bChangeRow )
			bFound = pDoc->GetPrintAreaVer( nPrintTab, nStartCol, nEndCol, nEndRow, bNotes );
		if (!bFound)
			return sal_False;	
        if (bForcedChangeRow)
            bChangeRow = sal_True;
	}
	pDoc->ExtendMerge( nStartCol,nStartRow, nEndCol,nEndRow, nPrintTab,
						sal_False, sal_True );		
	if ( bChangeCol )
	{
		OutputDevice* pRefDev = pDoc->GetPrinter();		
		pRefDev->SetMapMode( MAP_PIXEL );				
		pDoc->ExtendPrintArea( pRefDev,
							nPrintTab, nStartCol, nStartRow, nEndCol, nEndRow );
	}
	if ( nEndCol < MAXCOL && pDoc->HasAttrib(
					nEndCol,nStartRow,nPrintTab, nEndCol,nEndRow,nPrintTab, HASATTR_SHADOW_RIGHT ) )
		++nEndCol;
	if ( nEndRow < MAXROW && pDoc->HasAttrib(
					nStartCol,nEndRow,nPrintTab, nEndCol,nEndRow,nPrintTab, HASATTR_SHADOW_DOWN ) )
		++nEndRow;
	if (!bChangeCol) nEndCol = nOldEndCol;
	if (!bChangeRow) nEndRow = nOldEndRow;
	return sal_True;
}
sal_Bool ScPrintFunc :: AdjustPrintArea ( sal_Bool bNew ) { SCCOL nOldEndCol = nEndCol ; SCROW nOldEndRow = nEndRow ; sal_Bool bChangeCol = sal_True ; sal_Bool bChangeRow = sal_True ; sal_Bool bNotes = aTableParam . bNotes ; if ( bNew ) { nStartCol = 0 ; nStartRow = 0 ; if ( ! pDoc -> GetPrintArea ( nPrintTab , nEndCol , nEndRow , bNotes ) ) return sal_False ; } else { sal_Bool bFound = sal_True ; bChangeCol = ( nStartCol == 0 && nEndCol == MAXCOL ) ; bChangeRow = ( nStartRow == 0 && nEndRow == MAXROW ) ; sal_Bool bForcedChangeRow = sal_False ; if ( ! bChangeRow && nStartRow == 0 ) { SCROW nPAEndRow ; bFound = pDoc -> GetPrintAreaVer ( nPrintTab , nStartCol , nEndCol , nPAEndRow , bNotes ) ; const SCROW nFuzzy = 23 * 42 ; if ( nPAEndRow + nFuzzy < nEndRow ) { bForcedChangeRow = sal_True ; nEndRow = nPAEndRow ; } else bFound = sal_True ; } if ( bChangeCol && bChangeRow ) bFound = pDoc -> GetPrintArea ( nPrintTab , nEndCol , nEndRow , bNotes ) ; else if ( bChangeCol ) bFound = pDoc -> GetPrintAreaHor ( nPrintTab , nStartRow , nEndRow , nEndCol , bNotes ) ; else if ( bChangeRow ) bFound = pDoc -> GetPrintAreaVer ( nPrintTab , nStartCol , nEndCol , nEndRow , bNotes ) ; if ( ! bFound ) return sal_False ; if ( bForcedChangeRow ) bChangeRow = sal_True ; } pDoc -> ExtendMerge ( nStartCol , nStartRow , nEndCol , nEndRow , nPrintTab , sal_False , sal_True ) ; if ( bChangeCol ) { OutputDevice * pRefDev = pDoc -> GetPrinter ( ) ; pRefDev -> SetMapMode ( MAP_PIXEL ) ; pDoc -> ExtendPrintArea ( pRefDev , nPrintTab , nStartCol , nStartRow , nEndCol , nEndRow ) ; } if ( nEndCol < MAXCOL && pDoc -> HasAttrib ( nEndCol , nStartRow , nPrintTab , nEndCol , nEndRow , nPrintTab , HASATTR_SHADOW_RIGHT ) ) ++ nEndCol ; if ( nEndRow < MAXROW && pDoc -> HasAttrib ( nStartCol , nEndRow , nPrintTab , nEndCol , nEndRow , nPrintTab , HASATTR_SHADOW_DOWN ) ) ++ nEndRow ; if ( ! bChangeCol ) nEndCol = nOldEndCol ; if ( ! bChangeRow ) nEndRow = nOldEndRow ; return sal_True ; }
bNew = TRUE:    benutzten Bereich aus dem Dokument suchen
bNew = FALSE:   nur ganze Zeilen/Spalten begrenzen
bNew = TRUE : benutzten Bereich aus dem Dokument suchen bNew = FALSE : nur ganze Zeilen / Spalten begrenzen
// nur wichtig bei !bNew // bei bNew werden beide angepasst // nix // #i53558# Crop entire column of old row limit to real print area with // some fuzzyness. // Say we don't want to print more than ~1000 empty rows, which are // about 14 pages intentionally left blank.. // user seems to _want_ to print some empty rows // TODO: in case we extend the number of columns we may have to do the // same for horizontal cropping. // leer // kein Refresh, incl. Attrs // auch fuer Preview den Drucker nehmen // wichtig fuer GetNeededSize //	nEndCol wird veraendert