| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sc.hxx" |
| |
| // INCLUDE --------------------------------------------------------------- |
| |
| #include "xmlannoi.hxx" |
| #include "xmlimprt.hxx" |
| #include "xmlconti.hxx" |
| #include "XMLTableShapeImportHelper.hxx" |
| |
| #include <xmloff/xmltkmap.hxx> |
| #include <xmloff/nmspmap.hxx> |
| #include <xmloff/xmlnmspe.hxx> |
| #include <xmloff/xmltoken.hxx> |
| |
| using namespace com::sun::star; |
| using namespace xmloff::token; |
| |
| //------------------------------------------------------------------ |
| |
| ScXMLAnnotationData::ScXMLAnnotationData() : |
| mbUseShapePos( false ), |
| mbShown( false ) |
| { |
| } |
| |
| ScXMLAnnotationData::~ScXMLAnnotationData() |
| { |
| } |
| |
| //------------------------------------------------------------------ |
| |
| ScXMLAnnotationContext::ScXMLAnnotationContext( ScXMLImport& rImport, |
| sal_uInt16 nPrfx, |
| const ::rtl::OUString& rLName, |
| const uno::Reference<xml::sax::XAttributeList>& xAttrList, |
| ScXMLAnnotationData& rAnnotationData, |
| ScXMLTableRowCellContext* pTempCellContext) : |
| SvXMLImportContext( rImport, nPrfx, rLName ), |
| mrAnnotationData( rAnnotationData ), |
| nParagraphCount(0), |
| bHasTextP(sal_False), |
| pCellContext(pTempCellContext), |
| pShapeContext(NULL) |
| { |
| uno::Reference<drawing::XShapes> xLocalShapes (GetScImport().GetTables().GetCurrentXShapes()); |
| if (xLocalShapes.is()) |
| { |
| XMLTableShapeImportHelper* pTableShapeImport = (XMLTableShapeImportHelper*)GetScImport().GetShapeImport().get(); |
| pTableShapeImport->SetAnnotation(this); |
| pShapeContext = GetScImport().GetShapeImport()->CreateGroupChildContext( |
| GetScImport(), nPrfx, rLName, xAttrList, xLocalShapes, sal_True); |
| } |
| |
| pCellContext = pTempCellContext; |
| sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; |
| const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetTableAnnotationAttrTokenMap(); |
| for( sal_Int16 i=0; i < nAttrCount; ++i ) |
| { |
| const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i )); |
| rtl::OUString aLocalName; |
| sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName( |
| sAttrName, &aLocalName ); |
| const rtl::OUString& sValue(xAttrList->getValueByIndex( i )); |
| |
| switch( rAttrTokenMap.Get( nPrefix, aLocalName ) ) |
| { |
| case XML_TOK_TABLE_ANNOTATION_ATTR_AUTHOR: |
| { |
| maAuthorBuffer = sValue; |
| } |
| break; |
| case XML_TOK_TABLE_ANNOTATION_ATTR_CREATE_DATE: |
| { |
| maCreateDateBuffer = sValue; |
| } |
| break; |
| case XML_TOK_TABLE_ANNOTATION_ATTR_CREATE_DATE_STRING: |
| { |
| maCreateDateStringBuffer = sValue; |
| } |
| break; |
| case XML_TOK_TABLE_ANNOTATION_ATTR_DISPLAY: |
| { |
| mrAnnotationData.mbShown = IsXMLToken(sValue, XML_TRUE); |
| } |
| break; |
| case XML_TOK_TABLE_ANNOTATION_ATTR_X: |
| { |
| mrAnnotationData.mbUseShapePos = true; |
| } |
| break; |
| case XML_TOK_TABLE_ANNOTATION_ATTR_Y: |
| { |
| mrAnnotationData.mbUseShapePos = true; |
| } |
| break; |
| } |
| } |
| } |
| |
| ScXMLAnnotationContext::~ScXMLAnnotationContext() |
| { |
| } |
| |
| void ScXMLAnnotationContext::StartElement(const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList) |
| { |
| if (pShapeContext) |
| pShapeContext->StartElement(xAttrList); |
| } |
| |
| SvXMLImportContext *ScXMLAnnotationContext::CreateChildContext( sal_uInt16 nPrefix, |
| const ::rtl::OUString& rLName, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::xml::sax::XAttributeList>& xAttrList ) |
| { |
| SvXMLImportContext *pContext = 0; |
| |
| if( XML_NAMESPACE_DC == nPrefix ) |
| { |
| if( IsXMLToken( rLName, XML_CREATOR ) ) |
| pContext = new ScXMLContentContext(GetScImport(), nPrefix, |
| rLName, xAttrList, maAuthorBuffer); |
| else if( IsXMLToken( rLName, XML_DATE ) ) |
| pContext = new ScXMLContentContext(GetScImport(), nPrefix, |
| rLName, xAttrList, maCreateDateBuffer); |
| } |
| else if( XML_NAMESPACE_META == nPrefix ) |
| { |
| if( IsXMLToken( rLName, XML_DATE_STRING ) ) |
| pContext = new ScXMLContentContext(GetScImport(), nPrefix, |
| rLName, xAttrList, maCreateDateStringBuffer); |
| } |
| /* else if ((nPrefix == XML_NAMESPACE_TEXT) && IsXMLToken(rLName, XML_P) ) |
| { |
| if (!bHasTextP) |
| { |
| bHasTextP = sal_True; |
| maTextBuffer.setLength(0); |
| } |
| if(nParagraphCount) |
| maTextBuffer.append(static_cast<sal_Unicode>('\n')); |
| ++nParagraphCount; |
| pContext = new ScXMLContentContext( GetScImport(), nPrefix, rLName, xAttrList, maTextBuffer); |
| }*/ |
| |
| if( !pContext && pShapeContext ) |
| pContext = pShapeContext->CreateChildContext(nPrefix, rLName, xAttrList); |
| |
| if( !pContext ) |
| pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName ); |
| |
| return pContext; |
| } |
| |
| void ScXMLAnnotationContext::Characters( const ::rtl::OUString& rChars ) |
| { |
| if (!bHasTextP) |
| maTextBuffer.append(rChars); |
| } |
| |
| void ScXMLAnnotationContext::EndElement() |
| { |
| if (pShapeContext) |
| { |
| pShapeContext->EndElement(); |
| delete pShapeContext; |
| } |
| |
| mrAnnotationData.maAuthor = maAuthorBuffer.makeStringAndClear(); |
| mrAnnotationData.maCreateDate = maCreateDateBuffer.makeStringAndClear(); |
| if (!mrAnnotationData.maCreateDate.getLength()) |
| mrAnnotationData.maCreateDate = maCreateDateStringBuffer.makeStringAndClear(); |
| mrAnnotationData.maSimpleText = maTextBuffer.makeStringAndClear(); |
| |
| XMLTableShapeImportHelper* pTableShapeImport = (XMLTableShapeImportHelper*)GetScImport().GetShapeImport().get(); |
| pTableShapeImport->SetAnnotation(NULL); |
| } |
| |
| void ScXMLAnnotationContext::SetShape( const uno::Reference< drawing::XShape >& rxShape, const uno::Reference< drawing::XShapes >& rxShapes, |
| const rtl::OUString& rStyleName, const rtl::OUString& rTextStyle ) |
| { |
| mrAnnotationData.mxShape = rxShape; |
| mrAnnotationData.mxShapes = rxShapes; |
| mrAnnotationData.maStyleName = rStyleName; |
| mrAnnotationData.maTextStyle = rTextStyle; |
| } |
| |
| void ScXMLAnnotationContext::AddContentStyle( sal_uInt16 nFamily, const rtl::OUString& rName, const ESelection& rSelection ) |
| { |
| mrAnnotationData.maContentStyles.push_back( ScXMLAnnotationStyleEntry( nFamily, rName, rSelection ) ); |
| } |
| |