/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright IBM Corporation 2009. * Copyright 2009 by Sun Microsystems, Inc. * * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: scdpoutputimpl.cxx,v $ * $Revision: 1.0 $ * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org 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 Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sc.hxx" // INCLUDE --------------------------------------------------------------- #include "scdpoutputimpl.hxx" #include "scitems.hxx" #include // ----------------------------------------------------------------------- namespace { bool lcl_compareColfuc ( SCCOL i, SCCOL j) { return (i=2 ) OutputBlockFrame( mnCols[nCol], mnRows[mnRows.size()-2], mnCols[nCol+1]-1, mnRows[mnRows.size()-1]-1 ); } else { for ( SCROW i = 0 ; i < (SCROW)mnRows.size()-1; i++ ) OutputBlockFrame( mnCols[nCol], mnRows[i], mnCols[nCol+1]-1, mnRows[i+1]-1 ); } } else OutputBlockFrame( mnCols[nCol], mnRows.front(), mnCols[nCol+1]-1, mnRows.back()-1, bAllRows ); } //out put rows area outer framer if ( mnTabStartCol != mnDataStartCol ) { if ( mnTabStartRow != mnDataStartRow ) OutputBlockFrame( mnTabStartCol, mnTabStartRow, mnDataStartCol-1, mnDataStartRow-1 ); OutputBlockFrame( mnTabStartCol, mnDataStartRow, mnDataStartCol-1, mnTabEndRow ); } //out put cols area outer framer OutputBlockFrame( mnDataStartCol, mnTabStartRow, mnTabEndCol, mnDataStartRow-1 ); } OutputImpl::OutputImpl( ScDocument* pDoc, sal_uInt16 nTab, SCCOL nTabStartCol, SCROW nTabStartRow, SCCOL nMemberStartCol, SCROW nMemberStartRow, SCCOL nDataStartCol, SCROW nDataStartRow, SCCOL nTabEndCol, SCROW nTabEndRow ): mpDoc( pDoc ), mnTab( nTab ), mnTabStartCol( nTabStartCol ), mnTabStartRow( nTabStartRow ), mnMemberStartCol( nMemberStartCol), mnMemberStartRow( nMemberStartRow), mnDataStartCol ( nDataStartCol ), mnDataStartRow ( nDataStartRow ), mnTabEndCol( nTabEndCol ), mnTabEndRow( nTabEndRow ) { mbNeedLineCols.resize( nTabEndCol-nDataStartCol+1, false ); mbNeedLineRows.resize( nTabEndRow-nDataStartRow+1, false ); } sal_Bool OutputImpl::AddRow( SCROW nRow ) { if ( !mbNeedLineRows[ nRow - mnDataStartRow ] ) { mbNeedLineRows[ nRow - mnDataStartRow ] = true; mnRows.push_back( nRow ); return sal_True; } else return sal_False; } sal_Bool OutputImpl::AddCol( SCCOL nCol ) { if ( !mbNeedLineCols[ nCol - mnDataStartCol ] ) { mbNeedLineCols[ nCol - mnDataStartCol ] = true; mnCols.push_back( nCol ); return sal_True; } else return sal_False; } void OutputImpl::OutputBlockFrame ( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, sal_Bool bHori ) { SvxBorderLine aLine, aOutLine; aLine.SetColor( SC_DP_FRAME_COLOR ); aLine.SetOutWidth( SC_DP_FRAME_INNER_BOLD ); aOutLine.SetColor( SC_DP_FRAME_COLOR ); aOutLine.SetOutWidth( SC_DP_FRAME_OUTER_BOLD ); SvxBoxItem aBox( ATTR_BORDER ); if ( nStartCol == mnTabStartCol ) aBox.SetLine(&aOutLine, BOX_LINE_LEFT); else aBox.SetLine(&aLine, BOX_LINE_LEFT); if ( nStartRow == mnTabStartRow ) aBox.SetLine(&aOutLine, BOX_LINE_TOP); else aBox.SetLine(&aLine, BOX_LINE_TOP); if ( nEndCol == mnTabEndCol ) //bottom row aBox.SetLine(&aOutLine, BOX_LINE_RIGHT); else aBox.SetLine(&aLine, BOX_LINE_RIGHT); if ( nEndRow == mnTabEndRow ) //bottom aBox.SetLine(&aOutLine, BOX_LINE_BOTTOM); else aBox.SetLine(&aLine, BOX_LINE_BOTTOM); SvxBoxInfoItem aBoxInfo( ATTR_BORDER_INNER ); aBoxInfo.SetValid(VALID_VERT,sal_False ); if ( bHori ) { aBoxInfo.SetValid(VALID_HORI,sal_True); aBoxInfo.SetLine( &aLine, BOXINFO_LINE_HORI ); } else aBoxInfo.SetValid(VALID_HORI,sal_False ); aBoxInfo.SetValid(VALID_DISTANCE,sal_False); mpDoc->ApplyFrameAreaTab( ScRange( nStartCol, nStartRow, mnTab, nEndCol, nEndRow , mnTab ), &aBox, &aBoxInfo ); }