1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_chart2.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include "GridWrapper.hxx"
32*cdf0e10cSrcweir #include "macros.hxx"
33*cdf0e10cSrcweir #include "AxisHelper.hxx"
34*cdf0e10cSrcweir #include "Chart2ModelContact.hxx"
35*cdf0e10cSrcweir #include "ContainerHelper.hxx"
36*cdf0e10cSrcweir #include "AxisIndexDefines.hxx"
37*cdf0e10cSrcweir #include <comphelper/InlineContainer.hxx>
38*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp>
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir #include "LineProperties.hxx"
41*cdf0e10cSrcweir #include "UserDefinedProperties.hxx"
42*cdf0e10cSrcweir #include "WrappedDefaultProperty.hxx"
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir #include <algorithm>
45*cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
46*cdf0e10cSrcweir #include <rtl/math.hxx>
47*cdf0e10cSrcweir 
48*cdf0e10cSrcweir using namespace ::com::sun::star;
49*cdf0e10cSrcweir using namespace ::com::sun::star::chart2;
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir using ::com::sun::star::beans::Property;
52*cdf0e10cSrcweir using ::osl::MutexGuard;
53*cdf0e10cSrcweir using ::com::sun::star::uno::Reference;
54*cdf0e10cSrcweir using ::com::sun::star::uno::Sequence;
55*cdf0e10cSrcweir using ::rtl::OUString;
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir namespace
58*cdf0e10cSrcweir {
59*cdf0e10cSrcweir static const OUString lcl_aServiceName(
60*cdf0e10cSrcweir     RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.chart.Grid" ));
61*cdf0e10cSrcweir 
62*cdf0e10cSrcweir struct StaticGridWrapperPropertyArray_Initializer
63*cdf0e10cSrcweir {
64*cdf0e10cSrcweir     Sequence< Property >* operator()()
65*cdf0e10cSrcweir     {
66*cdf0e10cSrcweir         static Sequence< Property > aPropSeq( lcl_GetPropertySequence() );
67*cdf0e10cSrcweir         return &aPropSeq;
68*cdf0e10cSrcweir     }
69*cdf0e10cSrcweir private:
70*cdf0e10cSrcweir     Sequence< Property > lcl_GetPropertySequence()
71*cdf0e10cSrcweir     {
72*cdf0e10cSrcweir         ::std::vector< ::com::sun::star::beans::Property > aProperties;
73*cdf0e10cSrcweir         ::chart::LineProperties::AddPropertiesToVector( aProperties );
74*cdf0e10cSrcweir         //::chart::NamedLineProperties::AddPropertiesToVector( aProperties );
75*cdf0e10cSrcweir         ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties );
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir         ::std::sort( aProperties.begin(), aProperties.end(),
78*cdf0e10cSrcweir                      ::chart::PropertyNameLess() );
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir         return ::chart::ContainerHelper::ContainerToSequence( aProperties );
81*cdf0e10cSrcweir     }
82*cdf0e10cSrcweir };
83*cdf0e10cSrcweir 
84*cdf0e10cSrcweir struct StaticGridWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticGridWrapperPropertyArray_Initializer >
85*cdf0e10cSrcweir {
86*cdf0e10cSrcweir };
87*cdf0e10cSrcweir 
88*cdf0e10cSrcweir } // anonymous namespace
89*cdf0e10cSrcweir 
90*cdf0e10cSrcweir // --------------------------------------------------------------------------------
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir namespace chart
93*cdf0e10cSrcweir {
94*cdf0e10cSrcweir namespace wrapper
95*cdf0e10cSrcweir {
96*cdf0e10cSrcweir 
97*cdf0e10cSrcweir GridWrapper::GridWrapper(
98*cdf0e10cSrcweir     tGridType eType, ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) :
99*cdf0e10cSrcweir         m_spChart2ModelContact( spChart2ModelContact ),
100*cdf0e10cSrcweir         m_aEventListenerContainer( m_aMutex ),
101*cdf0e10cSrcweir         m_eType( eType )
102*cdf0e10cSrcweir {
103*cdf0e10cSrcweir }
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir GridWrapper::~GridWrapper()
106*cdf0e10cSrcweir {}
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir void GridWrapper::getDimensionAndSubGridBool( tGridType eType, sal_Int32& rnDimensionIndex, bool& rbSubGrid )
109*cdf0e10cSrcweir {
110*cdf0e10cSrcweir     rnDimensionIndex = 1;
111*cdf0e10cSrcweir     rbSubGrid = false;
112*cdf0e10cSrcweir 
113*cdf0e10cSrcweir     switch( eType )
114*cdf0e10cSrcweir     {
115*cdf0e10cSrcweir         case X_MAJOR_GRID:
116*cdf0e10cSrcweir             rnDimensionIndex = 0; rbSubGrid = false; break;
117*cdf0e10cSrcweir         case Y_MAJOR_GRID:
118*cdf0e10cSrcweir             rnDimensionIndex = 1; rbSubGrid = false; break;
119*cdf0e10cSrcweir         case Z_MAJOR_GRID:
120*cdf0e10cSrcweir             rnDimensionIndex = 2; rbSubGrid = false; break;
121*cdf0e10cSrcweir         case X_MINOR_GRID:
122*cdf0e10cSrcweir             rnDimensionIndex = 0; rbSubGrid = true;  break;
123*cdf0e10cSrcweir         case Y_MINOR_GRID:
124*cdf0e10cSrcweir             rnDimensionIndex = 1; rbSubGrid = true;  break;
125*cdf0e10cSrcweir         case Z_MINOR_GRID:
126*cdf0e10cSrcweir             rnDimensionIndex = 2; rbSubGrid = true;  break;
127*cdf0e10cSrcweir     }
128*cdf0e10cSrcweir }
129*cdf0e10cSrcweir 
130*cdf0e10cSrcweir // ____ XComponent ____
131*cdf0e10cSrcweir void SAL_CALL GridWrapper::dispose()
132*cdf0e10cSrcweir     throw (uno::RuntimeException)
133*cdf0e10cSrcweir {
134*cdf0e10cSrcweir     Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
135*cdf0e10cSrcweir     m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) );
136*cdf0e10cSrcweir 
137*cdf0e10cSrcweir     clearWrappedPropertySet();
138*cdf0e10cSrcweir }
139*cdf0e10cSrcweir 
140*cdf0e10cSrcweir void SAL_CALL GridWrapper::addEventListener(
141*cdf0e10cSrcweir     const Reference< lang::XEventListener >& xListener )
142*cdf0e10cSrcweir     throw (uno::RuntimeException)
143*cdf0e10cSrcweir {
144*cdf0e10cSrcweir 	m_aEventListenerContainer.addInterface( xListener );
145*cdf0e10cSrcweir }
146*cdf0e10cSrcweir 
147*cdf0e10cSrcweir void SAL_CALL GridWrapper::removeEventListener(
148*cdf0e10cSrcweir     const Reference< lang::XEventListener >& aListener )
149*cdf0e10cSrcweir     throw (uno::RuntimeException)
150*cdf0e10cSrcweir {
151*cdf0e10cSrcweir 	m_aEventListenerContainer.removeInterface( aListener );
152*cdf0e10cSrcweir }
153*cdf0e10cSrcweir 
154*cdf0e10cSrcweir // ================================================================================
155*cdf0e10cSrcweir 
156*cdf0e10cSrcweir // WrappedPropertySet
157*cdf0e10cSrcweir 
158*cdf0e10cSrcweir Reference< beans::XPropertySet > GridWrapper::getInnerPropertySet()
159*cdf0e10cSrcweir {
160*cdf0e10cSrcweir     Reference< beans::XPropertySet > xRet;
161*cdf0e10cSrcweir     try
162*cdf0e10cSrcweir     {
163*cdf0e10cSrcweir         Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() );
164*cdf0e10cSrcweir         uno::Reference< XCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemByIndex( xDiagram, 0 /*nCooSysIndex*/ ) );
165*cdf0e10cSrcweir 
166*cdf0e10cSrcweir         sal_Int32 nDimensionIndex = 1;
167*cdf0e10cSrcweir         bool bSubGrid = false;
168*cdf0e10cSrcweir         getDimensionAndSubGridBool( m_eType, nDimensionIndex, bSubGrid );
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir         sal_Int32 nSubGridIndex = bSubGrid ? 0 : -1;
171*cdf0e10cSrcweir         xRet.set( AxisHelper::getGridProperties( xCooSys , nDimensionIndex, MAIN_AXIS_INDEX, nSubGridIndex ) );
172*cdf0e10cSrcweir     }
173*cdf0e10cSrcweir     catch( uno::Exception & ex )
174*cdf0e10cSrcweir     {
175*cdf0e10cSrcweir         ASSERT_EXCEPTION( ex );
176*cdf0e10cSrcweir     }
177*cdf0e10cSrcweir     return xRet;
178*cdf0e10cSrcweir }
179*cdf0e10cSrcweir 
180*cdf0e10cSrcweir const Sequence< beans::Property >& GridWrapper::getPropertySequence()
181*cdf0e10cSrcweir {
182*cdf0e10cSrcweir     return *StaticGridWrapperPropertyArray::get();
183*cdf0e10cSrcweir }
184*cdf0e10cSrcweir 
185*cdf0e10cSrcweir const std::vector< WrappedProperty* > GridWrapper::createWrappedProperties()
186*cdf0e10cSrcweir {
187*cdf0e10cSrcweir     ::std::vector< ::chart::WrappedProperty* > aWrappedProperties;
188*cdf0e10cSrcweir 
189*cdf0e10cSrcweir     aWrappedProperties.push_back( new WrappedDefaultProperty( C2U("LineColor"), C2U("LineColor"), uno::makeAny( sal_Int32( 0x000000) ) ) ); // black
190*cdf0e10cSrcweir 
191*cdf0e10cSrcweir     return aWrappedProperties;
192*cdf0e10cSrcweir }
193*cdf0e10cSrcweir 
194*cdf0e10cSrcweir // ================================================================================
195*cdf0e10cSrcweir 
196*cdf0e10cSrcweir Sequence< OUString > GridWrapper::getSupportedServiceNames_Static()
197*cdf0e10cSrcweir {
198*cdf0e10cSrcweir     Sequence< OUString > aServices( 4 );
199*cdf0e10cSrcweir     aServices[ 0 ] = C2U( "com.sun.star.chart.ChartGrid" );
200*cdf0e10cSrcweir     aServices[ 1 ] = C2U( "com.sun.star.xml.UserDefinedAttributeSupplier" );
201*cdf0e10cSrcweir     aServices[ 2 ] = C2U( "com.sun.star.drawing.LineProperties" );
202*cdf0e10cSrcweir     aServices[ 3 ] = C2U( "com.sun.star.beans.PropertySet" );
203*cdf0e10cSrcweir 
204*cdf0e10cSrcweir     return aServices;
205*cdf0e10cSrcweir }
206*cdf0e10cSrcweir 
207*cdf0e10cSrcweir // implement XServiceInfo methods basing upon getSupportedServiceNames_Static
208*cdf0e10cSrcweir APPHELPER_XSERVICEINFO_IMPL( GridWrapper, lcl_aServiceName );
209*cdf0e10cSrcweir 
210*cdf0e10cSrcweir } //  namespace wrapper
211*cdf0e10cSrcweir } //  namespace chart
212*cdf0e10cSrcweir 
213