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