2
* Created on 17-dic-2005
4
* TODO To change the template for this generated file go to
5
* Window - Preferences - Java - Code Style - Code Templates
7
package org.herac.tuxguitar.gui.actions.file;
9
import java.awt.print.PageFormat;
10
import java.awt.print.Printable;
12
import java.net.URISyntaxException;
14
import javax.print.Doc;
15
import javax.print.DocFlavor;
16
import javax.print.DocPrintJob;
17
import javax.print.PrintException;
18
import javax.print.PrintService;
19
import javax.print.PrintServiceLookup;
20
import javax.print.SimpleDoc;
21
import javax.print.attribute.HashPrintRequestAttributeSet;
22
import javax.print.attribute.PrintRequestAttributeSet;
23
import javax.print.attribute.standard.Copies;
24
import javax.print.attribute.standard.Destination;
25
import javax.print.attribute.standard.MediaSize;
26
import javax.print.attribute.standard.MediaSizeName;
27
import javax.print.attribute.standard.PageRanges;
29
import org.eclipse.swt.SWT;
30
import org.eclipse.swt.events.TypedEvent;
31
import org.eclipse.swt.graphics.Rectangle;
32
import org.eclipse.swt.printing.PrinterData;
33
import org.herac.tuxguitar.gui.TuxGuitar;
34
import org.herac.tuxguitar.gui.actions.Action;
35
import org.herac.tuxguitar.gui.editors.TablatureEditor;
36
import org.herac.tuxguitar.gui.editors.tab.Tablature;
37
import org.herac.tuxguitar.gui.editors.tab.layout.PrinterViewLayout;
38
import org.herac.tuxguitar.gui.helper.SyncThread;
39
import org.herac.tuxguitar.gui.printer.PrintDialog;
40
import org.herac.tuxguitar.gui.printer.PrintDocument;
41
import org.herac.tuxguitar.gui.printer.PrintDocumentData;
42
import org.herac.tuxguitar.gui.printer.PrintableImpl;
43
import org.herac.tuxguitar.gui.util.MessageDialog;
48
* TODO To change the template for this generated type comment go to
49
* Window - Preferences - Java - Code Style - Code Templates
51
public class PrintAction extends Action{
52
public static final String NAME = "action.file.print";
54
private static final double PAPER_MARGIN = 36.00;
56
public PrintAction(TablatureEditor tablatureEditor) {
57
super(NAME,true,tablatureEditor);
60
public boolean doAction(TypedEvent e) {
61
if(!TuxGuitar.isDisposed()){
62
final PrintDocumentData data = PrintDocumentData.openDialog(TuxGuitar.instance().getShell());
64
new SyncThread(new Runnable() {
66
final PrinterData printerData = new PrintDialog(getEditor().getTablature().getShell()).open();
67
if(printerData != null){
68
new SyncThread(new Runnable() {
71
PrintService service = getPrintService(printerData);
74
MediaSizeName mediaSizeName = MediaSizeName.ISO_A4;
75
MediaSize mediaSize = MediaSize.getMediaSizeForName(mediaSizeName);
76
float x = mediaSize.getX(MediaSize.MM);
77
float y = mediaSize.getY(MediaSize.MM);
78
PageFormat pageFormat = new PageFormat();
79
//TODO: asignar medidas de papel a pageFormat
81
DocPrintJob printJob = service.createPrintJob();
82
PrintDocument document = makePrintDocument(pageFormat,data);
83
Printable printable = new PrintableImpl(document);
84
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
85
PrintRequestAttributeSet aset= new HashPrintRequestAttributeSet();
88
//aset.add(mediaSizeName);
91
aset.add(new Copies(printerData.copyCount));
94
if(printerData.scope == PrinterData.PAGE_RANGE){
95
printerData.startPage = (printerData.startPage <= 0)?1:printerData.startPage;
96
printerData.startPage = (printerData.startPage > document.count())?document.count():printerData.startPage;
97
printerData.endPage = (printerData.endPage < printerData.startPage)?printerData.startPage:printerData.endPage;
98
printerData.endPage = (printerData.endPage > document.count())?document.count():printerData.endPage;
100
aset.add(new PageRanges(printerData.startPage,printerData.endPage));
104
if(printerData.printToFile && printerData.fileName != null && printerData.fileName.length() > 0){
105
aset.add(new Destination(new URI(printerData.fileName)));
109
Doc doc = new SimpleDoc(printable,flavor,null);
110
printJob.print(doc,aset);
112
} catch (PrintException e1) {
113
e1.printStackTrace();
114
} catch (URISyntaxException e2) {
115
e2.printStackTrace();
116
}catch(OutOfMemoryError error){
117
showErrorMessage(error);
129
public PrintService getPrintService(PrinterData printerData){
130
if(printerData != null && printerData.name != null){
131
PrintService[] services = PrintServiceLookup.lookupPrintServices(null,null);
132
for(int i = 0;i < services.length;i++){
133
if(services[i].getName().equals(printerData.name)){
140
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
147
public PrintDocument makePrintDocument(PageFormat pageFormat,PrintDocumentData data){
148
Tablature tablature = new Tablature(getEditor().getTablature(),SWT.NONE);
149
tablature.setSongManager(getEditor().getSongManager());
150
tablature.reloadStyles();
152
PrinterViewLayout layout = new PrinterViewLayout(tablature,getEditor().getSongManager(),data);
153
tablature.setViewLayout(layout);
154
tablature.initDefaults();
155
tablature.updateTablature();
156
tablature.getCaret().update(getEditor().getTablature().getCaret().getSongTrackCoords().getTrack().getNumber());
158
PrintDocument doc = layout.makeDocument(new Rectangle(0,0,(int)pageFormat.getImageableWidth() - 13,(int)pageFormat.getImageableHeight()));
163
private void showErrorMessage(final Error error){
164
new SyncThread( new Runnable() {
166
if(!TuxGuitar.isDisposed()){
167
String name = error.getClass().getName();
168
String message = error.getMessage();
169
new MessageDialog(name,message,SWT.ICON_ERROR | SWT.OK).show(getEditor().getTablature().getShell());