package org.ojim.client.gui.CardBar;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.ojim.client.gui.GUIClient;
import org.ojim.language.Localizer;
import org.ojim.logic.state.fields.Field;
/**
* Das Kartenfenster zeichnet die Kartenstapel
*
*/
public class CardWindow extends JPanel {
// Hält CardStacks
private CardStack[] cardStacks;
private static final int MAX_CARD_STACKS = 4;
private int row = 0;
private JPanel overPanel = new JPanel();
private GUIClient gui;
private JButton freeButton = new JButton();
private JLabel buttonLabel = new JLabel("0");
private JButton freeMoneyButton = new JButton();
private JLabel buttonMoneyLabel = new JLabel();
private JPanel leftPanel = new JPanel();
private ActionListener freeButtonListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
gui.freeMe(0);
}
};;;
private ActionListener freeMoneyListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
gui.freeMe(1);
}
};;;
/**
* Initialisert das Fenster
*/
public CardWindow(GUIClient gui) {
this.gui = gui;
freeButton.add(buttonLabel);
leftPanel.add(freeButton);
freeButton.addActionListener(freeButtonListener);
buttonMoneyLabel.setText("1000");
freeMoneyButton.add(buttonMoneyLabel);
leftPanel.add(freeMoneyButton);
freeMoneyButton.addActionListener(freeMoneyListener);
cardStacks = new CardStack[MAX_CARD_STACKS * 3];
for (int i = 0; i < MAX_CARD_STACKS * 3; i++) {
cardStacks[i] = new CardStack();
}
this.setLayout(new BorderLayout());
this.add(leftPanel, BorderLayout.WEST);
this.add(overPanel, BorderLayout.EAST);
JPanel panek;
overPanel.add(panek = new JPanel());
panek.setBackground(Color.cyan);
this.validate();
this.repaint();
draw();
}
/**
* Setzt die Sprache
*
* @param language
* die neue Sprache
*/
public void setLanguage(Localizer language) {
for (int i = 0; i < MAX_CARD_STACKS; i++) {
cardStacks[i].setLanguage(language);
}
draw();
}
/**
* fügt eine Karte zu den Kartenstapeln hinzu
*
* @param card
* das Spielfeld
*/
public void addCard(org.ojim.logic.state.fields.BuyableField card, GUIClient gui) {
boolean found = false;
for (int i = 0; i < MAX_CARD_STACKS * (row + 1)
&& !(cardStacks[i].getFieldGroup() == null); i++) {
if (cardStacks[i].getFieldGroup().equals(card.getFieldGroup())) {
cardStacks[i].addCard(card, gui);
found = true;
break;
}
}
if (!found) {
for (int i = 0; i < MAX_CARD_STACKS * 2; i++) {
if (cardStacks[i].getFieldGroup() == null) {
cardStacks[i].addCard(card, gui);
if (i >= MAX_CARD_STACKS * (row + 1)) {
row++;
}
break;
}
}
}
// System.out.println("Karte gekauft");
draw();
}
/**
* Entfernt eine Karte aus einem Kartenstapel wenn die Karte enthalten ist
*
* @param card
* das zu entferndende Feld
*/
public void removeCard(org.ojim.logic.state.fields.BuyableField card, GUIClient gui) {
int empty = -1;
try {
for (int i = 0; i < MAX_CARD_STACKS * (row + 1)
&& !cardStacks[i].getFieldGroup().equals(null); i++) {
if (cardStacks[i].getFieldGroup().equals(card.getFieldGroup())) {
cardStacks[i].removeCard(card, gui);
if (cardStacks[i].isEmpty()) {
empty = i;
}
break;
}
}
} catch (NullPointerException e ){
System.out.println("Nullpointer");
}
if (empty != -1) {
for (int i = empty; i < MAX_CARD_STACKS * (row + 1) - 1; i++) {
cardStacks[i] = cardStacks[i + 1];
}
cardStacks[MAX_CARD_STACKS * (row + 1) - 1] = new CardStack();
if (empty < MAX_CARD_STACKS * (row + 1)) {
row--;
}
}
draw();
}
/**
* Zeichnet das Fenster
*/
public void draw() {
overPanel.setLayout(new GridLayout(3, MAX_CARD_STACKS));
for (int i = 0; i < MAX_CARD_STACKS * (row + 1); i++) {
overPanel.remove(cardStacks[i]);
cardStacks[i].draw();
overPanel.add(cardStacks[i]);
}
}
/**
* Dreht eine Karte im Kartenstapel um
* @param field die umzudrehende Karte
*/
public void switchCardStatus(Field field) {
for (int i = 0; i < cardStacks.length; i++){
cardStacks[i].switchMortage(field);
}
}
public void jailCards(int numberOfGetOutOfJailCards) {
buttonLabel.setText(numberOfGetOutOfJailCards+"");
}
}