package com.kolakcc.loljclient.view;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import com.camick.WrapLayout;
import com.kolakcc.loljclient.model.Champion;
import com.kolakcc.loljclient.model.ChampionSkin;
import com.kolakcc.loljclient.util.FontUtils;
import com.kolakcc.loljclient.util.LocaleMessages;
import com.kolakcc.loljclient.view.ui.ChampionBox;
import com.kolakcc.loljclient.view.ui.LocalizedJButton;
import com.kolakcc.loljclient.view.ui.LocalizedJLabel;
import com.kolakcc.loljclient.view.ui.SkinImageLabel;
import com.kolakcc.loljclient.view.ui.VerticalJScrollPane;
public class ChampionDetailedView extends KolaView {
LocalizedJLabel championName, championTitle, tipsPlayingTitle, tipsPlayingTips, tipsPlayingAgainstTitle, tipsPlayingAgainstTips;
ChampionBox championIcon;
JPanel skinsPanel;
JEditorPane statsPanel; //Displays stats for particular Champions
JButton selectionAudioButton;
JPanel topPanel;
JEditorPane loreTabPanel;
static LocaleMessages championDetailedViewMessages = new LocaleMessages("championDetailedViewBundle");
public ChampionDetailedView() {
super();
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setSize(700, 700);
this.setLayout(new BorderLayout());
topPanel = new JPanel(new BorderLayout());
this.championIcon = new ChampionBox();
topPanel.add(championIcon,BorderLayout.WEST);
JPanel nameTitlePanel = new JPanel(new BorderLayout());
this.championName = new LocalizedJLabel();
this.championName.setAlignmentX(JLabel.CENTER);
this.championName.setFont(FontUtils.emSize(championName.getFont(), Font.BOLD, 2));
nameTitlePanel.add(this.championName, BorderLayout.NORTH);
this.championTitle = new LocalizedJLabel();
this.championTitle.setAlignmentX(JLabel.CENTER);
nameTitlePanel.add(this.championTitle, BorderLayout.CENTER);
topPanel.add(nameTitlePanel, BorderLayout.CENTER);
this.add(topPanel, BorderLayout.NORTH);
JTabbedPane tabbedPane = new JTabbedPane();
this.skinsPanel = new JPanel(new WrapLayout());
JScrollPane skinScroller = new VerticalJScrollPane(this.skinsPanel);
skinScroller.getVerticalScrollBar().setUnitIncrement(16);
tabbedPane.addTab(championDetailedViewMessages.getString("skins"), skinScroller);
this.statsPanel = new JEditorPane();
this.statsPanel.setContentType("text/html");
this.statsPanel.setEditable(false);
JScrollPane statsScroller = new VerticalJScrollPane(this.statsPanel);
statsScroller.getVerticalScrollBar().setUnitIncrement(16);
tabbedPane.addTab(championDetailedViewMessages.getString("Stats"), statsScroller);
this.loreTabPanel = new JEditorPane();
this.loreTabPanel.setContentType("text/html");
this.loreTabPanel.setEditable(false);
JScrollPane loreScroller = new VerticalJScrollPane(this.loreTabPanel);
loreScroller.getVerticalScrollBar().setUnitIncrement(16);
tabbedPane.addTab(championDetailedViewMessages.getString("lore"), loreScroller);
JPanel videoPanel = new JPanel();
this.selectionAudioButton = new LocalizedJButton(championDetailedViewMessages, "selection audio");
videoPanel.add(this.selectionAudioButton);
JScrollPane scrollerVideo = new VerticalJScrollPane(videoPanel);
skinScroller.getVerticalScrollBar().setUnitIncrement(16);
tabbedPane.addTab(championDetailedViewMessages.getString("audio_video"), scrollerVideo);
JPanel tipsTabBox = new JPanel();
tipsTabBox.setLayout(new BoxLayout(tipsTabBox, BoxLayout.Y_AXIS));
JPanel playingAsPanel = new JPanel();
playingAsPanel
.setLayout(new BoxLayout(playingAsPanel, BoxLayout.Y_AXIS));
tipsPlayingTitle = new LocalizedJLabel();
playingAsPanel.add(this.tipsPlayingTitle);
this.tipsPlayingTips = new LocalizedJLabel();
playingAsPanel.add(this.tipsPlayingTips);
tipsTabBox.add(playingAsPanel);
JPanel playingAgainstPanel = new JPanel();
playingAgainstPanel.setLayout(new BoxLayout(playingAgainstPanel,
BoxLayout.Y_AXIS));
this.tipsPlayingAgainstTitle = new LocalizedJLabel();
this.tipsPlayingAgainstTitle.setAlignmentX(JLabel.CENTER);
playingAgainstPanel.add(this.tipsPlayingAgainstTitle);
this.tipsPlayingAgainstTips = new LocalizedJLabel();
playingAgainstPanel.add(this.tipsPlayingAgainstTips);
tipsTabBox.add(playingAgainstPanel);
tabbedPane.addTab(championDetailedViewMessages.getString("tips"), tipsTabBox);
this.add(tabbedPane, BorderLayout.CENTER);
this.setVisible(true);
}
public void setChampion(Champion champion) {
// might have to case on OS - System.getProperty("os.name")
String absPath = System.getProperty("user.dir");
absPath = absPath.replace('\\', '/');
absPath = "file:" + absPath;
this.setTitle(String.format("%s, %s", champion.getDisplayName(), champion.getTitle()));
championName.setText(champion.getDisplayName());
championTitle.setText(champion.getTitle());
loreTabPanel.setText("<html>"
+ champion.getDescription() + "<br><br><i>"
+ champion.getQuote() + "<br>-"
+ champion.getQuoteAuthor());
tipsPlayingTitle.setText(championDetailedViewMessages.getComplexString("playing as", new Object[] { champion.getDisplayName() }));
tipsPlayingTips.setText("<html>" + champion.getTips().replace("*", "<li>"));
tipsPlayingAgainstTitle.setText(championDetailedViewMessages.getComplexString("playing against", new Object[] { champion.getDisplayName() }));
tipsPlayingAgainstTips.setText("<html>" + champion.getOpponentTips().replace("*", "<li>"));
statsPanel.setText(
"<html>"
+ "<table>"
+ "<tr>"
+ "<td> <img src='" + absPath + "/img/statsIcons/health.png' width='50' height='50' /> </td>"
+ "<td> <strong>Health:</strong> <br />" + champion.getHealthBase() + "(+" + champion.getHealthLevel() + " per level)" + "</td>"
+ "</tr>"
+ "<tr>"
+ "<td> <img src='" + absPath + "/img/statsIcons/health-regen.png' width='50' height='50' /> </td>"
+ "<td> <strong>Health Regen:</strong> <br />" + champion.getHealthRegenBase() + "(+" + champion.getHealthLevel() + " per level)" + "</td>"
+ "</tr>"
+ "<tr>"
+ "<td> <img src='" + absPath + "/img/statsIcons/mana.png' width='50' height='50' /> </td>"
+ "<td> <strong>Mana:</strong> <br />" + champion.getManaBase() + "(+" + champion.getManaLevel() + " per level)" + "</td>"
+ "</tr>"
+ "<tr>"
+ "<td> <img src='" + absPath + "/img/statsIcons/mana-regen.png' width='50' height='50' /> </td>"
+ "<td> <strong>Mana Regen:</strong> <br />" + champion.getManaRegenBase() + "(+" + champion.getManaLevel() + " per level)" + "</td>"
+ "</tr>"
+ "<tr>"
+ "<td> <img src='" + absPath + "/img/statsIcons/attack-damage.png' width='50' height='50' /> </td>"
+ "<td> <strong>Attack Damage:</strong> <br />" + champion.getAttackBase() + "(+" + champion.getAttackLevel() + " per level)" + "</td>"
+ "</tr>"
+ "<tr>"
+ "<td> <img src='" + absPath + "/img/statsIcons/armor.png' width='50' height='50' /> </td>"
+ "<td> <strong>Armor:</strong> <br />" + champion.getArmorBase() + "(+" + champion.getArmorLevel() + " per level)" + "</td>"
+ "</tr>"
/*+ "<tr>" //can't get from model
+ "<td> <img src='" + absPath + "/img/statsIcons/attack-speed.png' width='50' height='50' /> </td>"
+ "<td> <strong>Attack speed:</strong> <br />" + champion.getAttackSpeed() + "</td>"
+ "</tr>"*/
+ "<tr>"
+ "<td> <img src='" + absPath + "/img/statsIcons/magic-resist.png' width='50' height='50' /> </td>"
+ "<td> <strong>Magic Resist:</strong> <br />" + champion.getMagicResistBase() + "(+" + champion.getMagicResistLevel() + " per level)" + "</td>"
+ "</tr>"
+ "<tr>"
+ "<td> <img src='" + absPath + "/img/statsIcons/movement-speed.png' width='50' height='50' /> </td>"
+ "<td> <strong>Movement speed:</strong> <br />" + champion.getMovementSpeed() + "</td>"
+ "</tr>"
+ "</table>"
+ "</html>"
);
for (ChampionSkin skin : champion.getSkins()) {
Box skinBox = Box.createVerticalBox();
JLabel skinName = new JLabel(skin.isDefault() ? champion.getDisplayName() : skin.getDisplayName());
skinBox.add(skinName);
skinBox.add(new SkinImageLabel(skin, SkinImageLabel.DisplayType.PORTRAIT, champion.getDisplayName()));
this.skinsPanel.add(skinBox);
}
try {
championIcon.setIcon(new ImageIcon(champion.getIcon()));
} catch (Exception e) {
e.printStackTrace();
System.out.println("Could not find Icon for " + champion.getDisplayName());
}
}
public void addActionListener(ActionListener l) {
this.selectionAudioButton.addActionListener(l);
}
}