summaryrefslogtreecommitdiff
path: root/source/com/c2kernel/gui/tabs/outcome/form/field/ImageEditField.java
blob: 716a07341ed64ca213236263f41c1c68d31844cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package com.c2kernel.gui.tabs.outcome.form.field;

import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Array;

import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;

import org.apache.xerces.impl.dv.util.Base64;

import com.c2kernel.utils.Logger;

public class ImageEditField extends StringEditField {

	JLabel imageLabel;

	Box imagePanel;

	JButton browseButton;

	String encodedImage;

	static JFileChooser chooser = new JFileChooser();
	static {
		chooser.addChoosableFileFilter(new javax.swing.filechooser.FileFilter() {
					@Override
					public String getDescription() {
						return "Image Files";
					}

					@Override
					public boolean accept(File f) {
						return (f.isDirectory() || (f.isFile() && (f.getName()
								.endsWith(".gif")
								|| f.getName().endsWith(".jpg")
								|| f.getName().endsWith(".jpeg")
								|| f.getName().endsWith(".png"))));
					}
				});
	}

	public ImageEditField() {
		super();
		imageLabel = new JLabel();
		imagePanel = Box.createVerticalBox();
		browseButton = new JButton("Browse");
		browseButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int returnVal = chooser.showOpenDialog(null);
				if (returnVal == JFileChooser.APPROVE_OPTION) {
					File file = chooser.getSelectedFile();
					try {
						FileInputStream fis = new FileInputStream(file);
						byte[] bArray = (byte[]) Array.newInstance(byte.class,
								(int) file.length());
						fis.read(bArray, 0, (int) file.length());
						fis.close();

						ImageIcon newImage = new ImageIcon(Toolkit
								.getDefaultToolkit().createImage(bArray));
						imageLabel.setIcon(newImage);
						encodedImage = Base64.encode(bArray);
					} catch (Exception ex) {
						Logger.exceptionDialog(ex);
					}
				}
			}
		});
		imagePanel.add(imageLabel);
		imagePanel.add(Box.createVerticalStrut(5));
		imagePanel.add(browseButton);
	}

	@Override
	public String getDefaultValue() {
		return "";
	}

	@Override
	public Component getControl() {
		return imagePanel;
	}

	@Override
	public String getText() {
		return encodedImage == null ? "" : encodedImage;
	}

	@Override
	public void setText(String text) {
		encodedImage = text;
		if (text != null && text.length() > 0) {
			byte[] decodedImage = Base64.decode(encodedImage);
			imageLabel.setIcon(new ImageIcon(Toolkit.getDefaultToolkit()
					.createImage(decodedImage)));
		}
	}

	@Override
	public void setEditable(boolean editable) {
		browseButton.setVisible(false);
	}
}