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 public File getSrcFile() {
124 public boolean checkFileLoaded() {
125 return this.ic != null;
128 private void simulateOutput() {
129 // 設定値が変更されたときに canvasPreview 等を更新する
131 labelMessage.setText("");
133 PdfGenerator.CreatePosterArgs args = new PdfGenerator.CreatePosterArgs();
134 args.setSrcRect(srcLeft, srcBottom, srcRight, srcTop);
135 args.setPosterSize(posterWidth, posterHeight);
136 args.setPaperSize(paperWidth, paperHeight);
137 args.setMargin(paperMargin, paperMargin, paperMargin, paperMargin);
139 int outputPaperCount = PdfGenerator.simulateOutputPaperCount(args);
140 numberFieldOutputPaperCount.setValue(outputPaperCount);
142 canvasPreview.setArgs(args);
143 canvasPreview.repaint();
146 private void optimizePaperRotated() {
147 // 出力枚数が少なくなるように印刷用紙の向きを更新する
149 PdfGenerator.CreatePosterArgs args1 = new PdfGenerator.CreatePosterArgs();
150 args1.setSrcRect(srcLeft, srcBottom, srcRight, srcTop);
151 args1.setPosterSize(posterWidth, posterHeight);
152 args1.setPaperSize(paperWidth, paperHeight);
153 args1.setMargin(paperMargin, paperMargin, paperMargin, paperMargin);
154 int outputPaperCount1 = PdfGenerator.simulateOutputPaperCount(args1);
155 if (outputPaperCount1 < 0) {
157 outputPaperCount1 = Integer.MAX_VALUE;
160 PdfGenerator.CreatePosterArgs args2 = new PdfGenerator.CreatePosterArgs();
161 args2.setSrcRect(srcLeft, srcBottom, srcRight, srcTop);
162 args2.setPosterSize(posterWidth, posterHeight);
163 args2.setPaperSize(paperHeight, paperWidth); // 印刷用紙を回転する
164 args2.setMargin(paperMargin, paperMargin, paperMargin, paperMargin);
165 int outputPaperCount2 = PdfGenerator.simulateOutputPaperCount(args2);
166 if (outputPaperCount2 < 0) {
167 outputPaperCount2 = Integer.MAX_VALUE;
170 if (outputPaperCount1 > outputPaperCount2
171 || (outputPaperCount1 == outputPaperCount2 && paperRotated)) {
173 checkboxPaperRotate.setState(!paperRotated);
174 checkboxPaperRotate_itemStateChanged();
178 public void outputPdf() {
179 if (!checkFileLoaded()) {
180 labelMessage.setText(Lib.getMessage("Text.NoInputFiles"));
185 PdfGenerator.CreatePosterArgs args = new PdfGenerator.CreatePosterArgs();
186 args.setSrcRect(srcLeft, srcBottom, srcRight, srcTop);
187 args.setPosterSize(posterWidth, posterHeight);
188 args.setPaperSize(paperWidth, paperHeight);
189 args.setMargin(paperMargin, paperMargin, paperMargin, paperMargin);
190 String outputFileName = generateFileName(textFieldOutputFileName
193 ByteArrayOutputStream baos = new ByteArrayOutputStream();
194 PdfGenerator.createPoster(ic, args, baos);
196 FileOutputStream fos = new FileOutputStream(outputFileName);
200 labelMessage.setText(String.format(
201 Lib.getMessage("Text.Saved"), outputFileName));
202 } catch (IOException ex) {
203 labelMessage.setText(String.format(Lib
204 .getMessage("Text.FailedWrite"), outputFileName));
206 } catch (Exception ex) {
207 labelMessage.setText(Lib.getMessage("Text.FailedGenerate"));
212 private void changePageSuccess(ImageContainer ic) {
215 choiceSrcPageNum.select(ic.getPageNum() - 1);
217 srcImageWidth = ic.getImageWidth();
218 srcImageHeight = ic.getImageHeight();
219 numberFieldSrcImageSize_setValue();
221 choiceSrcImageSizeUnit.setEnabled(true);
222 checkboxSrcRectWholeOfPage.setEnabled(true);
223 choiceSrcRectUnit.setEnabled(true);
224 buttonPaperOptimize.setEnabled(true);
226 canvasPreview.setImageContainer(ic);
230 public void changePage(int pageNum) {
235 ImageContainer ic = new ImageContainer(fc, pageNum);
236 changePageSuccess(ic);
237 } catch (Exception ex) {
243 private void changeFileSuccess(File file, FileContainer fc) {
248 textFieldSrcFileName.setText(file.getCanonicalPath());
249 } catch (Exception ex) {
250 textFieldSrcFileName.setText(file.getAbsolutePath());
253 labelSrcFileType.setText(Lib.getFileTypeName(fc.getFileType()));
255 choiceSrcPageNum.removeAll();
256 for (int i = 1; i <= fc.getPageCount(); i++) {
257 choiceSrcPageNum.add(Integer.toString(i));
259 choiceSrcPageNum.select(0);
260 choiceSrcPageNum.setEnabled(fc.getFileType() == Lib.FT_PDF);
262 choiceSrcImageSizeUnit_initialize(fc.getFileType());
263 choiceSrcImageSizeUnit.select(0);
265 choiceSrcRectUnit_initialize(fc.getFileType());
266 choiceSrcRectUnit.select(0);
268 changePage(choiceSrcPageNum.getSelectedIndex() + 1);
270 checkboxSrcRectWholeOfPage.setState(true);
271 checkboxSrcRectWholeOfPage_itemStateChanged();
274 public void changeFile(File file) {
276 FileContainer fc = new FileContainer(file);
277 changeFileSuccess(file, fc);
278 } catch (Exception ex) {
281 filePath = file.getCanonicalPath();
282 } catch (Exception ex2) {
283 filePath = file.getAbsolutePath();
285 labelMessage.setText(String.format(Lib.getMessage("Text.FailedOpen"), filePath));
290 private void updatePosterSize() {
291 // preferredPosterSize から posterSize を更新する
292 // KeepAspectRatio なら srcRect を拡大して preferredPosterSize に入る最大の Size を
294 posterWidth = preferredPosterWidth;
295 posterHeight = preferredPosterHeight;
296 if (checkboxPosterSizeKeepAspectRatio.getState()) {
297 if ((srcRight - srcLeft) * preferredPosterHeight > (srcTop - srcBottom)
298 * preferredPosterWidth) {
300 if (srcRight != srcLeft) {
301 posterHeight = posterWidth * (srcTop - srcBottom)
302 / (srcRight - srcLeft);
305 if (srcTop != srcBottom) {
306 posterWidth = posterHeight * (srcRight - srcLeft)
307 / (srcTop - srcBottom);
314 * private void revisePosterSize(int direction) { // direction は固定する方向
315 * 0->Width, 1->Height boolean changed = false; if
316 * (checkboxPosterSizeKeepAspectRatio.getState()) { switch (direction) {
317 * case 0: if (srcRight != srcLeft) { posterHeight = posterWidth * (srcTop -
318 * srcBottom) / (srcRight - srcLeft); changed = true; } break; case 1: if
319 * (srcTop != srcBottom) { posterWidth = posterHeight * (srcRight - srcLeft) /
320 * (srcTop - srcBottom); changed = true; } break; default: break; } } if
321 * (changed) { numberFieldPosterSize_setValue(); simulateOutput(); } }
324 private File showFileLoadDialog()
326 FileDialog fd = new FileDialog(this, Lib.getMessage("App.LowerTitle"), FileDialog.LOAD);
329 if (fd.getFile() == null) {
332 return new File(fd.getDirectory(), fd.getFile());
336 private void menuItemNewWindow_actionPerformed() {
337 Program.createFrame();
340 private void menuItemOpenFile_actionPerformed() {
341 File file = showFileLoadDialog();
343 switch(Lib.getOS()) {
345 MainFrame frame = Program.getSameFileFrame(file);
347 frame.setVisible(true);
348 } else if (!checkFileLoaded()) {
351 Program.createFrame(file, false);
361 private void menuItemCloseWindow_actionPerformed() {
365 private void menuItemOutput_actionPerformed() {
369 private void menuItemExit_actionPerformed() {
373 private void buttonSrcFileChange_actionPerformed() {
374 File file = showFileLoadDialog();
376 switch(Lib.getOS()) {
378 MainFrame frame = Program.getSameFileFrame(file);
380 frame.setVisible(true);
392 private void choiceSrcPageNum_itemStateChanged() {
393 int pageNum = choiceSrcPageNum.getSelectedIndex() + 1;
394 if (this.ic.getPageNum() != pageNum) {
399 private void numberFieldSrcImageSize_setValue() {
400 double rate = listSrcImageSizeUnit.get(choiceSrcImageSizeUnit
401 .getSelectedIndex());
402 numberFieldSrcImageWidth.setValue(srcImageWidth * rate);
403 numberFieldSrcImageHeight.setValue(srcImageHeight * rate);
406 private void choiceSrcImageSizeUnit_add(String key, double value) {
407 choiceSrcImageSizeUnit.add(key);
408 listSrcImageSizeUnit.add(value);
411 private void choiceSrcImageSizeUnit_initialize(int fileType) {
412 choiceSrcImageSizeUnit.removeAll();
413 listSrcImageSizeUnit.clear();
416 choiceSrcImageSizeUnit_add(Lib.getMessage("Str.MM"), Lib.UNIT_POINT_MM);
417 choiceSrcImageSizeUnit_add(Lib.getMessage("Str.CM"), Lib.UNIT_POINT_CM);
418 choiceSrcImageSizeUnit_add(Lib.getMessage("Str.M"), Lib.UNIT_POINT_M);
419 choiceSrcImageSizeUnit_add(Lib.getMessage("Str.Inch"),
420 Lib.UNIT_POINT_INCH);
421 choiceSrcImageSizeUnit_add(Lib.getMessage("Str.Point"),
422 Lib.UNIT_POINT_POINT);
428 case Lib.FT_JPEG2000:
432 case Lib.FT_OTHERIMAGE:
433 choiceSrcImageSizeUnit_add(Lib.getMessage("Str.Pixel"),
434 Lib.UNIT_PIXEL_PIXEL);
441 private void choiceSrcImageSizeUnit_itemStateChanged() {
442 numberFieldSrcImageSize_setValue();
445 private void checkboxSrcRectWholeOfPage_itemStateChanged() {
446 boolean b = checkboxSrcRectWholeOfPage.getState();
447 numberFieldSrcLeft.setEnabled(!b);
448 numberFieldSrcTop.setEnabled(!b);
449 numberFieldSrcRight.setEnabled(!b);
450 numberFieldSrcBottom.setEnabled(!b);
454 srcRight = srcImageWidth;
455 srcTop = srcImageHeight;
456 numberFieldSrcRect_setValue();
458 numberFieldPosterSize_setValue();
459 // revisePosterSize(0);
464 private void numberFieldSrcRect_actionPerformed(Object obj) {
465 double rate = listSrcRectUnit.get(choiceSrcRectUnit.getSelectedIndex());
466 srcLeft = (float) (numberFieldSrcLeft.getValue() / rate);
467 srcTop = (float) (numberFieldSrcTop.getValue() / rate);
468 srcRight = (float) (numberFieldSrcRight.getValue() / rate);
469 srcBottom = (float) (numberFieldSrcBottom.getValue() / rate);
470 numberFieldSrcRect_setValue();
472 numberFieldPosterSize_setValue();
473 // revisePosterSize(0);
477 private void numberFieldSrcRect_setValue() {
478 if (listSrcRectUnit.isEmpty()) {
481 double rate = listSrcRectUnit.get(choiceSrcRectUnit.getSelectedIndex());
482 numberFieldSrcLeft.setValue(srcLeft * rate);
483 numberFieldSrcTop.setValue(srcTop * rate);
484 numberFieldSrcRight.setValue(srcRight * rate);
485 numberFieldSrcBottom.setValue(srcBottom * rate);
488 private void choiceSrcRectUnit_add(String key, double value) {
489 choiceSrcRectUnit.add(key);
490 listSrcRectUnit.add(value);
493 private void choiceSrcRectUnit_initialize(int fileType) {
494 choiceSrcRectUnit.removeAll();
495 listSrcRectUnit.clear();
498 choiceSrcRectUnit_add(Lib.getMessage("Str.MM"), Lib.UNIT_POINT_MM);
499 choiceSrcRectUnit_add(Lib.getMessage("Str.CM"), Lib.UNIT_POINT_CM);
500 choiceSrcRectUnit_add(Lib.getMessage("Str.M"), Lib.UNIT_POINT_M);
501 choiceSrcRectUnit_add(Lib.getMessage("Str.Inch"), Lib.UNIT_POINT_INCH);
502 choiceSrcRectUnit_add(Lib.getMessage("Str.Point"), Lib.UNIT_POINT_POINT);
508 case Lib.FT_JPEG2000:
512 case Lib.FT_OTHERIMAGE:
513 choiceSrcRectUnit_add(Lib.getMessage("Str.Pixel"), Lib.UNIT_PIXEL_PIXEL);
520 private void choiceSrcRectUnit_itemStateChanged() {
521 numberFieldSrcRect_setValue();
524 private void choicePosterSize_add(String key, PaperSize value) {
525 choicePosterSize.add(key);
526 listPosterSize.add(value);
529 private void choicePosterSize_initialize() {
530 choicePosterSize.removeAll();
531 listPosterSize.clear();
533 choicePosterSize_add(Lib.getMessage("Str.A0"), PaperSize.A0);
534 choicePosterSize_add(Lib.getMessage("Str.A1"), PaperSize.A1);
535 choicePosterSize_add(Lib.getMessage("Str.A2"), PaperSize.A2);
536 choicePosterSize_add(Lib.getMessage("Str.A3"), PaperSize.A3);
537 choicePosterSize_add(Lib.getMessage("Str.A4"), PaperSize.A4);
538 choicePosterSize_add(Lib.getMessage("Str.A5"), PaperSize.A5);
539 choicePosterSize_add(Lib.getMessage("Str.A6"), PaperSize.A6);
540 choicePosterSize_add(Lib.getMessage("Str.B0"), PaperSize.B0);
541 choicePosterSize_add(Lib.getMessage("Str.B1"), PaperSize.B1);
542 choicePosterSize_add(Lib.getMessage("Str.B2"), PaperSize.B2);
543 choicePosterSize_add(Lib.getMessage("Str.B3"), PaperSize.B3);
544 choicePosterSize_add(Lib.getMessage("Str.B4"), PaperSize.B4);
545 choicePosterSize_add(Lib.getMessage("Str.B5"), PaperSize.B5);
546 choicePosterSize_add(Lib.getMessage("Str.B6"), PaperSize.B6);
547 choicePosterSize_add(Lib.getMessage("Str.Custom"), PaperSize.CUSTOM);
550 private void choicePosterSize_itemStateChanged() {
551 PaperSize size = listPosterSize
552 .get(choicePosterSize.getSelectedIndex());
553 boolean custom = size.isCustom();
554 numberFieldPosterWidth.setEnabled(custom);
555 numberFieldPosterHeight.setEnabled(custom);
556 // checkboxPosterSizeKeepAspectRatio.setEnabled(custom);
558 // checkboxPosterSizeKeepAspectRatio.setState(false);
559 // posterWidth = size.getWidth();
560 // posterHeight = size.getHeight();
561 // numberFieldPosterSize_setValue();
565 preferredPosterWidth = size.getWidth();
566 preferredPosterHeight = size.getHeight();
568 numberFieldPosterSize_setValue();
573 private void numberFieldPosterSize_actionPerformed(Object obj) {
574 double rate = listPosterSizeUnit.get(choicePosterSizeUnit
575 .getSelectedIndex());
576 // posterWidth = (float) (numberFieldPosterWidth.getValue() / rate);
577 // posterHeight = (float) (numberFieldPosterHeight.getValue() / rate);
578 // if (obj == numberFieldPosterWidth) {
579 // revisePosterSize(0);
581 // if (obj == numberFieldPosterHeight) {
582 // revisePosterSize(1);
584 preferredPosterWidth = (float) (numberFieldPosterWidth.getValue() / rate);
585 preferredPosterHeight = (float) (numberFieldPosterHeight.getValue() / rate);
586 if (checkboxPosterSizeKeepAspectRatio.getState()) {
587 if (obj == numberFieldPosterWidth) {
588 if (srcRight != srcLeft) {
589 preferredPosterHeight = preferredPosterWidth
590 * (srcTop - srcBottom) / (srcRight - srcLeft);
593 if (obj == numberFieldPosterHeight) {
594 if (srcTop != srcBottom) {
595 preferredPosterWidth = preferredPosterHeight
596 * (srcRight - srcLeft) / (srcTop - srcBottom);
601 numberFieldPosterSize_setValue();
605 private void numberFieldPosterSize_setValue() {
606 double rate = listPosterSizeUnit.get(choicePosterSizeUnit
607 .getSelectedIndex());
608 numberFieldPosterWidth.setValue(posterWidth * rate);
609 numberFieldPosterHeight.setValue(posterHeight * rate);
612 private void choicePosterSizeUnit_add(String key, double value) {
613 choicePosterSizeUnit.add(key);
614 listPosterSizeUnit.add(value);
617 private void choicePosterSizeUnit_initialize() {
618 choicePosterSizeUnit.removeAll();
619 listPosterSizeUnit.clear();
620 choicePosterSizeUnit_add(Lib.getMessage("Str.MM"), Lib.UNIT_POINT_MM);
621 choicePosterSizeUnit_add(Lib.getMessage("Str.CM"), Lib.UNIT_POINT_CM);
622 choicePosterSizeUnit_add(Lib.getMessage("Str.M"), Lib.UNIT_POINT_M);
623 choicePosterSizeUnit_add(Lib.getMessage("Str.Inch"), Lib.UNIT_POINT_INCH);
624 choicePosterSizeUnit_add(Lib.getMessage("Str.Point"), Lib.UNIT_POINT_POINT);
627 private void choicePosterSizeUnit_itemStateChanged() {
628 numberFieldPosterSize_setValue();
631 private void checkboxPosterSizeKeepAspectRatio_itemStateChanged() {
632 // revisePosterSize(0);
634 numberFieldPosterSize_setValue();
638 private void choicePaperSize_add(String key, PaperSize value) {
639 choicePaperSize.add(key);
640 listPaperSize.add(value);
643 private void choicePaperSize_initialize() {
644 choicePaperSize.removeAll();
645 listPaperSize.clear();
646 choicePaperSize_add(Lib.getMessage("Str.A4"), PaperSize.A4);
647 choicePaperSize_add(Lib.getMessage("Str.A3"), PaperSize.A3);
648 choicePaperSize_add(Lib.getMessage("Str.B5"), PaperSize.B5);
649 choicePaperSize_add(Lib.getMessage("Str.B4"), PaperSize.B4);
650 choicePaperSize_add(Lib.getMessage("Str.Custom"), PaperSize.CUSTOM);
653 private void choicePaperSize_itemStateChanged() {
654 PaperSize size = listPaperSize.get(choicePaperSize.getSelectedIndex());
655 boolean custom = size.isCustom();
656 numberFieldPaperWidth.setEnabled(custom);
657 numberFieldPaperHeight.setEnabled(custom);
660 paperWidth = size.getHeight();
661 paperHeight = size.getWidth();
663 paperWidth = size.getWidth();
664 paperHeight = size.getHeight();
666 numberFieldPaperSize_setValue();
671 private void numberFieldPaperSize_actionPerformed(Object obj) {
672 double rate = listPaperSizeUnit.get(choicePaperSizeUnit
673 .getSelectedIndex());
674 paperWidth = (float) (numberFieldPaperWidth.getValue() / rate);
675 paperHeight = (float) (numberFieldPaperHeight.getValue() / rate);
676 numberFieldPaperSize_setValue();
680 private void numberFieldPaperSize_setValue() {
681 double rate = listPaperSizeUnit.get(choicePaperSizeUnit
682 .getSelectedIndex());
683 numberFieldPaperWidth.setValue(paperWidth * rate);
684 numberFieldPaperHeight.setValue(paperHeight * rate);
687 private void choicePaperSizeUnit_add(String key, double value) {
688 choicePaperSizeUnit.add(key);
689 listPaperSizeUnit.add(value);
692 private void choicePaperSizeUnit_initialize() {
693 choicePaperSizeUnit.removeAll();
694 listPaperSizeUnit.clear();
695 choicePaperSizeUnit_add(Lib.getMessage("Str.MM"), Lib.UNIT_POINT_MM);
696 choicePaperSizeUnit_add(Lib.getMessage("Str.CM"), Lib.UNIT_POINT_CM);
697 choicePaperSizeUnit_add(Lib.getMessage("Str.M"), Lib.UNIT_POINT_M);
698 choicePaperSizeUnit_add(Lib.getMessage("Str.Inch"), Lib.UNIT_POINT_INCH);
699 choicePaperSizeUnit_add(Lib.getMessage("Str.Point"), Lib.UNIT_POINT_POINT);
702 private void choicePaperSizeUnit_itemStateChanged() {
703 numberFieldPaperSize_setValue();
706 private void numberFieldPaperMargin_actionPerformed(Object obj) {
707 double rate = listPaperMarginUnit.get(choicePaperMarginUnit
708 .getSelectedIndex());
709 paperMargin = (float) (numberFieldPaperMargin.getValue() / rate);
710 numberFieldPaperMargin_setValue();
714 private void numberFieldPaperMargin_setValue() {
715 double rate = listPaperMarginUnit.get(choicePaperMarginUnit
716 .getSelectedIndex());
717 numberFieldPaperMargin.setValue(paperMargin * rate);
720 private void choicePaperMarginUnit_add(String key, double value) {
721 choicePaperMarginUnit.add(key);
722 listPaperMarginUnit.add(value);
725 private void choicePaperMarginUnit_initialize() {
726 choicePaperMarginUnit.removeAll();
727 listPaperMarginUnit.clear();
728 choicePaperMarginUnit_add(Lib.getMessage("Str.MM"), Lib.UNIT_POINT_MM);
729 choicePaperMarginUnit_add(Lib.getMessage("Str.CM"), Lib.UNIT_POINT_CM);
730 choicePaperMarginUnit_add(Lib.getMessage("Str.M"), Lib.UNIT_POINT_M);
731 choicePaperMarginUnit_add(Lib.getMessage("Str.Inch"), Lib.UNIT_POINT_INCH);
732 choicePaperMarginUnit_add(Lib.getMessage("Str.Point"), Lib.UNIT_POINT_POINT);
735 private void choicePaperMarginUnit_itemStateChanged() {
736 numberFieldPaperMargin_setValue();
739 private void checkboxPaperRotate_itemStateChanged() {
740 boolean paperRotated = checkboxPaperRotate.getState();
741 if (this.paperRotated != paperRotated) {
742 float a = this.paperWidth;
743 this.paperWidth = this.paperHeight;
744 this.paperHeight = a;
745 this.paperRotated = paperRotated;
746 numberFieldPaperSize_setValue();
751 private void buttonPaperOptimize_actionPerformed() {
752 optimizePaperRotated();
755 private void buttonOutput_actionPerformed() {
759 private void numberField_initialize(NumberField numberField) {
760 numberField.setColumns(7);
761 numberField.setDisplayDigit(2);
762 numberField.setUnitIncrement(0.1);
765 private void mainFrame_initializeComponents() {
766 this.setTitle(Lib.getMessage("App.LowerTitle"));
767 this.setSize(800, 600);
768 this.setLocationRelativeTo(null);
769 this.addWindowListener(new WindowListener() {
770 public void windowActivated(WindowEvent e) {
773 public void windowClosed(WindowEvent e) {
776 public void windowClosing(WindowEvent e) {
780 public void windowDeactivated(WindowEvent e) {
783 public void windowDeiconified(WindowEvent e) {
786 public void windowIconified(WindowEvent e) {
789 public void windowOpened(WindowEvent e) {
790 buttonOutput.requestFocus();
794 MenuBar menuBar = new MenuBar();
795 Menu menuFile = new Menu(Lib.getMessage(Lib.getOS() == Lib.OS_WIN ? "menuFile.Label.Win" : Lib.getOS() == Lib.OS_MAC ? "menuFile.Label.Mac" : "menuFile.Label"));
796 MenuItem menuItemNewWindow = new MenuItem(Lib.getMessage(Lib.getOS() == Lib.OS_WIN ? "menuItemNewWindow.Label.Win" : Lib.getOS() == Lib.OS_MAC ? "menuItemNewWindow.Label.Mac" : "menuItemNewWindow.Label"));
797 menuItemNewWindow.setShortcut(new MenuShortcut(KeyEvent.VK_N, false));
798 menuItemNewWindow.addActionListener(new ActionListener() {
799 public void actionPerformed(ActionEvent e) {
800 menuItemNewWindow_actionPerformed();
803 MenuItem menuItemOpenFile = new MenuItem(Lib.getMessage(Lib.getOS() == Lib.OS_WIN ? "menuItemOpenFile.Label.Win" : Lib.getOS() == Lib.OS_MAC ? "menuItemOpenFile.Label.Mac" : "menuItemOpenFile.Label") + "...");
804 menuItemOpenFile.setShortcut(new MenuShortcut(KeyEvent.VK_O, false));
805 menuItemOpenFile.addActionListener(new ActionListener() {
806 public void actionPerformed(ActionEvent e) {
807 menuItemOpenFile_actionPerformed();
810 MenuItem menuItemCloseWindow = new MenuItem(Lib.getMessage(Lib.getOS() == Lib.OS_WIN ? "menuItemCloseWindow.Label.Win" : Lib.getOS() == Lib.OS_MAC ? "menuItemCloseWindow.Label.Mac" : "menuItemCloseWindow.Label"));
811 menuItemCloseWindow.setShortcut(new MenuShortcut(KeyEvent.VK_W, false));
812 menuItemCloseWindow.addActionListener(new ActionListener() {
813 public void actionPerformed(ActionEvent e) {
814 menuItemCloseWindow_actionPerformed();
817 MenuItem menuItemOutput = new MenuItem(Lib.getMessage(Lib.getOS() == Lib.OS_WIN ? "menuItemOutput.Label.Win" : Lib.getOS() == Lib.OS_MAC ? "menuItemOutput.Label.Mac" : "menuItemOutput.Label"));
818 menuItemOutput.addActionListener(new ActionListener() {
819 public void actionPerformed(ActionEvent e) {
820 menuItemOutput_actionPerformed();
823 MenuItem menuItemExit = new MenuItem(Lib.getMessage(Lib.getOS() == Lib.OS_WIN ? "menuItemExit.Label.Win" : Lib.getOS() == Lib.OS_MAC ? "menuItemExit.Label.Mac" : "menuItemExit.Label"));
824 menuItemExit.addActionListener(new ActionListener() {
825 public void actionPerformed(ActionEvent e) {
826 menuItemExit_actionPerformed();
830 labelSrcFile = new Label();
831 labelSrcFile.setText(Lib.getMessage("labelSrcFile.Text"));
833 textFieldSrcFileName = new TextField();
834 textFieldSrcFileName.setEditable(false);
835 textFieldSrcFileName.setColumns(50);
837 labelSrcFileType = new Label();
839 buttonSrcFileChange = new Button();
840 buttonSrcFileChange.setLabel(Lib.getMessage("buttonSrcFileChange.Label") + "...");
841 buttonSrcFileChange.addActionListener(new ActionListener() {
842 public void actionPerformed(ActionEvent e) {
843 buttonSrcFileChange_actionPerformed();
847 labelSrcPageNum = new Label();
848 labelSrcPageNum.setText(Lib.getMessage("labelSrcPageNum.Text"));
850 choiceSrcPageNum = new Choice();
851 choiceSrcPageNum.setEnabled(false);
852 choiceSrcPageNum.addItemListener(new ItemListener() {
853 public void itemStateChanged(ItemEvent e) {
854 choiceSrcPageNum_itemStateChanged();
858 labelSrcImageSize = new Label();
859 labelSrcImageSize.setText(Lib.getMessage("labelSrcImageSize.Text"));
861 numberFieldSrcImageWidth = new NumberField();
862 numberField_initialize(numberFieldSrcImageWidth);
863 numberFieldSrcImageWidth.setEnabled(false);
865 numberFieldSrcImageHeight = new NumberField();
866 numberField_initialize(numberFieldSrcImageHeight);
867 numberFieldSrcImageHeight.setEnabled(false);
869 choiceSrcImageSizeUnit = new Choice();
870 choiceSrcImageSizeUnit.setEnabled(false);
871 choiceSrcImageSizeUnit.addItemListener(new ItemListener() {
872 public void itemStateChanged(ItemEvent e) {
873 choiceSrcImageSizeUnit_itemStateChanged();
877 labelSrcRect = new Label();
878 labelSrcRect.setText(Lib.getMessage("labelSrcRect.Text"));
880 checkboxSrcRectWholeOfPage = new Checkbox();
881 checkboxSrcRectWholeOfPage.setLabel(Lib.getMessage("checkboxSrcRectWholeOfPage.Label"));
882 checkboxSrcRectWholeOfPage.setEnabled(false);
883 checkboxSrcRectWholeOfPage.addItemListener(new ItemListener() {
884 public void itemStateChanged(ItemEvent e) {
885 checkboxSrcRectWholeOfPage_itemStateChanged();
889 numberFieldSrcLeft = new NumberField();
890 numberField_initialize(numberFieldSrcLeft);
891 numberFieldSrcLeft.setEnabled(false);
892 numberFieldSrcLeft.addActionListener(new ActionListener() {
893 public void actionPerformed(ActionEvent e) {
894 numberFieldSrcRect_actionPerformed(e.getSource());
898 numberFieldSrcBottom = new NumberField();
899 numberField_initialize(numberFieldSrcBottom);
900 numberFieldSrcBottom.setEnabled(false);
901 numberFieldSrcBottom.addActionListener(new ActionListener() {
902 public void actionPerformed(ActionEvent e) {
903 numberFieldSrcRect_actionPerformed(e.getSource());
907 numberFieldSrcRight = new NumberField();
908 numberField_initialize(numberFieldSrcRight);
909 numberFieldSrcRight.setEnabled(false);
910 numberFieldSrcRight.addActionListener(new ActionListener() {
911 public void actionPerformed(ActionEvent e) {
912 numberFieldSrcRect_actionPerformed(e.getSource());
916 numberFieldSrcTop = new NumberField();
917 numberField_initialize(numberFieldSrcTop);
918 numberFieldSrcTop.setEnabled(false);
919 numberFieldSrcTop.addActionListener(new ActionListener() {
920 public void actionPerformed(ActionEvent e) {
921 numberFieldSrcRect_actionPerformed(e.getSource());
925 choiceSrcRectUnit = new Choice();
926 choiceSrcRectUnit.setEnabled(false);
927 choiceSrcRectUnit.addItemListener(new ItemListener() {
928 public void itemStateChanged(ItemEvent e) {
929 choiceSrcRectUnit_itemStateChanged();
933 labelPosterSize = new Label();
934 labelPosterSize.setText(Lib.getMessage("labelPosterSize.Text"));
936 choicePosterSize = new Choice();
937 choicePosterSize_initialize();
938 choicePosterSize.addItemListener(new ItemListener() {
939 public void itemStateChanged(ItemEvent e) {
940 choicePosterSize_itemStateChanged();
944 numberFieldPosterWidth = new NumberField();
945 numberField_initialize(numberFieldPosterWidth);
946 numberFieldPosterWidth.addActionListener(new ActionListener() {
947 public void actionPerformed(ActionEvent e) {
948 numberFieldPosterSize_actionPerformed(e.getSource());
952 numberFieldPosterHeight = new NumberField();
953 numberField_initialize(numberFieldPosterHeight);
954 numberFieldPosterHeight.addActionListener(new ActionListener() {
955 public void actionPerformed(ActionEvent e) {
956 numberFieldPosterSize_actionPerformed(e.getSource());
960 choicePosterSizeUnit = new Choice();
961 choicePosterSizeUnit_initialize();
962 choicePosterSizeUnit.addItemListener(new ItemListener() {
963 public void itemStateChanged(ItemEvent e) {
964 choicePosterSizeUnit_itemStateChanged();
968 checkboxPosterSizeKeepAspectRatio = new Checkbox();
969 checkboxPosterSizeKeepAspectRatio.setLabel(Lib
970 .getMessage("checkboxPosterSizeKeepAspectRatio.Label"));
971 checkboxPosterSizeKeepAspectRatio.addItemListener(new ItemListener() {
972 public void itemStateChanged(ItemEvent e) {
973 checkboxPosterSizeKeepAspectRatio_itemStateChanged();
977 labelPaperSize = new Label();
978 labelPaperSize.setText(Lib.getMessage("labelPaperSize.Text"));
980 choicePaperSize = new Choice();
981 choicePaperSize_initialize();
982 choicePaperSize.addItemListener(new ItemListener() {
983 public void itemStateChanged(ItemEvent e) {
984 choicePaperSize_itemStateChanged();
988 numberFieldPaperWidth = new NumberField();
989 numberField_initialize(numberFieldPaperWidth);
990 numberFieldPaperWidth.addActionListener(new ActionListener() {
991 public void actionPerformed(ActionEvent e) {
992 numberFieldPaperSize_actionPerformed(e.getSource());
996 numberFieldPaperHeight = new NumberField();
997 numberField_initialize(numberFieldPaperHeight);
998 numberFieldPaperHeight.addActionListener(new ActionListener() {
999 public void actionPerformed(ActionEvent e) {
1000 numberFieldPaperSize_actionPerformed(e.getSource());
1004 choicePaperSizeUnit = new Choice();
1005 choicePaperSizeUnit_initialize();
1006 choicePaperSizeUnit.addItemListener(new ItemListener() {
1007 public void itemStateChanged(ItemEvent e) {
1008 choicePaperSizeUnit_itemStateChanged();
1012 labelPaperMargin = new Label();
1013 labelPaperMargin.setText(Lib.getMessage("labelPaperMargin.Text"));
1015 numberFieldPaperMargin = new NumberField();
1016 numberField_initialize(numberFieldPaperMargin);
1017 numberFieldPaperMargin.addActionListener(new ActionListener() {
1018 public void actionPerformed(ActionEvent e) {
1019 numberFieldPaperMargin_actionPerformed(e.getSource());
1023 choicePaperMarginUnit = new Choice();
1024 choicePaperMarginUnit_initialize();
1025 choicePaperMarginUnit.addItemListener(new ItemListener() {
1026 public void itemStateChanged(ItemEvent e) {
1027 choicePaperMarginUnit_itemStateChanged();
1031 checkboxPaperRotate = new Checkbox();
1032 checkboxPaperRotate.setLabel(Lib.getMessage("checkboxPaperRotate.Label"));
1033 checkboxPaperRotate.addItemListener(new ItemListener() {
1034 public void itemStateChanged(ItemEvent e) {
1035 checkboxPaperRotate_itemStateChanged();
1039 buttonPaperOptimize = new Button();
1040 buttonPaperOptimize.setLabel(Lib.getMessage("buttonPaperOptimize.Label"));
1041 buttonPaperOptimize.setEnabled(false);
1042 buttonPaperOptimize.addActionListener(new ActionListener() {
1043 public void actionPerformed(ActionEvent e) {
1044 buttonPaperOptimize_actionPerformed();
1048 labelPreview = new Label();
1049 labelPreview.setText(Lib.getMessage("labelPreview.Text"));
1051 labelOutputPaperCount = new Label();
1052 labelOutputPaperCount.setText(Lib.getMessage("labelOutputPaperCount.Text"));
1054 numberFieldOutputPaperCount = new NumberField();
1055 numberFieldOutputPaperCount.setColumns(7);
1056 numberFieldOutputPaperCount.setDisplayDigit(0);
1057 numberFieldOutputPaperCount.setEditable(false);
1059 canvasPreview = new CanvasPreview();
1060 canvasPreview.setMaximumSize(new Dimension(500, 400));
1061 canvasPreview.setMinimumSize(new Dimension(0, 0));
1062 canvasPreview.setPreferredSize(new Dimension(500, 200));
1064 labelOutputFileName = new Label();
1065 labelOutputFileName.setText(Lib.getMessage("labelOutputFileName.Text"));
1067 textFieldOutputFileName = new TextField();
1068 textFieldOutputFileName.setColumns(40);
1070 labelMessage = new Label();
1072 buttonOutput = new Button();
1073 buttonOutput.setLabel(Lib.getMessage("buttonOutput.Label"));
1074 buttonOutput.addActionListener(new ActionListener() {
1075 public void actionPerformed(ActionEvent e) {
1076 buttonOutput_actionPerformed();
1080 if(Lib.getOS() == Lib.OS_MAC) {
1081 menuFile.add(menuItemNewWindow);
1082 menuFile.add(menuItemOpenFile);
1083 menuFile.addSeparator();
1084 menuFile.add(menuItemCloseWindow);
1085 menuFile.add(menuItemOutput);
1087 menuFile.add(menuItemNewWindow);
1088 menuFile.add(menuItemOpenFile);
1089 menuFile.add(menuItemCloseWindow);
1090 menuFile.addSeparator();
1091 menuFile.add(menuItemOutput);
1092 menuFile.addSeparator();
1093 menuFile.add(menuItemExit);
1096 menuBar.add(menuFile);
1098 Panel panelSrcFile = new Panel();
1099 panelSrcFile.setLayout(new FlowLayout(FlowLayout.LEFT));
1100 panelSrcFile.add(labelSrcFile);
1101 panelSrcFile.add(textFieldSrcFileName);
1102 panelSrcFile.add(labelSrcFileType);
1103 panelSrcFile.add(buttonSrcFileChange);
1105 Panel panelSrc = new Panel();
1106 panelSrc.setLayout(new FlowLayout(FlowLayout.LEFT));
1107 panelSrc.add(labelSrcPageNum);
1108 panelSrc.add(choiceSrcPageNum);
1109 panelSrc.add(labelSrcImageSize);
1110 panelSrc.add(numberFieldSrcImageWidth);
1111 panelSrc.add(numberFieldSrcImageHeight);
1112 panelSrc.add(choiceSrcImageSizeUnit);
1114 Panel panelSrcRect = new Panel();
1115 panelSrcRect.setLayout(new FlowLayout(FlowLayout.LEFT));
1116 panelSrcRect.add(labelSrcRect);
1117 panelSrcRect.add(checkboxSrcRectWholeOfPage);
1118 panelSrcRect.add(numberFieldSrcLeft);
1119 panelSrcRect.add(numberFieldSrcBottom);
1120 panelSrcRect.add(numberFieldSrcRight);
1121 panelSrcRect.add(numberFieldSrcTop);
1122 panelSrcRect.add(choiceSrcRectUnit);
1124 Panel panelPosterSize = new Panel();
1125 panelPosterSize.setLayout(new FlowLayout(FlowLayout.LEFT));
1126 panelPosterSize.add(labelPosterSize);
1127 panelPosterSize.add(choicePosterSize);
1128 panelPosterSize.add(numberFieldPosterWidth);
1129 panelPosterSize.add(numberFieldPosterHeight);
1130 panelPosterSize.add(choicePosterSizeUnit);
1131 panelPosterSize.add(checkboxPosterSizeKeepAspectRatio);
1133 Panel panelPaperSize = new Panel();
1134 panelPaperSize.setLayout(new FlowLayout(FlowLayout.LEFT));
1135 panelPaperSize.add(labelPaperSize);
1136 panelPaperSize.add(choicePaperSize);
1137 panelPaperSize.add(numberFieldPaperWidth);
1138 panelPaperSize.add(numberFieldPaperHeight);
1139 panelPaperSize.add(choicePaperSizeUnit);
1140 panelPaperSize.add(labelPaperMargin);
1141 panelPaperSize.add(numberFieldPaperMargin);
1142 panelPaperSize.add(choicePaperMarginUnit);
1143 panelPaperSize.add(checkboxPaperRotate);
1144 panelPaperSize.add(buttonPaperOptimize);
1146 Panel panelPreviewText = new Panel();
1147 panelPreviewText.setLayout(new FlowLayout(FlowLayout.LEFT));
1148 panelPreviewText.add(labelPreview);
1149 panelPreviewText.add(labelOutputPaperCount);
1150 panelPreviewText.add(numberFieldOutputPaperCount);
1152 Panel panelOutputFileName = new Panel();
1153 panelOutputFileName.setLayout(new FlowLayout(FlowLayout.LEFT));
1154 panelOutputFileName.add(labelOutputFileName);
1155 panelOutputFileName.add(textFieldOutputFileName);
1157 Panel panelOutput = new Panel();
1158 switch(Lib.getOS()) {
1160 panelOutput.setLayout(new FlowLayout(FlowLayout.RIGHT));
1161 panelOutput.add(labelMessage);
1162 panelOutput.add(buttonOutput);
1165 panelOutput.setLayout(new FlowLayout(FlowLayout.LEFT));
1166 panelOutput.add(buttonOutput);
1167 panelOutput.add(labelMessage);
1171 this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
1172 this.setMenuBar(menuBar);
1173 this.add(panelSrcFile);
1175 this.add(panelSrcRect);
1176 this.add(panelPosterSize);
1177 this.add(panelPaperSize);
1178 this.add(panelPreviewText);
1179 this.add(canvasPreview);
1180 this.add(panelOutputFileName);
1181 this.add(panelOutput);
1184 private void mainFrame_initialize() {
1186 this.preferredPosterWidth = PaperSize.A1.getWidth();
1187 this.preferredPosterHeight = PaperSize.A1.getHeight();
1189 numberFieldPosterSize_setValue();
1190 choicePosterSize.select(choicePosterSize.getItemCount() - 1);
1191 choicePosterSize_itemStateChanged();
1192 checkboxPosterSizeKeepAspectRatio.setState(true);
1193 checkboxPosterSizeKeepAspectRatio_itemStateChanged();
1195 choicePaperSize.select(0);
1196 choicePaperSize_itemStateChanged();
1197 choicePaperSizeUnit.select(0);
1198 choicePaperSizeUnit_itemStateChanged();
1199 this.paperMargin = 72;
1200 numberFieldPaperMargin_setValue();
1201 choicePaperMarginUnit.select(0);
1202 choicePaperMarginUnit_itemStateChanged();
1204 textFieldOutputFileName.setText(String.format("{pwd}%s%s_{input}_{date}.pdf", File.separator, Lib.getMessage("App.LowerTitle")));
1209 public MainFrame() {
1211 mainFrame_initializeComponents();
1212 mainFrame_initialize();