package com.drawbridge.vl; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JComponent; import javax.swing.SwingUtilities; import com.drawbridge.correspondance.Spotlightable; import com.drawbridge.text.TextPanel; import com.drawbridge.utils.AnalyticUtils; public class PopupDiallerPrimitive extends Popup { private static final long serialVersionUID = 1L; DiallerSliderButton mDiallerButton; DiallerListener mParent; public PopupDiallerPrimitive(DiallerListener parent) { super(true, 0.6f); mParent = parent; mDiallerButton = new DiallerSliderButton(this); initUI(); } public void initUI() { removeAll(); setLayout(null); setOpaque(false); add(mDiallerButton); mDiallerButton.setLocation(0, 0); mDiallerButton.setSize(new Dimension(mSliderHeight, mSliderHeight)); } /*** * Gets value of slider * * @return int ranging from -100 - 100 */ public int getPercentageValue() { int min = 0; int max = PopupDiallerPrimitive.this.getWidth() - (mDiallerButton.getWidth()); int center = (max - min) / 2; int diff = mDiallerButton.getX() - center; int ret = (int) (((double) diff / (double) center) * 100); return ret; } public void reset() { mDiallerButton.setLocation(getWidth() / 2 - (mDiallerButton.getWidth() / 2), 0); } public interface DiallerListener extends Spotlightable { public <T>void onDialValueChange(); } private class DiallerSliderButton extends JComponent { private static final long serialVersionUID = 1L; private final int width = 27; private Popup mDiallerParent; private Color mColor = Color.white; public DiallerSliderButton(PopupDiallerPrimitive parent) { mDiallerParent = parent; addMouseListener(mMouseAdapter); addMouseMotionListener(mMouseAdapter); setOpaque(true); } MouseAdapter mMouseAdapter = new MouseAdapter() { @Override public void mousePressed(MouseEvent me) { AnalyticUtils.recordDialling(); mParent.setDimBackground(true); if (TextPanel.hasInstance()){ TextPanel.getInstance().getDocument().setDimBackground(true); } positionDiallerSlider(me); mDiallerParent.getParent().repaint(); } @Override public void mouseDragged(MouseEvent me) { positionDiallerSlider(me); } @Override public void mouseReleased(MouseEvent me) { mParent.setDimBackground(false); if (TextPanel.hasInstance()){ TextPanel.getInstance().getDocument().setSpotlights(null); TextPanel.getInstance().getDocument().setDimBackground(false); } positionDiallerSlider(me); VLPanel.getInstance().mCanvas.validateGridLayout(); } public void positionDiallerSlider(MouseEvent me) { MouseEvent pme = SwingUtilities.convertMouseEvent(me.getComponent(), me, me.getComponent().getParent()); DiallerSliderButton.this.setLocation(Math.min(Math.max(0, pme.getX() - 20), PopupDiallerPrimitive.this.getWidth() - DiallerSliderButton.this.getWidth()), 0); mParent.onDialValueChange(); } }; @Override public void paintComponent(Graphics g) { // super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f)); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); g2.setColor(mColor); g2.fillArc(0, 0, getWidth() - 1, getHeight() - 1, 0, 360); g2.setColor(Color.decode("#AAAAAA")); g2.drawArc(0, 0, getWidth() - 1, getHeight() - 1, 0, 360); } @Override public Dimension getMinimumSize() { return new Dimension(width, (int) mDiallerParent.getPreferredSize().getWidth()); } @Override public Dimension getMaximumSize() { return new Dimension(width, (int) mDiallerParent.getPreferredSize().getHeight()); } @Override public Dimension getPreferredSize() { return new Dimension(width, (int) mDiallerParent.getPreferredSize().getHeight()); } } }