Source code: com/arranger/jarl/shell/views/RenderedImageViewContext.java
1 package com.arranger.jarl.shell.views;
2
3 import com.arranger.jarl.shell.models.JarlContextModel;
4 import com.arranger.jarl.ui.ExampleFileFilter;
5 import com.arranger.jarl.util.IOUtil;
6 import com.arranger.jarl.util.ImageUtil;
7
8 import javax.swing.*;
9 import java.awt.*;
10 import java.awt.event.*;
11 import java.io.File;
12
13 /**
14 * RenderedImageViewContext created on Apr 19, 2003
15 */
16 public class RenderedImageViewContext {
17 protected ImageLabel m_imageLabel;
18 protected JarlShellFrame m_jarlShellFrame;
19 protected RenderedImageView m_renderedImageView;
20
21 public RenderedImageViewContext(JarlContextModel jarlContextModel, RenderedImageView renderedImageView) {
22 m_renderedImageView = renderedImageView;
23 Dimension dimension = jarlContextModel.getDimension();
24 m_imageLabel = new ImageLabel(jarlContextModel.getRenderedImage(), dimension);
25 m_jarlShellFrame = JarlShellFrame.createJarlShellFrame(renderedImageView.getJarlShell(), m_imageLabel,
26 (int) dimension.getWidth() + RenderedImageView.SPACING_WIDTH,
27 (int) dimension.getHeight() + RenderedImageView.SPACING_HEIGHT,
28 jarlContextModel.getCurrentConfig() + " frame: " + jarlContextModel.getCurrentFrame());
29
30 addMenu();
31
32 m_jarlShellFrame.setResizable(false);
33 m_jarlShellFrame.addWindowClosingListener(new JarlShellFrame.JarlShellFrameClosingListener() {
34 public void onClosing() {
35 m_jarlShellFrame = null;
36 m_renderedImageView.detach(RenderedImageViewContext.this);
37 }
38 });
39
40 m_jarlShellFrame.packAndShow();
41 }
42
43 public void updateImage(JarlContextModel jarlContextModel) {
44 m_imageLabel.m_image = jarlContextModel.getRenderedImage();
45 m_jarlShellFrame.setTitle(jarlContextModel.getCurrentConfig() + " frame: " + jarlContextModel.getCurrentFrame());
46 m_jarlShellFrame.repaint();
47 }
48
49 protected void saveImage() throws Exception {
50 if (m_imageLabel == null) {
51 return;
52 }
53
54 JarlContextModel jarlContextModel = (JarlContextModel) m_renderedImageView.getJarlShell().getModel(JarlContextModel.class.getName());
55 String dir = jarlContextModel.getCurrentOutputDir();
56
57 JFileChooser jFileChooser = new JFileChooser();
58 ExampleFileFilter filter = new ExampleFileFilter();
59 filter.addExtension("bmp");
60 filter.addExtension("jpg");
61 filter.setDescription("jarl bitmap images");
62 jFileChooser.setFileFilter(filter);
63
64 if (dir != null) {
65 jFileChooser.setCurrentDirectory(new File(dir));
66 }
67
68 if (jFileChooser.showSaveDialog(m_jarlShellFrame.getComponent()) == JFileChooser.APPROVE_OPTION) {
69 File currentDir = jFileChooser.getCurrentDirectory();
70 jarlContextModel.setCurrentOutputDir(currentDir.getAbsolutePath());
71 m_renderedImageView.getJarlShell().saveModels();
72 String destFile = jFileChooser.getSelectedFile().getAbsolutePath();
73 boolean isBMP = true;
74 if (destFile.endsWith(".jpg")) {
75 isBMP = false;
76 }
77
78 if (isBMP && !destFile.endsWith(".bmp")) {
79 destFile += ".bmp";
80 }
81
82 File dest = new File(destFile);
83 if (isBMP) {
84 IOUtil.save(m_imageLabel.m_image, dest);
85 } else {
86 IOUtil.saveJPEG(m_imageLabel.m_image, dest);
87 }
88 }
89 }
90
91 protected void addMenu() {
92 JMenuBar menuBar = new JMenuBar();
93 menuBar.setVisible(true);
94 JMenu menu = new JMenu("Image");
95 menu.setMnemonic(KeyEvent.VK_I);
96 menuBar.add(menu);
97
98 JMenuItem menuItem = new JMenuItem("Save Image", KeyEvent.VK_S);
99 menuItem.addActionListener(new ActionListener() {
100 public void actionPerformed(ActionEvent e) {
101 try {
102 saveImage();
103 } catch (Exception e1) {
104 e1.printStackTrace();
105 }
106 }
107 });
108 menu.add(menuItem);
109 menuItem = new JMenuItem("Close Image", KeyEvent.VK_C);
110 menuItem.addActionListener(new ActionListener() {
111 public void actionPerformed(ActionEvent e) {
112 if (m_jarlShellFrame != null) {
113 m_jarlShellFrame.dispose();
114 m_jarlShellFrame = null;
115 m_renderedImageView.detach(RenderedImageViewContext.this);
116 }
117 }
118 });
119 menu.add(menuItem);
120 m_jarlShellFrame.setJMenuBar(menuBar);
121 }
122
123 protected static class ImageLabel extends JLabel {
124 protected Image m_image;
125 protected Dimension m_dimension;
126
127 public ImageLabel(Image image, Dimension dimension) {
128 m_image = image;
129 setDimension(dimension);
130 }
131
132 protected void setDimension(Dimension dimension) {
133 m_dimension = dimension;
134 setPreferredSize(m_dimension);
135 setMinimumSize(m_dimension);
136 setMaximumSize(m_dimension);
137 }
138
139 protected void paintComponent(Graphics g) {
140 ImageUtil.overlayTransparentImage(g, m_image);
141 }
142 }
143 }