Messages.getString( "exception.missing.component.interaction", getULocale( ) ) );
Messages.getString( "SwtRendererImpl.exception.missing.component.interaction", getULocale( ) ) );
	public void enableInteraction( InteractionEvent iev ) throws ChartException	{		if ( _iun == null )		{			logger.log( ILogger.WARNING,					Messages.getString( "exception.missing.component.interaction", getULocale( ) ) ); //$NON-NLS-1$			return;		}		final Trigger[] tga = iev.getTriggers( );		if ( tga == null )		{			return;		}		Region clipping = new Region( );		_gc.getClipping( clipping );		// CREATE AND SETUP THE SHAPES FOR INTERACTION		TriggerCondition tc;		ArrayList al;		final PrimitiveRenderEvent pre = iev.getHotSpot( );		if ( pre instanceof PolygonRenderEvent )		{			final Location[] loa = ( (PolygonRenderEvent) pre ).getPoints( );			for ( int i = 0; i < tga.length; i++ )			{				tc = tga[i].getCondition( );				al = (ArrayList) _lhmAllTriggers.get( tc );				if ( al == null )				{					al = new ArrayList( 4 ); // UNDER NORMAL CONDITIONS					_lhmAllTriggers.put( tc, al );				}				al.add( new RegionAction( iev.getStructureSource( ),						loa,						tga[i].getAction( ),						dTranslateX,						dTranslateY,						dScale,						clipping ) );			}		}		else if ( pre instanceof RectangleRenderEvent )		{			final Bounds bo = ( (RectangleRenderEvent) pre ).getBounds( );			for ( int i = 0; i < tga.length; i++ )			{				tc = tga[i].getCondition( );				al = (ArrayList) _lhmAllTriggers.get( tc );				if ( al == null )				{					al = new ArrayList( 4 ); // UNDER NORMAL CONDITIONS					_lhmAllTriggers.put( tc, al );				}				al.add( new RegionAction( iev.getStructureSource( ),						bo,						tga[i].getAction( ),						dTranslateX,						dTranslateY,						dScale,						clipping ) );			}		}		else if ( pre instanceof OvalRenderEvent )		{			final Bounds boEllipse = ( (OvalRenderEvent) pre ).getBounds( );			for ( int i = 0; i < tga.length; i++ )			{				tc = tga[i].getCondition( );				al = (ArrayList) _lhmAllTriggers.get( tc );				if ( al == null )				{					al = new ArrayList( 4 ); // UNDER NORMAL CONDITIONS					_lhmAllTriggers.put( tc, al );				}				// using rectangle to simulate the oval due to swt limitation.				al.add( new RegionAction( iev.getStructureSource( ),						boEllipse,						tga[i].getAction( ),						dTranslateX,						dTranslateY,						dScale,						clipping ) );			}		}		else if ( pre instanceof ArcRenderEvent )		{			final ArcRenderEvent are = (ArcRenderEvent) pre;			final Bounds boEllipse = are.getEllipseBounds( );			double dStart = are.getStartAngle( );			double dExtent = are.getAngleExtent( );			int iArcType = are.getStyle( );			for ( int i = 0; i < tga.length; i++ )			{				tc = tga[i].getCondition( );				al = (ArrayList) _lhmAllTriggers.get( tc );				if ( al == null )				{					al = new ArrayList( 4 ); // UNDER NORMAL CONDITIONS					_lhmAllTriggers.put( tc, al );				}				// using rectangle to simulate the arc due to swt limitation.				al.add( new RegionAction( iev.getStructureSource( ),						boEllipse,						dStart,						dExtent,						iArcType == ArcRenderEvent.SECTOR,						tga[i].getAction( ),						dTranslateX,						dTranslateY,						dScale,						clipping ) );			}		}		else if ( pre instanceof AreaRenderEvent )		{			final Bounds bo = ( (AreaRenderEvent) pre ).getBounds( );			for ( int i = 0; i < tga.length; i++ )			{				tc = tga[i].getCondition( );				al = (ArrayList) _lhmAllTriggers.get( tc );				if ( al == null )				{					al = new ArrayList( 4 ); // UNDER NORMAL CONDITIONS					_lhmAllTriggers.put( tc, al );				}				al.add( new RegionAction( iev.getStructureSource( ),						bo,						tga[i].getAction( ),						dTranslateX,						dTranslateY,						dScale,						clipping ) );			}		}		// free the clip region resource.		clipping.dispose( );	}