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 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 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