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());
}
}
}