/** * @(#)DrawingComponentRepainter.java * * Copyright (c) 2008-2010 The authors and contributors of JHotDraw. * You may not use, copy or modify this file, except in compliance with the * accompanying license terms. */ package org.jhotdraw.draw.event; import edu.umd.cs.findbugs.annotations.Nullable; import java.beans.*; import javax.swing.*; import org.jhotdraw.app.Disposable; import org.jhotdraw.draw.*; /** * Calls repaint on components, which show attributes of a drawing object * on the current view of the editor. * * @author Werner Randelshofer * @version $Id$ */ public class DrawingComponentRepainter extends FigureAdapter implements PropertyChangeListener, Disposable { @Nullable private DrawingEditor editor; @Nullable private JComponent component; public DrawingComponentRepainter(DrawingEditor editor, JComponent component) { this.editor = editor; this.component = component; if (editor != null) { if (editor.getActiveView() != null) { DrawingView view = editor.getActiveView(); view.addPropertyChangeListener(this); if (view.getDrawing() != null) { view.getDrawing().addFigureListener(this); } } editor.addPropertyChangeListener(this); } } @Override public void attributeChanged(FigureEvent evt) { component.repaint(); } @Override public void propertyChange(PropertyChangeEvent evt) { String name = evt.getPropertyName(); if (name == DrawingEditor.ACTIVE_VIEW_PROPERTY) { DrawingView view = (DrawingView) evt.getOldValue(); if (view != null) { view.removePropertyChangeListener(this); if (view.getDrawing() != null) { view.getDrawing().removeFigureListener(this); } } view = (DrawingView) evt.getNewValue(); if (view != null) { view.addPropertyChangeListener(this); if (view.getDrawing() != null) { view.getDrawing().addFigureListener(this); } } component.repaint(); } else if (name == DrawingView.DRAWING_PROPERTY) { Drawing drawing = (Drawing) evt.getOldValue(); if (drawing != null) { drawing.removeFigureListener(this); } drawing = (Drawing) evt.getNewValue(); if (drawing != null) { drawing.addFigureListener(this); } component.repaint(); } else { component.repaint(); } } @Override public void dispose() { if (editor != null) { if (editor.getActiveView() != null) { DrawingView view = editor.getActiveView(); view.removePropertyChangeListener(this); if (view.getDrawing() != null) { view.getDrawing().removeFigureListener(this); } } editor.removePropertyChangeListener(this); editor = null; } component = null; } }