From: Chris M. <ki...@us...> - 2004-07-01 01:33:38
|
Update of /cvsroot/jcharts/krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart/axis In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7278/src/java/org/krysalis/jcharts/axisChart/axis Modified Files: YAxis.java Log Message: Dual Y axis changes Index: YAxis.java =================================================================== RCS file: /cvsroot/jcharts/krysalis-jcharts/src/java/org/krysalis/jcharts/axisChart/axis/YAxis.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** YAxis.java 31 May 2004 16:29:47 -0000 1.5 --- YAxis.java 1 Jul 2004 01:33:29 -0000 1.6 *************** *** 46,49 **** --- 46,50 ---- import java.awt.geom.Line2D; import java.lang.reflect.Field; + import java.awt.font.TextLayout; *************** *** 86,118 **** * **************************************************************************************************/ ! public void computeMinimumWidthNeeded( String yAxisTitle ) { AxisTypeProperties axisTypeProperties= super.getAxisChart().getAxisProperties().getYAxisProperties(); ! float widthNeeded = 0; ! //---if we are displaying axis scale labels, add width of widest label ! if( axisTypeProperties.showAxisLabels() ) ! { ! // Dual Y axis changes integrated CMC 25Aug03 ! //widthNeeded+= super.getAxisLabelsGroup().getWidestLabel(); ! if ( axisTypeProperties.getShowRightAxis() ) ! { ! if ( super.getAxisLabelsGroupRight().getWidestLabel()>super.getAxisLabelsGroup().getWidestLabel()) ! { ! widthNeeded+= super.getAxisLabelsGroupRight().getWidestLabel(); ! } ! else ! { ! widthNeeded+= super.getAxisLabelsGroup().getWidestLabel(); ! } ! } ! else ! { ! widthNeeded+= super.getAxisLabelsGroup().getWidestLabel(); ! } ! } --- 87,120 ---- * **************************************************************************************************/ ! public void computeMinimumWidthNeeded( String yAxisTitle, String rightYAxisTitle ) { + float widthNeeded = 0; AxisTypeProperties axisTypeProperties= super.getAxisChart().getAxisProperties().getYAxisProperties(); + AxisTypeProperties rightAxisTypeProperties = super.getAxisChart().getAxisProperties().getRightYAxisProperties(); + + // Right hand axis calc. + if ( rightAxisTypeProperties.getShowAxis() ) { + if( rightAxisTypeProperties.showAxisLabels() ) + widthNeeded+= super.getAxisLabelsGroupRight().getWidestLabel(); + + widthNeeded += getAxisWidth(rightAxisTypeProperties, rightYAxisTitle); + } + super.setMinimumRHSWidthNeeded( widthNeeded ); ! // Left Hand Axis calc. must be done after RHS as some LHS title sizes are set ! widthNeeded = 0; //---if we are displaying axis scale labels, add width of widest label ! if( axisTypeProperties.showAxisLabels() ) { ! widthNeeded+= super.getAxisLabelsGroup().getWidestLabel(); ! } ! widthNeeded += getAxisWidth(axisTypeProperties, yAxisTitle); ! super.setMinimumLHSWidthNeeded(widthNeeded); ! } ! ! private float getAxisWidth(AxisTypeProperties axisTypeProperties, String axisTitle) { ! ! float widthNeeded = 0; *************** *** 137,153 **** //---include axis title height if needed. Remember it is vertical for y-axis //if( super.getAxisChart().getAxisProperties().getShowAxisTitle( AxisProperties.Y_AXIS ) ) ! if( yAxisTitle != null ) { ! super.computeAxisTitleDimensions( yAxisTitle, axisTypeProperties.getTitleChartFont() ); widthNeeded += super.getTitleHeight(); widthNeeded += axisTypeProperties.getPaddingBetweenAxisTitleAndLabels(); } ! ! super.setMinimumWidthNeeded( widthNeeded ); } /**************************************************************************************************** ! * * @param axisTitle * @param graphics2D --- 139,154 ---- //---include axis title height if needed. Remember it is vertical for y-axis //if( super.getAxisChart().getAxisProperties().getShowAxisTitle( AxisProperties.Y_AXIS ) ) ! if( axisTitle != null ) { ! super.computeAxisTitleDimensions( axisTitle, axisTypeProperties.getTitleChartFont() ); widthNeeded += super.getTitleHeight(); widthNeeded += axisTypeProperties.getPaddingBetweenAxisTitleAndLabels(); } ! return widthNeeded; } /**************************************************************************************************** ! * This is the LHS Axis title * @param axisTitle * @param graphics2D *************** *** 159,163 **** { float titleY; // = super.getAxisChart().getChartProperties().getEdgePadding(); ! float titleX = super.getAxisChart().getXAxis().getOrigin() - super.getMinimumWidthNeeded() + super.getTitleHeight(); //---if YAxis title is larger than the YAxis itself, center it on image. --- 160,164 ---- { float titleY; // = super.getAxisChart().getChartProperties().getEdgePadding(); ! float titleX = super.getAxisChart().getXAxis().getOrigin() - super.getMinimumLHSWidthNeeded() + super.getTitleHeight(); //---if YAxis title is larger than the YAxis itself, center it on image. *************** *** 180,183 **** --- 181,221 ---- } + /**************************************************************************************************** + * This is the RHS Axis title + * @param axisTitle + * @param graphics2D + * @param axisTypeProperties + ***************************************************************************************************/ + private void renderRightAxisTitle( String axisTitle, Graphics2D graphics2D, AxisTypeProperties axisTypeProperties ) + { + if( axisTitle != null ) + { + FontMetrics fm = graphics2D.getFontMetrics(axisTypeProperties.getAxisTitleChartFont().getFont()); + + TextLayout textLayout = new TextLayout( axisTitle, + axisTypeProperties.getAxisTitleChartFont().getFont(), + graphics2D.getFontRenderContext() ); + + float axisTitleWidth = textLayout.getAdvance(); + float titleY; + float titleX = super.getAxisChart().getXAxis().getOrigin() + super.getAxisChart().getXAxis().getPixelLength() + super.getMinimumRHSWidthNeeded();// - fm.getDescent(); + //---if YAxis title is larger than the YAxis itself, center it on image. + if( axisTitleWidth > super.getPixelLength() ) + { + titleY = super.getAxisChart().getImageHeight() - ( ( super.getAxisChart().getImageHeight() - axisTitleWidth ) / 2 ); + } + //---else, center on YAxis. + else + { + titleY = this.getOrigin() - ( ( super.getPixelLength() - axisTitleWidth ) / 2 ); + } + + //TODO this should use a TextTag + graphics2D.setFont( axisTypeProperties.getAxisTitleChartFont().getFont().deriveFont( ChartFont.VERTICAL_ROTATION ) ); + graphics2D.setPaint( axisTypeProperties.getAxisTitleChartFont().getPaint() ); + graphics2D.drawString( axisTitle, titleX, titleY ); + } + } + /********************************************************************************************* *************** *** 188,199 **** * @param yAxisTitle **********************************************************************************************/ ! public void render( Graphics2D graphics2D, AxisProperties axisProperties, String yAxisTitle ) { AxisTypeProperties axisTypeProperties = axisProperties.getYAxisProperties(); ! //---AXIS TITLE ! this.renderAxisTitle( yAxisTitle, graphics2D, axisProperties.getYAxisProperties() ); ! Line2D.Float line2D; --- 226,237 ---- * @param yAxisTitle **********************************************************************************************/ ! public void render( Graphics2D graphics2D, AxisProperties axisProperties, String yAxisTitle, String rightYAxisTitle ) { AxisTypeProperties axisTypeProperties = axisProperties.getYAxisProperties(); ! AxisTypeProperties rightAxisTypeProperties = axisProperties.getRightYAxisProperties(); //---AXIS TITLE ! this.renderAxisTitle( yAxisTitle, graphics2D, axisTypeProperties ); ! this.renderRightAxisTitle( rightYAxisTitle, graphics2D, rightAxisTypeProperties ); Line2D.Float line2D; *************** *** 333,385 **** } ! // Dual Y axis changes integrated CMC 25Aug03 ! //---if AXIS at the right---------------------------------------------------------------------- ! if (axisTypeProperties.getShowRightAxis()) ! { ! line2D.x1 = super.getAxisChart().getXAxis().getOrigin() + super.getAxisChart().getXAxis().getPixelLength(); ! line2D.x2 = line2D.x1; ! line2D.y1 = super.getOrigin() - super.getPixelLength() - 10 ; ! line2D.y2 = super.getOrigin(); ! axisTypeProperties.getAxisStroke().draw( graphics2D, line2D ); ! float tickRightX1 = super.getAxisChart().getXAxis().getOrigin() + super.getAxisChart().getXAxis().getPixelLength(); ! float tickRightX2 = tickRightX1 + axisTypeProperties.getAxisTickMarkPixelLength(); ! line2D.y1 = super.getOrigin(); ! line2D.y2 = line2D.y1; ! stringY = super.getOrigin() + ( super.getAxisLabelsGroupRight().getTallestLabel() / 4 ); ! stringX = super.getAxisChart().getXAxis().getOrigin() + axisTypeProperties.getAxisTickMarkPixelLength() ! + super.getAxisChart().getXAxis().getPixelLength(); ! stringX+= axisTypeProperties.getPaddingBetweenLabelsAndTicks(); ! for( int i = 0; i < super.getNumberOfScaleItems(); i++ ) ! { ! //---TICK MARKS at the right ! if( axisTypeProperties.getShowTicks() != AxisTypeProperties.TICKS_NONE ) ! { ! line2D.x1 = tickRightX1; ! line2D.x2 = tickRightX2; ! axisTypeProperties.getTickChartStroke().draw( graphics2D, line2D ); ! } ! line2D.y1 -= super.getScalePixelWidth(); ! line2D.y2 = line2D.y1; ! //---AXIS LABEL at the right ! if( axisTypeProperties.showAxisLabels() ) ! { ! // Font and Paint set in TextTagGroup object in 1.0 it seems CMC 25Aug03 ! //graphics2D.setFont( axisTypeProperties.getScaleChartFontRight().getFont()); ! //graphics2D.setPaint( axisTypeProperties.getScaleChartFontRight().getPaint() ); ! super.getAxisLabelsGroupRight().render( i, graphics2D, stringX , stringY ); ! } ! stringY -= super.getScalePixelWidth(); ! } ! } } --- 371,427 ---- } ! //---if AXIS at the right---------------------------------------------------------------------- ! if (rightAxisTypeProperties.getShowAxis()) ! { ! line2D.x1 = super.getAxisChart().getXAxis().getOrigin() + super.getAxisChart().getXAxis().getPixelLength(); ! line2D.x2 = line2D.x1; ! line2D.y1 = super.getOrigin() - super.getPixelLength() - 10 ; ! line2D.y2 = super.getOrigin(); ! rightAxisTypeProperties.getAxisStroke().draw( graphics2D, line2D ); ! float tickRightX1 = super.getAxisChart().getXAxis().getOrigin() + super.getAxisChart().getXAxis().getPixelLength(); ! float tickRightX2 = tickRightX1 + rightAxisTypeProperties.getAxisTickMarkPixelLength(); ! line2D.y1 = super.getOrigin(); ! line2D.y2 = line2D.y1; ! stringY = super.getOrigin() + ( super.getAxisLabelsGroupRight().getTallestLabel() / 4 ); ! stringX = super.getAxisChart().getXAxis().getOrigin() + axisTypeProperties.getAxisTickMarkPixelLength() ! + super.getAxisChart().getXAxis().getPixelLength(); ! float pixelStep = 0; ! // CMC XXX Really need a setNumberOfRightScaleItems value to use here. ! if( axisTypeProperties instanceof DataAxisProperties ) { ! pixelStep = (super.getPixelLength() - 5) / ( super.getAxisLabelsGroupRight().size() - 1); ! } ! else { ! pixelStep = super.getPixelLength() / ( super.getAxisLabelsGroupRight().size() - 1 ); ! } + // for( int i = 0; i < super.getNumberOfScaleItems(); i++ ) + for( int i = 0; i < super.getAxisLabelsGroupRight().size(); i++ ) + { + //---TICK MARKS at the right + if( rightAxisTypeProperties.getShowTicks() != AxisTypeProperties.TICKS_NONE ) + { + line2D.x1 = tickRightX1; + line2D.x2 = tickRightX2; + rightAxisTypeProperties.getTickChartStroke().draw( graphics2D, line2D ); + } ! line2D.y1 -= pixelStep; ! line2D.y2 = line2D.y1; ! //---AXIS LABEL at the right ! if( rightAxisTypeProperties.showAxisLabels() ) ! { ! super.getAxisLabelsGroupRight().render( i, graphics2D, stringX , stringY ); ! } ! stringY -= pixelStep; ! } ! } } |