xref: /AOO41X/main/xmloff/source/text/XMLTextColumnsExport.cxx (revision 63bba73cc51e0afb45f8a8d578158724bb5afee8)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_xmloff.hxx"
26 #include <tools/debug.hxx>
27 #include <rtl/ustrbuf.hxx>
28 
29 
30 #include <com/sun/star/text/XTextColumns.hpp>
31 #include <com/sun/star/text/TextColumn.hpp>
32 #include <com/sun/star/style/VerticalAlignment.hpp>
33 #include <com/sun/star/beans/XPropertySet.hpp>
34 
35 
36 #include <xmloff/xmltoken.hxx>
37 #include "xmloff/xmlnmspe.hxx"
38 #include <xmloff/xmluconv.hxx>
39 #include <xmloff/xmlexp.hxx>
40 #include "XMLTextColumnsExport.hxx"
41 
42 using namespace ::com::sun::star::style;
43 using namespace ::com::sun::star::text;
44 using namespace ::com::sun::star::uno;
45 using namespace ::com::sun::star::beans;
46 using ::rtl::OUString;
47 using ::rtl::OUStringBuffer;
48 using namespace ::xmloff::token;
49 
50 
XMLTextColumnsExport(SvXMLExport & rExp)51 XMLTextColumnsExport::XMLTextColumnsExport( SvXMLExport& rExp ) :
52     rExport( rExp ),
53     sSeparatorLineIsOn(RTL_CONSTASCII_USTRINGPARAM("SeparatorLineIsOn")),
54     sSeparatorLineWidth(RTL_CONSTASCII_USTRINGPARAM("SeparatorLineWidth")),
55     sSeparatorLineColor(RTL_CONSTASCII_USTRINGPARAM("SeparatorLineColor")),
56     sSeparatorLineRelativeHeight(RTL_CONSTASCII_USTRINGPARAM("SeparatorLineRelativeHeight")),
57     sSeparatorLineVerticalAlignment(RTL_CONSTASCII_USTRINGPARAM("SeparatorLineVerticalAlignment")),
58     sIsAutomatic(RTL_CONSTASCII_USTRINGPARAM("IsAutomatic")),
59     sAutomaticDistance(RTL_CONSTASCII_USTRINGPARAM("AutomaticDistance"))
60 {
61 }
62 
exportXML(const Any & rAny)63 void XMLTextColumnsExport::exportXML( const Any& rAny )
64 {
65     Reference < XTextColumns > xColumns;
66     rAny >>= xColumns;
67 
68     Sequence < TextColumn > aColumns = xColumns->getColumns();
69     const TextColumn *pColumns = aColumns.getArray();
70     sal_Int32 nCount = aColumns.getLength();
71 
72     OUStringBuffer sValue;
73     GetExport().GetMM100UnitConverter().convertNumber( sValue, nCount ? nCount : 1 );
74     GetExport().AddAttribute( XML_NAMESPACE_FO, XML_COLUMN_COUNT,
75                               sValue.makeStringAndClear() );
76 
77     // handle 'automatic' columns
78     Reference < XPropertySet > xPropSet( xColumns, UNO_QUERY );
79     if( xPropSet.is() )
80     {
81         Any aAny = xPropSet->getPropertyValue( sIsAutomatic );
82         if ( *(sal_Bool*)aAny.getValue() )
83         {
84             aAny = xPropSet->getPropertyValue( sAutomaticDistance );
85             sal_Int32 nDistance = 0;
86             aAny >>= nDistance;
87             OUStringBuffer aBuffer;
88             GetExport().GetMM100UnitConverter().convertMeasure(
89                 aBuffer, nDistance );
90             GetExport().AddAttribute( XML_NAMESPACE_FO,
91                                       XML_COLUMN_GAP,
92                                       aBuffer.makeStringAndClear() );
93         }
94     }
95 
96     SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_STYLE, XML_COLUMNS,
97                               sal_True, sal_True );
98 
99     if( xPropSet.is() )
100     {
101         Any aAny = xPropSet->getPropertyValue( sSeparatorLineIsOn );
102         if( *(sal_Bool *)aAny.getValue() )
103         {
104             // style:width
105             aAny = xPropSet->getPropertyValue( sSeparatorLineWidth );
106             sal_Int32 nWidth = 0;
107             aAny >>= nWidth;
108             GetExport().GetMM100UnitConverter().convertMeasure( sValue,
109                                                                 nWidth );
110             GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_WIDTH,
111                                       sValue.makeStringAndClear() );
112 
113             // style:color
114             aAny = xPropSet->getPropertyValue( sSeparatorLineColor );
115             sal_Int32 nColor = 0;
116             aAny >>= nColor;
117             GetExport().GetMM100UnitConverter().convertColor( sValue,
118                                                               nColor );
119             GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_COLOR,
120                                       sValue.makeStringAndClear() );
121 
122             // style:height
123             aAny = xPropSet->getPropertyValue( sSeparatorLineRelativeHeight );
124             sal_Int8 nHeight = 0;
125             aAny >>= nHeight;
126             GetExport().GetMM100UnitConverter().convertPercent( sValue,
127                                                                 nHeight );
128             GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_HEIGHT,
129                                       sValue.makeStringAndClear() );
130 
131             // style:vertical-align
132             aAny = xPropSet->getPropertyValue( sSeparatorLineVerticalAlignment );
133             VerticalAlignment eVertAlign;
134             aAny >>= eVertAlign;
135 
136             enum XMLTokenEnum eStr = XML_TOKEN_INVALID;
137             switch( eVertAlign )
138             {
139 //          case VerticalAlignment_TOP: eStr = XML_TOP;
140             case VerticalAlignment_MIDDLE: eStr = XML_MIDDLE; break;
141             case VerticalAlignment_BOTTOM: eStr = XML_BOTTOM; break;
142             default:
143                 break;
144             }
145 
146             if( eStr != XML_TOKEN_INVALID)
147                 GetExport().AddAttribute( XML_NAMESPACE_STYLE,
148                                           XML_VERTICAL_ALIGN, eStr );
149 
150             // style:column-sep
151             SvXMLElementExport aElement( GetExport(), XML_NAMESPACE_STYLE,
152                                       XML_COLUMN_SEP,
153                                       sal_True, sal_True );
154         }
155     }
156 
157     while( nCount-- )
158     {
159         // style:rel-width
160         GetExport().GetMM100UnitConverter().convertNumber( sValue,
161                                                        pColumns->Width );
162         sValue.append( (sal_Unicode)'*' );
163         GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_REL_WIDTH,
164                                   sValue.makeStringAndClear() );
165 
166         // fo:margin-left
167         GetExport().GetMM100UnitConverter().convertMeasure( sValue,
168                                                        pColumns->LeftMargin );
169         GetExport().AddAttribute( XML_NAMESPACE_FO, XML_START_INDENT,
170                                   sValue.makeStringAndClear() );
171 
172         // fo:margin-right
173         GetExport().GetMM100UnitConverter().convertMeasure( sValue,
174                                                        pColumns->RightMargin );
175         GetExport().AddAttribute( XML_NAMESPACE_FO, XML_END_INDENT,
176                                   sValue.makeStringAndClear() );
177 
178         // style:column
179         SvXMLElementExport aElement( GetExport(), XML_NAMESPACE_STYLE, XML_COLUMN,
180                                   sal_True, sal_True );
181         pColumns++;
182     }
183 }
184 
185 
186