1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <com/sun/star/text/XTextContent.hpp>
21 #include <com/sun/star/text/TextContentAnchorType.hpp>
23 #include <sax/tools/converter.hxx>
25 #include <xmloff/xmlimp.hxx>
26 #include <xmloff/txtimp.hxx>
27 #include <xmloff/xmluconv.hxx>
28 #include <xmloff/nmspmap.hxx>
29 #include "XMLAnchorTypePropHdl.hxx"
30 #include <com/sun/star/drawing/XDrawPageSupplier.hpp>
31 #include <com/sun/star/drawing/XShapes.hpp>
32 #include <xmloff/XMLTextShapeImportHelper.hxx>
35 using namespace ::com::sun::star::uno
;
36 using namespace ::com::sun::star::frame
;
37 using namespace ::com::sun::star::drawing
;
38 using namespace ::com::sun::star::beans
;
39 using namespace ::com::sun::star::text
;
40 using namespace ::com::sun::star::container
;
41 using namespace ::com::sun::star::xml::sax
;
43 XMLTextShapeImportHelper::XMLTextShapeImportHelper(
45 XMLShapeImportHelper( rImp
, rImp
.GetModel(),
46 XMLTextImportHelper::CreateShapeExtPropMapper(rImp
) ),
48 sAnchorType("AnchorType"),
49 sAnchorPageNo("AnchorPageNo"),
50 sVertOrientPosition("VertOrientPosition")
52 Reference
< XDrawPageSupplier
> xDPS( rImp
.GetModel(), UNO_QUERY
);
55 Reference
< XShapes
> xShapes( xDPS
->getDrawPage(), UNO_QUERY
);
56 pushGroupForSorting( xShapes
);
61 XMLTextShapeImportHelper::~XMLTextShapeImportHelper()
66 void XMLTextShapeImportHelper::addShape(
67 Reference
< XShape
>& rShape
,
68 const Reference
< XAttributeList
>& xAttrList
,
69 Reference
< XShapes
>& rShapes
)
73 // It's a group shape or 3DScene , so we have to call the base class method.
74 XMLShapeImportHelper::addShape( rShape
, xAttrList
, rShapes
);
78 TextContentAnchorType eAnchorType
= TextContentAnchorType_AT_PARAGRAPH
;
82 rtl::Reference
< XMLTextImportHelper
> xTxtImport
=
83 rImport
.GetTextImport();
84 const SvXMLTokenMap
& rTokenMap
=
85 xTxtImport
->GetTextFrameAttrTokenMap();
87 sal_Int16 nAttrCount
= xAttrList
.is() ? xAttrList
->getLength() : 0;
88 for( sal_Int16 i
=0; i
< nAttrCount
; i
++ )
90 const OUString
& rAttrName
= xAttrList
->getNameByIndex( i
);
91 const OUString
& rValue
= xAttrList
->getValueByIndex( i
);
95 rImport
.GetNamespaceMap().GetKeyByAttrName( rAttrName
,
97 switch( rTokenMap
.Get( nPrefix
, aLocalName
) )
99 case XML_TOK_TEXT_FRAME_ANCHOR_TYPE
:
101 TextContentAnchorType eNew
;
102 // OD 2004-06-01 #i26791# - allow all anchor types
103 if ( XMLAnchorTypePropHdl::convert( rValue
, eNew
) )
109 case XML_TOK_TEXT_FRAME_ANCHOR_PAGE_NUMBER
:
112 if (::sax::Converter::convertNumber(nTmp
, rValue
, 1, SHRT_MAX
))
113 nPage
= (sal_Int16
)nTmp
;
116 case XML_TOK_TEXT_FRAME_Y
:
117 rImport
.GetMM100UnitConverter().convertMeasureToCore( nY
, rValue
);
122 Reference
< XPropertySet
> xPropSet( rShape
, UNO_QUERY
);
126 aAny
<<= eAnchorType
;
127 xPropSet
->setPropertyValue( sAnchorType
, aAny
);
129 Reference
< XTextContent
> xTxtCntnt( rShape
, UNO_QUERY
);
130 xTxtImport
->InsertTextContent( xTxtCntnt
);
132 // page number (must be set after the frame is inserted, because it
133 // will be overwritten then inserting the frame.
134 switch( eAnchorType
)
136 case TextContentAnchorType_AT_PAGE
:
137 // only set positive page numbers
141 xPropSet
->setPropertyValue( sAnchorPageNo
, aAny
);
144 case TextContentAnchorType_AS_CHARACTER
:
146 xPropSet
->setPropertyValue( sVertOrientPosition
, aAny
);
153 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */