xref: /AOO41X/main/sc/source/filter/xml/XMLCellRangeSourceContext.cxx (revision b3f79822e811ac3493b185030a72c3c5a51f32d8)
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_sc.hxx"
26 
27 
28 
29 //___________________________________________________________________
30 #include "XMLCellRangeSourceContext.hxx"
31 #include <xmloff/nmspmap.hxx>
32 #include <xmloff/xmluconv.hxx>
33 #include "xmlimprt.hxx"
34 
35 using ::rtl::OUString;
36 using namespace ::com::sun::star;
37 
38 
39 //___________________________________________________________________
40 
ScMyImpCellRangeSource()41 ScMyImpCellRangeSource::ScMyImpCellRangeSource() :
42     nColumns( 0 ),
43     nRows( 0 ),
44     nRefresh( 0 )
45 {
46 }
47 
48 
49 //___________________________________________________________________
50 
ScXMLCellRangeSourceContext(ScXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> & xAttrList,ScMyImpCellRangeSource * pCellRangeSource)51 ScXMLCellRangeSourceContext::ScXMLCellRangeSourceContext(
52         ScXMLImport& rImport,
53         sal_uInt16 nPrfx,
54         const OUString& rLName,
55         const uno::Reference< xml::sax::XAttributeList >& xAttrList,
56         ScMyImpCellRangeSource* pCellRangeSource ) :
57     SvXMLImportContext( rImport, nPrfx, rLName )
58 {
59     if( !xAttrList.is() ) return;
60 
61     sal_Int16               nAttrCount      = xAttrList->getLength();
62     const SvXMLTokenMap&    rAttrTokenMap   = GetScImport().GetTableCellRangeSourceAttrTokenMap();
63 
64     for( sal_Int16 nIndex = 0; nIndex < nAttrCount; ++nIndex )
65     {
66         const rtl::OUString& sAttrName(xAttrList->getNameByIndex( nIndex ));
67         const OUString& sValue(xAttrList->getValueByIndex( nIndex ));
68         OUString aLocalName;
69         sal_uInt16 nPrefix      = GetScImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
70 
71         switch( rAttrTokenMap.Get( nPrefix, aLocalName ) )
72         {
73             case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_NAME:
74                 pCellRangeSource->sSourceStr = sValue;
75             break;
76             case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_FILTER_NAME:
77                 pCellRangeSource->sFilterName = sValue;
78             break;
79             case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_FILTER_OPTIONS:
80                 pCellRangeSource->sFilterOptions = sValue;
81             break;
82             case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_HREF:
83                 pCellRangeSource->sURL = GetScImport().GetAbsoluteReference(sValue);
84             break;
85             case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_LAST_COLUMN:
86             {
87                 sal_Int32 nValue;
88                 if( SvXMLUnitConverter::convertNumber( nValue, sValue, 1 ) )
89                     pCellRangeSource->nColumns = nValue;
90                 else
91                     pCellRangeSource->nColumns = 1;
92             }
93             break;
94             case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_LAST_ROW:
95             {
96                 sal_Int32 nValue;
97                 if( SvXMLUnitConverter::convertNumber( nValue, sValue, 1 ) )
98                     pCellRangeSource->nRows = nValue;
99                 else
100                     pCellRangeSource->nRows = 1;
101             }
102             break;
103             case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_REFRESH_DELAY:
104             {
105                 double fTime;
106                 if( SvXMLUnitConverter::convertTime( fTime, sValue ) )
107                     pCellRangeSource->nRefresh = Max( (sal_Int32)(fTime * 86400.0), (sal_Int32)0 );
108             }
109             break;
110         }
111     }
112 }
113 
~ScXMLCellRangeSourceContext()114 ScXMLCellRangeSourceContext::~ScXMLCellRangeSourceContext()
115 {
116 }
117 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLName,const uno::Reference<xml::sax::XAttributeList> &)118 SvXMLImportContext *ScXMLCellRangeSourceContext::CreateChildContext(
119         sal_uInt16 nPrefix,
120         const OUString& rLName,
121         const uno::Reference< xml::sax::XAttributeList>& /* xAttrList */ )
122 {
123     return new SvXMLImportContext( GetImport(), nPrefix, rLName );
124 }
125 
EndElement()126 void ScXMLCellRangeSourceContext::EndElement()
127 {
128 }
129 
130