/** * @(#)DrawingColorChooserHandler.java * * Copyright (c) 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.action; import javax.swing.event.ChangeEvent; import javax.swing.undo.*; import javax.swing.*; import java.util.*; import java.awt.*; import javax.swing.event.ChangeListener; import org.jhotdraw.draw.*; /** * DrawingColorChooserHandler. * * @author Werner Randelshofer * @version $Id$ */ public class DrawingColorChooserHandler extends AbstractDrawingViewAction implements ChangeListener { private static final long serialVersionUID = 1L; protected AttributeKey<Color> key; protected JColorChooser colorChooser; protected JPopupMenu popupMenu; protected int isUpdating; //protected Map<AttributeKey, Object> attributes; /** Creates a new instance. */ public DrawingColorChooserHandler(DrawingEditor editor, AttributeKey<Color> key, JColorChooser colorChooser, JPopupMenu popupMenu) { super(editor); this.key = key; this.colorChooser = colorChooser; this.popupMenu = popupMenu; //colorChooser.addActionListener(this); colorChooser.getSelectionModel().addChangeListener(this); updateEnabledState(); } @Override public void actionPerformed(java.awt.event.ActionEvent evt) { /* if (evt.getActionCommand() == JColorChooser.APPROVE_SELECTION) { applySelectedColorToFigures(); } else if (evt.getActionCommand() == JColorChooser.CANCEL_SELECTION) { }*/ popupMenu.setVisible(false); } protected void applySelectedColorToFigures() { final Drawing drawing = getView().getDrawing(); Color selectedColor = colorChooser.getColor(); if (selectedColor != null && selectedColor.getAlpha() == 0) { selectedColor = null; } final Object restoreData = drawing.getAttributesRestoreData(); drawing.willChange(); drawing.set(key, selectedColor); drawing.changed(); getEditor().setDefaultAttribute(key, selectedColor); final Color undoValue = selectedColor; UndoableEdit edit = new AbstractUndoableEdit() { private static final long serialVersionUID = 1L; @Override public String getPresentationName() { return AttributeKeys.FONT_FACE.getPresentationName(); /* String name = (String) getValue(Actions.UNDO_PRESENTATION_NAME_KEY); if (name == null) { name = (String) getValue(AbstractAction.NAME); } if (name == null) { ResourceBundleUtil labels = ResourceBundleUtil.getBundle("org.jhotdraw.draw.Labels"); name = labels.getString("attribute.text"); } return name;*/ } @Override public void undo() { super.undo(); drawing.willChange(); drawing.restoreAttributesTo(restoreData); drawing.changed(); } @Override public void redo() { super.redo(); // restoreData.add(figure.getAttributesRestoreData()); drawing.willChange(); drawing.set(key, undoValue); drawing.changed(); } }; fireUndoableEditHappened(edit); } @Override protected void updateEnabledState() { setEnabled(getEditor() != null && getEditor().isEnabled()); if (getView() != null && colorChooser != null && popupMenu != null) { colorChooser.setEnabled(getView().getSelectionCount() > 0); popupMenu.setEnabled(getView().getSelectionCount() > 0); isUpdating++; Color drawingColor = getView().getDrawing().get(key); colorChooser.setColor(drawingColor == null ? new Color(0, true) : drawingColor); isUpdating--; } } @Override public void stateChanged(ChangeEvent e) { if (isUpdating++ == 0) { applySelectedColorToFigures(); } isUpdating--; } }