/* Copyright (C) 2010 - 2011 Fabian Neundorf, Philip Caroli,
* Maximilian Madlung, Usman Ghani Ahmed, Jeremias Mechler
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.ojim.client.gui.GameField;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
public class GameFieldLayout implements LayoutManager {
private int minWidth = 200, minHeight = 200;
private int preferredWidth = 400, preferredHeight = 400;
private boolean sizeUnknown = true;
@Override
public void addLayoutComponent(String arg0, Component arg1) {
// TODO Auto-generated method stub
}
private void setSizes(Container parent) {
int nComps = parent.getComponentCount();
Dimension d = null;
// Reset preferred/minimum width and height.
for (int i = 0; i < nComps; i++) {
Component c = parent.getComponent(i);
if (c.isVisible()) {
d = c.getPreferredSize();
if (i > 0) {
preferredWidth += d.width / 2;
} else {
preferredWidth = d.width;
}
preferredHeight += d.height;
minWidth = Math.max(c.getMinimumSize().width, minWidth);
minHeight = preferredHeight;
}
}
}
@Override
public void layoutContainer(Container parent) {
int nComps = parent.getComponentCount();
// Go through the components' sizes, if neither
// preferredLayoutSize nor minimumLayoutSize has
// been called.
if (sizeUnknown) {
setSizes(parent);
// System.out.println("Handlungsbedarf");
}
for (int i = 0; i < nComps; i++) {
Component c = parent.getComponent(i);
int totalWidth = parent.getWidth();
int totalHeight = parent.getHeight();
// Wir brauchen das größtmögliche Quadrat
int maxSize = totalWidth < totalHeight ? totalWidth : totalHeight;
// Kartengröße
int cardWidth = (int) (maxSize * 1 / 13);
int cardHeight = 2 * cardWidth;
int halfWidth = (int) cardWidth / 2;
int halfHeight = (int) cardHeight / 2;
// Mittelfeldgröße
int middleFieldSize = 9 * cardWidth;
/*
* System.out.println("totalWidth: " + totalWidth);
* System.out.println("totalHeight: " + totalHeight);
* System.out.println("maxSize: " + maxSize);
* System.out.println("cardWidth: " + cardWidth);
* System.out.println("cardHeight: " + cardHeight);
*/
// Rundungsfehler vermeiden, alle Zahlen werden aus CardWitdh
// aufgebaut
maxSize = middleFieldSize + 2 * cardHeight;
if (c.isVisible()) {
// System.out.println("Container "+c.getName());
// Feld Position
int field = Integer.parseInt(c.getName());
boolean player = false;
int fieldNumber = field % 10;
int playerSize = 15;
// Mittelfeld = -1
if(field > 1000){
field /= 1000;
player = true;
//System.out.print(" Beim Layouter kommen Daten an.");
}
if (field == -1) {
c.setBounds(cardHeight, cardHeight, middleFieldSize,
middleFieldSize);
// System.out.println("Mittelfeld ist da");
// Randfelder
} else if (field % 10 == 0) {
switch (field) {
case 0:
if(player){
c.setBounds(middleFieldSize + cardHeight,
middleFieldSize + cardHeight, playerSize,
playerSize);
} else {
c.setBounds(middleFieldSize + cardHeight,
middleFieldSize + cardHeight, cardHeight,
cardHeight);
}
break;
case 10:
if(player){
c.setBounds(0, middleFieldSize + cardHeight,
playerSize, playerSize);
} else {
c.setBounds(0, middleFieldSize + cardHeight,
cardHeight, cardHeight);
}
break;
case 20:
if(player){
c.setBounds(0, 0, playerSize, playerSize);
} else {
c.setBounds(0, 0, cardHeight, cardHeight);
}
break;
case 30:
if(player){
c.setBounds(middleFieldSize + cardHeight, 0,
playerSize, playerSize);
} else {
c.setBounds(middleFieldSize + cardHeight, 0,
cardHeight, cardHeight);
}
break;
}
// Felder unten
} else if (field < 10) {
if(player){
c.setBounds(middleFieldSize + cardHeight
- ((fieldNumber % 10) * cardWidth), middleFieldSize
+ cardHeight, playerSize, playerSize);
} else {
c.setBounds(middleFieldSize + cardHeight
- ((fieldNumber % 10) * cardWidth), middleFieldSize
+ cardHeight, cardWidth, cardHeight);
}
// Felder links
} else if (field < 20) {
if(player){
c.setBounds(0, middleFieldSize + cardWidth
- ((fieldNumber % 10) * cardWidth), playerSize,
playerSize);
} else {
c.setBounds(0, middleFieldSize + cardHeight
- ((fieldNumber % 10) * cardWidth), cardHeight,
cardWidth);
}
// Felder oben
} else if (field < 30) {
if(player){
c.setBounds(((fieldNumber % 10) * cardWidth) + cardHeight,
0, playerSize, playerSize);
} else {
c.setBounds(((fieldNumber % 10) * cardWidth) + cardWidth,
0, cardWidth, cardHeight);
}
// Felder rechts
} else {
if(player){
c.setBounds(middleFieldSize + cardHeight, cardHeight
+ ((fieldNumber % 10) * cardWidth),
playerSize, playerSize);
} else {
c.setBounds(middleFieldSize + cardHeight, cardHeight
+ ((fieldNumber % 10) * cardWidth) - cardWidth,
cardHeight, cardWidth);
}
}
}
}
}
@Override
public Dimension minimumLayoutSize(Container arg0) {
return new Dimension(minWidth, minHeight);
}
@Override
public Dimension preferredLayoutSize(Container arg0) {
return new Dimension(preferredWidth, preferredHeight);
}
@Override
public void removeLayoutComponent(Component arg0) {
// TODO Auto-generated method stub
}
}