package xapc.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.border.EtchedBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.miginfocom.swing.MigLayout;
public class ArtefactsBoniToBuildings extends JPanel
{
private static final long serialVersionUID = -3903826267544257992L;
private ButtonGroup artefacts = new ButtonGroup();
private JRadioButton suleankristall = new JRadioButton("Sul�ankristall");
private JRadioButton hountropfen = new JRadioButton("Ho�ntropfen");
private JRadioButton naelastein = new JRadioButton("Na�lastein");
private JCheckBox none = new JCheckBox("-keinen-");
private JSpinner liga = null;
private JSpinner day = null;
private JSpinner numGildMembers = null;
private int limit = 999;
private PalastPanel palastPanel = null;
private ActionListener alArtefacts = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
palastPanel.calculateBuildings();
}
};
private MouseWheelListener mwlLiga = new MouseWheelListener()
{
@Override
public void mouseWheelMoved(MouseWheelEvent e)
{
int val = 0;
if(e.getWheelRotation() > 0 && (Integer)liga.getValue() > 0)
{
val = -1;
}
else if(e.getWheelRotation() < 0)
{
val = 1;
}
if(e.isShiftDown())
{
if(val > 0) val = 10;
else if(val < 1) val = -10;
}
else if(e.isControlDown())
{
if(val > 0) val = 100;
else if(val < 1) val = -100;
}
final int value = val;
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
liga.setValue((Integer)liga.getValue() + value);
}
});
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
if((Integer)liga.getValue() < 0)
{
liga.setValue(0);
}
if((Integer)liga.getValue() > limit)
{
liga.setValue(limit);
}
}
});
}
};
public ArtefactsBoniToBuildings(PalastPanel pp)
{
super(new MigLayout(
"",
"0[]0[]0[]0[]127[]2[]5[]2[]0",
"-8[]0"));
setOpaque(false);
palastPanel = pp;
setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Artefakte"));
addMouseWheelListener(mwlLiga);
suleankristall.setOpaque(false);
hountropfen.setOpaque(false);
naelastein.setOpaque(false);
none.setOpaque(false);
artefacts.add(suleankristall);
artefacts.add(hountropfen);
artefacts.add(naelastein);
none.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
init();
palastPanel.calculateBuildings();
}
});
suleankristall.addActionListener(alArtefacts);
hountropfen.addActionListener(alArtefacts);
naelastein.addActionListener(alArtefacts);
suleankristall.setSelected(true);
suleankristall.setEnabled(false);
hountropfen.setSelected(false);
hountropfen.setEnabled(false);
naelastein.setSelected(false);
naelastein.setEnabled(false);
none.setSelected(true);
String tooltip = "Bonus auf %ress%:\n" +
"Liga 1-10: 5%\n" +
"Jede weitere Liga: 0.5%\n" +
"Ab Liga 60: 30%";
naelastein.setToolTipText(tooltip.replace("%ress%", "Mana"));
suleankristall.setToolTipText(tooltip.replace("%ress%", "Essenzen und Kristallsplitter"));
hountropfen.setToolTipText(tooltip.replace("%ress%", "Kraftsteine und Goldharz"));
add(suleankristall);
add(hountropfen);
add(naelastein);
add(none);
add(new JLabel("Anz. Gildenmitgl."));
add(getJSpinnerNumGildMembers());
JLabel jLabelDay = new JLabel("Tag");
jLabelDay.setEnabled(false);
add(jLabelDay);
add(getJSpinnerDay());
add(new JLabel("Liga"));
add(getJSpinnerLiga());
}
public void init()
{
if(none.isSelected())
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
suleankristall.setSelected(false);
suleankristall.setEnabled(false);
hountropfen.setSelected(false);
hountropfen.setEnabled(false);
naelastein.setSelected(false);
naelastein.setEnabled(false);
}
});
}
else
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
suleankristall.setSelected(false);
suleankristall.setEnabled(true);
hountropfen.setSelected(false);
hountropfen.setEnabled(true);
naelastein.setSelected(false);
naelastein.setEnabled(true);
}
});
}
}
private JSpinner getJSpinnerLiga()
{
if(liga == null)
{
SpinnerNumberModel snm = new SpinnerNumberModel(17, 1, limit, 1);
liga = new JSpinner(snm);
liga.setOpaque(false);
liga.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e)
{
palastPanel.calculateBuildings();
}
});
liga.addMouseWheelListener(mwlLiga);
}
return liga;
}
private JSpinner getJSpinnerDay()
{
if(day == null)
{
SpinnerNumberModel snm = new SpinnerNumberModel(1, 1, limit, 1);
day = new JSpinner(snm);
day.setOpaque(false);
day.setEnabled(false);
day.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e)
{
palastPanel.calculateBuildings();
}
});
day.addMouseWheelListener(new MouseWheelListener()
{
@Override
public void mouseWheelMoved(MouseWheelEvent e)
{
int val = 0;
if(e.getWheelRotation() > 0 && (Integer)day.getValue() > 0)
{
val = -1;
}
else if(e.getWheelRotation() < 0)
{
val = 1;
}
if(e.isShiftDown())
{
if(val > 0) val = 10;
else if(val < 1) val = -10;
}
else if(e.isControlDown())
{
if(val > 0) val = 100;
else if(val < 1) val = -100;
}
final int value = val;
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
day.setValue((Integer)day.getValue() + value);
}
});
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
if((Integer)day.getValue() < 0)
{
day.setValue(0);
}
if((Integer)day.getValue() > limit)
{
day.setValue(limit);
}
}
});
}
});
}
return day;
}
private JSpinner getJSpinnerNumGildMembers()
{
if(numGildMembers == null)
{
SpinnerNumberModel snm = new SpinnerNumberModel(0, 0, limit, 1);
numGildMembers = new JSpinner(snm);
numGildMembers.setOpaque(false);
numGildMembers.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e)
{
palastPanel.calculateBuildings();
}
});
numGildMembers.addMouseWheelListener(new MouseWheelListener()
{
@Override
public void mouseWheelMoved(MouseWheelEvent e)
{
int val = 0;
if(e.getWheelRotation() > 0 && (Integer)numGildMembers.getValue() > 0)
{
val = -1;
}
else if(e.getWheelRotation() < 0)
{
val = 1;
}
if(e.isShiftDown())
{
if(val > 0) val = 10;
else if(val < 1) val = -10;
}
else if(e.isControlDown())
{
if(val > 0) val = 100;
else if(val < 1) val = -100;
}
final int value = val;
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
numGildMembers.setValue((Integer)numGildMembers.getValue() + value);
}
});
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
if((Integer)numGildMembers.getValue() < 0)
{
numGildMembers.setValue(0);
}
if((Integer)numGildMembers.getValue() > limit)
{
numGildMembers.setValue(limit);
}
}
});
}
});
}
return numGildMembers;
}
public int getLiga()
{
return ((Integer)getJSpinnerLiga().getValue()).intValue();
}
public int getNumGildMembers()
{
return ((Integer)getJSpinnerNumGildMembers().getValue()).intValue();
}
public int getNumDays()
{
return ((Integer)getJSpinnerDay().getValue()).intValue();
}
public void setLiga(final int l)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
getJSpinnerLiga().setValue(l);
}
});
}
public void setDay(final int d)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
getJSpinnerDay().setValue(d);
}
});
}
public void setGM(final int g)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
getJSpinnerNumGildMembers().setValue(g);
}
});
}
public void setArtifactEnabled(boolean val)
{
none.setSelected(val);
}
public void setEssAndKriArtifactActivated(boolean val)
{
suleankristall.setSelected(val);
}
public void setKraAndGolArtifactActivated(boolean val)
{
hountropfen.setSelected(val);
}
public void setManArtifactActivated(boolean val)
{
naelastein.setSelected(val);
}
public boolean isArtifactEnabled()
{
return none.isSelected();
}
public boolean isEssAndKriArtefactActivated()
{
return !none.isSelected() && suleankristall.isSelected();
}
public boolean isKraAndGolArtefactActivated()
{
return !none.isSelected() && hountropfen.isSelected();
}
public boolean isManaArtefactActivated()
{
return !none.isSelected() && naelastein.isSelected();
}
}