/** * AlarmBeanCustomizer.java 1.00 97/07/09 Merlin Hughes * * Copyright (c) 1997 Merlin Hughes, All Rights Reserved. * * Permission to use, copy, modify, and distribute this software * for commercial and non-commercial purposes and without fee is * hereby granted provided that this copyright notice appears in * all copies. * * http://prominence.com/ ego@merlin.org */ package org.merlin.beans.alarm; import java.beans.*; import java.awt.*; import java.awt.event.*; import java.net.*; import org.merlin.beans.numberfield.*; public class AlarmBeanCustomizer extends Panel implements Customizer, PropertyChangeListener { protected AlarmBean target; protected NumberFieldBean timeout; protected Image image; protected float angle = .5f; public AlarmBeanCustomizer () { setLayout (new BorderLayout ()); try { timeout = (NumberFieldBean) Beans.instantiate (getClass ().getClassLoader (), "org.merlin.beans.numberfield.NumberFieldBean"); } catch (Exception ex) { ex.printStackTrace (); } add ("South", (Component) Beans.getInstanceOf (timeout, Component.class)); timeout.setColumns (5); timeout.setMinimum (0); timeout.setStep (100); timeout.addPropertyChangeListener (this); enableEvents (AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK); try { URL url = getClass ().getResource ("AlarmBeanCustomizer.gif"); java.awt.Toolkit tk = java.awt.Toolkit.getDefaultToolkit (); image = tk.createImage ((java.awt.image.ImageProducer) url.getContent ()); } catch (Exception ex) { ex.printStackTrace (); } } public void setObject (Object bean) { target = (AlarmBean) bean; timeout.setValue (target.getTimeout ()); } public void propertyChange (PropertyChangeEvent e) { target.setTimeout (((Integer) e.getNewValue ()).intValue ()); int val = Math.min (3999, target.getTimeout ()); angle = (float) (Math.PI * 2 * val / 4000); repaint (); firePropertyChange (); } protected void processMouseEvent (MouseEvent e) { if ((e.getID () == MouseEvent.MOUSE_PRESSED) || (e.getID () == MouseEvent.MOUSE_RELEASED)) processMouseXY (e.getX (), e.getY ()); super.processMouseEvent (e); } protected void processMouseMotionEvent (MouseEvent e) { if (e.getID () == MouseEvent.MOUSE_DRAGGED) processMouseXY (e.getX (), e.getY ()); super.processMouseMotionEvent (e); } protected void processMouseXY (int x, int y) { int dx = 44 - x, dy = y - 51; if ((dx * dx + dy * dy <= 1722) && ((dx != 0) || (dy != 0))) timeout.setValue ((int) (2000. * Math.atan2 (dx, dy) / Math.PI) + 2000); } public void update (Graphics g) { paint (g); } public void paint (Graphics g) { if (image != null) g.drawImage (image, 3, 3, this); else { g.fillOval (3, 10, 83, 83); g.setColor (new Color (0xffffcc)); g.fillOval (6, 13, 77, 77); g.setColor (getForeground ()); } for (int j = -1; j < 2; ++ j) for (int i = -1; i < 2; ++ i) if ((i != 0) || (j != 0)) g.drawLine (44 + i, 51 + j, 44 + (int) (30 * Math.sin (angle)), 51 - (int) (30 * Math.cos (angle))); } public Dimension getMinimumSize () { return getPreferredSize (); } public Dimension getPreferredSize () { return new Dimension (89, 128); } public Dimension getMaximumSize () { return getPreferredSize (); } protected PropertyChangeSupport listeners = new PropertyChangeSupport (this); public void addPropertyChangeListener (PropertyChangeListener l) { listeners.addPropertyChangeListener (l); } public void removePropertyChangeListener (PropertyChangeListener l) { listeners.removePropertyChangeListener (l); } protected void firePropertyChange () { listeners.firePropertyChange ("", null, null); } }