package de.achim.turnier.spielplan;
import java.awt.BasicStroke;
import java.awt.Component;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;
import javax.print.PrintService;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import de.achim.turnier.utility.Begegnung;
public class DruckSpielPanel implements Printable {
private PrintService[] services;
private SpielPlanPanel spp;
private StringBuffer sb = new StringBuffer();
private Vector<StringBuffer> vSB = new Vector<StringBuffer>();
private Vector<HashMap<String, String>> vHM = new Vector<HashMap<String,String>>();
private boolean getPrintInfo = true;
private int lineHeight;
private int linesPerPage;
private int pages;
private String title;
public DruckSpielPanel (){
this.services = PrinterJob.lookupPrintServices();
}
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
// Font font = new Font( Font.SANS_SERIF, Font.PLAIN, 20 );
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
g2d.setFont(new Font( Font.SANS_SERIF, Font.PLAIN, 20 ));
FontMetrics fm = g2d.getFontMetrics();
//fm.stringWidth(str)
int lineLength = (int) pageFormat.getImageableWidth() -5;
int pageHeight = (int) pageFormat.getImageableHeight();
int lineXStart = (int) pageFormat.getImageableX();
int lineX1Start = new Double( lineLength * 0.25).intValue(); //wo mannschaft1 anfaengt
int lineX2Start = new Double( lineLength * 0.5).intValue(); //wo mannschaft2 anfaengt
int lineX3Start = new Double( lineLength * 0.75).intValue(); //wo tore anfangen anfaengt
int lineX4Start = new Double( lineLength * 0.9).intValue(); //zeilenlaenge
int numberOfLines = vSB.size();
if (getPrintInfo) {
//die muessen ueber beide aufrufe vorhanden sind
lineHeight = fm.getHeight();
linesPerPage = Math.max(pageHeight/lineHeight, 1);
pages = (int) Math.ceil((double)numberOfLines/(double)linesPerPage);
return NO_SUCH_PAGE;
} else {
if (pageIndex >=1)
return NO_SUCH_PAGE;
int lineYStart = (int) pageFormat.getImageableY() + lineHeight;
System.out.println("-----------------------------------");
System.out.println("l�nge: " +lineLength);
System.out.println("x-start: " + lineXStart );
System.out.println("x1-start: " + lineX2Start );
System.out.println("x2-start: " + lineX3Start );
System.out.println("y-sart: " + lineYStart);
System.out.println("lineheigt: " + lineHeight);
System.out.println(vHM.size());
System.out.println("-----------------------------------");
if(!vHM.isEmpty()){
//print title zentriert
HashMap<String, String> hm1 = vHM.firstElement();
int titlelaenge = fm.stringWidth(title);
int xpostitle = calcTitlePos(titlelaenge, lineLength);
g2d.drawString(title, xpostitle, lineYStart);
int tabYStart = lineYStart + 2*lineHeight;
int ygridstart = lineYStart + lineHeight;
lineYStart = lineYStart + 2;
g2d.setStroke(new BasicStroke(2));
g2d.drawLine(lineXStart, ygridstart, lineX4Start, ygridstart);
Iterator<HashMap<String, String>> iter = vHM.iterator();
while(iter.hasNext()){
System.out.println("y-sart: " + tabYStart);
HashMap<String, String> hm = iter.next();
g2d.drawString(hm.get("uhrzeit"), lineXStart + 2, tabYStart);
g2d.drawString(hm.get("mannschaft1"), lineX1Start + 2, tabYStart);
g2d.drawString(hm.get("mannschaft2"), lineX2Start, tabYStart);
String s = hm.get("tfTore1") + " : " + hm.get("tfTore2");
g2d.drawString(s, lineX3Start, tabYStart);
g2d.setStroke(new BasicStroke(2));
g2d.drawLine(lineXStart, tabYStart + 5 , lineX4Start, tabYStart + 5 ); //pagesetup
tabYStart = tabYStart + lineHeight;
}
//draw bounderies at the beginning and at the end of the line
//vorne
g2d.setStroke(new BasicStroke(2));
g2d.drawLine(lineXStart, ygridstart , lineXStart, tabYStart -20 );
g2d.setStroke(new BasicStroke(2));
g2d.drawLine(lineX1Start -2,ygridstart , lineX1Start - 2, tabYStart -20 );
g2d.setStroke(new BasicStroke(2));
g2d.drawLine(lineX2Start -2,ygridstart , lineX2Start - 2, tabYStart -20 );
g2d.setStroke(new BasicStroke(2));
g2d.drawLine(lineX3Start - 2, ygridstart , lineX3Start -2, tabYStart -20 );
//hinten
g2d.setStroke(new BasicStroke(2));
g2d.drawLine(lineX4Start,ygridstart , lineX4Start, tabYStart -20 );
return PAGE_EXISTS;
} else {
System.out.println("Kein SpielPlan erstellt");
return NO_SUCH_PAGE;
}
}
} //end of print()
public SpielPlanPanel getSps() {
return spp;
}
public void setSps(SpielPlanPanel spp) {
this.spp = spp;
Vector<SpielPanel> vSP = spp.getSpieleListe();
Vector<Begegnung> vBG = spp.getBegegnungsListe();
//Iterator<SpielPanel> iter = vSP.iterator();
Iterator<Begegnung> iter = vBG.iterator();
while(iter.hasNext()){
Begegnung bg = iter.next();
HashMap<String, String> hm = new HashMap<String, String>();
String date = bg.getDate();
int index = date.indexOf(" ");
String datum = date.substring(0, index).trim();
String uhrzeit = date.substring(index, date.length()).trim();
hm.put("datum", datum);
hm.put("uhrzeit",uhrzeit);
hm.put("mannschaft1", bg.getMannschaft1());
hm.put("mannschaft2", bg.getMannschaft2());
hm.put("tfTore1", String.valueOf(bg.getToreMannschaft1()));
hm.put("tfTore2", String.valueOf(bg.getToreMannschaft2()));
vHM.add(hm);
}
} //ende setSps
public void setGetPrintInfo(boolean getPrintInfo) {
this.getPrintInfo = getPrintInfo;
}
public void setTitle(String s){
this.title = s;
}
private int calcTitlePos(int titlelength, int linelength){
int titlelengthhalbe = new Double(titlelength/2).intValue();
int zeilenlangehalbe = new Double(linelength/2).intValue();
return zeilenlangehalbe - titlelengthhalbe;
}
}