diff options
Diffstat (limited to 'odk/examples/DevelopersGuide/Charts/ChartInCalc.java')
-rw-r--r-- | odk/examples/DevelopersGuide/Charts/ChartInCalc.java | 417 |
1 files changed, 417 insertions, 0 deletions
diff --git a/odk/examples/DevelopersGuide/Charts/ChartInCalc.java b/odk/examples/DevelopersGuide/Charts/ChartInCalc.java new file mode 100644 index 000000000..d974d6e45 --- /dev/null +++ b/odk/examples/DevelopersGuide/Charts/ChartInCalc.java @@ -0,0 +1,417 @@ +/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * the BSD license. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *************************************************************************/ + +// __________ Imports __________ + +import com.sun.star.uno.UnoRuntime; +import com.sun.star.lang.*; + +// property access +import com.sun.star.beans.*; + +// application specific classes +import com.sun.star.chart.*; +import com.sun.star.drawing.*; + +import com.sun.star.table.CellRangeAddress; +import com.sun.star.table.XCellRange; +import com.sun.star.sheet.XCellRangeAddressable; + +import com.sun.star.frame.XModel; +import com.sun.star.util.XNumberFormatsSupplier; +import com.sun.star.util.XNumberFormats; + +// base graphics things +import com.sun.star.awt.Point; +import com.sun.star.awt.Size; +import com.sun.star.awt.FontWeight; +// Exceptions +import com.sun.star.uno.Exception; +import com.sun.star.uno.RuntimeException; +import com.sun.star.beans.UnknownPropertyException; +import com.sun.star.lang.IndexOutOfBoundsException; +import com.sun.star.util.MalformedNumberFormatException; + + +// __________ Implementation __________ + +// Create a spreadsheet add some data and add a chart + +public class ChartInCalc +{ + + + public static void main( String args[] ) + { + Helper aHelper = new Helper( args ); + + CalcHelper aCalcHelper = new CalcHelper( aHelper.createSpreadsheetDocument() ); + + // insert a cell range with 4 columns and 24 rows filled with random numbers + XCellRange aRange = aCalcHelper.insertRandomRange( 4, 24 ); + CellRangeAddress aRangeAddress = UnoRuntime.queryInterface( + XCellRangeAddressable.class, aRange).getRangeAddress(); + + // change view to sheet containing the chart + aCalcHelper.raiseChartSheet(); + + // the unit for measures is 1/100th of a millimeter + // position at (1cm, 1cm) + Point aPos = new Point( 1000, 1000 ); + + // size of the chart is 15cm x 9.271cm + Size aExtent = new Size( 15000, 9271 ); + + // insert a new chart into the "Chart" sheet of the + // spreadsheet document + XChartDocument aChartDoc = aCalcHelper.insertChart( + "ScatterChart", + aRangeAddress, + aPos, + aExtent, + "com.sun.star.chart.XYDiagram" ); + + // instantiate test class with newly created chart + ChartInCalc aTest = new ChartInCalc( aChartDoc ); + + try + { + aTest.lockControllers(); + + aTest.testDiagram(); + aTest.testArea(); + aTest.testWall(); + aTest.testTitle(); + aTest.testAxis(); + aTest.testGrid(); + + // show an intermediate state, ... + aTest.unlockControllers(); + aTest.lockControllers(); + + // ..., because the following takes a while: + // an internet URL has to be resolved + aTest.testDataRowProperties(); + aTest.testDataPointProperties(); + + aTest.unlockControllers(); + } + catch( Exception ex ) + { + System.out.println( "UNO Exception caught: " + ex ); + System.out.println( "Message: " + ex.getMessage() ); + } + + System.exit( 0 ); + } + + + + + public ChartInCalc( XChartDocument aChartDoc ) + { + maChartDocument = aChartDoc; + maDiagram = maChartDocument.getDiagram(); + } + + + + public void lockControllers() + throws RuntimeException + { + UnoRuntime.queryInterface( XModel.class, maChartDocument ).lockControllers(); + } + + + + public void unlockControllers() + throws RuntimeException + { + UnoRuntime.queryInterface( XModel.class, maChartDocument ).unlockControllers(); + } + + + + public void testDiagram() + throws RuntimeException, UnknownPropertyException, PropertyVetoException, + com.sun.star.lang.IllegalArgumentException, WrappedTargetException + { + XPropertySet aDiaProp = UnoRuntime.queryInterface( XPropertySet.class, maDiagram ); + + if( aDiaProp != null ) + { + // change chart type + aDiaProp.setPropertyValue( "Lines", Boolean.TRUE); + + // change attributes for all series + // set line width to 0.5mm + aDiaProp.setPropertyValue( "LineWidth", Integer.valueOf( 50 )); + } + } + + + + public void testDataRowProperties() + throws RuntimeException, UnknownPropertyException, PropertyVetoException, + com.sun.star.lang.IllegalArgumentException, WrappedTargetException + { + // change properties of the data series + try + { + XPropertySet aSeriesProp; + for( int i = 1; i <= 3; i++ ) + { + aSeriesProp = maDiagram.getDataRowProperties( i ); + aSeriesProp.setPropertyValue( "LineColor", Integer.valueOf( + 0x400000 * i + + 0x005000 * i + + 0x0000ff - 0x40 * i )); + if( 1 == i ) + { + StringBuffer sUrl = new StringBuffer("file:///"); + try { + /* for use without net it's easier to load a local graphic */ + java.io.File sourceFile = new java.io.File("bullet.gif"); + sUrl.append(sourceFile.getCanonicalPath().replace('\\', '/')); + } catch (java.io.IOException e) { + sUrl = new StringBuffer("http://graphics.openoffice.org/chart/bullet1.gif"); + } + + // set a bitmap via URL as symbol for the first series + aSeriesProp.setPropertyValue( "SymbolType", Integer.valueOf( ChartSymbolType.BITMAPURL )); + aSeriesProp.setPropertyValue( "SymbolBitmapURL", sUrl.toString() ); + } + else + { + aSeriesProp.setPropertyValue( "SymbolType", Integer.valueOf( ChartSymbolType.SYMBOL1 )); + aSeriesProp.setPropertyValue( "SymbolSize", new Size( 250, 250 )); + } + } + } + catch( IndexOutOfBoundsException ex ) + { + System.out.println( "Oops, there not enough series for setting properties: " + ex ); + } + } + + + + public void testDataPointProperties() + throws RuntimeException, UnknownPropertyException, PropertyVetoException, + com.sun.star.lang.IllegalArgumentException, WrappedTargetException + { + // set properties for a single data point + try + { + // determine the maximum value of the first series + + XChartDataArray aDataArray = UnoRuntime.queryInterface( + XChartDataArray.class, maChartDocument.getData()); + double aData[][] = aDataArray.getData(); + + int i; + double fMax = aData[ 0 ][ 1 ]; + for( i = 1; i < aData.length; i++ ) + { + if( aData[ i ][ 1 ] > fMax ) + { + fMax = aData[ i ][ 1 ]; + } + } + + // first parameter is the index of the point, the second one is the series + XPropertySet aPointProp = maDiagram.getDataPointProperties( 0, 1 ); + + // set a different, larger symbol + aPointProp.setPropertyValue( "SymbolType", Integer.valueOf( ChartSymbolType.SYMBOL6 )); + aPointProp.setPropertyValue( "SymbolSize", new Size( 600, 600 )); + + // add a label text with bold font, bordeaux red 14pt + aPointProp.setPropertyValue( "DataCaption", Integer.valueOf( ChartDataCaption.VALUE )); + aPointProp.setPropertyValue( "CharHeight", new Float( 14.0 )); + aPointProp.setPropertyValue( "CharColor", Integer.valueOf( 0x993366 )); + aPointProp.setPropertyValue( "CharWeight", new Float( FontWeight.BOLD )); + } + catch( IndexOutOfBoundsException ex ) + { + System.out.println( "Oops, there not enough data points or series for setting properties: " + ex ); + } + } + + + + public void testArea() + throws RuntimeException, UnknownPropertyException, PropertyVetoException, + com.sun.star.lang.IllegalArgumentException, WrappedTargetException + { + XPropertySet aArea = maChartDocument.getArea(); + + if( aArea != null ) + { + // change background color of entire chart + aArea.setPropertyValue( "FillStyle", FillStyle.SOLID ); + aArea.setPropertyValue( "FillColor", Integer.valueOf( 0xeeeeee )); + } + } + + + + public void testWall() + throws RuntimeException, UnknownPropertyException, PropertyVetoException, + com.sun.star.lang.IllegalArgumentException, WrappedTargetException + { + XPropertySet aWall = UnoRuntime.queryInterface( + X3DDisplay.class, maDiagram ).getWall(); + + // change background color of area + aWall.setPropertyValue( "FillStyle", FillStyle.SOLID ); + aWall.setPropertyValue( "FillColor", Integer.valueOf( 0xcccccc )); + } + + + + public void testTitle() + throws RuntimeException, UnknownPropertyException, PropertyVetoException, + com.sun.star.lang.IllegalArgumentException, WrappedTargetException + { + // change main title + XPropertySet aDocProp = UnoRuntime.queryInterface( + XPropertySet.class, maChartDocument ); + aDocProp.setPropertyValue( "HasMainTitle", Boolean.TRUE); + + XShape aTitle = maChartDocument.getTitle(); + XPropertySet aTitleProp = UnoRuntime.queryInterface( XPropertySet.class, aTitle ); + + // set new text + if( aTitleProp != null ) + { + aTitleProp.setPropertyValue( "String", "Random Scatter Chart" ); + aTitleProp.setPropertyValue( "CharHeight", new Float(14.0) ); + } + + // align title with y axis + XShape aAxis = UnoRuntime.queryInterface( + XShape.class, UnoRuntime.queryInterface( + XAxisYSupplier.class, maDiagram ).getYAxis() ); + + if( aAxis != null && + aTitle != null ) + { + Point aPos = aTitle.getPosition(); + aPos.X = ( aAxis.getPosition() ).X; + aTitle.setPosition( aPos ); + } + } + + + + public void testAxis() + throws RuntimeException, UnknownPropertyException, PropertyVetoException, + com.sun.star.lang.IllegalArgumentException, WrappedTargetException, + MalformedNumberFormatException + { + // x axis + XPropertySet aAxisProp = UnoRuntime.queryInterface( + XAxisXSupplier.class, maDiagram ).getXAxis(); + if( aAxisProp != null ) + { + aAxisProp.setPropertyValue( "Max", Integer.valueOf( 24 )); + aAxisProp.setPropertyValue( "StepMain", Integer.valueOf( 3 )); + } + + // change number format for y axis + aAxisProp = UnoRuntime.queryInterface( + XAxisYSupplier.class, maDiagram ).getYAxis(); + + // add a new custom number format and get the new key + int nNewNumberFormat = 0; + XNumberFormatsSupplier aNumFmtSupp = UnoRuntime.queryInterface( + XNumberFormatsSupplier.class, maChartDocument ); + + if( aNumFmtSupp != null ) + { + XNumberFormats aFormats = aNumFmtSupp.getNumberFormats(); + Locale aLocale = new Locale( "de", "DE", "de" ); + + String aFormatStr = aFormats.generateFormat( nNewNumberFormat, aLocale, true, true, (short)3, (short)1 ); + nNewNumberFormat = aFormats.addNew( aFormatStr, aLocale ); + } + + if( aAxisProp != null ) + { + aAxisProp.setPropertyValue( "NumberFormat", Integer.valueOf( nNewNumberFormat )); + } + } + + + + public void testGrid() + throws RuntimeException, UnknownPropertyException, PropertyVetoException, + com.sun.star.lang.IllegalArgumentException, WrappedTargetException + { + // y major grid + XPropertySet aGridProp = UnoRuntime.queryInterface( + XPropertySet.class, + UnoRuntime.queryInterface( + XAxisYSupplier.class, maDiagram ).getYMainGrid()); + + if( aGridProp != null ) + { + LineDash aDash = new LineDash(); + aDash.Style = DashStyle.ROUND; + aDash.Dots = 2; + aDash.DotLen = 10; + aDash.Dashes = 1; + aDash.DashLen = 200; + aDash.Distance = 100; + + aGridProp.setPropertyValue( "LineColor", Integer.valueOf( 0x999999 )); + aGridProp.setPropertyValue( "LineStyle", LineStyle.DASH ); + aGridProp.setPropertyValue( "LineDash", aDash ); + aGridProp.setPropertyValue( "LineWidth", Integer.valueOf( 30 )); + } + } + + + + + // private members + + + private final XChartDocument maChartDocument; + private final XDiagram maDiagram; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |