xref: /trunk/main/chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 "WrappedAxisAndGridExistenceProperties.hxx"
28 #include "AxisHelper.hxx"
29 #include "ChartModelHelper.hxx"
30 #include "TitleHelper.hxx"
31 #include "macros.hxx"
32 
33 using namespace ::com::sun::star;
34 using ::com::sun::star::uno::Any;
35 using ::com::sun::star::uno::Reference;
36 using ::com::sun::star::uno::Sequence;
37 using ::rtl::OUString;
38 
39 //.............................................................................
40 namespace chart
41 {
42 namespace wrapper
43 {
44 
45 class WrappedAxisAndGridExistenceProperty : public WrappedProperty
46 {
47 public:
48     WrappedAxisAndGridExistenceProperty( bool bAxis, bool bMain, sal_Int32 nDimensionIndex
49         , ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact );
50     virtual ~WrappedAxisAndGridExistenceProperty();
51 
52     virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const;
53 
54     virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const;
55 
56     virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const;
57 
58 private: //member
59     ::boost::shared_ptr< Chart2ModelContact >   m_spChart2ModelContact;
60     bool        m_bAxis;
61     bool        m_bMain;
62     sal_Int32   m_nDimensionIndex;
63 };
64 
addWrappedProperties(std::vector<WrappedProperty * > & rList,::boost::shared_ptr<Chart2ModelContact> spChart2ModelContact)65 void WrappedAxisAndGridExistenceProperties::addWrappedProperties( std::vector< WrappedProperty* >& rList
66             , ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact )
67 {
68     rList.push_back( new WrappedAxisAndGridExistenceProperty( true, true, 0, spChart2ModelContact ) );//x axis
69     rList.push_back( new WrappedAxisAndGridExistenceProperty( true, false, 0, spChart2ModelContact ) );//x secondary axis
70     rList.push_back( new WrappedAxisAndGridExistenceProperty( false, true, 0, spChart2ModelContact ) );//x grid
71     rList.push_back( new WrappedAxisAndGridExistenceProperty( false, false, 0, spChart2ModelContact ) );//x help grid
72 
73     rList.push_back( new WrappedAxisAndGridExistenceProperty( true, true, 1, spChart2ModelContact ) );//y axis
74     rList.push_back( new WrappedAxisAndGridExistenceProperty( true, false, 1, spChart2ModelContact ) );//y secondary axis
75     rList.push_back( new WrappedAxisAndGridExistenceProperty( false, true, 1, spChart2ModelContact ) );//y grid
76     rList.push_back( new WrappedAxisAndGridExistenceProperty( false, false, 1, spChart2ModelContact ) );//y help grid
77 
78     rList.push_back( new WrappedAxisAndGridExistenceProperty( true, true, 2, spChart2ModelContact ) );//z axis
79     rList.push_back( new WrappedAxisAndGridExistenceProperty( false, true, 2, spChart2ModelContact ) );//z grid
80     rList.push_back( new WrappedAxisAndGridExistenceProperty( false, false, 2, spChart2ModelContact ) );//z help grid
81 }
82 
WrappedAxisAndGridExistenceProperty(bool bAxis,bool bMain,sal_Int32 nDimensionIndex,::boost::shared_ptr<Chart2ModelContact> spChart2ModelContact)83 WrappedAxisAndGridExistenceProperty::WrappedAxisAndGridExistenceProperty( bool bAxis, bool bMain, sal_Int32 nDimensionIndex
84                 , ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact )
85             : WrappedProperty(OUString(),OUString())
86             , m_spChart2ModelContact( spChart2ModelContact )
87             , m_bAxis( bAxis )
88             , m_bMain( bMain )
89             , m_nDimensionIndex( nDimensionIndex )
90 {
91     switch( m_nDimensionIndex )
92     {
93         case 0:
94         {
95             if( m_bAxis )
96             {
97                 if( m_bMain )
98                     m_aOuterName = C2U( "HasXAxis" );
99                 else
100                     m_aOuterName = C2U( "HasSecondaryXAxis" );
101             }
102             else
103             {
104                 if( m_bMain )
105                     m_aOuterName = C2U( "HasXAxisGrid" );
106                 else
107                     m_aOuterName = C2U( "HasXAxisHelpGrid" );
108             }
109         }
110         break;
111         case 2:
112         {
113             if( m_bAxis )
114             {
115                 OSL_ENSURE(m_bMain == true,"there is no secondary z axis at the old api");
116                 m_bMain = true;
117                 m_aOuterName = C2U( "HasZAxis" );
118             }
119             else
120             {
121                 if( m_bMain )
122                     m_aOuterName = C2U( "HasZAxisGrid" );
123                 else
124                     m_aOuterName = C2U( "HasZAxisHelpGrid" );
125             }
126         }
127         break;
128         default:
129         {
130             if( m_bAxis )
131             {
132                 if( m_bMain )
133                     m_aOuterName = C2U( "HasYAxis" );
134                 else
135                     m_aOuterName = C2U( "HasSecondaryYAxis" );
136             }
137             else
138             {
139                 if( m_bMain )
140                     m_aOuterName = C2U( "HasYAxisGrid" );
141                 else
142                     m_aOuterName = C2U( "HasYAxisHelpGrid" );
143             }
144         }
145         break;
146     }
147 }
148 
~WrappedAxisAndGridExistenceProperty()149 WrappedAxisAndGridExistenceProperty::~WrappedAxisAndGridExistenceProperty()
150 {
151 }
152 
setPropertyValue(const Any & rOuterValue,const Reference<beans::XPropertySet> & xInnerPropertySet) const153 void WrappedAxisAndGridExistenceProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const
154 {
155     sal_Bool bNewValue = false;
156     if( ! (rOuterValue >>= bNewValue) )
157         throw lang::IllegalArgumentException( C2U("Has axis or grid properties require boolean values"), 0, 0 );
158 
159     sal_Bool bOldValue = sal_False;
160     getPropertyValue( xInnerPropertySet ) >>= bOldValue;
161 
162     if( bOldValue == bNewValue )
163         return;
164 
165     Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() );
166     if( bNewValue )
167     {
168         if( m_bAxis )
169             AxisHelper::showAxis( m_nDimensionIndex, m_bMain, xDiagram, m_spChart2ModelContact->m_xContext );
170         else
171             AxisHelper::showGrid( m_nDimensionIndex, 0, m_bMain, xDiagram, m_spChart2ModelContact->m_xContext );
172     }
173     else
174     {
175         if( m_bAxis )
176             AxisHelper::hideAxis( m_nDimensionIndex, m_bMain, xDiagram );
177         else
178             AxisHelper::hideGrid( m_nDimensionIndex, 0, m_bMain, xDiagram );
179     }
180 }
181 
getPropertyValue(const Reference<beans::XPropertySet> &) const182 Any WrappedAxisAndGridExistenceProperty::getPropertyValue( const Reference< beans::XPropertySet >& /* xInnerPropertySet */ ) const
183 {
184     Any aRet;
185     Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() );
186     if(m_bAxis)
187     {
188         sal_Bool bShown = AxisHelper::isAxisShown( m_nDimensionIndex, m_bMain, xDiagram );
189         aRet <<= bShown;
190     }
191     else
192     {
193         sal_Bool bShown = AxisHelper::isGridShown( m_nDimensionIndex, 0, m_bMain, xDiagram );
194         aRet <<= bShown;
195     }
196     return aRet;
197 }
198 
getPropertyDefault(const Reference<beans::XPropertyState> &) const199 Any WrappedAxisAndGridExistenceProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const
200 {
201     Any aRet;
202     aRet <<= false;
203     return aRet;
204 }
205 
206 //---------------------------------------------------------------------------------------------------------------
207 //---------------------------------------------------------------------------------------------------------------
208 //---------------------------------------------------------------------------------------------------------------
209 
210 class WrappedAxisTitleExistenceProperty : public WrappedProperty
211 {
212 public:
213     WrappedAxisTitleExistenceProperty( sal_Int32 nTitleIndex
214         , ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact );
215     virtual ~WrappedAxisTitleExistenceProperty();
216 
217     virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const;
218 
219     virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const;
220 
221     virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const;
222 
223 private: //member
224     ::boost::shared_ptr< Chart2ModelContact >   m_spChart2ModelContact;
225     TitleHelper::eTitleType             m_eTitleType;
226 };
227 
addWrappedProperties(std::vector<WrappedProperty * > & rList,::boost::shared_ptr<Chart2ModelContact> spChart2ModelContact)228 void WrappedAxisTitleExistenceProperties::addWrappedProperties( std::vector< WrappedProperty* >& rList
229             , ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact )
230 {
231     rList.push_back( new WrappedAxisTitleExistenceProperty( 0, spChart2ModelContact ) );//x axis title
232     rList.push_back( new WrappedAxisTitleExistenceProperty( 1, spChart2ModelContact ) );//y axis title
233     rList.push_back( new WrappedAxisTitleExistenceProperty( 2, spChart2ModelContact ) );//z axis title
234     rList.push_back( new WrappedAxisTitleExistenceProperty( 3, spChart2ModelContact ) );//secondary x axis title
235     rList.push_back( new WrappedAxisTitleExistenceProperty( 4, spChart2ModelContact ) );//secondary y axis title
236 }
237 
WrappedAxisTitleExistenceProperty(sal_Int32 nTitleIndex,::boost::shared_ptr<Chart2ModelContact> spChart2ModelContact)238 WrappedAxisTitleExistenceProperty::WrappedAxisTitleExistenceProperty( sal_Int32 nTitleIndex
239                 , ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact )
240             : WrappedProperty(OUString(),OUString())
241             , m_spChart2ModelContact( spChart2ModelContact )
242             , m_eTitleType( TitleHelper::Y_AXIS_TITLE )
243 {
244     switch( nTitleIndex )
245     {
246         case 0:
247             m_aOuterName = C2U( "HasXAxisTitle" );
248             m_eTitleType = TitleHelper::X_AXIS_TITLE;
249             break;
250         case 2:
251             m_aOuterName = C2U( "HasZAxisTitle" );
252             m_eTitleType = TitleHelper::Z_AXIS_TITLE;
253             break;
254         case 3:
255             m_aOuterName = C2U( "HasSecondaryXAxisTitle" );
256             m_eTitleType = TitleHelper::SECONDARY_X_AXIS_TITLE;
257             break;
258         case 4:
259             m_aOuterName = C2U( "HasSecondaryYAxisTitle" );
260             m_eTitleType = TitleHelper::SECONDARY_Y_AXIS_TITLE;
261             break;
262         default:
263             m_aOuterName = C2U( "HasYAxisTitle" );
264             m_eTitleType = TitleHelper::Y_AXIS_TITLE;
265             break;
266     }
267 }
268 
~WrappedAxisTitleExistenceProperty()269 WrappedAxisTitleExistenceProperty::~WrappedAxisTitleExistenceProperty()
270 {
271 }
272 
setPropertyValue(const Any & rOuterValue,const Reference<beans::XPropertySet> & xInnerPropertySet) const273 void WrappedAxisTitleExistenceProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const
274 {
275     sal_Bool bNewValue = false;
276     if( ! (rOuterValue >>= bNewValue) )
277         throw lang::IllegalArgumentException( C2U("Has axis or grid properties require boolean values"), 0, 0 );
278 
279     sal_Bool bOldValue = sal_False;
280     getPropertyValue( xInnerPropertySet ) >>= bOldValue;
281 
282     if( bOldValue == bNewValue )
283         return;
284 
285     if( bNewValue )
286     {
287         rtl::OUString aTitleText;
288         TitleHelper::createTitle(  m_eTitleType, aTitleText
289             , m_spChart2ModelContact->getChartModel(), m_spChart2ModelContact->m_xContext );
290     }
291     else
292     {
293         TitleHelper::removeTitle( m_eTitleType, m_spChart2ModelContact->getChartModel() );
294     }
295 }
296 
getPropertyValue(const Reference<beans::XPropertySet> &) const297 Any WrappedAxisTitleExistenceProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const
298 {
299     sal_Bool bHasTitle = sal_False;
300 
301     Reference< chart2::XTitle > xTitle( TitleHelper::getTitle( m_eTitleType, m_spChart2ModelContact->getChartModel() ) );
302     if( xTitle.is() && (TitleHelper::getCompleteString( xTitle ).isEmpty() == false) )
303         bHasTitle = sal_True;
304 
305     Any aRet;
306     aRet <<= bHasTitle;
307     return aRet;
308 
309 }
310 
getPropertyDefault(const Reference<beans::XPropertyState> &) const311 Any WrappedAxisTitleExistenceProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const
312 {
313     Any aRet;
314     aRet <<= sal_Bool( sal_False );
315     return aRet;
316 }
317 
318 //---------------------------------------------------------------------------------------------------------------
319 //---------------------------------------------------------------------------------------------------------------
320 //---------------------------------------------------------------------------------------------------------------
321 
322 class WrappedAxisLabelExistenceProperty : public WrappedProperty
323 {
324 public:
325     WrappedAxisLabelExistenceProperty( bool bMain, sal_Int32 nDimensionIndex
326         , ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact );
327     virtual ~WrappedAxisLabelExistenceProperty();
328 
329     virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const;
330 
331     virtual ::com::sun::star::uno::Any getPropertyValue( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const;
332 
333     virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const;
334 
335 private: //member
336     ::boost::shared_ptr< Chart2ModelContact >   m_spChart2ModelContact;
337     bool        m_bMain;
338     sal_Int32   m_nDimensionIndex;
339 };
340 
addWrappedProperties(std::vector<WrappedProperty * > & rList,::boost::shared_ptr<Chart2ModelContact> spChart2ModelContact)341 void WrappedAxisLabelExistenceProperties::addWrappedProperties( std::vector< WrappedProperty* >& rList
342             , ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact )
343 {
344     rList.push_back( new WrappedAxisLabelExistenceProperty( true, 0, spChart2ModelContact ) );//x axis
345     rList.push_back( new WrappedAxisLabelExistenceProperty( true, 1, spChart2ModelContact ) );//y axis
346     rList.push_back( new WrappedAxisLabelExistenceProperty( true, 2, spChart2ModelContact ) );//z axis
347     rList.push_back( new WrappedAxisLabelExistenceProperty( false, 0, spChart2ModelContact ) );//secondary x axis
348     rList.push_back( new WrappedAxisLabelExistenceProperty( false, 1, spChart2ModelContact ) );//secondary y axis
349 }
350 
WrappedAxisLabelExistenceProperty(bool bMain,sal_Int32 nDimensionIndex,::boost::shared_ptr<Chart2ModelContact> spChart2ModelContact)351 WrappedAxisLabelExistenceProperty::WrappedAxisLabelExistenceProperty( bool bMain, sal_Int32 nDimensionIndex
352                 , ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact )
353             : WrappedProperty(OUString(),OUString())
354             , m_spChart2ModelContact( spChart2ModelContact )
355             , m_bMain( bMain )
356             , m_nDimensionIndex( nDimensionIndex )
357 {
358     switch( m_nDimensionIndex )
359     {
360         case 0:
361             m_aOuterName = m_bMain ? C2U( "HasXAxisDescription" ) : C2U( "HasSecondaryXAxisDescription" );
362             break;
363         case 2:
364             OSL_ENSURE(m_bMain,"there is no description available for a secondary z axis");
365             m_aOuterName = C2U( "HasZAxisDescription" );
366             break;
367         default:
368             m_aOuterName = m_bMain ? C2U( "HasYAxisDescription" ) : C2U( "HasSecondaryYAxisDescription" );
369             break;
370     }
371 }
372 
~WrappedAxisLabelExistenceProperty()373 WrappedAxisLabelExistenceProperty::~WrappedAxisLabelExistenceProperty()
374 {
375 }
376 
setPropertyValue(const Any & rOuterValue,const Reference<beans::XPropertySet> & xInnerPropertySet) const377 void WrappedAxisLabelExistenceProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const
378 {
379     sal_Bool bNewValue = false;
380     if( ! (rOuterValue >>= bNewValue) )
381         throw lang::IllegalArgumentException( C2U("Has axis or grid properties require boolean values"), 0, 0 );
382 
383     sal_Bool bOldValue = sal_False;
384     getPropertyValue( xInnerPropertySet ) >>= bOldValue;
385 
386     if( bOldValue == bNewValue )
387         return;
388 
389     Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() );
390     Reference< beans::XPropertySet > xProp( AxisHelper::getAxis( m_nDimensionIndex, m_bMain, xDiagram ), uno::UNO_QUERY );
391     if( !xProp.is() && bNewValue )
392     {
393         //create axis if needed
394         xProp.set( AxisHelper::createAxis( m_nDimensionIndex, m_bMain, xDiagram, m_spChart2ModelContact->m_xContext ), uno::UNO_QUERY );
395         if( xProp.is() )
396             xProp->setPropertyValue( C2U( "Show" ), uno::makeAny( sal_False ) );
397     }
398     if( xProp.is() )
399         xProp->setPropertyValue( C2U( "DisplayLabels" ), rOuterValue );
400 }
401 
getPropertyValue(const Reference<beans::XPropertySet> &) const402 Any WrappedAxisLabelExistenceProperty::getPropertyValue( const Reference< beans::XPropertySet >& /*xInnerPropertySet*/ ) const
403 {
404     Any aRet;
405     Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() );
406     Reference< beans::XPropertySet > xProp( AxisHelper::getAxis( m_nDimensionIndex, m_bMain, xDiagram ), uno::UNO_QUERY );
407     if( xProp.is() )
408         aRet = xProp->getPropertyValue( C2U( "DisplayLabels" ));
409     else
410         aRet <<= sal_False;
411     return aRet;
412 }
413 
getPropertyDefault(const Reference<beans::XPropertyState> &) const414 Any WrappedAxisLabelExistenceProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const
415 {
416     Any aRet;
417     aRet <<= sal_Bool( sal_True );
418     return aRet;
419 }
420 
421 } //namespace wrapper
422 } //namespace chart
423 //.............................................................................
424