xref: /trunk/main/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx (revision 9d37da743abb7db0a497688391f6e55a19f27c44)
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_chartcontroller.hxx"
26 
27 #include "WrappedNumberFormatProperty.hxx"
28 #include "macros.hxx"
29 
30 // header for define DBG_ERROR
31 #include <tools/debug.hxx>
32 
33 using namespace ::com::sun::star;
34 using ::com::sun::star::uno::Reference;
35 using ::com::sun::star::uno::Any;
36 using ::rtl::OUString;
37 
38 //.............................................................................
39 namespace chart
40 {
41 namespace wrapper
42 {
43 //.............................................................................
44 
45 WrappedNumberFormatProperty::WrappedNumberFormatProperty( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact )
46         : WrappedDirectStateProperty( C2U("NumberFormat"), C2U("NumberFormat") )
47         , m_spChart2ModelContact(spChart2ModelContact)
48 {
49     m_aOuterValue = getPropertyDefault( 0 );
50 }
51 
52 WrappedNumberFormatProperty::~WrappedNumberFormatProperty()
53 {
54     if( m_pWrappedLinkNumberFormatProperty )
55     {
56         if( m_pWrappedLinkNumberFormatProperty->m_pWrappedNumberFormatProperty == this )
57             m_pWrappedLinkNumberFormatProperty->m_pWrappedNumberFormatProperty = 0;
58     }
59 }
60 
61 void WrappedNumberFormatProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const
62 {
63     sal_Int32 nFormat = 0;
64     if( ! (rOuterValue >>= nFormat) )
65         throw lang::IllegalArgumentException( C2U("Property 'NumberFormat' requires value of type sal_Int32"), 0, 0 );
66 
67     m_aOuterValue = rOuterValue;
68     if(xInnerPropertySet.is())
69     {
70         bool bUseSourceFormat = !xInnerPropertySet->getPropertyValue( C2U("NumberFormat" )).hasValue();
71         if( bUseSourceFormat )
72         {
73             uno::Reference< chart2::XChartDocument > xChartDoc( m_spChart2ModelContact->getChart2Document() );
74             if( xChartDoc.is() && xChartDoc->hasInternalDataProvider() )
75                 bUseSourceFormat = false;
76         }
77         if( !bUseSourceFormat )
78             xInnerPropertySet->setPropertyValue( m_aInnerName, this->convertOuterToInnerValue( rOuterValue ) );
79     }
80 }
81 
82 Any WrappedNumberFormatProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const
83 {
84     if( !xInnerPropertySet.is() )
85     {
86         DBG_ERROR("missing xInnerPropertySet in WrappedNumberFormatProperty::getPropertyValue");
87         return Any();
88     }
89     Any aRet( xInnerPropertySet->getPropertyValue( m_aInnerName ));
90     if( !aRet.hasValue() )
91     {
92         sal_Int32 nKey = 0;
93         Reference< chart2::XDataSeries > xSeries( xInnerPropertySet, uno::UNO_QUERY );
94         if( xSeries.is() )
95             nKey = m_spChart2ModelContact->getExplicitNumberFormatKeyForSeries( xSeries );
96         else
97         {
98             Reference< chart2::XAxis > xAxis( xInnerPropertySet, uno::UNO_QUERY );
99             nKey = m_spChart2ModelContact->getExplicitNumberFormatKeyForAxis( xAxis );
100         }
101         aRet <<= nKey;
102     }
103     return aRet;
104 }
105 
106 Any WrappedNumberFormatProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const
107 {
108     return uno::makeAny( sal_Int32( 0 ) );
109 }
110 
111 //-----------------------------------------------------------------------------
112 //-----------------------------------------------------------------------------
113 //-----------------------------------------------------------------------------
114 
115 WrappedLinkNumberFormatProperty::WrappedLinkNumberFormatProperty( WrappedNumberFormatProperty* pWrappedNumberFormatProperty )
116         : WrappedProperty( C2U("LinkNumberFormatToSource"), C2U("") )
117         , m_pWrappedNumberFormatProperty( pWrappedNumberFormatProperty )
118 {
119     if( m_pWrappedNumberFormatProperty )
120     {
121         m_pWrappedNumberFormatProperty->m_pWrappedLinkNumberFormatProperty = this;
122     }
123 }
124 
125 WrappedLinkNumberFormatProperty::~WrappedLinkNumberFormatProperty()
126 {
127     if( m_pWrappedNumberFormatProperty )
128     {
129         if( m_pWrappedNumberFormatProperty->m_pWrappedLinkNumberFormatProperty == this )
130             m_pWrappedNumberFormatProperty->m_pWrappedLinkNumberFormatProperty = 0;
131     }
132 }
133 
134 void WrappedLinkNumberFormatProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const
135 {
136     if( !xInnerPropertySet.is() )
137     {
138         DBG_ERROR("missing xInnerPropertySet in WrappedNumberFormatProperty::setPropertyValue");
139         return;
140     }
141 
142     bool bLinkFormat = false;
143     if( rOuterValue >>= bLinkFormat )
144     {
145         Any aValue;
146         if( bLinkFormat )
147         {
148             if( m_pWrappedNumberFormatProperty )
149             {
150                 uno::Reference< chart2::XChartDocument > xChartDoc( m_pWrappedNumberFormatProperty->m_spChart2ModelContact->getChart2Document() );
151                 if( xChartDoc.is() && xChartDoc->hasInternalDataProvider() )
152                     return;
153             }
154         }
155         else
156         {
157             if( m_pWrappedNumberFormatProperty )
158             {
159                 aValue = m_pWrappedNumberFormatProperty->getPropertyValue( xInnerPropertySet );
160             }
161             else
162                 aValue <<= sal_Int32( 0 );
163         }
164 
165         xInnerPropertySet->setPropertyValue( C2U("NumberFormat"), aValue );
166     }
167 }
168 
169 Any WrappedLinkNumberFormatProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const
170 {
171     if( !xInnerPropertySet.is() )
172     {
173         DBG_ERROR("missing xInnerPropertySet in WrappedNumberFormatProperty::getPropertyValue");
174         return getPropertyDefault(0);
175     }
176     bool bLink = ! xInnerPropertySet->getPropertyValue( C2U("NumberFormat" )).hasValue();
177     return uno::makeAny( bLink );
178 }
179 
180 Any WrappedLinkNumberFormatProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const
181 {
182     bool bLink = true;
183     return uno::makeAny( bLink );
184 }
185 
186 //.............................................................................
187 } //namespace wrapper
188 } //namespace chart
189 //.............................................................................
190