3 // This file is part of PosterDivider.
5 package jp.sourceforge.posterdivider;
7 import java.awt.Button;
8 import java.awt.Checkbox;
9 import java.awt.Choice;
10 import java.awt.Dimension;
11 import java.awt.FileDialog;
12 import java.awt.FlowLayout;
13 import java.awt.Frame;
14 import java.awt.Label;
16 import java.awt.MenuBar;
17 import java.awt.MenuItem;
18 import java.awt.MenuShortcut;
19 import java.awt.Panel;
20 import java.awt.TextField;
21 import java.awt.event.ActionEvent;
22 import java.awt.event.ActionListener;
23 import java.awt.event.ItemEvent;
24 import java.awt.event.ItemListener;
25 import java.awt.event.KeyEvent;
26 import java.awt.event.WindowEvent;
27 import java.awt.event.WindowListener;
28 import java.io.ByteArrayOutputStream;
30 import java.io.FileOutputStream;
31 import java.io.IOException;
32 import java.text.SimpleDateFormat;
33 import java.util.ArrayList;
34 import java.util.Date;
36 import javax.swing.BoxLayout;
38 public class MainFrame extends Frame {
39 private static final long serialVersionUID = 1L;
42 private Label labelSrcFile;
43 private TextField textFieldSrcFileName;
44 private Label labelSrcFileType;
45 private Button buttonSrcFileChange;
46 private Label labelSrcPageNum;
47 private Choice choiceSrcPageNum;
48 private Label labelSrcImageSize;
49 private NumberField numberFieldSrcImageWidth;
50 private NumberField numberFieldSrcImageHeight;
51 private Choice choiceSrcImageSizeUnit;
52 private Label labelSrcRect;
53 private Checkbox checkboxSrcRectWholeOfPage;
54 private NumberField numberFieldSrcLeft;
55 private NumberField numberFieldSrcBottom;
56 private NumberField numberFieldSrcRight;
57 private NumberField numberFieldSrcTop;
58 private Choice choiceSrcRectUnit;
59 private Label labelPosterSize;
60 private Choice choicePosterSize;
61 private NumberField numberFieldPosterWidth;
62 private NumberField numberFieldPosterHeight;
63 private Choice choicePosterSizeUnit;
64 private Checkbox checkboxPosterSizeKeepAspectRatio;
65 private Label labelPaperSize;
66 private Choice choicePaperSize;
67 private NumberField numberFieldPaperWidth;
68 private NumberField numberFieldPaperHeight;
69 private Choice choicePaperSizeUnit;
70 private Label labelPaperMargin;
71 private NumberField numberFieldPaperMargin;
72 private Choice choicePaperMarginUnit;
73 private Checkbox checkboxPaperRotate;
74 private Button buttonPaperOptimize;
75 private Label labelPreview;
76 private Label labelOutputPaperCount;
77 private NumberField numberFieldOutputPaperCount;
78 private CanvasPreview canvasPreview;
79 private Label labelOutputFileName;
80 private TextField textFieldOutputFileName;
81 private Label labelMessage;
82 private Button buttonOutput;
86 private FileContainer fc;
87 private ImageContainer ic;
88 private float srcImageWidth;
89 private float srcImageHeight;
90 private ArrayList<Double> listSrcImageSizeUnit = new ArrayList<Double>();
91 private float srcLeft;
92 private float srcBottom;
93 private float srcRight;
95 private ArrayList<Double> listSrcRectUnit = new ArrayList<Double>();
96 private ArrayList<PaperSize> listPosterSize = new ArrayList<PaperSize>();
97 // preferredPosterSize と keepAspectRatio から posterSize が決まる
98 private float preferredPosterWidth;
99 private float preferredPosterHeight;
100 private float posterWidth;
101 private float posterHeight;
102 private ArrayList<Double> listPosterSizeUnit = new ArrayList<Double>();
103 private ArrayList<PaperSize> listPaperSize = new ArrayList<PaperSize>();
104 private float paperWidth;
105 private float paperHeight;
106 private boolean paperRotated;
107 private ArrayList<Double> listPaperSizeUnit = new ArrayList<Double>();
108 private float paperMargin;
109 private ArrayList<Double> listPaperMarginUnit = new ArrayList<Double>();
111 private String generateFileName(String str) {
112 str = str.replace("{pwd}", System.getProperty("user.dir"));
113 if (this.srcFile != null) {
114 str = str.replace("{input}", this.srcFile.getName());
116 str = str.replace("{date}", new SimpleDateFormat("yyyyMMddHHmmss")
117 .format(new Date()));
121 private boolean checkFileLoaded() {
122 return this.ic != null;
125 private void simulateOutput() {
126 // 設定値が変更されたときに canvasPreview 等を更新する
128 labelMessage.setText("");
130 PdfGenerator.CreatePosterArgs args = new PdfGenerator.CreatePosterArgs();
131 args.setSrcRect(srcLeft, srcBottom, srcRight, srcTop);
132 args.setPosterSize(posterWidth, posterHeight);
133 args.setPaperSize(paperWidth, paperHeight);
134 args.setMargin(paperMargin, paperMargin, paperMargin, paperMargin);
136 int outputPaperCount = PdfGenerator.simulateOutputPaperCount(args);
137 numberFieldOutputPaperCount.setValue(outputPaperCount);
139 canvasPreview.setArgs(args);
140 canvasPreview.repaint();
143 private void optimizePaperRotated() {
144 // 出力枚数が少なくなるように印刷用紙の向きを更新する
146 PdfGenerator.CreatePosterArgs args1 = new PdfGenerator.CreatePosterArgs();
147 args1.setSrcRect(srcLeft, srcBottom, srcRight, srcTop);
148 args1.setPosterSize(posterWidth, posterHeight);
149 args1.setPaperSize(paperWidth, paperHeight);
150 args1.setMargin(paperMargin, paperMargin, paperMargin, paperMargin);
151 int outputPaperCount1 = PdfGenerator.simulateOutputPaperCount(args1);
152 if (outputPaperCount1 < 0) {
154 outputPaperCount1 = Integer.MAX_VALUE;
157 PdfGenerator.CreatePosterArgs args2 = new PdfGenerator.CreatePosterArgs();
158 args2.setSrcRect(srcLeft, srcBottom, srcRight, srcTop);
159 args2.setPosterSize(posterWidth, posterHeight);
160 args2.setPaperSize(paperHeight, paperWidth); // 印刷用紙を回転する
161 args2.setMargin(paperMargin, paperMargin, paperMargin, paperMargin);
162 int outputPaperCount2 = PdfGenerator.simulateOutputPaperCount(args2);
163 if (outputPaperCount2 < 0) {
164 outputPaperCount2 = Integer.MAX_VALUE;
167 if (outputPaperCount1 > outputPaperCount2
168 || (outputPaperCount1 == outputPaperCount2 && paperRotated)) {
170 checkboxPaperRotate.setState(!paperRotated);
171 checkboxPaperRotate_itemStateChanged();
175 public void outputPdf() {
176 if (!checkFileLoaded()) {
177 labelMessage.setText(Lib.getMessage("No Input Files"));
182 PdfGenerator.CreatePosterArgs args = new PdfGenerator.CreatePosterArgs();
183 args.setSrcRect(srcLeft, srcBottom, srcRight, srcTop);
184 args.setPosterSize(posterWidth, posterHeight);
185 args.setPaperSize(paperWidth, paperHeight);
186 args.setMargin(paperMargin, paperMargin, paperMargin, paperMargin);
187 String outputFileName = generateFileName(textFieldOutputFileName
190 ByteArrayOutputStream baos = new ByteArrayOutputStream();
191 PdfGenerator.createPoster(ic, args, baos);
193 FileOutputStream fos = new FileOutputStream(outputFileName);
197 labelMessage.setText(String.format(
198 Lib.getMessage("Saved '%s'"), outputFileName));
199 } catch (IOException ex) {
200 labelMessage.setText(String.format(Lib
201 .getMessage("Failed Write '%s'"), outputFileName));
203 } catch (Exception ex) {
204 labelMessage.setText(Lib.getMessage("Failed Generate"));
209 private void changePageSuccess(ImageContainer ic) {
212 choiceSrcPageNum.select(ic.getPageNum() - 1);
214 srcImageWidth = ic.getImageWidth();
215 srcImageHeight = ic.getImageHeight();
216 numberFieldSrcImageSize_setValue();
218 choiceSrcImageSizeUnit.setEnabled(true);
219 checkboxSrcRectWholeOfPage.setEnabled(true);
220 choiceSrcRectUnit.setEnabled(true);
221 buttonPaperOptimize.setEnabled(true);
223 canvasPreview.setImageContainer(ic);
227 public void changePage(int pageNum) {
232 ImageContainer ic = new ImageContainer(fc, pageNum);
233 changePageSuccess(ic);
234 } catch (Exception ex) {
240 private void changeFileSuccess(File file, FileContainer fc) {
244 textFieldSrcFileName.setText(file.getAbsolutePath());
246 labelSrcFileType.setText(Lib.getFileTypeName(fc.getFileType()));
248 choiceSrcPageNum.removeAll();
249 for (int i = 1; i <= fc.getPageCount(); i++) {
250 choiceSrcPageNum.add(Integer.toString(i));
252 choiceSrcPageNum.select(0);
253 choiceSrcPageNum.setEnabled(fc.getFileType() == Lib.FT_PDF);
255 choiceSrcImageSizeUnit_initialize(fc.getFileType());
256 choiceSrcImageSizeUnit.select(0);
258 choiceSrcRectUnit_initialize(fc.getFileType());
259 choiceSrcRectUnit.select(0);
261 changePage(choiceSrcPageNum.getSelectedIndex() + 1);
263 checkboxSrcRectWholeOfPage.setState(true);
264 checkboxSrcRectWholeOfPage_itemStateChanged();
267 public void changeFile(String fileName) {
268 File file = new File(fileName);
270 FileContainer fc = new FileContainer(file);
271 changeFileSuccess(file, fc);
272 } catch (Exception ex) {
273 labelMessage.setText(String.format(Lib
274 .getMessage("Failed Open '%s'"), file.getAbsolutePath()));
279 private void updatePosterSize() {
280 // preferredPosterSize から posterSize を更新する
281 // KeepAspectRatio なら srcRect を拡大して preferredPosterSize に入る最大の Size を
283 posterWidth = preferredPosterWidth;
284 posterHeight = preferredPosterHeight;
285 if (checkboxPosterSizeKeepAspectRatio.getState()) {
286 if ((srcRight - srcLeft) * preferredPosterHeight > (srcTop - srcBottom)
287 * preferredPosterWidth) {
289 if (srcRight != srcLeft) {
290 posterHeight = posterWidth * (srcTop - srcBottom)
291 / (srcRight - srcLeft);
294 if (srcTop != srcBottom) {
295 posterWidth = posterHeight * (srcRight - srcLeft)
296 / (srcTop - srcBottom);
303 * private void revisePosterSize(int direction) { // direction は固定する方向
304 * 0->Width, 1->Height boolean changed = false; if
305 * (checkboxPosterSizeKeepAspectRatio.getState()) { switch (direction) {
306 * case 0: if (srcRight != srcLeft) { posterHeight = posterWidth * (srcTop -
307 * srcBottom) / (srcRight - srcLeft); changed = true; } break; case 1: if
308 * (srcTop != srcBottom) { posterWidth = posterHeight * (srcRight - srcLeft) /
309 * (srcTop - srcBottom); changed = true; } break; default: break; } } if
310 * (changed) { numberFieldPosterSize_setValue(); simulateOutput(); } }
313 private void menuItemNewWindow_actionPerformed() {
314 MainFrame frame = new MainFrame();
315 frame.setVisible(true);
318 private void menuItemOpenFile_actionPerformed() {
319 FileDialog fd = new FileDialog(this, null, FileDialog.LOAD);
322 if (fd.getFile() != null) {
323 String fileName = fd.getDirectory() + fd.getFile();
324 if (checkFileLoaded()) {
325 MainFrame frame = new MainFrame();
326 frame.changeFile(fileName);
327 frame.setVisible(true);
330 changeFile(fileName);
335 private void menuItemCloseWindow_actionPerformed() {
339 private void menuItemOutput_actionPerformed() {
343 private void buttonSrcFileChange_actionPerformed() {
344 FileDialog fd = new FileDialog(this, null, FileDialog.LOAD);
347 if (fd.getFile() != null) {
348 changeFile(fd.getDirectory() + fd.getFile());
352 private void choiceSrcPageNum_itemStateChanged() {
353 int pageNum = choiceSrcPageNum.getSelectedIndex() + 1;
354 if (this.ic.getPageNum() != pageNum) {
359 private void numberFieldSrcImageSize_setValue() {
360 double rate = listSrcImageSizeUnit.get(choiceSrcImageSizeUnit
361 .getSelectedIndex());
362 numberFieldSrcImageWidth.setValue(srcImageWidth * rate);
363 numberFieldSrcImageHeight.setValue(srcImageHeight * rate);
366 private void choiceSrcImageSizeUnit_add(String key, double value) {
367 choiceSrcImageSizeUnit.add(key);
368 listSrcImageSizeUnit.add(value);
371 private void choiceSrcImageSizeUnit_initialize(int fileType) {
372 choiceSrcImageSizeUnit.removeAll();
373 listSrcImageSizeUnit.clear();
376 choiceSrcImageSizeUnit_add(Lib.getMessage("mm"), Lib.UNIT_POINT_MM);
377 choiceSrcImageSizeUnit_add(Lib.getMessage("cm"), Lib.UNIT_POINT_CM);
378 choiceSrcImageSizeUnit_add(Lib.getMessage("m"), Lib.UNIT_POINT_M);
379 choiceSrcImageSizeUnit_add(Lib.getMessage("in"),
380 Lib.UNIT_POINT_INCH);
381 choiceSrcImageSizeUnit_add(Lib.getMessage("pt"),
382 Lib.UNIT_POINT_POINT);
388 case Lib.FT_JPEG2000:
392 case Lib.FT_OTHERIMAGE:
393 choiceSrcImageSizeUnit_add(Lib.getMessage("px"),
394 Lib.UNIT_PIXEL_PIXEL);
401 private void choiceSrcImageSizeUnit_itemStateChanged() {
402 numberFieldSrcImageSize_setValue();
405 private void checkboxSrcRectWholeOfPage_itemStateChanged() {
406 boolean b = checkboxSrcRectWholeOfPage.getState();
407 numberFieldSrcLeft.setEnabled(!b);
408 numberFieldSrcTop.setEnabled(!b);
409 numberFieldSrcRight.setEnabled(!b);
410 numberFieldSrcBottom.setEnabled(!b);
414 srcRight = srcImageWidth;
415 srcTop = srcImageHeight;
416 numberFieldSrcRect_setValue();
418 numberFieldPosterSize_setValue();
419 // revisePosterSize(0);
424 private void numberFieldSrcRect_actionPerformed(Object obj) {
425 double rate = listSrcRectUnit.get(choiceSrcRectUnit.getSelectedIndex());
426 srcLeft = (float) (numberFieldSrcLeft.getValue() / rate);
427 srcTop = (float) (numberFieldSrcTop.getValue() / rate);
428 srcRight = (float) (numberFieldSrcRight.getValue() / rate);
429 srcBottom = (float) (numberFieldSrcBottom.getValue() / rate);
430 numberFieldSrcRect_setValue();
432 numberFieldPosterSize_setValue();
433 // revisePosterSize(0);
437 private void numberFieldSrcRect_setValue() {
438 if (listSrcRectUnit.isEmpty()) {
441 double rate = listSrcRectUnit.get(choiceSrcRectUnit.getSelectedIndex());
442 numberFieldSrcLeft.setValue(srcLeft * rate);
443 numberFieldSrcTop.setValue(srcTop * rate);
444 numberFieldSrcRight.setValue(srcRight * rate);
445 numberFieldSrcBottom.setValue(srcBottom * rate);
448 private void choiceSrcRectUnit_add(String key, double value) {
449 choiceSrcRectUnit.add(key);
450 listSrcRectUnit.add(value);
453 private void choiceSrcRectUnit_initialize(int fileType) {
454 choiceSrcRectUnit.removeAll();
455 listSrcRectUnit.clear();
458 choiceSrcRectUnit_add(Lib.getMessage("mm"), Lib.UNIT_POINT_MM);
459 choiceSrcRectUnit_add(Lib.getMessage("cm"), Lib.UNIT_POINT_CM);
460 choiceSrcRectUnit_add(Lib.getMessage("m"), Lib.UNIT_POINT_M);
461 choiceSrcRectUnit_add(Lib.getMessage("in"), Lib.UNIT_POINT_INCH);
462 choiceSrcRectUnit_add(Lib.getMessage("pt"), Lib.UNIT_POINT_POINT);
468 case Lib.FT_JPEG2000:
472 case Lib.FT_OTHERIMAGE:
473 choiceSrcRectUnit_add(Lib.getMessage("px"), Lib.UNIT_PIXEL_PIXEL);
480 private void choiceSrcRectUnit_itemStateChanged() {
481 numberFieldSrcRect_setValue();
484 private void choicePosterSize_add(String key, PaperSize value) {
485 choicePosterSize.add(key);
486 listPosterSize.add(value);
489 private void choicePosterSize_initialize() {
490 choicePosterSize.removeAll();
491 listPosterSize.clear();
493 choicePosterSize_add(Lib.getMessage("A0"), PaperSize.A0);
494 choicePosterSize_add(Lib.getMessage("A1"), PaperSize.A1);
495 choicePosterSize_add(Lib.getMessage("A2"), PaperSize.A2);
496 choicePosterSize_add(Lib.getMessage("A3"), PaperSize.A3);
497 choicePosterSize_add(Lib.getMessage("A4"), PaperSize.A4);
498 choicePosterSize_add(Lib.getMessage("A5"), PaperSize.A5);
499 choicePosterSize_add(Lib.getMessage("A6"), PaperSize.A6);
500 choicePosterSize_add(Lib.getMessage("B0"), PaperSize.B0);
501 choicePosterSize_add(Lib.getMessage("B1"), PaperSize.B1);
502 choicePosterSize_add(Lib.getMessage("B2"), PaperSize.B2);
503 choicePosterSize_add(Lib.getMessage("B3"), PaperSize.B3);
504 choicePosterSize_add(Lib.getMessage("B4"), PaperSize.B4);
505 choicePosterSize_add(Lib.getMessage("B5"), PaperSize.B5);
506 choicePosterSize_add(Lib.getMessage("B6"), PaperSize.B6);
507 choicePosterSize_add(Lib.getMessage("Custom"), PaperSize.CUSTOM);
510 private void choicePosterSize_itemStateChanged() {
511 PaperSize size = listPosterSize
512 .get(choicePosterSize.getSelectedIndex());
513 boolean custom = size.isCustom();
514 numberFieldPosterWidth.setEnabled(custom);
515 numberFieldPosterHeight.setEnabled(custom);
516 // checkboxPosterSizeKeepAspectRatio.setEnabled(custom);
518 // checkboxPosterSizeKeepAspectRatio.setState(false);
519 // posterWidth = size.getWidth();
520 // posterHeight = size.getHeight();
521 // numberFieldPosterSize_setValue();
525 preferredPosterWidth = size.getWidth();
526 preferredPosterHeight = size.getHeight();
528 numberFieldPosterSize_setValue();
533 private void numberFieldPosterSize_actionPerformed(Object obj) {
534 double rate = listPosterSizeUnit.get(choicePosterSizeUnit
535 .getSelectedIndex());
536 // posterWidth = (float) (numberFieldPosterWidth.getValue() / rate);
537 // posterHeight = (float) (numberFieldPosterHeight.getValue() / rate);
538 // if (obj == numberFieldPosterWidth) {
539 // revisePosterSize(0);
541 // if (obj == numberFieldPosterHeight) {
542 // revisePosterSize(1);
544 preferredPosterWidth = (float) (numberFieldPosterWidth.getValue() / rate);
545 preferredPosterHeight = (float) (numberFieldPosterHeight.getValue() / rate);
546 if (checkboxPosterSizeKeepAspectRatio.getState()) {
547 if (obj == numberFieldPosterWidth) {
548 if (srcRight != srcLeft) {
549 preferredPosterHeight = preferredPosterWidth
550 * (srcTop - srcBottom) / (srcRight - srcLeft);
553 if (obj == numberFieldPosterHeight) {
554 if (srcTop != srcBottom) {
555 preferredPosterWidth = preferredPosterHeight
556 * (srcRight - srcLeft) / (srcTop - srcBottom);
561 numberFieldPosterSize_setValue();
565 private void numberFieldPosterSize_setValue() {
566 double rate = listPosterSizeUnit.get(choicePosterSizeUnit
567 .getSelectedIndex());
568 numberFieldPosterWidth.setValue(posterWidth * rate);
569 numberFieldPosterHeight.setValue(posterHeight * rate);
572 private void choicePosterSizeUnit_add(String key, double value) {
573 choicePosterSizeUnit.add(key);
574 listPosterSizeUnit.add(value);
577 private void choicePosterSizeUnit_initialize() {
578 choicePosterSizeUnit.removeAll();
579 listPosterSizeUnit.clear();
580 choicePosterSizeUnit_add(Lib.getMessage("mm"), Lib.UNIT_POINT_MM);
581 choicePosterSizeUnit_add(Lib.getMessage("cm"), Lib.UNIT_POINT_CM);
582 choicePosterSizeUnit_add(Lib.getMessage("m"), Lib.UNIT_POINT_M);
583 choicePosterSizeUnit_add(Lib.getMessage("in"), Lib.UNIT_POINT_INCH);
584 choicePosterSizeUnit_add(Lib.getMessage("pt"), Lib.UNIT_POINT_POINT);
587 private void choicePosterSizeUnit_itemStateChanged() {
588 numberFieldPosterSize_setValue();
591 private void checkboxPosterSizeKeepAspectRatio_itemStateChanged() {
592 // revisePosterSize(0);
594 numberFieldPosterSize_setValue();
598 private void choicePaperSize_add(String key, PaperSize value) {
599 choicePaperSize.add(key);
600 listPaperSize.add(value);
603 private void choicePaperSize_initialize() {
604 choicePaperSize.removeAll();
605 listPaperSize.clear();
606 choicePaperSize_add(Lib.getMessage("A4"), PaperSize.A4);
607 choicePaperSize_add(Lib.getMessage("A3"), PaperSize.A3);
608 choicePaperSize_add(Lib.getMessage("B5"), PaperSize.B5);
609 choicePaperSize_add(Lib.getMessage("B4"), PaperSize.B4);
610 choicePaperSize_add(Lib.getMessage("Custom"), PaperSize.CUSTOM);
613 private void choicePaperSize_itemStateChanged() {
614 PaperSize size = listPaperSize.get(choicePaperSize.getSelectedIndex());
615 boolean custom = size.isCustom();
616 numberFieldPaperWidth.setEnabled(custom);
617 numberFieldPaperHeight.setEnabled(custom);
620 paperWidth = size.getHeight();
621 paperHeight = size.getWidth();
623 paperWidth = size.getWidth();
624 paperHeight = size.getHeight();
626 numberFieldPaperSize_setValue();
631 private void numberFieldPaperSize_actionPerformed(Object obj) {
632 double rate = listPaperSizeUnit.get(choicePaperSizeUnit
633 .getSelectedIndex());
634 paperWidth = (float) (numberFieldPaperWidth.getValue() / rate);
635 paperHeight = (float) (numberFieldPaperHeight.getValue() / rate);
636 numberFieldPaperSize_setValue();
640 private void numberFieldPaperSize_setValue() {
641 double rate = listPaperSizeUnit.get(choicePaperSizeUnit
642 .getSelectedIndex());
643 numberFieldPaperWidth.setValue(paperWidth * rate);
644 numberFieldPaperHeight.setValue(paperHeight * rate);
647 private void choicePaperSizeUnit_add(String key, double value) {
648 choicePaperSizeUnit.add(key);
649 listPaperSizeUnit.add(value);
652 private void choicePaperSizeUnit_initialize() {
653 choicePaperSizeUnit.removeAll();
654 listPaperSizeUnit.clear();
655 choicePaperSizeUnit_add(Lib.getMessage("mm"), Lib.UNIT_POINT_MM);
656 choicePaperSizeUnit_add(Lib.getMessage("cm"), Lib.UNIT_POINT_CM);
657 choicePaperSizeUnit_add(Lib.getMessage("m"), Lib.UNIT_POINT_M);
658 choicePaperSizeUnit_add(Lib.getMessage("in"), Lib.UNIT_POINT_INCH);
659 choicePaperSizeUnit_add(Lib.getMessage("pt"), Lib.UNIT_POINT_POINT);
662 private void choicePaperSizeUnit_itemStateChanged() {
663 numberFieldPaperSize_setValue();
666 private void numberFieldPaperMargin_actionPerformed(Object obj) {
667 double rate = listPaperMarginUnit.get(choicePaperMarginUnit
668 .getSelectedIndex());
669 paperMargin = (float) (numberFieldPaperMargin.getValue() / rate);
670 numberFieldPaperMargin_setValue();
674 private void numberFieldPaperMargin_setValue() {
675 double rate = listPaperMarginUnit.get(choicePaperMarginUnit
676 .getSelectedIndex());
677 numberFieldPaperMargin.setValue(paperMargin * rate);
680 private void choicePaperMarginUnit_add(String key, double value) {
681 choicePaperMarginUnit.add(key);
682 listPaperMarginUnit.add(value);
685 private void choicePaperMarginUnit_initialize() {
686 choicePaperMarginUnit.removeAll();
687 listPaperMarginUnit.clear();
688 choicePaperMarginUnit_add(Lib.getMessage("mm"), Lib.UNIT_POINT_MM);
689 choicePaperMarginUnit_add(Lib.getMessage("cm"), Lib.UNIT_POINT_CM);
690 choicePaperMarginUnit_add(Lib.getMessage("m"), Lib.UNIT_POINT_M);
691 choicePaperMarginUnit_add(Lib.getMessage("in"), Lib.UNIT_POINT_INCH);
692 choicePaperMarginUnit_add(Lib.getMessage("pt"), Lib.UNIT_POINT_POINT);
695 private void choicePaperMarginUnit_itemStateChanged() {
696 numberFieldPaperMargin_setValue();
699 private void checkboxPaperRotate_itemStateChanged() {
700 boolean paperRotated = checkboxPaperRotate.getState();
701 if (this.paperRotated != paperRotated) {
702 float a = this.paperWidth;
703 this.paperWidth = this.paperHeight;
704 this.paperHeight = a;
705 this.paperRotated = paperRotated;
706 numberFieldPaperSize_setValue();
711 private void buttonPaperOptimize_actionPerformed() {
712 optimizePaperRotated();
715 private void buttonOutput_actionPerformed() {
719 private void numberField_initialize(NumberField numberField) {
720 numberField.setColumns(7);
721 numberField.setDisplayDigit(2);
722 numberField.setUnitIncrement(0.1);
725 private void mainFrame_initializeComponents() {
726 this.setTitle(Lib.APP_LOWERTITLE);
727 this.setSize(800, 600);
728 this.setLocationRelativeTo(null);
729 this.addWindowListener(new WindowListener() {
730 public void windowActivated(WindowEvent e) {
733 public void windowClosed(WindowEvent e) {
736 public void windowClosing(WindowEvent e) {
740 public void windowDeactivated(WindowEvent e) {
743 public void windowDeiconified(WindowEvent e) {
746 public void windowIconified(WindowEvent e) {
749 public void windowOpened(WindowEvent e) {
750 buttonOutput.requestFocus();
754 MenuBar menuBar = new MenuBar();
755 Menu menuFile = new Menu(Lib.getMessage("File"));
756 MenuItem menuItemNewWindow = new MenuItem(Lib.getMessage("New"));
757 menuItemNewWindow.setShortcut(new MenuShortcut(KeyEvent.VK_N, false));
758 menuItemNewWindow.addActionListener(new ActionListener() {
759 public void actionPerformed(ActionEvent e) {
760 menuItemNewWindow_actionPerformed();
763 MenuItem menuItemOpenFile = new MenuItem(Lib.getMessage("Open") + "...");
764 menuItemOpenFile.setShortcut(new MenuShortcut(KeyEvent.VK_O, false));
765 menuItemOpenFile.addActionListener(new ActionListener() {
766 public void actionPerformed(ActionEvent e) {
767 menuItemOpenFile_actionPerformed();
770 MenuItem menuItemCloseWindow = new MenuItem(Lib.getMessage("Close"));
771 menuItemCloseWindow.setShortcut(new MenuShortcut(KeyEvent.VK_W, false));
772 menuItemCloseWindow.addActionListener(new ActionListener() {
773 public void actionPerformed(ActionEvent e) {
774 menuItemCloseWindow_actionPerformed();
777 MenuItem menuItemOutput = new MenuItem(Lib.getMessage("Output"));
778 menuItemOutput.addActionListener(new ActionListener() {
779 public void actionPerformed(ActionEvent e) {
780 menuItemOutput_actionPerformed();
784 labelSrcFile = new Label();
785 labelSrcFile.setText(Lib.getMessage("FileName"));
787 textFieldSrcFileName = new TextField();
788 textFieldSrcFileName.setEditable(false);
789 textFieldSrcFileName.setColumns(50);
791 labelSrcFileType = new Label();
793 buttonSrcFileChange = new Button();
794 buttonSrcFileChange.setLabel(Lib.getMessage("Change") + "...");
795 buttonSrcFileChange.addActionListener(new ActionListener() {
796 public void actionPerformed(ActionEvent e) {
797 buttonSrcFileChange_actionPerformed();
801 labelSrcPageNum = new Label();
802 labelSrcPageNum.setText(Lib.getMessage("PageNum"));
804 choiceSrcPageNum = new Choice();
805 choiceSrcPageNum.setEnabled(false);
806 choiceSrcPageNum.addItemListener(new ItemListener() {
807 public void itemStateChanged(ItemEvent e) {
808 choiceSrcPageNum_itemStateChanged();
812 labelSrcImageSize = new Label();
813 labelSrcImageSize.setText(Lib.getMessage("ImageSize"));
815 numberFieldSrcImageWidth = new NumberField();
816 numberField_initialize(numberFieldSrcImageWidth);
817 numberFieldSrcImageWidth.setEnabled(false);
819 numberFieldSrcImageHeight = new NumberField();
820 numberField_initialize(numberFieldSrcImageHeight);
821 numberFieldSrcImageHeight.setEnabled(false);
823 choiceSrcImageSizeUnit = new Choice();
824 choiceSrcImageSizeUnit.setEnabled(false);
825 choiceSrcImageSizeUnit.addItemListener(new ItemListener() {
826 public void itemStateChanged(ItemEvent e) {
827 choiceSrcImageSizeUnit_itemStateChanged();
831 labelSrcRect = new Label();
832 labelSrcRect.setText(Lib.getMessage("SrcRect"));
834 checkboxSrcRectWholeOfPage = new Checkbox();
835 checkboxSrcRectWholeOfPage.setLabel(Lib.getMessage("WholeOfPage"));
836 checkboxSrcRectWholeOfPage.setEnabled(false);
837 checkboxSrcRectWholeOfPage.addItemListener(new ItemListener() {
838 public void itemStateChanged(ItemEvent e) {
839 checkboxSrcRectWholeOfPage_itemStateChanged();
843 numberFieldSrcLeft = new NumberField();
844 numberField_initialize(numberFieldSrcLeft);
845 numberFieldSrcLeft.setEnabled(false);
846 numberFieldSrcLeft.addActionListener(new ActionListener() {
847 public void actionPerformed(ActionEvent e) {
848 numberFieldSrcRect_actionPerformed(e.getSource());
852 numberFieldSrcBottom = new NumberField();
853 numberField_initialize(numberFieldSrcBottom);
854 numberFieldSrcBottom.setEnabled(false);
855 numberFieldSrcBottom.addActionListener(new ActionListener() {
856 public void actionPerformed(ActionEvent e) {
857 numberFieldSrcRect_actionPerformed(e.getSource());
861 numberFieldSrcRight = new NumberField();
862 numberField_initialize(numberFieldSrcRight);
863 numberFieldSrcRight.setEnabled(false);
864 numberFieldSrcRight.addActionListener(new ActionListener() {
865 public void actionPerformed(ActionEvent e) {
866 numberFieldSrcRect_actionPerformed(e.getSource());
870 numberFieldSrcTop = new NumberField();
871 numberField_initialize(numberFieldSrcTop);
872 numberFieldSrcTop.setEnabled(false);
873 numberFieldSrcTop.addActionListener(new ActionListener() {
874 public void actionPerformed(ActionEvent e) {
875 numberFieldSrcRect_actionPerformed(e.getSource());
879 choiceSrcRectUnit = new Choice();
880 choiceSrcRectUnit.setEnabled(false);
881 choiceSrcRectUnit.addItemListener(new ItemListener() {
882 public void itemStateChanged(ItemEvent e) {
883 choiceSrcRectUnit_itemStateChanged();
887 labelPosterSize = new Label();
888 labelPosterSize.setText(Lib.getMessage("PosterSize"));
890 choicePosterSize = new Choice();
891 choicePosterSize_initialize();
892 choicePosterSize.addItemListener(new ItemListener() {
893 public void itemStateChanged(ItemEvent e) {
894 choicePosterSize_itemStateChanged();
898 numberFieldPosterWidth = new NumberField();
899 numberField_initialize(numberFieldPosterWidth);
900 numberFieldPosterWidth.addActionListener(new ActionListener() {
901 public void actionPerformed(ActionEvent e) {
902 numberFieldPosterSize_actionPerformed(e.getSource());
906 numberFieldPosterHeight = new NumberField();
907 numberField_initialize(numberFieldPosterHeight);
908 numberFieldPosterHeight.addActionListener(new ActionListener() {
909 public void actionPerformed(ActionEvent e) {
910 numberFieldPosterSize_actionPerformed(e.getSource());
914 choicePosterSizeUnit = new Choice();
915 choicePosterSizeUnit_initialize();
916 choicePosterSizeUnit.addItemListener(new ItemListener() {
917 public void itemStateChanged(ItemEvent e) {
918 choicePosterSizeUnit_itemStateChanged();
922 checkboxPosterSizeKeepAspectRatio = new Checkbox();
923 checkboxPosterSizeKeepAspectRatio.setLabel(Lib
924 .getMessage("KeepAspectRatio"));
925 checkboxPosterSizeKeepAspectRatio.addItemListener(new ItemListener() {
926 public void itemStateChanged(ItemEvent e) {
927 checkboxPosterSizeKeepAspectRatio_itemStateChanged();
931 labelPaperSize = new Label();
932 labelPaperSize.setText(Lib.getMessage("PaperSize"));
934 choicePaperSize = new Choice();
935 choicePaperSize_initialize();
936 choicePaperSize.addItemListener(new ItemListener() {
937 public void itemStateChanged(ItemEvent e) {
938 choicePaperSize_itemStateChanged();
942 numberFieldPaperWidth = new NumberField();
943 numberField_initialize(numberFieldPaperWidth);
944 numberFieldPaperWidth.addActionListener(new ActionListener() {
945 public void actionPerformed(ActionEvent e) {
946 numberFieldPaperSize_actionPerformed(e.getSource());
950 numberFieldPaperHeight = new NumberField();
951 numberField_initialize(numberFieldPaperHeight);
952 numberFieldPaperHeight.addActionListener(new ActionListener() {
953 public void actionPerformed(ActionEvent e) {
954 numberFieldPaperSize_actionPerformed(e.getSource());
958 choicePaperSizeUnit = new Choice();
959 choicePaperSizeUnit_initialize();
960 choicePaperSizeUnit.addItemListener(new ItemListener() {
961 public void itemStateChanged(ItemEvent e) {
962 choicePaperSizeUnit_itemStateChanged();
966 labelPaperMargin = new Label();
967 labelPaperMargin.setText(Lib.getMessage("Margin"));
969 numberFieldPaperMargin = new NumberField();
970 numberField_initialize(numberFieldPaperMargin);
971 numberFieldPaperMargin.addActionListener(new ActionListener() {
972 public void actionPerformed(ActionEvent e) {
973 numberFieldPaperMargin_actionPerformed(e.getSource());
977 choicePaperMarginUnit = new Choice();
978 choicePaperMarginUnit_initialize();
979 choicePaperMarginUnit.addItemListener(new ItemListener() {
980 public void itemStateChanged(ItemEvent e) {
981 choicePaperMarginUnit_itemStateChanged();
985 checkboxPaperRotate = new Checkbox();
986 checkboxPaperRotate.setLabel(Lib.getMessage("RotatePaper"));
987 checkboxPaperRotate.addItemListener(new ItemListener() {
988 public void itemStateChanged(ItemEvent e) {
989 checkboxPaperRotate_itemStateChanged();
993 buttonPaperOptimize = new Button();
994 buttonPaperOptimize.setLabel(Lib.getMessage("Optimize"));
995 buttonPaperOptimize.setEnabled(false);
996 buttonPaperOptimize.addActionListener(new ActionListener() {
997 public void actionPerformed(ActionEvent e) {
998 buttonPaperOptimize_actionPerformed();
1002 labelPreview = new Label();
1003 labelPreview.setText(Lib.getMessage("Preview"));
1005 labelOutputPaperCount = new Label();
1006 labelOutputPaperCount.setText(Lib.getMessage("OutputPaperCount"));
1008 numberFieldOutputPaperCount = new NumberField();
1009 numberFieldOutputPaperCount.setColumns(7);
1010 numberFieldOutputPaperCount.setDisplayDigit(0);
1011 numberFieldOutputPaperCount.setEditable(false);
1013 canvasPreview = new CanvasPreview();
1014 canvasPreview.setMaximumSize(new Dimension(500, 400));
1015 canvasPreview.setMinimumSize(new Dimension(0, 0));
1016 canvasPreview.setPreferredSize(new Dimension(500, 200));
1018 labelOutputFileName = new Label();
1019 labelOutputFileName.setText(Lib.getMessage("OutputFileName"));
1021 textFieldOutputFileName = new TextField();
1022 textFieldOutputFileName.setColumns(40);
1024 labelMessage = new Label();
1026 buttonOutput = new Button();
1027 buttonOutput.setLabel(Lib.getMessage("Output"));
1028 buttonOutput.addActionListener(new ActionListener() {
1029 public void actionPerformed(ActionEvent e) {
1030 buttonOutput_actionPerformed();
1034 menuFile.add(menuItemNewWindow);
1035 menuFile.add(menuItemOpenFile);
1036 menuFile.addSeparator();
1037 menuFile.add(menuItemCloseWindow);
1038 menuFile.add(menuItemOutput);
1040 menuBar.add(menuFile);
1042 Panel panelSrcFile = new Panel();
1043 panelSrcFile.setLayout(new FlowLayout(FlowLayout.LEFT));
1044 panelSrcFile.add(labelSrcFile);
1045 panelSrcFile.add(textFieldSrcFileName);
1046 panelSrcFile.add(labelSrcFileType);
1047 panelSrcFile.add(buttonSrcFileChange);
1049 Panel panelSrc = new Panel();
1050 panelSrc.setLayout(new FlowLayout(FlowLayout.LEFT));
1051 panelSrc.add(labelSrcPageNum);
1052 panelSrc.add(choiceSrcPageNum);
1053 panelSrc.add(labelSrcImageSize);
1054 panelSrc.add(numberFieldSrcImageWidth);
1055 panelSrc.add(numberFieldSrcImageHeight);
1056 panelSrc.add(choiceSrcImageSizeUnit);
1058 Panel panelSrcRect = new Panel();
1059 panelSrcRect.setLayout(new FlowLayout(FlowLayout.LEFT));
1060 panelSrcRect.add(labelSrcRect);
1061 panelSrcRect.add(checkboxSrcRectWholeOfPage);
1062 panelSrcRect.add(numberFieldSrcLeft);
1063 panelSrcRect.add(numberFieldSrcBottom);
1064 panelSrcRect.add(numberFieldSrcRight);
1065 panelSrcRect.add(numberFieldSrcTop);
1066 panelSrcRect.add(choiceSrcRectUnit);
1068 Panel panelPosterSize = new Panel();
1069 panelPosterSize.setLayout(new FlowLayout(FlowLayout.LEFT));
1070 panelPosterSize.add(labelPosterSize);
1071 panelPosterSize.add(choicePosterSize);
1072 panelPosterSize.add(numberFieldPosterWidth);
1073 panelPosterSize.add(numberFieldPosterHeight);
1074 panelPosterSize.add(choicePosterSizeUnit);
1075 panelPosterSize.add(checkboxPosterSizeKeepAspectRatio);
1077 Panel panelPaperSize = new Panel();
1078 panelPaperSize.setLayout(new FlowLayout(FlowLayout.LEFT));
1079 panelPaperSize.add(labelPaperSize);
1080 panelPaperSize.add(choicePaperSize);
1081 panelPaperSize.add(numberFieldPaperWidth);
1082 panelPaperSize.add(numberFieldPaperHeight);
1083 panelPaperSize.add(choicePaperSizeUnit);
1084 panelPaperSize.add(labelPaperMargin);
1085 panelPaperSize.add(numberFieldPaperMargin);
1086 panelPaperSize.add(choicePaperMarginUnit);
1087 panelPaperSize.add(checkboxPaperRotate);
1088 panelPaperSize.add(buttonPaperOptimize);
1090 Panel panelPreviewText = new Panel();
1091 panelPreviewText.setLayout(new FlowLayout(FlowLayout.LEFT));
1092 panelPreviewText.add(labelPreview);
1093 panelPreviewText.add(labelOutputPaperCount);
1094 panelPreviewText.add(numberFieldOutputPaperCount);
1096 Panel panelOutputFileName = new Panel();
1097 panelOutputFileName.setLayout(new FlowLayout(FlowLayout.LEFT));
1098 panelOutputFileName.add(labelOutputFileName);
1099 panelOutputFileName.add(textFieldOutputFileName);
1101 Panel panelOutput = new Panel();
1102 panelOutput.setLayout(new FlowLayout(FlowLayout.RIGHT));
1103 panelOutput.add(labelMessage);
1104 panelOutput.add(buttonOutput);
1106 this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
1107 this.setMenuBar(menuBar);
1108 this.add(panelSrcFile);
1110 this.add(panelSrcRect);
1111 this.add(panelPosterSize);
1112 this.add(panelPaperSize);
1113 this.add(panelPreviewText);
1114 this.add(canvasPreview);
1115 this.add(panelOutputFileName);
1116 this.add(panelOutput);
1119 private void mainFrame_initialize() {
1121 this.preferredPosterWidth = PaperSize.A1.getWidth();
1122 this.preferredPosterHeight = PaperSize.A1.getHeight();
1124 numberFieldPosterSize_setValue();
1125 choicePosterSize.select(choicePosterSize.getItemCount() - 1);
1126 choicePosterSize_itemStateChanged();
1127 checkboxPosterSizeKeepAspectRatio.setState(true);
1128 checkboxPosterSizeKeepAspectRatio_itemStateChanged();
1130 choicePaperSize.select(0);
1131 choicePaperSize_itemStateChanged();
1132 choicePaperSizeUnit.select(0);
1133 choicePaperSizeUnit_itemStateChanged();
1134 this.paperMargin = 72;
1135 numberFieldPaperMargin_setValue();
1136 choicePaperMarginUnit.select(0);
1137 choicePaperMarginUnit_itemStateChanged();
1139 textFieldOutputFileName.setText(String.format("{pwd}%s%s_{input}_{date}.pdf", File.separator, Lib.APP_LOWERTITLE));
1144 public MainFrame() {
1146 mainFrame_initializeComponents();
1147 mainFrame_initialize();