1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #include "sampleaddin.hxx"
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski #include <cppuhelper/factory.hxx>
26*b1cdbd2cSJim Jagielski #include <osl/diagnose.h>
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XDrawPageSupplier.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XDrawPage.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/chart/XChartDataArray.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextRange.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/chart/X3DDisplay.hpp>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski using namespace com::sun::star;
35*b1cdbd2cSJim Jagielski using namespace rtl;
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski // code for creating instances of SampleAddIn
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski extern "C" {
40*b1cdbd2cSJim Jagielski 
component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName,uno_Environment **)41*b1cdbd2cSJim Jagielski void SAL_CALL component_getImplementationEnvironment(
42*b1cdbd2cSJim Jagielski 	const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ )
43*b1cdbd2cSJim Jagielski {
44*b1cdbd2cSJim Jagielski 	*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
45*b1cdbd2cSJim Jagielski }
46*b1cdbd2cSJim Jagielski 
component_writeInfo(void *,registry::XRegistryKey * pRegistryKey)47*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL component_writeInfo(
48*b1cdbd2cSJim Jagielski 	void * /*pServiceManager*/, registry::XRegistryKey * pRegistryKey )
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski 	if( pRegistryKey )
51*b1cdbd2cSJim Jagielski 	{
52*b1cdbd2cSJim Jagielski 		try
53*b1cdbd2cSJim Jagielski 		{
54*b1cdbd2cSJim Jagielski 			OUString aImpl = OUString::createFromAscii( "/" );
55*b1cdbd2cSJim Jagielski 			aImpl += SampleAddIn::getImplementationName_Static();
56*b1cdbd2cSJim Jagielski 			aImpl += OUString::createFromAscii( "/UNO/SERVICES" );
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski 			uno::Reference< registry::XRegistryKey> xNewKey(
59*b1cdbd2cSJim Jagielski 				reinterpret_cast<registry::XRegistryKey*>( pRegistryKey )->createKey( aImpl ) );
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski 			uno::Sequence< OUString > aSequ = SampleAddIn::getSupportedServiceNames_Static();
62*b1cdbd2cSJim Jagielski 			const OUString * pArray = aSequ.getConstArray();
63*b1cdbd2cSJim Jagielski 			for( sal_Int32 i = 0; i < aSequ.getLength(); i++ )
64*b1cdbd2cSJim Jagielski 				xNewKey->createKey( pArray[i] );
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski 			return sal_True;
67*b1cdbd2cSJim Jagielski 		}
68*b1cdbd2cSJim Jagielski 		catch( registry::InvalidRegistryException& )
69*b1cdbd2cSJim Jagielski 		{
70*b1cdbd2cSJim Jagielski 			OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
71*b1cdbd2cSJim Jagielski 		}
72*b1cdbd2cSJim Jagielski 	}
73*b1cdbd2cSJim Jagielski 	return sal_False;
74*b1cdbd2cSJim Jagielski }
75*b1cdbd2cSJim Jagielski 
component_getFactory(const sal_Char * pImplName,void * pServiceManager,void *)76*b1cdbd2cSJim Jagielski void * SAL_CALL component_getFactory(
77*b1cdbd2cSJim Jagielski 	const sal_Char * pImplName, void * pServiceManager, void * /*pRegistryKey*/ )
78*b1cdbd2cSJim Jagielski {
79*b1cdbd2cSJim Jagielski 	void* pRet = 0;
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski 	if ( pServiceManager &&
82*b1cdbd2cSJim Jagielski 			OUString::createFromAscii( pImplName ) == SampleAddIn::getImplementationName_Static() )
83*b1cdbd2cSJim Jagielski 	{
84*b1cdbd2cSJim Jagielski 		uno::Reference< lang::XSingleServiceFactory> xFactory( cppu::createSingleFactory(
85*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>( pServiceManager ),
86*b1cdbd2cSJim Jagielski 				SampleAddIn::getImplementationName_Static(),
87*b1cdbd2cSJim Jagielski 				SampleAddIn_CreateInstance,
88*b1cdbd2cSJim Jagielski 				SampleAddIn::getSupportedServiceNames_Static() ) );
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 		if( xFactory.is())
91*b1cdbd2cSJim Jagielski 		{
92*b1cdbd2cSJim Jagielski 			xFactory->acquire();
93*b1cdbd2cSJim Jagielski 			pRet = xFactory.get();
94*b1cdbd2cSJim Jagielski 		}
95*b1cdbd2cSJim Jagielski 	}
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 	return pRet;
98*b1cdbd2cSJim Jagielski }
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski }	// extern C
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski // --------------------
104*b1cdbd2cSJim Jagielski // class SampleAddIn
105*b1cdbd2cSJim Jagielski // --------------------
106*b1cdbd2cSJim Jagielski 
SampleAddIn()107*b1cdbd2cSJim Jagielski SampleAddIn::SampleAddIn()
108*b1cdbd2cSJim Jagielski {
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski }
111*b1cdbd2cSJim Jagielski 
~SampleAddIn()112*b1cdbd2cSJim Jagielski SampleAddIn::~SampleAddIn()
113*b1cdbd2cSJim Jagielski {}
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski // this functionality should be provided by the chart API some day
getLogicalPosition(uno::Reference<drawing::XShape> & xAxis,double fValue,sal_Bool bVertical,awt::Point & aOutPosition)117*b1cdbd2cSJim Jagielski sal_Bool SampleAddIn::getLogicalPosition( uno::Reference< drawing::XShape >& xAxis,
118*b1cdbd2cSJim Jagielski 										  double fValue,
119*b1cdbd2cSJim Jagielski 										  sal_Bool bVertical,
120*b1cdbd2cSJim Jagielski 										  awt::Point& aOutPosition )
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_False;
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 	if( xAxis.is())
125*b1cdbd2cSJim Jagielski 	{
126*b1cdbd2cSJim Jagielski 		awt::Size aSize = xAxis->getSize();
127*b1cdbd2cSJim Jagielski 		sal_Int32 nLength = bVertical? aSize.Height: aSize.Width;
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 		uno::Reference< beans::XPropertySet > xProp( xAxis, uno::UNO_QUERY );
130*b1cdbd2cSJim Jagielski 		if( xProp.is())
131*b1cdbd2cSJim Jagielski 		{
132*b1cdbd2cSJim Jagielski 			try
133*b1cdbd2cSJim Jagielski 			{
134*b1cdbd2cSJim Jagielski 				double fMin(0.0), fMax(0.0);
135*b1cdbd2cSJim Jagielski 				uno::Any aAny = xProp->getPropertyValue( OUString::createFromAscii( "Min" ));
136*b1cdbd2cSJim Jagielski 				aAny >>= fMin;
137*b1cdbd2cSJim Jagielski 				aAny = xProp->getPropertyValue( OUString::createFromAscii( "Max" ));
138*b1cdbd2cSJim Jagielski 				aAny >>= fMax;
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 				double fRange = fMax - fMin;
141*b1cdbd2cSJim Jagielski 				if( fMin <= fValue && fValue <= fMax &&
142*b1cdbd2cSJim Jagielski 					fRange != 0.0 )
143*b1cdbd2cSJim Jagielski 				{
144*b1cdbd2cSJim Jagielski 					double fPercentage = (fValue - fMin) / fRange;
145*b1cdbd2cSJim Jagielski 					awt::Point aPos = xAxis->getPosition();
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 					if( bVertical )
148*b1cdbd2cSJim Jagielski 					{
149*b1cdbd2cSJim Jagielski 						aOutPosition.X = aPos.X;
150*b1cdbd2cSJim Jagielski 						aOutPosition.Y = static_cast<sal_Int32>(aPos.Y + nLength * (1.0 - fPercentage));	// y scale goes from top to bottom
151*b1cdbd2cSJim Jagielski 					}
152*b1cdbd2cSJim Jagielski 					else
153*b1cdbd2cSJim Jagielski 					{
154*b1cdbd2cSJim Jagielski 						aOutPosition.X = static_cast<sal_Int32>(aPos.X + nLength * fPercentage);
155*b1cdbd2cSJim Jagielski 						aOutPosition.Y = aPos.Y;
156*b1cdbd2cSJim Jagielski 					}
157*b1cdbd2cSJim Jagielski 					bRet = sal_True;
158*b1cdbd2cSJim Jagielski 				}
159*b1cdbd2cSJim Jagielski 			}
160*b1cdbd2cSJim Jagielski 			catch( beans::UnknownPropertyException )
161*b1cdbd2cSJim Jagielski 			{
162*b1cdbd2cSJim Jagielski 				// the shape xAxis was no chart axis
163*b1cdbd2cSJim Jagielski 			}
164*b1cdbd2cSJim Jagielski 		}
165*b1cdbd2cSJim Jagielski 	}
166*b1cdbd2cSJim Jagielski 
167*b1cdbd2cSJim Jagielski 	return bRet;
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski 
getImplementationName_Static()170*b1cdbd2cSJim Jagielski OUString SampleAddIn::getImplementationName_Static()
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski 	return OUString::createFromAscii( "SampleAddIn" );
173*b1cdbd2cSJim Jagielski }
174*b1cdbd2cSJim Jagielski 
getSupportedServiceNames_Static()175*b1cdbd2cSJim Jagielski uno::Sequence< ::rtl::OUString > SampleAddIn::getSupportedServiceNames_Static()
176*b1cdbd2cSJim Jagielski {
177*b1cdbd2cSJim Jagielski 	uno::Sequence< OUString > aSeq( 4 );
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 	aSeq[ 0 ] = OUString::createFromAscii( "com.sun.star.chart.ChartAxisXSupplier" );
180*b1cdbd2cSJim Jagielski 	aSeq[ 1 ] = OUString::createFromAscii( "com.sun.star.chart.ChartAxisYSupplier" );
181*b1cdbd2cSJim Jagielski 	aSeq[ 2 ] = OUString::createFromAscii( "com.sun.star.chart.Diagram" );
182*b1cdbd2cSJim Jagielski 	aSeq[ 3 ] = OUString::createFromAscii( "com.sun.star.chart.SampleAddIn" );
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski 	return aSeq;
185*b1cdbd2cSJim Jagielski }
186*b1cdbd2cSJim Jagielski 
SampleAddIn_CreateInstance(const uno::Reference<lang::XMultiServiceFactory> &)187*b1cdbd2cSJim Jagielski uno::Reference< uno::XInterface > SAL_CALL SampleAddIn_CreateInstance(
188*b1cdbd2cSJim Jagielski 	const uno::Reference< lang::XMultiServiceFactory >& )
189*b1cdbd2cSJim Jagielski {
190*b1cdbd2cSJim Jagielski 	uno::Reference< uno::XInterface > xInst = (cppu::OWeakObject*)new SampleAddIn();
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 	return xInst;
193*b1cdbd2cSJim Jagielski }
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski // implementation of interface methods
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski // XInitialization
initialize(const uno::Sequence<uno::Any> & aArguments)198*b1cdbd2cSJim Jagielski void SAL_CALL SampleAddIn::initialize( const uno::Sequence< uno::Any >& aArguments )
199*b1cdbd2cSJim Jagielski 	throw( uno::Exception, uno::RuntimeException )
200*b1cdbd2cSJim Jagielski {
201*b1cdbd2cSJim Jagielski 	// first argument should be the XChartDocument
202*b1cdbd2cSJim Jagielski 	OSL_ENSURE( aArguments.getLength() > 0, "Please initialize Chart AddIn with ChartDocument!" );
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski 	if( aArguments.getLength())
205*b1cdbd2cSJim Jagielski 	{
206*b1cdbd2cSJim Jagielski 		aArguments[ 0 ] >>= mxChartDoc;
207*b1cdbd2cSJim Jagielski 		OSL_ENSURE( mxChartDoc.is(), "First argument in initialization is not an XChartDocument!" );
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski 		// set XY chart as base type to be drawn
210*b1cdbd2cSJim Jagielski 		uno::Reference< beans::XPropertySet > xDocProp( mxChartDoc, uno::UNO_QUERY );
211*b1cdbd2cSJim Jagielski 		if( xDocProp.is())
212*b1cdbd2cSJim Jagielski 		{
213*b1cdbd2cSJim Jagielski 			uno::Any aBaseType;
214*b1cdbd2cSJim Jagielski 			aBaseType <<= rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart.XYDiagram" ));
215*b1cdbd2cSJim Jagielski 			try
216*b1cdbd2cSJim Jagielski 			{
217*b1cdbd2cSJim Jagielski 				xDocProp->setPropertyValue( rtl::OUString::createFromAscii( "BaseDiagram" ), aBaseType );
218*b1cdbd2cSJim Jagielski 			}
219*b1cdbd2cSJim Jagielski 			catch( ... )
220*b1cdbd2cSJim Jagielski 			{}
221*b1cdbd2cSJim Jagielski 		}
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 		// change background of plot area to light blue
224*b1cdbd2cSJim Jagielski 		uno::Reference< chart::X3DDisplay > xWallSupplier( mxChartDoc->getDiagram(), uno::UNO_QUERY );
225*b1cdbd2cSJim Jagielski 		if( xWallSupplier.is())
226*b1cdbd2cSJim Jagielski 		{
227*b1cdbd2cSJim Jagielski 			uno::Reference< beans::XPropertySet > xDiaProp( xWallSupplier->getWall(), uno::UNO_QUERY );
228*b1cdbd2cSJim Jagielski 			uno::Reference< beans::XPropertySet > xLegendProp( mxChartDoc->getLegend(), uno::UNO_QUERY );
229*b1cdbd2cSJim Jagielski 			if( xDiaProp.is() &&
230*b1cdbd2cSJim Jagielski 				xLegendProp.is())
231*b1cdbd2cSJim Jagielski 			{
232*b1cdbd2cSJim Jagielski 				uno::Any aAny;
233*b1cdbd2cSJim Jagielski 				aAny <<= (sal_Int32)( 0xe0e0f0 );
234*b1cdbd2cSJim Jagielski 				xDiaProp->setPropertyValue( OUString::createFromAscii( "FillColor" ), aAny );
235*b1cdbd2cSJim Jagielski 				xLegendProp->setPropertyValue( OUString::createFromAscii( "FillColor" ), aAny );
236*b1cdbd2cSJim Jagielski 			}
237*b1cdbd2cSJim Jagielski 		}
238*b1cdbd2cSJim Jagielski 	}
239*b1cdbd2cSJim Jagielski }
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski // XRefreshable
242*b1cdbd2cSJim Jagielski /********************************************************************************
243*b1cdbd2cSJim Jagielski  *
244*b1cdbd2cSJim Jagielski  * The method refresh is the most important method - here all objects that
245*b1cdbd2cSJim Jagielski  * are necessary for the chart are created
246*b1cdbd2cSJim Jagielski  *
247*b1cdbd2cSJim Jagielski  * in the first implementation you will have to insert everything in this
248*b1cdbd2cSJim Jagielski  * routine - all old objects are deleted beforehand
249*b1cdbd2cSJim Jagielski  *
250*b1cdbd2cSJim Jagielski  ********************************************************************************/
refresh()251*b1cdbd2cSJim Jagielski void SAL_CALL SampleAddIn::refresh() throw( uno::RuntimeException )
252*b1cdbd2cSJim Jagielski {
253*b1cdbd2cSJim Jagielski 	if( ! mxChartDoc.is())
254*b1cdbd2cSJim Jagielski 		return;
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski 	// first of all get the draw page
257*b1cdbd2cSJim Jagielski 	uno::Reference< drawing::XDrawPageSupplier > xPageSupp( mxChartDoc, uno::UNO_QUERY );
258*b1cdbd2cSJim Jagielski 	uno::Reference< lang::XMultiServiceFactory > xFactory( mxChartDoc, uno::UNO_QUERY );
259*b1cdbd2cSJim Jagielski 	if( xPageSupp.is() &&
260*b1cdbd2cSJim Jagielski 		xFactory.is() )
261*b1cdbd2cSJim Jagielski 	{
262*b1cdbd2cSJim Jagielski 		uno::Reference< drawing::XDrawPage > xPage = xPageSupp->getDrawPage();
263*b1cdbd2cSJim Jagielski 		if( xPage.is())
264*b1cdbd2cSJim Jagielski 		{
265*b1cdbd2cSJim Jagielski 			// now we have the page to insert objects
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski 			// add a horizontal line at the middle value of the first series
268*b1cdbd2cSJim Jagielski 			// -------------------------------------------------------------
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski 			// get the logical position from the coordinate
272*b1cdbd2cSJim Jagielski 			// get x- and y-axis
273*b1cdbd2cSJim Jagielski 			uno::Reference< drawing::XShape > xYAxisShape( getYAxis(), uno::UNO_QUERY );
274*b1cdbd2cSJim Jagielski 			uno::Reference< drawing::XShape > xXAxisShape( getXAxis(), uno::UNO_QUERY );
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski 			if( xXAxisShape.is() &&
277*b1cdbd2cSJim Jagielski 				xYAxisShape.is() )
278*b1cdbd2cSJim Jagielski 			{
279*b1cdbd2cSJim Jagielski 				// create line first time
280*b1cdbd2cSJim Jagielski 				if( ! mxMyRedLine.is())
281*b1cdbd2cSJim Jagielski 				{
282*b1cdbd2cSJim Jagielski 					mxMyRedLine = uno::Reference< drawing::XShape >(
283*b1cdbd2cSJim Jagielski 						xFactory->createInstance( OUString::createFromAscii( "com.sun.star.drawing.LineShape" )),
284*b1cdbd2cSJim Jagielski 						uno::UNO_QUERY );
285*b1cdbd2cSJim Jagielski 					xPage->add( mxMyRedLine );
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski 					// make line red and thick
288*b1cdbd2cSJim Jagielski 					uno::Reference< beans::XPropertySet > xShapeProp( mxMyRedLine, uno::UNO_QUERY );
289*b1cdbd2cSJim Jagielski 					if( xShapeProp.is())
290*b1cdbd2cSJim Jagielski 					{
291*b1cdbd2cSJim Jagielski 						uno::Any aColor, aWidth;
292*b1cdbd2cSJim Jagielski 						aColor <<= (sal_Int32)(0xe01010);
293*b1cdbd2cSJim Jagielski 						aWidth <<= (sal_Int32)(50);			// 0.5 mm
294*b1cdbd2cSJim Jagielski 						try
295*b1cdbd2cSJim Jagielski 						{
296*b1cdbd2cSJim Jagielski 							xShapeProp->setPropertyValue( OUString::createFromAscii( "LineColor" ), aColor );
297*b1cdbd2cSJim Jagielski 							xShapeProp->setPropertyValue( OUString::createFromAscii( "LineWidth" ), aWidth );
298*b1cdbd2cSJim Jagielski 						}
299*b1cdbd2cSJim Jagielski 						catch( ... )
300*b1cdbd2cSJim Jagielski 						{}
301*b1cdbd2cSJim Jagielski 					}
302*b1cdbd2cSJim Jagielski 				}
303*b1cdbd2cSJim Jagielski 				// create text object first time
304*b1cdbd2cSJim Jagielski 				if( ! mxMyText.is())
305*b1cdbd2cSJim Jagielski 				{
306*b1cdbd2cSJim Jagielski 					mxMyText = uno::Reference< drawing::XShape >(
307*b1cdbd2cSJim Jagielski 						xFactory->createInstance( OUString::createFromAscii( "com.sun.star.drawing.TextShape" )),
308*b1cdbd2cSJim Jagielski 						uno::UNO_QUERY );
309*b1cdbd2cSJim Jagielski 					xPage->add( mxMyText );
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski 					// change text
312*b1cdbd2cSJim Jagielski 					OUString aText;
313*b1cdbd2cSJim Jagielski // 					if( maLocale.Language.equalsIgnoreCase( OUString::createFromAscii("DE")))
314*b1cdbd2cSJim Jagielski // 						aText = OUString::createFromAscii( "Kleines Beispiel" );
315*b1cdbd2cSJim Jagielski // 					else
316*b1cdbd2cSJim Jagielski 						aText = OUString::createFromAscii( "Little Example" );
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski 					uno::Reference< beans::XPropertySet > xTextProp( mxMyText, uno::UNO_QUERY );
319*b1cdbd2cSJim Jagielski 					if( xTextProp.is())
320*b1cdbd2cSJim Jagielski 					{
321*b1cdbd2cSJim Jagielski 						uno::Any aTrueAny;
322*b1cdbd2cSJim Jagielski 						aTrueAny <<= (sal_Bool)(sal_True);
323*b1cdbd2cSJim Jagielski 						try
324*b1cdbd2cSJim Jagielski 						{
325*b1cdbd2cSJim Jagielski 							xTextProp->setPropertyValue( rtl::OUString::createFromAscii( "TextAutoGrowWidth" ), aTrueAny );
326*b1cdbd2cSJim Jagielski 						}
327*b1cdbd2cSJim Jagielski 						catch( ... )
328*b1cdbd2cSJim Jagielski 						{}
329*b1cdbd2cSJim Jagielski 					}
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski 					uno::Reference< text::XTextRange > xTextRange( mxMyText, uno::UNO_QUERY );
332*b1cdbd2cSJim Jagielski 					if( xTextRange.is())
333*b1cdbd2cSJim Jagielski 					{
334*b1cdbd2cSJim Jagielski 						xTextRange->setString( aText );
335*b1cdbd2cSJim Jagielski 					}
336*b1cdbd2cSJim Jagielski 				}
337*b1cdbd2cSJim Jagielski 
338*b1cdbd2cSJim Jagielski 
339*b1cdbd2cSJim Jagielski 				// position line and text
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski 				// get the array. Note: the first dimension is the length
342*b1cdbd2cSJim Jagielski 				// of each series and the second one is the number of series
343*b1cdbd2cSJim Jagielski 				// this should be changed in the future
344*b1cdbd2cSJim Jagielski 				uno::Sequence< uno::Sequence< double > > aData;
345*b1cdbd2cSJim Jagielski 				uno::Reference< chart::XChartData > xData = mxChartDoc->getData();
346*b1cdbd2cSJim Jagielski 				uno::Reference< chart::XChartDataArray > xDataArray( xData, uno::UNO_QUERY );
347*b1cdbd2cSJim Jagielski 				if( xDataArray.is())
348*b1cdbd2cSJim Jagielski 					aData = xDataArray->getData();
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski 				// get row count == length of each series
351*b1cdbd2cSJim Jagielski 				sal_Int32 nSize = aData.getLength();
352*b1cdbd2cSJim Jagielski 				sal_Int32 nMiddle = nSize / 2;
353*b1cdbd2cSJim Jagielski 				// get value for first series
354*b1cdbd2cSJim Jagielski 				double fMiddleVal = xData->getNotANumber();		// set to NaN
355*b1cdbd2cSJim Jagielski 				if( aData[ nMiddle ].getLength())				// we have at least one series
356*b1cdbd2cSJim Jagielski 					fMiddleVal = aData[ nMiddle ][ 0 ];
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski 				awt::Point aPos;
359*b1cdbd2cSJim Jagielski 				getLogicalPosition( xYAxisShape, fMiddleVal, sal_True, aPos );
360*b1cdbd2cSJim Jagielski 				awt::Size aSize = xXAxisShape->getSize();
361*b1cdbd2cSJim Jagielski 
362*b1cdbd2cSJim Jagielski 				if( mxMyRedLine.is())
363*b1cdbd2cSJim Jagielski 				{
364*b1cdbd2cSJim Jagielski 					awt::Point aEnd = aPos;
365*b1cdbd2cSJim Jagielski 					aEnd.X += aSize.Width;
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski 					uno::Sequence< uno::Sequence< awt::Point > > aPtSeq( 1 );
368*b1cdbd2cSJim Jagielski 					aPtSeq[ 0 ].realloc( 2 );
369*b1cdbd2cSJim Jagielski 					aPtSeq[ 0 ][ 0 ] = aPos;
370*b1cdbd2cSJim Jagielski 					aPtSeq[ 0 ][ 1 ] = aEnd;
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski 					uno::Reference< beans::XPropertySet > xShapeProp( mxMyRedLine, uno::UNO_QUERY );
373*b1cdbd2cSJim Jagielski 					if( xShapeProp.is())
374*b1cdbd2cSJim Jagielski 					{
375*b1cdbd2cSJim Jagielski 						uno::Any aAny;
376*b1cdbd2cSJim Jagielski 						aAny <<= aPtSeq;
377*b1cdbd2cSJim Jagielski 						xShapeProp->setPropertyValue( rtl::OUString::createFromAscii( "PolyPolygon" ), aAny );
378*b1cdbd2cSJim Jagielski 					}
379*b1cdbd2cSJim Jagielski 				}
380*b1cdbd2cSJim Jagielski 				if( mxMyText.is())
381*b1cdbd2cSJim Jagielski 				{
382*b1cdbd2cSJim Jagielski 					// put the text centered below the red line
383*b1cdbd2cSJim Jagielski 					aPos.X += ( aSize.Width - mxMyRedLine->getPosition().X ) / 2;
384*b1cdbd2cSJim Jagielski 					aPos.Y += 1000;
385*b1cdbd2cSJim Jagielski 					aPos.Y += static_cast<sal_Int32>(0.1 * xYAxisShape->getSize().Height);
386*b1cdbd2cSJim Jagielski 					mxMyText->setPosition( aPos );
387*b1cdbd2cSJim Jagielski 				}
388*b1cdbd2cSJim Jagielski 			}
389*b1cdbd2cSJim Jagielski 		}
390*b1cdbd2cSJim Jagielski 	}
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski 	// set axis scale to 200
393*b1cdbd2cSJim Jagielski //  	uno::Reference< beans::XPropertySet > xXAxis( getXAxis(), uno::UNO_QUERY );
394*b1cdbd2cSJim Jagielski //  	if( xXAxis.is())
395*b1cdbd2cSJim Jagielski //  	{
396*b1cdbd2cSJim Jagielski //  		uno::Any aAny;
397*b1cdbd2cSJim Jagielski //  		aAny <<= (sal_Bool)(sal_False);
398*b1cdbd2cSJim Jagielski //  		xXAxis->setPropertyValue( rtl::OUString::createFromAscii( "AutoStepMain" ),
399*b1cdbd2cSJim Jagielski //  								  aAny );
400*b1cdbd2cSJim Jagielski //  		aAny <<= (double)(200.0);
401*b1cdbd2cSJim Jagielski //  		xXAxis->setPropertyValue( rtl::OUString::createFromAscii( "StepMain" ),
402*b1cdbd2cSJim Jagielski //  								  aAny );
403*b1cdbd2cSJim Jagielski //  	}
404*b1cdbd2cSJim Jagielski 
405*b1cdbd2cSJim Jagielski // try setting symbols
406*b1cdbd2cSJim Jagielski //  	uno::Reference< beans::XPropertySet > xProp = getDataRowProperties( 0 );
407*b1cdbd2cSJim Jagielski //  	if( xProp.is())
408*b1cdbd2cSJim Jagielski //  	{
409*b1cdbd2cSJim Jagielski //  		uno::Any aAny;
410*b1cdbd2cSJim Jagielski //  		aAny <<= (sal_Int32)(-1);
411*b1cdbd2cSJim Jagielski //  		xProp->setPropertyValue( OUString::createFromAscii( "SymbolType" ), aAny );
412*b1cdbd2cSJim Jagielski //  		aAny <<= rtl::OUString::createFromAscii( "http://mib-1168/www/images/go.gif" );
413*b1cdbd2cSJim Jagielski //  		xProp->setPropertyValue( OUString::createFromAscii( "SymbolBitmapURL" ), aAny );
414*b1cdbd2cSJim Jagielski //  	}
415*b1cdbd2cSJim Jagielski }
416*b1cdbd2cSJim Jagielski 
addRefreshListener(const uno::Reference<util::XRefreshListener> &)417*b1cdbd2cSJim Jagielski void SAL_CALL SampleAddIn::addRefreshListener( const uno::Reference< util::XRefreshListener >&  )
418*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
419*b1cdbd2cSJim Jagielski {
420*b1cdbd2cSJim Jagielski 	// not implemented - this is not necessary
421*b1cdbd2cSJim Jagielski 	// (this method exists just because the interface requires it)
422*b1cdbd2cSJim Jagielski }
423*b1cdbd2cSJim Jagielski 
removeRefreshListener(const uno::Reference<util::XRefreshListener> &)424*b1cdbd2cSJim Jagielski void SAL_CALL SampleAddIn::removeRefreshListener( const uno::Reference< util::XRefreshListener >&  )
425*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
426*b1cdbd2cSJim Jagielski {
427*b1cdbd2cSJim Jagielski 	// not implemented - this is not necessary
428*b1cdbd2cSJim Jagielski 	// (this method exists just because the interface requires it)
429*b1cdbd2cSJim Jagielski }
430*b1cdbd2cSJim Jagielski 
431*b1cdbd2cSJim Jagielski // XDiagram
getDiagramType()432*b1cdbd2cSJim Jagielski OUString SAL_CALL SampleAddIn::getDiagramType() throw( uno::RuntimeException )
433*b1cdbd2cSJim Jagielski {
434*b1cdbd2cSJim Jagielski 	return OUString::createFromAscii( "com.sun.star.chart.SampleDiagram" );
435*b1cdbd2cSJim Jagielski }
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski // the following methods just delegate to the "parent diagram" (which in the future might no longer exist)
438*b1cdbd2cSJim Jagielski 
getDataRowProperties(sal_Int32 nRow)439*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getDataRowProperties( sal_Int32 nRow )
440*b1cdbd2cSJim Jagielski 	throw( lang::IndexOutOfBoundsException,
441*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
442*b1cdbd2cSJim Jagielski {
443*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
444*b1cdbd2cSJim Jagielski 	{
445*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XDiagram > xDia = mxChartDoc->getDiagram();
446*b1cdbd2cSJim Jagielski 		if( xDia.is())
447*b1cdbd2cSJim Jagielski 			return xDia->getDataRowProperties( nRow );
448*b1cdbd2cSJim Jagielski 	}
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
451*b1cdbd2cSJim Jagielski }
452*b1cdbd2cSJim Jagielski 
getDataPointProperties(sal_Int32 nCol,sal_Int32 nRow)453*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getDataPointProperties( sal_Int32 nCol, sal_Int32 nRow )
454*b1cdbd2cSJim Jagielski 	throw( lang::IndexOutOfBoundsException,
455*b1cdbd2cSJim Jagielski 		   uno::RuntimeException )
456*b1cdbd2cSJim Jagielski {
457*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
458*b1cdbd2cSJim Jagielski 	{
459*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XDiagram > xDia = mxChartDoc->getDiagram();
460*b1cdbd2cSJim Jagielski 		if( xDia.is())
461*b1cdbd2cSJim Jagielski 			return xDia->getDataPointProperties( nCol, nRow );
462*b1cdbd2cSJim Jagielski 	}
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
465*b1cdbd2cSJim Jagielski }
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski // XShape ( ::XDiagram )
getSize()468*b1cdbd2cSJim Jagielski awt::Size SAL_CALL SampleAddIn::getSize()
469*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
470*b1cdbd2cSJim Jagielski {
471*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
472*b1cdbd2cSJim Jagielski 	{
473*b1cdbd2cSJim Jagielski 		uno::Reference< drawing::XShape > xShape( mxChartDoc->getDiagram(), uno::UNO_QUERY );
474*b1cdbd2cSJim Jagielski 		if( xShape.is())
475*b1cdbd2cSJim Jagielski 			return xShape->getSize();
476*b1cdbd2cSJim Jagielski 	}
477*b1cdbd2cSJim Jagielski 
478*b1cdbd2cSJim Jagielski 	return awt::Size();
479*b1cdbd2cSJim Jagielski }
480*b1cdbd2cSJim Jagielski 
setSize(const awt::Size & aSize)481*b1cdbd2cSJim Jagielski void SAL_CALL SampleAddIn::setSize( const awt::Size& aSize )
482*b1cdbd2cSJim Jagielski 	throw( beans::PropertyVetoException, uno::RuntimeException )
483*b1cdbd2cSJim Jagielski {
484*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
485*b1cdbd2cSJim Jagielski 	{
486*b1cdbd2cSJim Jagielski 		uno::Reference< drawing::XShape > xShape( mxChartDoc->getDiagram(), uno::UNO_QUERY );
487*b1cdbd2cSJim Jagielski 		if( xShape.is())
488*b1cdbd2cSJim Jagielski 			xShape->setSize( aSize );
489*b1cdbd2cSJim Jagielski 	}
490*b1cdbd2cSJim Jagielski }
491*b1cdbd2cSJim Jagielski 
getPosition()492*b1cdbd2cSJim Jagielski awt::Point SAL_CALL SampleAddIn::getPosition()
493*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
494*b1cdbd2cSJim Jagielski {
495*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
496*b1cdbd2cSJim Jagielski 	{
497*b1cdbd2cSJim Jagielski 		uno::Reference< drawing::XShape > xShape( mxChartDoc->getDiagram(), uno::UNO_QUERY );
498*b1cdbd2cSJim Jagielski 		if( xShape.is())
499*b1cdbd2cSJim Jagielski 			return xShape->getPosition();
500*b1cdbd2cSJim Jagielski 	}
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski 	return awt::Point();
503*b1cdbd2cSJim Jagielski }
504*b1cdbd2cSJim Jagielski 
setPosition(const awt::Point & aPos)505*b1cdbd2cSJim Jagielski void SAL_CALL SampleAddIn::setPosition( const awt::Point& aPos )
506*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
507*b1cdbd2cSJim Jagielski {
508*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
509*b1cdbd2cSJim Jagielski 	{
510*b1cdbd2cSJim Jagielski 		uno::Reference< drawing::XShape > xShape( mxChartDoc->getDiagram(), uno::UNO_QUERY );
511*b1cdbd2cSJim Jagielski 		if( xShape.is())
512*b1cdbd2cSJim Jagielski 			xShape->setPosition( aPos );
513*b1cdbd2cSJim Jagielski 	}
514*b1cdbd2cSJim Jagielski }
515*b1cdbd2cSJim Jagielski 
516*b1cdbd2cSJim Jagielski // XShapeDescriptor ( ::XShape ::XDiagram )
getShapeType()517*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL SampleAddIn::getShapeType() throw( com::sun::star::uno::RuntimeException )
518*b1cdbd2cSJim Jagielski {
519*b1cdbd2cSJim Jagielski 	return OUString::createFromAscii( "com.sun.star.chart.SampleAddinShape" );
520*b1cdbd2cSJim Jagielski }
521*b1cdbd2cSJim Jagielski 
522*b1cdbd2cSJim Jagielski // XAxisXSupplier
getXAxisTitle()523*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShape > SAL_CALL SampleAddIn::getXAxisTitle()
524*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
525*b1cdbd2cSJim Jagielski {
526*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
527*b1cdbd2cSJim Jagielski 	{
528*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XAxisXSupplier > xAxisSupp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
529*b1cdbd2cSJim Jagielski 		if( xAxisSupp.is())
530*b1cdbd2cSJim Jagielski 			return xAxisSupp->getXAxisTitle();
531*b1cdbd2cSJim Jagielski 	}
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski 	return uno::Reference< drawing::XShape >();
534*b1cdbd2cSJim Jagielski }
535*b1cdbd2cSJim Jagielski 
getXAxis()536*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getXAxis()
537*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
538*b1cdbd2cSJim Jagielski {
539*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
540*b1cdbd2cSJim Jagielski 	{
541*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XAxisXSupplier > xAxisSupp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
542*b1cdbd2cSJim Jagielski 		if( xAxisSupp.is())
543*b1cdbd2cSJim Jagielski 			return xAxisSupp->getXAxis();
544*b1cdbd2cSJim Jagielski 	}
545*b1cdbd2cSJim Jagielski 
546*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
547*b1cdbd2cSJim Jagielski }
548*b1cdbd2cSJim Jagielski 
getXMainGrid()549*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getXMainGrid()
550*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
551*b1cdbd2cSJim Jagielski {
552*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
553*b1cdbd2cSJim Jagielski 	{
554*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XAxisXSupplier > xAxisSupp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
555*b1cdbd2cSJim Jagielski 		if( xAxisSupp.is())
556*b1cdbd2cSJim Jagielski 			return xAxisSupp->getXMainGrid();
557*b1cdbd2cSJim Jagielski 	}
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
560*b1cdbd2cSJim Jagielski }
561*b1cdbd2cSJim Jagielski 
getXHelpGrid()562*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getXHelpGrid()
563*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
564*b1cdbd2cSJim Jagielski {
565*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
566*b1cdbd2cSJim Jagielski 	{
567*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XAxisXSupplier > xAxisSupp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
568*b1cdbd2cSJim Jagielski 		if( xAxisSupp.is())
569*b1cdbd2cSJim Jagielski 			return xAxisSupp->getXHelpGrid();
570*b1cdbd2cSJim Jagielski 	}
571*b1cdbd2cSJim Jagielski 
572*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
573*b1cdbd2cSJim Jagielski }
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski // XAxisYSupplier
getYAxisTitle()576*b1cdbd2cSJim Jagielski uno::Reference< drawing::XShape > SAL_CALL SampleAddIn::getYAxisTitle()
577*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
578*b1cdbd2cSJim Jagielski {
579*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
580*b1cdbd2cSJim Jagielski 	{
581*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XAxisYSupplier > xAxisSupp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
582*b1cdbd2cSJim Jagielski 		if( xAxisSupp.is())
583*b1cdbd2cSJim Jagielski 			return xAxisSupp->getYAxisTitle();
584*b1cdbd2cSJim Jagielski 	}
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski 	return uno::Reference< drawing::XShape >();
587*b1cdbd2cSJim Jagielski }
588*b1cdbd2cSJim Jagielski 
getYAxis()589*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getYAxis()
590*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
591*b1cdbd2cSJim Jagielski {
592*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
593*b1cdbd2cSJim Jagielski 	{
594*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XAxisYSupplier > xAxisSupp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
595*b1cdbd2cSJim Jagielski 		if( xAxisSupp.is())
596*b1cdbd2cSJim Jagielski 			return xAxisSupp->getYAxis();
597*b1cdbd2cSJim Jagielski 	}
598*b1cdbd2cSJim Jagielski 
599*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
600*b1cdbd2cSJim Jagielski }
601*b1cdbd2cSJim Jagielski 
getYMainGrid()602*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getYMainGrid()
603*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
604*b1cdbd2cSJim Jagielski {
605*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
606*b1cdbd2cSJim Jagielski 	{
607*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XAxisYSupplier > xAxisSupp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
608*b1cdbd2cSJim Jagielski 		if( xAxisSupp.is())
609*b1cdbd2cSJim Jagielski 			return xAxisSupp->getYMainGrid();
610*b1cdbd2cSJim Jagielski 	}
611*b1cdbd2cSJim Jagielski 
612*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
613*b1cdbd2cSJim Jagielski }
614*b1cdbd2cSJim Jagielski 
getYHelpGrid()615*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getYHelpGrid()
616*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
617*b1cdbd2cSJim Jagielski {
618*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
619*b1cdbd2cSJim Jagielski 	{
620*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XAxisYSupplier > xAxisSupp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
621*b1cdbd2cSJim Jagielski 		if( xAxisSupp.is())
622*b1cdbd2cSJim Jagielski 			return xAxisSupp->getYHelpGrid();
623*b1cdbd2cSJim Jagielski 	}
624*b1cdbd2cSJim Jagielski 
625*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
626*b1cdbd2cSJim Jagielski }
627*b1cdbd2cSJim Jagielski 
628*b1cdbd2cSJim Jagielski // XStatisticDisplay
getUpBar()629*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getUpBar()
630*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
631*b1cdbd2cSJim Jagielski {
632*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
633*b1cdbd2cSJim Jagielski 	{
634*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XStatisticDisplay > xStatDisp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
635*b1cdbd2cSJim Jagielski 		if( xStatDisp.is())
636*b1cdbd2cSJim Jagielski 			return xStatDisp->getUpBar();
637*b1cdbd2cSJim Jagielski 	}
638*b1cdbd2cSJim Jagielski 
639*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
640*b1cdbd2cSJim Jagielski }
641*b1cdbd2cSJim Jagielski 
getDownBar()642*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getDownBar()
643*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
644*b1cdbd2cSJim Jagielski {
645*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
646*b1cdbd2cSJim Jagielski 	{
647*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XStatisticDisplay > xStatDisp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
648*b1cdbd2cSJim Jagielski 		if( xStatDisp.is())
649*b1cdbd2cSJim Jagielski 			return xStatDisp->getDownBar();
650*b1cdbd2cSJim Jagielski 	}
651*b1cdbd2cSJim Jagielski 
652*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
653*b1cdbd2cSJim Jagielski }
654*b1cdbd2cSJim Jagielski 
getMinMaxLine()655*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > SAL_CALL SampleAddIn::getMinMaxLine()
656*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
657*b1cdbd2cSJim Jagielski {
658*b1cdbd2cSJim Jagielski 	if( mxChartDoc.is())
659*b1cdbd2cSJim Jagielski 	{
660*b1cdbd2cSJim Jagielski 		uno::Reference< chart::XStatisticDisplay > xStatDisp( mxChartDoc->getDiagram(), uno::UNO_QUERY );
661*b1cdbd2cSJim Jagielski 		if( xStatDisp.is())
662*b1cdbd2cSJim Jagielski 			return xStatDisp->getMinMaxLine();
663*b1cdbd2cSJim Jagielski 	}
664*b1cdbd2cSJim Jagielski 
665*b1cdbd2cSJim Jagielski 	return uno::Reference< beans::XPropertySet >();
666*b1cdbd2cSJim Jagielski }
667*b1cdbd2cSJim Jagielski 
668*b1cdbd2cSJim Jagielski // XServiceName
getServiceName()669*b1cdbd2cSJim Jagielski OUString SAL_CALL SampleAddIn::getServiceName() throw( uno::RuntimeException )
670*b1cdbd2cSJim Jagielski {
671*b1cdbd2cSJim Jagielski 	return OUString::createFromAscii( "com.sun.star.chart.SampleAddIn" );
672*b1cdbd2cSJim Jagielski }
673*b1cdbd2cSJim Jagielski 
674*b1cdbd2cSJim Jagielski // XServiceInfo
getImplementationName()675*b1cdbd2cSJim Jagielski OUString SAL_CALL SampleAddIn::getImplementationName() throw( uno::RuntimeException )
676*b1cdbd2cSJim Jagielski {
677*b1cdbd2cSJim Jagielski 	return getImplementationName_Static();
678*b1cdbd2cSJim Jagielski }
679*b1cdbd2cSJim Jagielski 
supportsService(const OUString & ServiceName)680*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SampleAddIn::supportsService( const OUString& ServiceName )
681*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
682*b1cdbd2cSJim Jagielski {
683*b1cdbd2cSJim Jagielski 	uno::Sequence< OUString > aServiceSeq = getSupportedServiceNames_Static();
684*b1cdbd2cSJim Jagielski 
685*b1cdbd2cSJim Jagielski 	sal_Int32 nLength = aServiceSeq.getLength();
686*b1cdbd2cSJim Jagielski 	for( sal_Int32 i=0; i < nLength; i++ )
687*b1cdbd2cSJim Jagielski 	{
688*b1cdbd2cSJim Jagielski 		if( ServiceName.equals( aServiceSeq[ i ] ))
689*b1cdbd2cSJim Jagielski 			return sal_True;
690*b1cdbd2cSJim Jagielski 	}
691*b1cdbd2cSJim Jagielski 
692*b1cdbd2cSJim Jagielski 	return sal_False;
693*b1cdbd2cSJim Jagielski }
694*b1cdbd2cSJim Jagielski 
getSupportedServiceNames()695*b1cdbd2cSJim Jagielski uno::Sequence< OUString > SAL_CALL SampleAddIn::getSupportedServiceNames()
696*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
697*b1cdbd2cSJim Jagielski {
698*b1cdbd2cSJim Jagielski 	return getSupportedServiceNames_Static();
699*b1cdbd2cSJim Jagielski }
700*b1cdbd2cSJim Jagielski 
701*b1cdbd2cSJim Jagielski // XLocalizable
setLocale(const lang::Locale & eLocale)702*b1cdbd2cSJim Jagielski void SAL_CALL SampleAddIn::setLocale( const lang::Locale& eLocale )
703*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
704*b1cdbd2cSJim Jagielski {
705*b1cdbd2cSJim Jagielski 	maLocale = eLocale;
706*b1cdbd2cSJim Jagielski }
707*b1cdbd2cSJim Jagielski 
getLocale()708*b1cdbd2cSJim Jagielski lang::Locale SAL_CALL SampleAddIn::getLocale()
709*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
710*b1cdbd2cSJim Jagielski {
711*b1cdbd2cSJim Jagielski 	return maLocale;
712*b1cdbd2cSJim Jagielski }
713