package com.kolakcc.loljclient.view;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.util.Map;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import com.camick.TableColumnAdjuster;
import com.kolakcc.loljclient.model.Champion;
import com.kolakcc.loljclient.model.Division;
import com.kolakcc.loljclient.model.Item;
import com.kolakcc.loljclient.model.RecentGame;
import com.kolakcc.loljclient.model.RunePage;
import com.kolakcc.loljclient.model.swing.RecentGamesListModel;
import com.kolakcc.loljclient.model.swing.RunesInventoryTableModel;
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.DivisionPanel;
import com.kolakcc.loljclient.view.ui.ItemImageLabel;
import com.kolakcc.loljclient.view.ui.LocalizedJButton;
import com.kolakcc.loljclient.view.ui.LocalizedJLabel;
import com.kolakcc.loljclient.view.ui.RunePagePanel;
import com.kolakcc.loljclient.view.ui.VerticalJScrollPane;
import com.kolakcc.loljclient.view.ui.renderer.RecentGameListItemRenderer;
public class ProfileView extends KolaView {
JTextField searchField;
LocalizedJButton searchButton;
JList<RecentGame> recentMatchesList;
LocalizedJLabel summonerNameLabel, championNameLabel, killsLabel, deathsLabel, assistsLabel, summonerSpell1Label, summonerSpell2Label, goldEarnedLabel,
gamesNumber, currentGameChampionName;
ItemImageLabel item1Label, item2Label, item3Label, item4Label, item5Label, item6Label;
JPanel gameInfo, itemsPanel, statsPanel;
JTable runesTable;
JTabbedPane runePagesTabPane, leaguesTabPane;
ChampionBox currentGameChampion;
static LocaleMessages profileViewMessages = new LocaleMessages("profileViewBundle"),
statsMessages = new LocaleMessages("statsBundle");
public ProfileView() {
super();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLayout(new BorderLayout());
setTitle("Profile");
JPanel topPanel = new JPanel(new BorderLayout());
summonerNameLabel = new LocalizedJLabel();
summonerNameLabel.setFont(FontUtils.emSize(summonerNameLabel.getFont(), 2.0));
topPanel.add(summonerNameLabel,BorderLayout.WEST);
JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
searchField = new JTextField(15);
searchPanel.add(searchField);
searchButton = new LocalizedJButton(profileViewMessages, "search");
searchPanel.add(searchButton);
topPanel.add(searchPanel,BorderLayout.EAST);
add(topPanel,BorderLayout.NORTH);
JTabbedPane tabPane = new JTabbedPane();
JPanel recentGamesTabPanel = new JPanel(new BorderLayout());
JPanel westPanel = new JPanel(new BorderLayout());
JPanel recentMatchesPanel = new JPanel(new BorderLayout());
recentMatchesList = new JList<RecentGame>();
recentMatchesList.setCellRenderer(new RecentGameListItemRenderer());
DefaultListModel<RecentGame> temp = new DefaultListModel<RecentGame>();
recentMatchesList.setModel(temp);
gamesNumber = new LocalizedJLabel();
westPanel.add(gamesNumber, BorderLayout.NORTH);
westPanel.add(new JScrollPane(recentMatchesList), BorderLayout.CENTER);
recentMatchesPanel.add(westPanel, BorderLayout.WEST);
gameInfo = new JPanel(new BorderLayout());
JPanel topGamePanel = new JPanel(new BorderLayout());
JPanel championAndName = new JPanel(new FlowLayout());
currentGameChampion = new ChampionBox();
championAndName.add(currentGameChampion);
currentGameChampionName = new LocalizedJLabel();
championAndName.add(currentGameChampionName);
topGamePanel.add(championAndName, BorderLayout.NORTH);
itemsPanel = new JPanel(new FlowLayout());
item1Label = new ItemImageLabel(); itemsPanel.add(item1Label);
item2Label = new ItemImageLabel(); itemsPanel.add(item2Label);
item3Label = new ItemImageLabel(); itemsPanel.add(item3Label);
item4Label = new ItemImageLabel(); itemsPanel.add(item4Label);
item5Label = new ItemImageLabel(); itemsPanel.add(item5Label);
item6Label = new ItemImageLabel(); itemsPanel.add(item6Label);
topGamePanel.add(itemsPanel,BorderLayout.CENTER);
gameInfo.add(topGamePanel,BorderLayout.NORTH);
statsPanel = new JPanel(new GridLayout(0, 2));
gameInfo.add(new VerticalJScrollPane(statsPanel),BorderLayout.CENTER);
recentMatchesPanel.add(gameInfo, BorderLayout.CENTER);
recentGamesTabPanel.add(recentMatchesPanel);
tabPane.addTab(profileViewMessages.getString("recent games"), recentGamesTabPanel);
leaguesTabPane = new JTabbedPane();
tabPane.addTab(profileViewMessages.getString("leagues"), leaguesTabPane);
JPanel runesPanel = new JPanel(new BorderLayout());
runesTable = new JTable();
runesPanel.add(new VerticalJScrollPane(runesTable),BorderLayout.WEST);
runePagesTabPane = new JTabbedPane();
runesPanel.add(runePagesTabPane,BorderLayout.CENTER);
tabPane.add(profileViewMessages.getString("runes"),runesPanel);
add(tabPane, BorderLayout.CENTER);
setSize(600, 500);
setVisible(true);
}
public void addRunePage(RunePage runePage) {
runePagesTabPane.addTab(runePage.getName(), new RunePagePanel(runePage));
}
public void resetRunePages() {
while (runePagesTabPane.getTabCount() > 0) runePagesTabPane.remove(0);
}
public void setRuneInventoryModel(RunesInventoryTableModel model) {
runesTable.setModel(model);
}
public void setColumnSizes() {
TableColumnAdjuster columnAdjuster = new TableColumnAdjuster(runesTable);
int amountSize = Math.max(columnAdjuster.getColumnDataWidth(0), columnAdjuster.getColumnHeaderWidth(0));
runesTable.getColumnModel().getColumn(0).setMaxWidth(amountSize);
pack();
}
public void addSearchActionListener(ActionListener l) {
searchButton.addActionListener(l);
searchField.addActionListener(l);
}
public String getSearchString() {
return searchField.getText();
}
public void setName(String name) {
summonerNameLabel.setText(name);
}
public void addLeague(Division division, MouseListener clickListener, ActionListener actionListener) {
leaguesTabPane.addTab(LocaleMessages.leagueTermsMessages.getString(division.getQueue()), new DivisionPanel(division, clickListener, actionListener));
}
public void clearLeagues() {
while (leaguesTabPane.getTabCount() > 0) leaguesTabPane.remove(0);
}
public void filterCurrentDivisionTable() {
DivisionPanel divisionPanel = ((DivisionPanel) leaguesTabPane.getSelectedComponent());
divisionPanel.getTableModel().filterByTier((String) divisionPanel.getTierList().getSelectedItem());
}
public void setSelectedGame(RecentGame game) {
item1Label.setItem(Item.getItemFromID(game.getStatistic("ITEM0")));
item2Label.setItem(Item.getItemFromID(game.getStatistic("ITEM1")));
item3Label.setItem(Item.getItemFromID(game.getStatistic("ITEM2")));
item4Label.setItem(Item.getItemFromID(game.getStatistic("ITEM3")));
item5Label.setItem(Item.getItemFromID(game.getStatistic("ITEM4")));
item6Label.setItem(Item.getItemFromID(game.getStatistic("ITEM5")));
statsPanel.removeAll();
for (Map.Entry<String, Integer> entry : game.getStatistics().entrySet()) {
String key = entry.getKey();
if (key.startsWith("ITEM") || key.startsWith("WIN") || key.startsWith("LOSE")) continue;
statsPanel.add(new LocalizedJLabel(statsMessages, entry.getKey()));
statsPanel.add(new JLabel(entry.getValue().toString()));
}
try { currentGameChampion.setChampion(Champion.getChampionFromID(game.getChampionID())); }
catch (Exception e) { e.printStackTrace(); }
currentGameChampionName.setText(Champion.getChampionFromID(game.getChampionID()).getDisplayName());
currentGameChampion.setSize(60, 60);
gameInfo.revalidate();
}
public void setRecentGamesModel(RecentGamesListModel model) {
recentMatchesList.setModel(model);
recentMatchesList.getSelectionModel().addSelectionInterval(0, 0);
}
public int getSelectedGameIndex() {
return recentMatchesList.getSelectedIndex();
}
public void addRecentGameMouseListener(MouseListener l) {
recentMatchesList.addMouseListener(l);
}
public void setAmountObject(Object[] messageArguments) {
gamesNumber.setText(profileViewMessages.getComplexString("games_amount", messageArguments));
}
}