1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #include "oox/xls/chartsheetfragment.hxx" 29*cdf0e10cSrcweir 30*cdf0e10cSrcweir #include "oox/helper/attributelist.hxx" 31*cdf0e10cSrcweir #include "oox/xls/biffinputstream.hxx" 32*cdf0e10cSrcweir #include "oox/xls/pagesettings.hxx" 33*cdf0e10cSrcweir #include "oox/xls/viewsettings.hxx" 34*cdf0e10cSrcweir #include "oox/xls/workbooksettings.hxx" 35*cdf0e10cSrcweir #include "oox/xls/worksheetsettings.hxx" 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir namespace oox { 38*cdf0e10cSrcweir namespace xls { 39*cdf0e10cSrcweir 40*cdf0e10cSrcweir // ============================================================================ 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir using namespace ::oox::core; 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir using ::rtl::OUString; 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir // ============================================================================ 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir ChartsheetFragment::ChartsheetFragment( const WorksheetHelper& rHelper, const OUString& rFragmentPath ) : 49*cdf0e10cSrcweir WorksheetFragmentBase( rHelper, rFragmentPath ) 50*cdf0e10cSrcweir { 51*cdf0e10cSrcweir } 52*cdf0e10cSrcweir 53*cdf0e10cSrcweir ContextHandlerRef ChartsheetFragment::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) 54*cdf0e10cSrcweir { 55*cdf0e10cSrcweir switch( getCurrentElement() ) 56*cdf0e10cSrcweir { 57*cdf0e10cSrcweir case XML_ROOT_CONTEXT: 58*cdf0e10cSrcweir if( nElement == XLS_TOKEN( chartsheet ) ) return this; 59*cdf0e10cSrcweir break; 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir case XLS_TOKEN( chartsheet ): 62*cdf0e10cSrcweir switch( nElement ) 63*cdf0e10cSrcweir { 64*cdf0e10cSrcweir case XLS_TOKEN( sheetViews ): return this; 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir case XLS_TOKEN( sheetPr ): getWorksheetSettings().importChartSheetPr( rAttribs ); break; 67*cdf0e10cSrcweir case XLS_TOKEN( sheetProtection ): getWorksheetSettings().importChartProtection( rAttribs ); break; 68*cdf0e10cSrcweir case XLS_TOKEN( pageMargins ): getPageSettings().importPageMargins( rAttribs ); break; 69*cdf0e10cSrcweir case XLS_TOKEN( pageSetup ): getPageSettings().importChartPageSetup( getRelations(), rAttribs ); break; 70*cdf0e10cSrcweir case XLS_TOKEN( headerFooter ): getPageSettings().importHeaderFooter( rAttribs ); return this; 71*cdf0e10cSrcweir case XLS_TOKEN( picture ): getPageSettings().importPicture( getRelations(), rAttribs ); break; 72*cdf0e10cSrcweir case XLS_TOKEN( drawing ): importDrawing( rAttribs ); break; 73*cdf0e10cSrcweir } 74*cdf0e10cSrcweir break; 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir case XLS_TOKEN( sheetViews ): 77*cdf0e10cSrcweir if( nElement == XLS_TOKEN( sheetView ) ) getSheetViewSettings().importChartSheetView( rAttribs ); 78*cdf0e10cSrcweir break; 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir case XLS_TOKEN( headerFooter ): 81*cdf0e10cSrcweir switch( nElement ) 82*cdf0e10cSrcweir { 83*cdf0e10cSrcweir case XLS_TOKEN( firstHeader ): 84*cdf0e10cSrcweir case XLS_TOKEN( firstFooter ): 85*cdf0e10cSrcweir case XLS_TOKEN( oddHeader ): 86*cdf0e10cSrcweir case XLS_TOKEN( oddFooter ): 87*cdf0e10cSrcweir case XLS_TOKEN( evenHeader ): 88*cdf0e10cSrcweir case XLS_TOKEN( evenFooter ): return this; // collect contents in onCharacters() 89*cdf0e10cSrcweir } 90*cdf0e10cSrcweir break; 91*cdf0e10cSrcweir } 92*cdf0e10cSrcweir return 0; 93*cdf0e10cSrcweir } 94*cdf0e10cSrcweir 95*cdf0e10cSrcweir void ChartsheetFragment::onCharacters( const OUString& rChars ) 96*cdf0e10cSrcweir { 97*cdf0e10cSrcweir switch( getCurrentElement() ) 98*cdf0e10cSrcweir { 99*cdf0e10cSrcweir case XLS_TOKEN( firstHeader ): 100*cdf0e10cSrcweir case XLS_TOKEN( firstFooter ): 101*cdf0e10cSrcweir case XLS_TOKEN( oddHeader ): 102*cdf0e10cSrcweir case XLS_TOKEN( oddFooter ): 103*cdf0e10cSrcweir case XLS_TOKEN( evenHeader ): 104*cdf0e10cSrcweir case XLS_TOKEN( evenFooter ): 105*cdf0e10cSrcweir getPageSettings().importHeaderFooterCharacters( rChars, getCurrentElement() ); 106*cdf0e10cSrcweir break; 107*cdf0e10cSrcweir } 108*cdf0e10cSrcweir } 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir ContextHandlerRef ChartsheetFragment::onCreateRecordContext( sal_Int32 nRecId, SequenceInputStream& rStrm ) 111*cdf0e10cSrcweir { 112*cdf0e10cSrcweir switch( getCurrentElement() ) 113*cdf0e10cSrcweir { 114*cdf0e10cSrcweir case XML_ROOT_CONTEXT: 115*cdf0e10cSrcweir if( nRecId == BIFF12_ID_WORKSHEET ) return this; 116*cdf0e10cSrcweir break; 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir case BIFF12_ID_WORKSHEET: 119*cdf0e10cSrcweir switch( nRecId ) 120*cdf0e10cSrcweir { 121*cdf0e10cSrcweir case BIFF12_ID_CHARTSHEETVIEWS: return this; 122*cdf0e10cSrcweir 123*cdf0e10cSrcweir case BIFF12_ID_CHARTSHEETPR: getWorksheetSettings().importChartSheetPr( rStrm ); break; 124*cdf0e10cSrcweir case BIFF12_ID_CHARTPROTECTION: getWorksheetSettings().importChartProtection( rStrm ); break; 125*cdf0e10cSrcweir case BIFF12_ID_PAGEMARGINS: getPageSettings().importPageMargins( rStrm ); break; 126*cdf0e10cSrcweir case BIFF12_ID_CHARTPAGESETUP: getPageSettings().importChartPageSetup( getRelations(), rStrm ); break; 127*cdf0e10cSrcweir case BIFF12_ID_HEADERFOOTER: getPageSettings().importHeaderFooter( rStrm ); break; 128*cdf0e10cSrcweir case BIFF12_ID_PICTURE: getPageSettings().importPicture( getRelations(), rStrm ); break; 129*cdf0e10cSrcweir case BIFF12_ID_DRAWING: importDrawing( rStrm ); break; 130*cdf0e10cSrcweir } 131*cdf0e10cSrcweir break; 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir case BIFF12_ID_CHARTSHEETVIEWS: 134*cdf0e10cSrcweir if( nRecId == BIFF12_ID_CHARTSHEETVIEW ) getSheetViewSettings().importChartSheetView( rStrm ); 135*cdf0e10cSrcweir break; 136*cdf0e10cSrcweir } 137*cdf0e10cSrcweir return 0; 138*cdf0e10cSrcweir } 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir const RecordInfo* ChartsheetFragment::getRecordInfos() const 141*cdf0e10cSrcweir { 142*cdf0e10cSrcweir static const RecordInfo spRecInfos[] = 143*cdf0e10cSrcweir { 144*cdf0e10cSrcweir { BIFF12_ID_CHARTSHEETVIEW, BIFF12_ID_CHARTSHEETVIEW + 1 }, 145*cdf0e10cSrcweir { BIFF12_ID_CHARTSHEETVIEWS, BIFF12_ID_CHARTSHEETVIEWS + 1 }, 146*cdf0e10cSrcweir { BIFF12_ID_CUSTOMCHARTVIEW, BIFF12_ID_CUSTOMCHARTVIEW + 1 }, 147*cdf0e10cSrcweir { BIFF12_ID_CUSTOMCHARTVIEWS, BIFF12_ID_CUSTOMCHARTVIEWS + 1 }, 148*cdf0e10cSrcweir { BIFF12_ID_HEADERFOOTER, BIFF12_ID_HEADERFOOTER + 1 }, 149*cdf0e10cSrcweir { BIFF12_ID_WORKSHEET, BIFF12_ID_WORKSHEET + 1 }, 150*cdf0e10cSrcweir { -1, -1 } 151*cdf0e10cSrcweir }; 152*cdf0e10cSrcweir return spRecInfos; 153*cdf0e10cSrcweir } 154*cdf0e10cSrcweir 155*cdf0e10cSrcweir void ChartsheetFragment::initializeImport() 156*cdf0e10cSrcweir { 157*cdf0e10cSrcweir // initial processing in base class WorksheetHelper 158*cdf0e10cSrcweir initializeWorksheetImport(); 159*cdf0e10cSrcweir } 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir void ChartsheetFragment::finalizeImport() 162*cdf0e10cSrcweir { 163*cdf0e10cSrcweir // final processing in base class WorksheetHelper 164*cdf0e10cSrcweir finalizeWorksheetImport(); 165*cdf0e10cSrcweir } 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir // private -------------------------------------------------------------------- 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir void ChartsheetFragment::importDrawing( const AttributeList& rAttribs ) 170*cdf0e10cSrcweir { 171*cdf0e10cSrcweir setDrawingPath( getFragmentPathFromRelId( rAttribs.getString( R_TOKEN( id ), OUString() ) ) ); 172*cdf0e10cSrcweir } 173*cdf0e10cSrcweir 174*cdf0e10cSrcweir void ChartsheetFragment::importDrawing( SequenceInputStream& rStrm ) 175*cdf0e10cSrcweir { 176*cdf0e10cSrcweir setDrawingPath( getFragmentPathFromRelId( BiffHelper::readString( rStrm ) ) ); 177*cdf0e10cSrcweir } 178*cdf0e10cSrcweir 179*cdf0e10cSrcweir // ============================================================================ 180*cdf0e10cSrcweir 181*cdf0e10cSrcweir BiffChartsheetFragment::BiffChartsheetFragment( const WorksheetHelper& rHelper, const BiffWorkbookFragmentBase& rParent ) : 182*cdf0e10cSrcweir BiffWorksheetFragmentBase( rHelper, rParent ) 183*cdf0e10cSrcweir { 184*cdf0e10cSrcweir } 185*cdf0e10cSrcweir 186*cdf0e10cSrcweir bool BiffChartsheetFragment::importFragment() 187*cdf0e10cSrcweir { 188*cdf0e10cSrcweir // initial processing in base class WorksheetHelper 189*cdf0e10cSrcweir initializeWorksheetImport(); 190*cdf0e10cSrcweir 191*cdf0e10cSrcweir WorksheetSettings& rWorksheetSett = getWorksheetSettings(); 192*cdf0e10cSrcweir SheetViewSettings& rSheetViewSett = getSheetViewSettings(); 193*cdf0e10cSrcweir PageSettings& rPageSett = getPageSettings(); 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir // process all record in this sheet fragment 196*cdf0e10cSrcweir BiffInputStream& rStrm = getInputStream(); 197*cdf0e10cSrcweir while( rStrm.startNextRecord() && (rStrm.getRecId() != BIFF_ID_EOF) ) 198*cdf0e10cSrcweir { 199*cdf0e10cSrcweir if( BiffHelper::isBofRecord( rStrm ) ) 200*cdf0e10cSrcweir { 201*cdf0e10cSrcweir // skip unknown embedded fragments (BOF/EOF blocks) 202*cdf0e10cSrcweir skipFragment(); 203*cdf0e10cSrcweir } 204*cdf0e10cSrcweir else 205*cdf0e10cSrcweir { 206*cdf0e10cSrcweir sal_uInt16 nRecId = rStrm.getRecId(); 207*cdf0e10cSrcweir switch( nRecId ) 208*cdf0e10cSrcweir { 209*cdf0e10cSrcweir // records in all BIFF versions 210*cdf0e10cSrcweir case BIFF_ID_BOTTOMMARGIN: rPageSett.importBottomMargin( rStrm ); break; 211*cdf0e10cSrcweir case BIFF_ID_CHBEGIN: BiffHelper::skipRecordBlock( rStrm, BIFF_ID_CHEND ); break; 212*cdf0e10cSrcweir case BIFF_ID_FOOTER: rPageSett.importFooter( rStrm ); break; 213*cdf0e10cSrcweir case BIFF_ID_HEADER: rPageSett.importHeader( rStrm ); break; 214*cdf0e10cSrcweir case BIFF_ID_LEFTMARGIN: rPageSett.importLeftMargin( rStrm ); break; 215*cdf0e10cSrcweir case BIFF_ID_PASSWORD: rWorksheetSett.importPassword( rStrm ); break; 216*cdf0e10cSrcweir case BIFF_ID_PROTECT: rWorksheetSett.importProtect( rStrm ); break; 217*cdf0e10cSrcweir case BIFF_ID_RIGHTMARGIN: rPageSett.importRightMargin( rStrm ); break; 218*cdf0e10cSrcweir case BIFF_ID_TOPMARGIN: rPageSett.importTopMargin( rStrm ); break; 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir // BIFF specific records 221*cdf0e10cSrcweir default: switch( getBiff() ) 222*cdf0e10cSrcweir { 223*cdf0e10cSrcweir case BIFF2: switch( nRecId ) 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir case BIFF2_ID_WINDOW2: rSheetViewSett.importWindow2( rStrm ); break; 226*cdf0e10cSrcweir } 227*cdf0e10cSrcweir break; 228*cdf0e10cSrcweir 229*cdf0e10cSrcweir case BIFF3: switch( nRecId ) 230*cdf0e10cSrcweir { 231*cdf0e10cSrcweir case BIFF_ID_HCENTER: rPageSett.importHorCenter( rStrm ); break; 232*cdf0e10cSrcweir case BIFF_ID_OBJECTPROTECT: rWorksheetSett.importObjectProtect( rStrm ); break; 233*cdf0e10cSrcweir case BIFF_ID_VCENTER: rPageSett.importVerCenter( rStrm ); break; 234*cdf0e10cSrcweir case BIFF3_ID_WINDOW2: rSheetViewSett.importWindow2( rStrm ); break; 235*cdf0e10cSrcweir 236*cdf0e10cSrcweir } 237*cdf0e10cSrcweir break; 238*cdf0e10cSrcweir 239*cdf0e10cSrcweir case BIFF4: switch( nRecId ) 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir case BIFF_ID_HCENTER: rPageSett.importHorCenter( rStrm ); break; 242*cdf0e10cSrcweir case BIFF_ID_OBJECTPROTECT: rWorksheetSett.importObjectProtect( rStrm ); break; 243*cdf0e10cSrcweir case BIFF_ID_PAGESETUP: rPageSett.importPageSetup( rStrm ); break; 244*cdf0e10cSrcweir case BIFF_ID_VCENTER: rPageSett.importVerCenter( rStrm ); break; 245*cdf0e10cSrcweir case BIFF3_ID_WINDOW2: rSheetViewSett.importWindow2( rStrm ); break; 246*cdf0e10cSrcweir } 247*cdf0e10cSrcweir break; 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir case BIFF5: switch( nRecId ) 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir case BIFF_ID_HCENTER: rPageSett.importHorCenter( rStrm ); break; 252*cdf0e10cSrcweir case BIFF_ID_OBJECTPROTECT: rWorksheetSett.importObjectProtect( rStrm ); break; 253*cdf0e10cSrcweir case BIFF_ID_PAGESETUP: rPageSett.importPageSetup( rStrm ); break; 254*cdf0e10cSrcweir case BIFF_ID_SCENPROTECT: rWorksheetSett.importScenProtect( rStrm ); break; 255*cdf0e10cSrcweir case BIFF_ID_SCL: rSheetViewSett.importScl( rStrm ); break; 256*cdf0e10cSrcweir case BIFF_ID_VCENTER: rPageSett.importVerCenter( rStrm ); break; 257*cdf0e10cSrcweir case BIFF3_ID_WINDOW2: rSheetViewSett.importWindow2( rStrm ); break; 258*cdf0e10cSrcweir } 259*cdf0e10cSrcweir break; 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir case BIFF8: switch( nRecId ) 262*cdf0e10cSrcweir { 263*cdf0e10cSrcweir case BIFF_ID_CODENAME: rWorksheetSett.importCodeName( rStrm ); break; 264*cdf0e10cSrcweir case BIFF_ID_HCENTER: rPageSett.importHorCenter( rStrm ); break; 265*cdf0e10cSrcweir case BIFF_ID_OBJECTPROTECT: rWorksheetSett.importObjectProtect( rStrm ); break; 266*cdf0e10cSrcweir case BIFF_ID_PICTURE: rPageSett.importPicture( rStrm ); break; 267*cdf0e10cSrcweir case BIFF_ID_PAGESETUP: rPageSett.importPageSetup( rStrm ); break; 268*cdf0e10cSrcweir case BIFF_ID_SCL: rSheetViewSett.importScl( rStrm ); break; 269*cdf0e10cSrcweir case BIFF_ID_SHEETEXT: rWorksheetSett.importSheetExt( rStrm ); break; 270*cdf0e10cSrcweir case BIFF_ID_VCENTER: rPageSett.importVerCenter( rStrm ); break; 271*cdf0e10cSrcweir case BIFF3_ID_WINDOW2: rSheetViewSett.importWindow2( rStrm ); break; 272*cdf0e10cSrcweir } 273*cdf0e10cSrcweir break; 274*cdf0e10cSrcweir 275*cdf0e10cSrcweir case BIFF_UNKNOWN: break; 276*cdf0e10cSrcweir } 277*cdf0e10cSrcweir } 278*cdf0e10cSrcweir } 279*cdf0e10cSrcweir } 280*cdf0e10cSrcweir 281*cdf0e10cSrcweir // final processing in base class WorksheetHelper 282*cdf0e10cSrcweir finalizeWorksheetImport(); 283*cdf0e10cSrcweir return rStrm.getRecId() == BIFF_ID_EOF; 284*cdf0e10cSrcweir } 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir // ============================================================================ 287*cdf0e10cSrcweir 288*cdf0e10cSrcweir } // namespace xls 289*cdf0e10cSrcweir } // namespace oox 290