/*
* @(#)DrawingRepaintManager.java
*
* Copyright 2002 EGANTT LLP. All rights reserved.
* PROPRIETARY/QPL. Use is subject to license terms.
*/
package com.egantt.swing.component.repaint.manager;
import com.egantt.model.drawing.DrawingState;
import com.egantt.model.drawing.state.event.DrawingStateEvent;
import com.egantt.model.drawing.state.event.DrawingStateListener;
import com.egantt.swing.component.ComponentContext;
import javax.swing.JComponent;
/**
* This is the repaint notification metchanism for DrawingStates, to notify a
* group that they have changed
*/
public class DrawingRepaintManager extends BasicRepaintManager
{
protected DrawingState drawingState;
protected LocalStateListener listener; // listener is disposed of when not required
// _________________________________________________________________________
public synchronized void setDrawingState(DrawingState drawingState)
{
if (this.drawingState != null)
drawingState.removeDrawingStateListener(listener);
this.drawingState = drawingState; // the new drawingState
if (listener != null)
drawingState.addDrawingStateListener(listener);
}
// _________________________________________________________________________
public synchronized void registerComponent(JComponent component, ComponentContext context)
{
if (listener == null)
{
this.listener = new LocalStateListener();
if (drawingState != null)
drawingState.addDrawingStateListener(listener);
}
super.registerComponent(component, context);
}
public synchronized void unregisterComponent(JComponent component)
{
if (listener != null && components.size() == 1)
{
if (drawingState != null)
drawingState.removeDrawingStateListener(listener);
this.listener = null;
}
super.unregisterComponent(component);
}
// __________________________________________________________________________
protected class LocalStateListener implements DrawingStateListener
{
public void stateChanged(DrawingStateEvent event)
{
repaint();
}
}
}