Initial revision
[old-projects.git] / ekit / com / hexidec / ekit / component / ImageDialog.java
CommitLineData
c2da4d40
JL
1package com.hexidec.ekit.component;\r
2\r
3import com.hexidec.ekit.EkitCore;\r
4import java.awt.Insets;\r
5import java.awt.Container;\r
6import java.awt.Cursor;\r
7import java.awt.Dimension;\r
8import java.awt.event.ActionListener;\r
9import java.awt.FlowLayout;\r
10import javax.swing.border.*;\r
11import javax.swing.BorderFactory;\r
12import javax.swing.Box;\r
13import javax.swing.BoxLayout;\r
14import javax.swing.event.ListSelectionListener;\r
15import javax.swing.event.ListSelectionEvent;\r
16import javax.swing.JButton;\r
17import javax.swing.JDialog;\r
18import javax.swing.JEditorPane;\r
19import javax.swing.JLabel;\r
20import javax.swing.JList;\r
21import javax.swing.JPanel;\r
22import javax.swing.JScrollPane;\r
23import javax.swing.JTextField;\r
24import javax.swing.JTextPane;\r
25import javax.swing.ListSelectionModel;\r
26import javax.swing.SwingConstants;\r
27import javax.swing.text.html.HTML;\r
28import javax.swing.text.html.HTMLDocument;\r
29import javax.swing.text.html.HTMLEditorKit;\r
30import javax.swing.WindowConstants;\r
31\r
32public class ImageDialog extends JDialog implements ActionListener\r
33{\r
34 private final String[]Borders = new String[] { "none", "solid", "dotted", "dashed", "double", "groove",\r
35 "ridge", "inset", "outset" };\r
36 private String[]BorderColors = new String[] { "aqua", "black", "blue", "fuschia", "gray",\r
37 "green", "lime", "maroon", "navy", "olive",\r
38 "purple", "red", "silver", "teal", "white", "yellow" };\r
39 private String[]BorderSizes = new String[] { "none", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };\r
40 private final String[]Wraps = new String[] { "none", "left", "right", "top", "middle", "bottom" };\r
41 private EkitCore ParentEkit;\r
42 private ExtendedHTMLEditorKit ImageHtmlKit;\r
43 private HTMLDocument ImageHtmlDoc;\r
44 private JList WrapList;\r
45 private JList BorderList;\r
46 private JList BorderSizeList;\r
47 private JList BorderColorList;\r
48 private JList ImageList;\r
49 private JTextField ImageAltText;\r
50 private JTextField ImageWidth;\r
51 private JTextField ImageHeight;\r
52 private JEditorPane PreviewPane;\r
53 private String ImageDir;\r
54 private String[]Images;\r
55 private String PreviewImage;\r
56 private String SelectedImage;\r
57\r
58 public ImageDialog(EkitCore parentEkit, String imageDir, String[] imageList, String title, boolean modal)\r
59 {\r
60 super(parentEkit.getFrame(), title, modal);\r
61 ImageDir = imageDir;\r
62 Images = imageList;\r
63 ParentEkit = parentEkit;\r
64 SelectedImage = null;\r
65 init();\r
66 }\r
67\r
68 public void actionPerformed(java.awt.event.ActionEvent e)\r
69 {\r
70 if(e.getActionCommand().equals("apply"))\r
71 {\r
72 ListSelectionModel sm = ImageList.getSelectionModel();\r
73 if(sm.isSelectionEmpty())\r
74 {\r
75 SimpleInfoDialog sidAbout = new SimpleInfoDialog(ParentEkit.getFrame(), "Error", true, "No image selected", SimpleInfoDialog.ERROR);\r
76 ImageList.requestFocus();\r
77 }\r
78 else\r
79 {\r
80 if(validateControls())\r
81 {\r
82 previewSelectedImage();\r
83 }\r
84 }\r
85 } \r
86 if(e.getActionCommand().equals("save"))\r
87 {\r
88 ListSelectionModel sm = ImageList.getSelectionModel();\r
89 if(sm.isSelectionEmpty())\r
90 {\r
91 SimpleInfoDialog sidAbout = new SimpleInfoDialog(ParentEkit.getFrame(), "Error", true, "No image selected", SimpleInfoDialog.ERROR);\r
92 ImageList.requestFocus();\r
93 }\r
94 else\r
95 {\r
96 if(validateControls())\r
97 {\r
98 previewSelectedImage();\r
99 SelectedImage = PreviewImage;\r
100 hide();\r
101 }\r
102 }\r
103 }\r
104 else if(e.getActionCommand().equals("cancel"))\r
105 {\r
106 hide();\r
107 }\r
108 }\r
109\r
110 public void init()\r
111 {\r
112 SelectedImage="";\r
113 Container contentPane = getContentPane();\r
114 contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));\r
115 //setBounds(100,100,500,300);\r
116 setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);\r
117\r
118 ImageList = new JList(Images);\r
119 ImageList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
120 ImageList.clearSelection();\r
121 ListSelectionModel lsm = ImageList.getSelectionModel();\r
122\r
123 /* Create the editor kit, document, and stylesheet */\r
124 PreviewPane = new JEditorPane();\r
125 PreviewPane.setEditable(false);\r
126 ImageHtmlKit = new ExtendedHTMLEditorKit();\r
127 ImageHtmlDoc = (HTMLDocument)(ImageHtmlKit.createDefaultDocument());\r
128 ImageHtmlKit.setDefaultCursor(new Cursor(Cursor.TEXT_CURSOR));\r
129 PreviewPane.setCaretPosition(0);\r
130 //PreviewPane.getDocument().addDocumentListener(this);\r
131 //StyleSheet styleSheet = ImageHtmlDoc.getStyleSheet();\r
132 //ImageStyleSheet = styleSheet;\r
133 lsm.addListSelectionListener(new ListSelectionListener() \r
134 {\r
135 public void valueChanged(ListSelectionEvent e)\r
136 {\r
137 if(!e.getValueIsAdjusting() && validateControls())\r
138 {\r
139 previewSelectedImage();\r
140 }\r
141 }\r
142 \r
143 });\r
144\r
145 JScrollPane imageScrollPane = new JScrollPane(ImageList);\r
146 imageScrollPane.setPreferredSize(new Dimension(200,250));\r
147 imageScrollPane.setMaximumSize(new Dimension(200,250));\r
148 imageScrollPane.setAlignmentX(LEFT_ALIGNMENT);\r
149 JPanel centerPanel = new JPanel();\r
150 centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.X_AXIS));\r
151 centerPanel.add(imageScrollPane);\r
152 centerPanel.setBorder(BorderFactory.createTitledBorder("Server Images"));\r
153\r
154 /* Set up the text pane */\r
155 PreviewPane.setEditorKit(ImageHtmlKit);\r
156 PreviewPane.setDocument(ImageHtmlDoc);\r
157 PreviewPane.setMargin(new Insets(4, 4, 4, 4));\r
158 JScrollPane previewViewport = new JScrollPane(PreviewPane);\r
159 previewViewport.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);\r
160 previewViewport.setPreferredSize(new Dimension(250,250));\r
161 centerPanel.add(previewViewport); \r
162\r
163 JPanel controlsPanel = new JPanel();\r
164 controlsPanel.setLayout(new BoxLayout(controlsPanel, BoxLayout.Y_AXIS));\r
165 JPanel altPanel = new JPanel();\r
166 altPanel.setLayout(new BoxLayout(altPanel, BoxLayout.X_AXIS));\r
167 altPanel.add(Box.createHorizontalStrut(10));\r
168 JLabel imageAltTextLabel = new JLabel("Alternate Text:", SwingConstants.LEFT); \r
169 altPanel.add(imageAltTextLabel);\r
170\r
171 ImageAltText = new JTextField("");\r
172 ImageAltText.addActionListener(this);\r
173 ImageAltText.setPreferredSize(new Dimension(300,25));\r
174 ImageAltText.setMaximumSize(new Dimension(600,25));\r
175 altPanel.add(ImageAltText);\r
176 altPanel.add(Box.createHorizontalStrut(10));\r
177 controlsPanel.add(altPanel);\r
178\r
179 controlsPanel.add(Box.createVerticalStrut(5));\r
180\r
181 JPanel dimPanel = new JPanel();\r
182 dimPanel.setLayout(new BoxLayout(dimPanel, BoxLayout.X_AXIS));\r
183 dimPanel.add(Box.createHorizontalStrut(10));\r
184 JLabel imageWidthLabel = new JLabel("Width:", SwingConstants.LEFT); \r
185 dimPanel.add(imageWidthLabel);\r
186 ImageWidth = new JTextField("");\r
187 ImageWidth.setPreferredSize(new Dimension(40,25));\r
188 ImageWidth.setMaximumSize(new Dimension(40,25));\r
189 dimPanel.add(ImageWidth);\r
190 JLabel imageWidthPixels = new JLabel("pix", SwingConstants.LEFT); \r
191 imageWidthPixels.setPreferredSize(new Dimension(20,10));\r
192 dimPanel.add(imageWidthPixels);\r
193 dimPanel.add(Box.createHorizontalStrut(10));\r
194 JLabel imageHeightLabel = new JLabel("Height:", SwingConstants.LEFT); \r
195 dimPanel.add(imageHeightLabel);\r
196 ImageHeight = new JTextField("");\r
197 ImageHeight.setPreferredSize(new Dimension(40,25));\r
198 ImageHeight.setMaximumSize(new Dimension(40,25));\r
199 dimPanel.add(ImageHeight);\r
200 JLabel imageHeightPixels = new JLabel("pix", SwingConstants.LEFT); \r
201 imageHeightPixels.setPreferredSize(new Dimension(20,10));\r
202 dimPanel.add(imageHeightPixels);\r
203 dimPanel.add(Box.createHorizontalStrut(10));\r
204\r
205 JLabel wrapLabel = new JLabel("Wrap:", SwingConstants.LEFT);\r
206 dimPanel.add(wrapLabel);\r
207 WrapList = new JList(Wraps);\r
208 WrapList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
209 WrapList.getSelectionModel().setSelectionInterval(0,0);\r
210 JScrollPane wrapScrollPane = new JScrollPane(WrapList);\r
211 wrapScrollPane.setAlignmentX(LEFT_ALIGNMENT);\r
212 wrapScrollPane.setPreferredSize(new Dimension(80,40));\r
213 wrapScrollPane.setMaximumSize(new Dimension(80,100));\r
214 dimPanel.add(wrapScrollPane);\r
215 controlsPanel.add(dimPanel);\r
216\r
217 //JPanel borderPanel = new JPanel();\r
218 //JLabel borderStyleLabel = new JLabel("Style:", SwingConstants.LEFT);\r
219 //borderPanel.add(borderStyleLabel);\r
220 //BorderList = new JList(Borders);\r
221 //BorderList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
222 //BorderList.getSelectionModel().setSelectionInterval(0,0);\r
223 //JScrollPane borderScrollPane = new JScrollPane(BorderList);\r
224 //borderScrollPane.setAlignmentX(LEFT_ALIGNMENT);\r
225 //borderScrollPane.setPreferredSize(new Dimension(80,40));\r
226 //borderScrollPane.setMaximumSize(new Dimension(80,100));\r
227 //borderPanel.add(borderScrollPane);\r
228 //borderPanel.add(Box.createHorizontalStrut(5));\r
229\r
230 dimPanel.add(Box.createHorizontalStrut(5));\r
231 JLabel borderSizeLabel = new JLabel("Border Size:", SwingConstants.LEFT);\r
232 dimPanel.add(borderSizeLabel);\r
233 BorderSizeList = new JList(BorderSizes);\r
234 BorderSizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
235 BorderSizeList.getSelectionModel().setSelectionInterval(0,0);\r
236 JScrollPane borderSizeScrollPane = new JScrollPane(BorderSizeList);\r
237 borderSizeScrollPane.setAlignmentX(LEFT_ALIGNMENT);\r
238 borderSizeScrollPane.setPreferredSize(new Dimension(80,40));\r
239 borderSizeScrollPane.setMaximumSize(new Dimension(80,100));\r
240 dimPanel.add(borderSizeScrollPane);\r
241 dimPanel.add(Box.createHorizontalStrut(10));\r
242 dimPanel.add(Box.createVerticalStrut(10));\r
243\r
244 //JLabel borderColorLabel = new JLabel("Color:", SwingConstants.LEFT);\r
245 //borderPanel.add(borderColorLabel);\r
246 //BorderColorList = new JList(BorderColors);\r
247 //BorderColorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
248 //JScrollPane borderColorScrollPane = new JScrollPane(BorderColorList);\r
249 //borderColorScrollPane.setAlignmentX(LEFT_ALIGNMENT);\r
250 //borderColorScrollPane.setPreferredSize(new Dimension(80,40));\r
251 //borderPanel.add(borderColorScrollPane);\r
252 //controlsPanel.add(borderPanel);\r
253\r
254 JPanel buttonPanel= new JPanel();\r
255 buttonPanel.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));\r
256 JButton applyButton = new JButton("Apply");\r
257 applyButton.setActionCommand("apply");\r
258 applyButton.addActionListener(this);\r
259\r
260 JButton saveButton = new JButton("Accept");\r
261 saveButton.setActionCommand("save");\r
262 saveButton.addActionListener(this);\r
263 JButton cancelButton = new JButton("Cancel");\r
264 cancelButton.setActionCommand("cancel");\r
265 cancelButton.addActionListener(this);\r
266\r
267 buttonPanel.add(applyButton);\r
268 buttonPanel.add(saveButton);\r
269 buttonPanel.add(cancelButton);\r
270\r
271 contentPane.add(centerPanel);\r
272 contentPane.add(controlsPanel);\r
273 contentPane.add(buttonPanel);\r
274 this.pack();\r
275 setVisible(true);\r
276 }\r
277\r
278 private void previewSelectedImage()\r
279 {\r
280 ListSelectionModel sm = ImageList.getSelectionModel();\r
281 if(!sm.isSelectionEmpty())\r
282 {\r
283 String theImage = Images[sm.getMinSelectionIndex()];\r
284 try\r
285 {\r
286 // Clear the preview area\r
287 PreviewPane.setText("");\r
288 StringBuffer attrString = new StringBuffer();\r
289 if(!ImageHeight.getText().equals(""))\r
290 {\r
291 attrString.append("HEIGHT=\"" + ImageHeight.getText() + "\" ");\r
292 }\r
293 if(!ImageWidth.getText().equals(""))\r
294 {\r
295 attrString.append("WIDTH=\"" + ImageWidth.getText() + "\" ");\r
296 }\r
297 if(!ImageAltText.getText().equals(""))\r
298 {\r
299 attrString.append("ALT=\"" + ImageAltText.getText() + "\" ");\r
300 }\r
301 if(!WrapList.getSelectionModel().isSelectionEmpty())\r
302 {\r
303 String theWrap = Wraps[WrapList.getSelectionModel().getMinSelectionIndex()];\r
304 if(!theWrap.equals("none"))\r
305 {\r
306 attrString.append("ALIGN=\"" + theWrap + "\" ");\r
307 }\r
308 }\r
309 //if(!BorderList.getSelectionModel().isSelectionEmpty())\r
310 //{\r
311 //String theBorder = Borders[BorderList.getSelectionModel().getMinSelectionIndex()];\r
312 //if(!theBorder.equals("none"))\r
313 //{\r
314 String borderSize = null;\r
315 String borderColor = null;\r
316 if(!BorderSizeList.getSelectionModel().isSelectionEmpty())\r
317 {\r
318 borderSize = BorderSizes[BorderSizeList.getSelectionModel().getMinSelectionIndex()];\r
319 if(!borderSize.equals("none"))\r
320 attrString.append("BORDER=" + borderSize);\r
321 }\r
322 else\r
323 {\r
324 borderSize = BorderSizes[0];\r
325 }\r
326 //if(!BorderColorList.getSelectionModel().isSelectionEmpty())\r
327 //{\r
328 // borderColor = BorderColors[BorderColorList.getSelectionModel().getMinSelectionIndex()]; \r
329 //}\r
330 //else\r
331 //{\r
332 // borderColor = "gray";\r
333 //}\r
334 //attrString.append("STYLE=\"border: " + borderColor + " " + borderSize + "px " + theBorder + "\"");\r
335 //}\r
336 //}\r
337\r
338 \r
339 PreviewImage = "<IMG SRC=" + ImageDir + "/" + theImage + " " + attrString.toString() + ">";\r
340 ImageHtmlKit.insertHTML(ImageHtmlDoc, 0, PreviewImage, 0, 0, HTML.Tag.IMG);\r
341 repaint();\r
342 }\r
343 catch(Exception ex)\r
344 {\r
345 System.err.println("Exception previewing image");\r
346 }\r
347 }\r
348 }\r
349\r
350 private boolean validateControls()\r
351 {\r
352 boolean result = true;\r
353\r
354 if(!ImageWidth.getText().equals(""))\r
355 {\r
356 try\r
357 {\r
358 Integer.parseInt(ImageWidth.getText());\r
359 }\r
360 catch (NumberFormatException e)\r
361 {\r
362 result = false;\r
363 SimpleInfoDialog sidAbout = new SimpleInfoDialog(ParentEkit.getFrame(), "Error", true, "Image Width is not an integer", SimpleInfoDialog.ERROR);\r
364 ImageWidth.requestFocus();\r
365 }\r
366 }\r
367 if( result && !ImageHeight.getText().equals(""))\r
368 {\r
369 try\r
370 {\r
371 Integer.parseInt(ImageHeight.getText());\r
372 }\r
373 catch (NumberFormatException e)\r
374 {\r
375 result = false;\r
376 SimpleInfoDialog sidAbout = new SimpleInfoDialog(ParentEkit.getFrame(), "Error", true, "Image Height is not an integer", SimpleInfoDialog.ERROR);\r
377 ImageHeight.requestFocus();\r
378 }\r
379 }\r
380\r
381 return result;\r
382 }\r
383\r
384 public String getSelectedImage()\r
385 {\r
386 return SelectedImage;\r
387 } \r
388}\r