package org.insightech.er.editor.model.settings;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.widgets.Display;
public class PageSetting implements Serializable {
private static final long serialVersionUID = 7520875865783223474L;
private static final int DEFAULT_MARGIN = 30;
private boolean directionHorizontal;
private int scale;
private String paperSize;
private int topMargin;
private int leftMargin;
private int bottomMargin;
private int rightMargin;
public PageSetting() {
this.directionHorizontal = true;
this.scale = 100;
this.paperSize = "A4 210 x 297 mm";
this.topMargin = DEFAULT_MARGIN;
this.rightMargin = DEFAULT_MARGIN;
this.bottomMargin = DEFAULT_MARGIN;
this.leftMargin = DEFAULT_MARGIN;
}
public PageSetting(boolean directionHorizontal, int scale,
String paperSize, int topMargin, int rightMargin, int bottomMargin,
int leftMargin) {
this.directionHorizontal = directionHorizontal;
this.scale = scale;
this.paperSize = paperSize;
this.topMargin = topMargin;
this.rightMargin = rightMargin;
this.bottomMargin = bottomMargin;
this.leftMargin = leftMargin;
}
public static List<String> getAllPaperSize() {
List<String> allPaperSize = new ArrayList<String>();
allPaperSize.add("A0 841 x 1189 mm");
allPaperSize.add("A1 594 x 841 mm");
allPaperSize.add("A2 420 x 594 mm");
allPaperSize.add("A3 297 x 420 mm");
allPaperSize.add("A4 210 x 297 mm");
allPaperSize.add("B0 1000 x 1414 mm");
allPaperSize.add("B1 707 x 1000 mm");
allPaperSize.add("B2 500 x 707 mm");
allPaperSize.add("B3 353 x 500 mm");
allPaperSize.add("B4 250 x 353 mm");
allPaperSize.add("B5 176 x 250 mm");
return allPaperSize;
}
/**
* directionHorizontal を取得します.
*
* @return directionHorizontal
*/
public boolean isDirectionHorizontal() {
return directionHorizontal;
}
/**
* scale を取得します.
*
* @return scale
*/
public int getScale() {
return scale;
}
/**
* paperSize を取得します.
*
* @return paperSize
*/
public String getPaperSize() {
return paperSize;
}
/**
* topMargin を取得します.
*
* @return topMargin
*/
public int getTopMargin() {
return topMargin;
}
/**
* leftMargin を取得します.
*
* @return leftMargin
*/
public int getLeftMargin() {
return leftMargin;
}
/**
* bottomMargin を取得します.
*
* @return bottomMargin
*/
public int getBottomMargin() {
return bottomMargin;
}
/**
* rightMargin を取得します.
*
* @return rightMargin
*/
public int getRightMargin() {
return rightMargin;
}
public int getWidth() {
return (int) ((this.getLength(this.directionHorizontal)
- (this.leftMargin / 10) - (this.rightMargin / 10))
* Display.getCurrent().getDPI().x / 25.4 * 100 / this.scale);
}
public int getHeight() {
return (int) ((this.getLength(!this.directionHorizontal)
- (this.topMargin / 10) - (this.bottomMargin / 10))
* Display.getCurrent().getDPI().y / 25.4 * 100 / this.scale);
}
private int getLength(boolean horizontal) {
if (horizontal) {
if (this.paperSize.startsWith("A0")) {
return 1189;
} else if (this.paperSize.startsWith("A1")) {
return 841;
} else if (this.paperSize.startsWith("A2")) {
return 594;
} else if (this.paperSize.startsWith("A3")) {
return 420;
} else if (this.paperSize.startsWith("A4")) {
return 297;
} else if (this.paperSize.startsWith("B0")) {
return 1414;
} else if (this.paperSize.startsWith("B1")) {
return 1000;
} else if (this.paperSize.startsWith("B2")) {
return 707;
} else if (this.paperSize.startsWith("B3")) {
return 500;
} else if (this.paperSize.startsWith("B4")) {
return 353;
} else if (this.paperSize.startsWith("B5")) {
return 250;
} else {
// A4
return 297;
}
} else {
if (this.paperSize.startsWith("A0")) {
return 841;
} else if (this.paperSize.startsWith("A1")) {
return 594;
} else if (this.paperSize.startsWith("A2")) {
return 420;
} else if (this.paperSize.startsWith("A3")) {
return 297;
} else if (this.paperSize.startsWith("A4")) {
return 210;
} else if (this.paperSize.startsWith("B0")) {
return 1000;
} else if (this.paperSize.startsWith("B1")) {
return 707;
} else if (this.paperSize.startsWith("B2")) {
return 500;
} else if (this.paperSize.startsWith("B3")) {
return 353;
} else if (this.paperSize.startsWith("B4")) {
return 250;
} else if (this.paperSize.startsWith("B5")) {
return 176;
} else {
// A4
return 210;
}
}
}
}