Initial revision
[old-projects.git] / ekit / com / hexidec / ekit / component / ImageDialog.java
diff --git a/ekit/com/hexidec/ekit/component/ImageDialog.java b/ekit/com/hexidec/ekit/component/ImageDialog.java
new file mode 100644 (file)
index 0000000..7744bf7
--- /dev/null
@@ -0,0 +1,388 @@
+package com.hexidec.ekit.component;\r
+\r
+import com.hexidec.ekit.EkitCore;\r
+import java.awt.Insets;\r
+import java.awt.Container;\r
+import java.awt.Cursor;\r
+import java.awt.Dimension;\r
+import java.awt.event.ActionListener;\r
+import java.awt.FlowLayout;\r
+import javax.swing.border.*;\r
+import javax.swing.BorderFactory;\r
+import javax.swing.Box;\r
+import javax.swing.BoxLayout;\r
+import javax.swing.event.ListSelectionListener;\r
+import javax.swing.event.ListSelectionEvent;\r
+import javax.swing.JButton;\r
+import javax.swing.JDialog;\r
+import javax.swing.JEditorPane;\r
+import javax.swing.JLabel;\r
+import javax.swing.JList;\r
+import javax.swing.JPanel;\r
+import javax.swing.JScrollPane;\r
+import javax.swing.JTextField;\r
+import javax.swing.JTextPane;\r
+import javax.swing.ListSelectionModel;\r
+import javax.swing.SwingConstants;\r
+import javax.swing.text.html.HTML;\r
+import javax.swing.text.html.HTMLDocument;\r
+import javax.swing.text.html.HTMLEditorKit;\r
+import javax.swing.WindowConstants;\r
+\r
+public class ImageDialog extends JDialog implements ActionListener\r
+{\r
+       private final String[]Borders = new String[] { "none", "solid", "dotted", "dashed", "double", "groove",\r
+                                                                    "ridge", "inset", "outset" };\r
+       private String[]BorderColors = new String[]  { "aqua", "black", "blue", "fuschia", "gray",\r
+                                                                    "green", "lime", "maroon", "navy", "olive",\r
+                                                                    "purple", "red", "silver", "teal", "white", "yellow" };\r
+       private String[]BorderSizes = new String[]   { "none", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };\r
+       private final String[]Wraps = new String[]   { "none", "left", "right", "top", "middle", "bottom" };\r
+       private EkitCore ParentEkit;\r
+       private ExtendedHTMLEditorKit ImageHtmlKit;\r
+       private HTMLDocument ImageHtmlDoc;\r
+       private JList WrapList;\r
+       private JList BorderList;\r
+       private JList BorderSizeList;\r
+       private JList BorderColorList;\r
+       private JList ImageList;\r
+       private JTextField ImageAltText;\r
+       private JTextField ImageWidth;\r
+       private JTextField ImageHeight;\r
+       private JEditorPane PreviewPane;\r
+       private String ImageDir;\r
+       private String[]Images;\r
+       private String PreviewImage;\r
+       private String SelectedImage;\r
+\r
+       public ImageDialog(EkitCore parentEkit, String imageDir, String[] imageList, String title, boolean modal)\r
+       {\r
+               super(parentEkit.getFrame(), title, modal);\r
+               ImageDir = imageDir;\r
+               Images = imageList;\r
+               ParentEkit = parentEkit;\r
+               SelectedImage = null;\r
+               init();\r
+       }\r
+\r
+       public void actionPerformed(java.awt.event.ActionEvent e)\r
+       {\r
+               if(e.getActionCommand().equals("apply"))\r
+               {\r
+                       ListSelectionModel sm = ImageList.getSelectionModel();\r
+                       if(sm.isSelectionEmpty())\r
+                       {\r
+                               SimpleInfoDialog sidAbout = new SimpleInfoDialog(ParentEkit.getFrame(), "Error", true, "No image selected", SimpleInfoDialog.ERROR);\r
+                               ImageList.requestFocus();\r
+                       }\r
+                       else\r
+                       {\r
+                               if(validateControls())\r
+                               {\r
+                                       previewSelectedImage();\r
+                               }\r
+                       }\r
+               }       \r
+               if(e.getActionCommand().equals("save"))\r
+               {\r
+                       ListSelectionModel sm = ImageList.getSelectionModel();\r
+                       if(sm.isSelectionEmpty())\r
+                       {\r
+                               SimpleInfoDialog sidAbout = new SimpleInfoDialog(ParentEkit.getFrame(), "Error", true, "No image selected", SimpleInfoDialog.ERROR);\r
+                               ImageList.requestFocus();\r
+                       }\r
+                       else\r
+                       {\r
+                               if(validateControls())\r
+                               {\r
+                                       previewSelectedImage();\r
+                                       SelectedImage = PreviewImage;\r
+                                       hide();\r
+                               }\r
+                       }\r
+               }\r
+               else if(e.getActionCommand().equals("cancel"))\r
+               {\r
+                       hide();\r
+               }\r
+       }\r
+\r
+       public void init()\r
+       {\r
+               SelectedImage="";\r
+               Container contentPane = getContentPane();\r
+               contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));\r
+               //setBounds(100,100,500,300);\r
+               setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);\r
+\r
+               ImageList = new JList(Images);\r
+               ImageList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+               ImageList.clearSelection();\r
+            ListSelectionModel lsm = ImageList.getSelectionModel();\r
+\r
+               /* Create the editor kit, document, and stylesheet */\r
+               PreviewPane = new JEditorPane();\r
+               PreviewPane.setEditable(false);\r
+               ImageHtmlKit = new ExtendedHTMLEditorKit();\r
+               ImageHtmlDoc = (HTMLDocument)(ImageHtmlKit.createDefaultDocument());\r
+               ImageHtmlKit.setDefaultCursor(new Cursor(Cursor.TEXT_CURSOR));\r
+               PreviewPane.setCaretPosition(0);\r
+               //PreviewPane.getDocument().addDocumentListener(this);\r
+               //StyleSheet styleSheet = ImageHtmlDoc.getStyleSheet();\r
+               //ImageStyleSheet = styleSheet;\r
+               lsm.addListSelectionListener(new ListSelectionListener() \r
+               {\r
+                       public void valueChanged(ListSelectionEvent e)\r
+                       {\r
+                               if(!e.getValueIsAdjusting() && validateControls())\r
+                               {\r
+                                       previewSelectedImage();\r
+                               }\r
+                       }\r
+                               \r
+               });\r
+\r
+               JScrollPane imageScrollPane = new JScrollPane(ImageList);\r
+               imageScrollPane.setPreferredSize(new Dimension(200,250));\r
+               imageScrollPane.setMaximumSize(new Dimension(200,250));\r
+               imageScrollPane.setAlignmentX(LEFT_ALIGNMENT);\r
+               JPanel centerPanel = new JPanel();\r
+               centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.X_AXIS));\r
+               centerPanel.add(imageScrollPane);\r
+               centerPanel.setBorder(BorderFactory.createTitledBorder("Server Images"));\r
+\r
+               /* Set up the text pane */\r
+               PreviewPane.setEditorKit(ImageHtmlKit);\r
+               PreviewPane.setDocument(ImageHtmlDoc);\r
+               PreviewPane.setMargin(new Insets(4, 4, 4, 4));\r
+               JScrollPane previewViewport = new JScrollPane(PreviewPane);\r
+               previewViewport.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);\r
+               previewViewport.setPreferredSize(new Dimension(250,250));\r
+               centerPanel.add(previewViewport); \r
+\r
+               JPanel controlsPanel = new JPanel();\r
+               controlsPanel.setLayout(new BoxLayout(controlsPanel, BoxLayout.Y_AXIS));\r
+               JPanel altPanel = new JPanel();\r
+               altPanel.setLayout(new BoxLayout(altPanel, BoxLayout.X_AXIS));\r
+               altPanel.add(Box.createHorizontalStrut(10));\r
+               JLabel imageAltTextLabel = new JLabel("Alternate Text:", SwingConstants.LEFT);    \r
+               altPanel.add(imageAltTextLabel);\r
+\r
+               ImageAltText = new JTextField("");\r
+               ImageAltText.addActionListener(this);\r
+               ImageAltText.setPreferredSize(new Dimension(300,25));\r
+               ImageAltText.setMaximumSize(new Dimension(600,25));\r
+               altPanel.add(ImageAltText);\r
+               altPanel.add(Box.createHorizontalStrut(10));\r
+               controlsPanel.add(altPanel);\r
+\r
+               controlsPanel.add(Box.createVerticalStrut(5));\r
+\r
+               JPanel dimPanel = new JPanel();\r
+               dimPanel.setLayout(new BoxLayout(dimPanel, BoxLayout.X_AXIS));\r
+               dimPanel.add(Box.createHorizontalStrut(10));\r
+               JLabel imageWidthLabel = new JLabel("Width:", SwingConstants.LEFT);       \r
+               dimPanel.add(imageWidthLabel);\r
+               ImageWidth = new JTextField("");\r
+               ImageWidth.setPreferredSize(new Dimension(40,25));\r
+               ImageWidth.setMaximumSize(new Dimension(40,25));\r
+               dimPanel.add(ImageWidth);\r
+               JLabel imageWidthPixels = new JLabel("pix", SwingConstants.LEFT);         \r
+               imageWidthPixels.setPreferredSize(new Dimension(20,10));\r
+               dimPanel.add(imageWidthPixels);\r
+               dimPanel.add(Box.createHorizontalStrut(10));\r
+               JLabel imageHeightLabel = new JLabel("Height:", SwingConstants.LEFT);     \r
+               dimPanel.add(imageHeightLabel);\r
+               ImageHeight = new JTextField("");\r
+               ImageHeight.setPreferredSize(new Dimension(40,25));\r
+               ImageHeight.setMaximumSize(new Dimension(40,25));\r
+               dimPanel.add(ImageHeight);\r
+               JLabel imageHeightPixels = new JLabel("pix", SwingConstants.LEFT);        \r
+               imageHeightPixels.setPreferredSize(new Dimension(20,10));\r
+               dimPanel.add(imageHeightPixels);\r
+               dimPanel.add(Box.createHorizontalStrut(10));\r
+\r
+               JLabel wrapLabel = new JLabel("Wrap:", SwingConstants.LEFT);\r
+               dimPanel.add(wrapLabel);\r
+               WrapList = new JList(Wraps);\r
+               WrapList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+               WrapList.getSelectionModel().setSelectionInterval(0,0);\r
+               JScrollPane wrapScrollPane = new JScrollPane(WrapList);\r
+               wrapScrollPane.setAlignmentX(LEFT_ALIGNMENT);\r
+               wrapScrollPane.setPreferredSize(new Dimension(80,40));\r
+               wrapScrollPane.setMaximumSize(new Dimension(80,100));\r
+               dimPanel.add(wrapScrollPane);\r
+               controlsPanel.add(dimPanel);\r
+\r
+               //JPanel borderPanel = new JPanel();\r
+               //JLabel borderStyleLabel = new JLabel("Style:", SwingConstants.LEFT);\r
+               //borderPanel.add(borderStyleLabel);\r
+               //BorderList = new JList(Borders);\r
+               //BorderList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+               //BorderList.getSelectionModel().setSelectionInterval(0,0);\r
+               //JScrollPane borderScrollPane = new JScrollPane(BorderList);\r
+               //borderScrollPane.setAlignmentX(LEFT_ALIGNMENT);\r
+               //borderScrollPane.setPreferredSize(new Dimension(80,40));\r
+               //borderScrollPane.setMaximumSize(new Dimension(80,100));\r
+               //borderPanel.add(borderScrollPane);\r
+               //borderPanel.add(Box.createHorizontalStrut(5));\r
+\r
+               dimPanel.add(Box.createHorizontalStrut(5));\r
+               JLabel borderSizeLabel = new JLabel("Border Size:", SwingConstants.LEFT);\r
+               dimPanel.add(borderSizeLabel);\r
+               BorderSizeList = new JList(BorderSizes);\r
+               BorderSizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+               BorderSizeList.getSelectionModel().setSelectionInterval(0,0);\r
+               JScrollPane borderSizeScrollPane = new JScrollPane(BorderSizeList);\r
+               borderSizeScrollPane.setAlignmentX(LEFT_ALIGNMENT);\r
+               borderSizeScrollPane.setPreferredSize(new Dimension(80,40));\r
+               borderSizeScrollPane.setMaximumSize(new Dimension(80,100));\r
+               dimPanel.add(borderSizeScrollPane);\r
+               dimPanel.add(Box.createHorizontalStrut(10));\r
+               dimPanel.add(Box.createVerticalStrut(10));\r
+\r
+               //JLabel borderColorLabel = new JLabel("Color:", SwingConstants.LEFT);\r
+               //borderPanel.add(borderColorLabel);\r
+               //BorderColorList = new JList(BorderColors);\r
+               //BorderColorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+               //JScrollPane borderColorScrollPane = new JScrollPane(BorderColorList);\r
+               //borderColorScrollPane.setAlignmentX(LEFT_ALIGNMENT);\r
+               //borderColorScrollPane.setPreferredSize(new Dimension(80,40));\r
+               //borderPanel.add(borderColorScrollPane);\r
+               //controlsPanel.add(borderPanel);\r
+\r
+               JPanel buttonPanel= new JPanel();\r
+               buttonPanel.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));\r
+               JButton applyButton = new JButton("Apply");\r
+               applyButton.setActionCommand("apply");\r
+               applyButton.addActionListener(this);\r
+\r
+               JButton saveButton = new JButton("Accept");\r
+               saveButton.setActionCommand("save");\r
+               saveButton.addActionListener(this);\r
+               JButton cancelButton = new JButton("Cancel");\r
+               cancelButton.setActionCommand("cancel");\r
+               cancelButton.addActionListener(this);\r
+\r
+               buttonPanel.add(applyButton);\r
+               buttonPanel.add(saveButton);\r
+               buttonPanel.add(cancelButton);\r
+\r
+               contentPane.add(centerPanel);\r
+               contentPane.add(controlsPanel);\r
+               contentPane.add(buttonPanel);\r
+               this.pack();\r
+               setVisible(true);\r
+    }\r
+\r
+    private void previewSelectedImage()\r
+    {\r
+         ListSelectionModel sm = ImageList.getSelectionModel();\r
+         if(!sm.isSelectionEmpty())\r
+         {\r
+               String theImage = Images[sm.getMinSelectionIndex()];\r
+               try\r
+               {\r
+                       // Clear the preview area\r
+                       PreviewPane.setText("");\r
+                       StringBuffer attrString = new StringBuffer();\r
+                       if(!ImageHeight.getText().equals(""))\r
+                       {\r
+                               attrString.append("HEIGHT=\"" + ImageHeight.getText() + "\" ");\r
+                       }\r
+                       if(!ImageWidth.getText().equals(""))\r
+                       {\r
+                               attrString.append("WIDTH=\"" + ImageWidth.getText() + "\" ");\r
+                       }\r
+                       if(!ImageAltText.getText().equals(""))\r
+                       {\r
+                               attrString.append("ALT=\"" + ImageAltText.getText() + "\" ");\r
+                       }\r
+                       if(!WrapList.getSelectionModel().isSelectionEmpty())\r
+                       {\r
+                               String theWrap = Wraps[WrapList.getSelectionModel().getMinSelectionIndex()];\r
+                               if(!theWrap.equals("none"))\r
+                               {\r
+                                       attrString.append("ALIGN=\"" + theWrap + "\" ");\r
+                               }\r
+                       }\r
+                       //if(!BorderList.getSelectionModel().isSelectionEmpty())\r
+                       //{\r
+                               //String theBorder = Borders[BorderList.getSelectionModel().getMinSelectionIndex()];\r
+                               //if(!theBorder.equals("none"))\r
+                               //{\r
+                                       String borderSize = null;\r
+                                       String borderColor = null;\r
+                                       if(!BorderSizeList.getSelectionModel().isSelectionEmpty())\r
+                                       {\r
+                                               borderSize = BorderSizes[BorderSizeList.getSelectionModel().getMinSelectionIndex()];\r
+                                               if(!borderSize.equals("none"))\r
+                                                       attrString.append("BORDER=" + borderSize);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               borderSize = BorderSizes[0];\r
+                                       }\r
+                                       //if(!BorderColorList.getSelectionModel().isSelectionEmpty())\r
+                                       //{\r
+                                       //      borderColor = BorderColors[BorderColorList.getSelectionModel().getMinSelectionIndex()];                                         \r
+                                       //}\r
+                                       //else\r
+                                       //{\r
+                                       //      borderColor = "gray";\r
+                                       //}\r
+                                       //attrString.append("STYLE=\"border: " + borderColor + " "  + borderSize + "px " + theBorder + "\"");\r
+                               //}\r
+                       //}\r
+\r
+                       \r
+                       PreviewImage = "<IMG SRC=" + ImageDir + "/" + theImage + " " + attrString.toString() + ">";\r
+                       ImageHtmlKit.insertHTML(ImageHtmlDoc, 0, PreviewImage, 0, 0, HTML.Tag.IMG);\r
+                       repaint();\r
+               }\r
+               catch(Exception ex)\r
+               {\r
+                       System.err.println("Exception previewing image");\r
+               }\r
+        }\r
+    }\r
+\r
+    private boolean validateControls()\r
+    {\r
+         boolean result = true;\r
+\r
+         if(!ImageWidth.getText().equals(""))\r
+         {\r
+               try\r
+               {\r
+                       Integer.parseInt(ImageWidth.getText());\r
+               }\r
+               catch (NumberFormatException e)\r
+               {\r
+                       result = false;\r
+                       SimpleInfoDialog sidAbout = new SimpleInfoDialog(ParentEkit.getFrame(), "Error", true, "Image Width is not an integer", SimpleInfoDialog.ERROR);\r
+                       ImageWidth.requestFocus();\r
+               }\r
+         }\r
+         if( result && !ImageHeight.getText().equals(""))\r
+         {\r
+               try\r
+               {\r
+                       Integer.parseInt(ImageHeight.getText());\r
+               }\r
+               catch (NumberFormatException e)\r
+               {\r
+                       result = false;\r
+                       SimpleInfoDialog sidAbout = new SimpleInfoDialog(ParentEkit.getFrame(), "Error", true, "Image Height is not an integer", SimpleInfoDialog.ERROR);\r
+                       ImageHeight.requestFocus();\r
+               }\r
+         }\r
+\r
+        return result;\r
+    }\r
+\r
+    public String getSelectedImage()\r
+    {\r
+         return SelectedImage;\r
+    }  \r
+}\r