2 GNU Lesser General Public License
5 Copyright (C) 2003 Howard Kistler & other contributors
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 package com
.hexidec
.ekit
.component
;
24 import com
.hexidec
.ekit
.EkitCore
;
25 import java
.awt
.Insets
;
26 import java
.awt
.Container
;
27 import java
.awt
.Cursor
;
28 import java
.awt
.Dimension
;
29 import java
.awt
.event
.ActionListener
;
30 import java
.awt
.FlowLayout
;
31 import javax
.swing
.border
.*;
32 import javax
.swing
.BorderFactory
;
33 import javax
.swing
.Box
;
34 import javax
.swing
.BoxLayout
;
35 import javax
.swing
.event
.ListSelectionListener
;
36 import javax
.swing
.event
.ListSelectionEvent
;
37 import javax
.swing
.JButton
;
38 import javax
.swing
.JDialog
;
39 import javax
.swing
.JEditorPane
;
40 import javax
.swing
.JLabel
;
41 import javax
.swing
.JList
;
42 import javax
.swing
.JPanel
;
43 import javax
.swing
.JScrollPane
;
44 import javax
.swing
.JTextField
;
45 import javax
.swing
.JTextPane
;
46 import javax
.swing
.ListSelectionModel
;
47 import javax
.swing
.SwingConstants
;
48 import javax
.swing
.text
.html
.HTML
;
49 import javax
.swing
.text
.html
.HTMLDocument
;
50 import javax
.swing
.text
.html
.HTMLEditorKit
;
51 import javax
.swing
.WindowConstants
;
53 public class ImageDialog
extends JDialog
implements ActionListener
55 private final String
[] Borders
= new String
[]
67 private String
[] BorderColors
= new String
[]
87 private String
[]BorderSizes
= new String
[]
101 private final String
[]Wraps
= new String
[]
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
;
124 private String ImageDir
;
125 private String
[] Images
;
126 private String PreviewImage
;
127 private String SelectedImage
;
129 public ImageDialog(EkitCore parentEkit
, String imageDir
, String
[] imageList
, String title
, boolean modal
)
131 super(parentEkit
.getFrame(), title
, modal
);
134 ParentEkit
= parentEkit
;
135 SelectedImage
= null
;
139 public void actionPerformed(java
.awt
.event
.ActionEvent e
)
141 if(e
.getActionCommand().equals("apply"))
143 ListSelectionModel sm
= ImageList
.getSelectionModel();
144 if(sm
.isSelectionEmpty())
146 SimpleInfoDialog sidAbout
= new SimpleInfoDialog(ParentEkit
.getFrame(), "Error", true
, "No image selected", SimpleInfoDialog
.ERROR
);
147 ImageList
.requestFocus();
151 if(validateControls())
153 previewSelectedImage();
157 if(e
.getActionCommand().equals("save"))
159 ListSelectionModel sm
= ImageList
.getSelectionModel();
160 if(sm
.isSelectionEmpty())
162 SimpleInfoDialog sidAbout
= new SimpleInfoDialog(ParentEkit
.getFrame(), "Error", true
, "No image selected", SimpleInfoDialog
.ERROR
);
163 ImageList
.requestFocus();
167 if(validateControls())
169 previewSelectedImage();
170 SelectedImage
= PreviewImage
;
175 else if(e
.getActionCommand().equals("cancel"))
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
);
189 ImageList
= new JList(Images
);
190 ImageList
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
191 ImageList
.clearSelection();
192 ListSelectionModel lsm
= ImageList
.getSelectionModel();
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()
206 public void valueChanged(ListSelectionEvent e
)
208 if(!e
.getValueIsAdjusting() && validateControls())
210 previewSelectedImage();
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"));
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
);
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
);
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));
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));
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
);
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));
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));
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);
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);
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);
341 buttonPanel
.add(applyButton
);
342 buttonPanel
.add(saveButton
);
343 buttonPanel
.add(cancelButton
);
345 contentPane
.add(centerPanel
);
346 contentPane
.add(controlsPanel
);
347 contentPane
.add(buttonPanel
);
352 private void previewSelectedImage()
354 ListSelectionModel sm
= ImageList
.getSelectionModel();
355 if(!sm
.isSelectionEmpty())
357 String theImage
= Images
[sm
.getMinSelectionIndex()];
360 // Clear the preview area
361 PreviewPane
.setText("");
362 StringBuffer attrString
= new StringBuffer();
363 if(!ImageHeight
.getText().equals(""))
365 attrString
.append("HEIGHT=\"" + ImageHeight
.getText() + "\" ");
367 if(!ImageWidth
.getText().equals(""))
369 attrString
.append("WIDTH=\"" + ImageWidth
.getText() + "\" ");
371 if(!ImageAltText
.getText().equals(""))
373 attrString
.append("ALT=\"" + ImageAltText
.getText() + "\" ");
375 if(!WrapList
.getSelectionModel().isSelectionEmpty())
377 String theWrap
= Wraps
[WrapList
.getSelectionModel().getMinSelectionIndex()];
378 if(!theWrap
.equals("none"))
380 attrString
.append("ALIGN=\"" + theWrap
+ "\" ");
384 if(!BorderList.getSelectionModel().isSelectionEmpty())
386 String theBorder = Borders[BorderList.getSelectionModel().getMinSelectionIndex()];
387 if(!theBorder.equals("none"))
390 String borderSize
= null
;
391 String borderColor
= null
;
392 if(!BorderSizeList
.getSelectionModel().isSelectionEmpty())
394 borderSize
= BorderSizes
[BorderSizeList
.getSelectionModel().getMinSelectionIndex()];
395 if(!borderSize
.equals("none"))
397 attrString
.append("BORDER=" + borderSize
);
402 borderSize
= BorderSizes
[0];
405 if(!BorderColorList.getSelectionModel().isSelectionEmpty())
407 borderColor = BorderColors[BorderColorList.getSelectionModel().getMinSelectionIndex()];
411 borderColor = "gray";
413 attrString.append("STYLE=\"border: " + borderColor + " " + borderSize + "px " + theBorder + "\"");
417 PreviewImage
= "<IMG SRC=" + ImageDir
+ "/" + theImage
+ " " + attrString
.toString() + ">";
418 ImageHtmlKit
.insertHTML(ImageHtmlDoc
, 0, PreviewImage
, 0, 0, HTML
.Tag
.IMG
);
423 System
.err
.println("Exception previewing image");
428 private boolean validateControls()
430 boolean result
= true
;
431 if(!ImageWidth
.getText().equals(""))
435 Integer
.parseInt(ImageWidth
.getText());
437 catch (NumberFormatException e
)
440 SimpleInfoDialog sidAbout
= new SimpleInfoDialog(ParentEkit
.getFrame(), "Error", true
, "Image Width is not an integer", SimpleInfoDialog
.ERROR
);
441 ImageWidth
.requestFocus();
444 if( result
&& !ImageHeight
.getText().equals(""))
448 Integer
.parseInt(ImageHeight
.getText());
450 catch (NumberFormatException e
)
453 SimpleInfoDialog sidAbout
= new SimpleInfoDialog(ParentEkit
.getFrame(), "Error", true
, "Image Height is not an integer", SimpleInfoDialog
.ERROR
);
454 ImageHeight
.requestFocus();
460 public String
getSelectedImage()
462 return SelectedImage
;