Commit | Line | Data |
---|---|---|
c2da4d40 JL |
1 | package com.hexidec.ekit.component;\r |
2 | \r | |
3 | import com.hexidec.ekit.EkitCore;\r | |
4 | import java.awt.Insets;\r | |
5 | import java.awt.Container;\r | |
6 | import java.awt.Cursor;\r | |
7 | import java.awt.Dimension;\r | |
8 | import java.awt.event.ActionListener;\r | |
9 | import java.awt.FlowLayout;\r | |
10 | import javax.swing.border.*;\r | |
11 | import javax.swing.BorderFactory;\r | |
12 | import javax.swing.Box;\r | |
13 | import javax.swing.BoxLayout;\r | |
14 | import javax.swing.event.ListSelectionListener;\r | |
15 | import javax.swing.event.ListSelectionEvent;\r | |
16 | import javax.swing.JButton;\r | |
17 | import javax.swing.JDialog;\r | |
18 | import javax.swing.JEditorPane;\r | |
19 | import javax.swing.JLabel;\r | |
20 | import javax.swing.JList;\r | |
21 | import javax.swing.JPanel;\r | |
22 | import javax.swing.JScrollPane;\r | |
23 | import javax.swing.JTextField;\r | |
24 | import javax.swing.JTextPane;\r | |
25 | import javax.swing.ListSelectionModel;\r | |
26 | import javax.swing.SwingConstants;\r | |
27 | import javax.swing.text.html.HTML;\r | |
28 | import javax.swing.text.html.HTMLDocument;\r | |
29 | import javax.swing.text.html.HTMLEditorKit;\r | |
30 | import javax.swing.WindowConstants;\r | |
31 | \r | |
32 | public 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 |