/*
GNU Lesser General Public License
ImageDialog
Copyright (C) 2003 Howard Kistler & other contributors
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.hexidec.ekit.component;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Insets;
import java.awt.event.ActionListener;
import javax.swing.border.*;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.WindowConstants;
public class ImageDialog extends JDialog implements ActionListener
{
private final String[] Borders = new String[]
{
"none",
"solid",
"dotted",
"dashed",
"double",
"groove",
"ridge",
"inset",
"outset"
};
private String[] BorderColors = new String[]
{
"none",
"aqua",
"black",
"blue",
"fuschia",
"gray",
"green",
"lime",
"maroon",
"navy",
"olive",
"purple",
"red",
"silver",
"teal",
"white",
"yellow"
};
private String[]BorderSizes = new String[]
{
"none",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10"
};
private final String[]Wraps = new String[]
{
"none",
"left",
"right",
"top",
"middle",
"bottom"
};
private Frame parent;
private ExtendedHTMLEditorKit ImageHtmlKit;
private HTMLDocument ImageHtmlDoc;
private JList WrapList;
private JList BorderList;
private JList BorderSizeList;
private JList BorderColorList;
private JList ImageList;
private JTextField ImageAltText;
private JTextField ImageWidth;
private JTextField ImageHeight;
private JEditorPane PreviewPane;
private String imageDir;
private String[] imageList;
private String previewImage;
private String selectedImage;
public ImageDialog(Frame parent, String imageDir, String[] imageList, String title, boolean modal)
{
super(parent, title, modal);
this.imageDir = imageDir;
this.imageList = imageList;
this.parent = parent;
selectedImage = null;
init();
}
public void actionPerformed(java.awt.event.ActionEvent e)
{
if(e.getActionCommand().equals("apply"))
{
ListSelectionModel sm = ImageList.getSelectionModel();
if(sm.isSelectionEmpty())
{
SimpleInfoDialog sidAbout = new SimpleInfoDialog(parent, "Error", true, "No image selected", SimpleInfoDialog.ERROR);
ImageList.requestFocus();
}
else
{
if(validateControls())
{
previewSelectedImage();
}
}
}
if(e.getActionCommand().equals("save"))
{
ListSelectionModel sm = ImageList.getSelectionModel();
if(sm.isSelectionEmpty())
{
SimpleInfoDialog sidAbout = new SimpleInfoDialog(parent, "Error", true, "No image selected", SimpleInfoDialog.ERROR);
ImageList.requestFocus();
}
else
{
if(validateControls())
{
previewSelectedImage();
selectedImage = previewImage;
hide();
}
}
}
else if(e.getActionCommand().equals("cancel"))
{
hide();
}
}
public void init()
{
selectedImage = "";
Container contentPane = getContentPane();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
//setBounds(100,100,500,300);
setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
ImageList = new JList(imageList);
ImageList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ImageList.clearSelection();
ListSelectionModel lsm = ImageList.getSelectionModel();
/* Create the editor kit, document, and stylesheet */
PreviewPane = new JEditorPane();
PreviewPane.setEditable(false);
ImageHtmlKit = new ExtendedHTMLEditorKit();
ImageHtmlDoc = (HTMLDocument)(ImageHtmlKit.createDefaultDocument());
ImageHtmlKit.setDefaultCursor(new Cursor(Cursor.TEXT_CURSOR));
PreviewPane.setCaretPosition(0);
//PreviewPane.getDocument().addDocumentListener(this);
//StyleSheet styleSheet = ImageHtmlDoc.getStyleSheet();
//ImageStyleSheet = styleSheet;
lsm.addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
if(!e.getValueIsAdjusting() && validateControls())
{
previewSelectedImage();
}
}
});
JScrollPane imageScrollPane = new JScrollPane(ImageList);
imageScrollPane.setPreferredSize(new Dimension(200,250));
imageScrollPane.setMaximumSize(new Dimension(200,250));
imageScrollPane.setAlignmentX(LEFT_ALIGNMENT);
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.X_AXIS));
centerPanel.add(imageScrollPane);
centerPanel.setBorder(BorderFactory.createTitledBorder("Server Images"));
/* Set up the text pane */
PreviewPane.setEditorKit(ImageHtmlKit);
PreviewPane.setDocument(ImageHtmlDoc);
PreviewPane.setMargin(new Insets(4, 4, 4, 4));
JScrollPane previewViewport = new JScrollPane(PreviewPane);
previewViewport.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
previewViewport.setPreferredSize(new Dimension(250,250));
centerPanel.add(previewViewport);
JPanel controlsPanel = new JPanel();
controlsPanel.setLayout(new BoxLayout(controlsPanel, BoxLayout.Y_AXIS));
JPanel altPanel = new JPanel();
altPanel.setLayout(new BoxLayout(altPanel, BoxLayout.X_AXIS));
altPanel.add(Box.createHorizontalStrut(10));
JLabel imageAltTextLabel = new JLabel("Alternate Text:", SwingConstants.LEFT);
altPanel.add(imageAltTextLabel);
ImageAltText = new JTextField("");
ImageAltText.addActionListener(this);
ImageAltText.setPreferredSize(new Dimension(300,25));
ImageAltText.setMaximumSize(new Dimension(600,25));
altPanel.add(ImageAltText);
altPanel.add(Box.createHorizontalStrut(10));
controlsPanel.add(altPanel);
controlsPanel.add(Box.createVerticalStrut(5));
JPanel dimPanel = new JPanel();
dimPanel.setLayout(new BoxLayout(dimPanel, BoxLayout.X_AXIS));
dimPanel.add(Box.createHorizontalStrut(10));
JLabel imageWidthLabel = new JLabel("Width:", SwingConstants.LEFT);
dimPanel.add(imageWidthLabel);
ImageWidth = new JTextField("");
ImageWidth.setPreferredSize(new Dimension(40,25));
ImageWidth.setMaximumSize(new Dimension(40,25));
dimPanel.add(ImageWidth);
JLabel imageWidthPixels = new JLabel("pix", SwingConstants.LEFT);
imageWidthPixels.setPreferredSize(new Dimension(20,10));
dimPanel.add(imageWidthPixels);
dimPanel.add(Box.createHorizontalStrut(10));
JLabel imageHeightLabel = new JLabel("Height:", SwingConstants.LEFT);
dimPanel.add(imageHeightLabel);
ImageHeight = new JTextField("");
ImageHeight.setPreferredSize(new Dimension(40,25));
ImageHeight.setMaximumSize(new Dimension(40,25));
dimPanel.add(ImageHeight);
JLabel imageHeightPixels = new JLabel("pix", SwingConstants.LEFT);
imageHeightPixels.setPreferredSize(new Dimension(20,10));
dimPanel.add(imageHeightPixels);
dimPanel.add(Box.createHorizontalStrut(10));
JLabel wrapLabel = new JLabel("Wrap:", SwingConstants.LEFT);
dimPanel.add(wrapLabel);
WrapList = new JList(Wraps);
WrapList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
WrapList.getSelectionModel().setSelectionInterval(0,0);
JScrollPane wrapScrollPane = new JScrollPane(WrapList);
wrapScrollPane.setAlignmentX(LEFT_ALIGNMENT);
wrapScrollPane.setPreferredSize(new Dimension(80,40));
wrapScrollPane.setMaximumSize(new Dimension(80,100));
dimPanel.add(wrapScrollPane);
controlsPanel.add(dimPanel);
/*
JPanel borderPanel = new JPanel();
JLabel borderStyleLabel = new JLabel("Style:", SwingConstants.LEFT);
borderPanel.add(borderStyleLabel);
BorderList = new JList(Borders);
BorderList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
BorderList.getSelectionModel().setSelectionInterval(0,0);
JScrollPane borderScrollPane = new JScrollPane(BorderList);
borderScrollPane.setAlignmentX(LEFT_ALIGNMENT);
borderScrollPane.setPreferredSize(new Dimension(80,40));
borderScrollPane.setMaximumSize(new Dimension(80,100));
borderPanel.add(borderScrollPane);
borderPanel.add(Box.createHorizontalStrut(5));
*/
dimPanel.add(Box.createHorizontalStrut(5));
JLabel borderSizeLabel = new JLabel("Border Size:", SwingConstants.LEFT);
dimPanel.add(borderSizeLabel);
BorderSizeList = new JList(BorderSizes);
BorderSizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
BorderSizeList.getSelectionModel().setSelectionInterval(0,0);
JScrollPane borderSizeScrollPane = new JScrollPane(BorderSizeList);
borderSizeScrollPane.setAlignmentX(LEFT_ALIGNMENT);
borderSizeScrollPane.setPreferredSize(new Dimension(80,40));
borderSizeScrollPane.setMaximumSize(new Dimension(80,100));
dimPanel.add(borderSizeScrollPane);
dimPanel.add(Box.createHorizontalStrut(10));
dimPanel.add(Box.createVerticalStrut(10));
/*
JLabel borderColorLabel = new JLabel("Color:", SwingConstants.LEFT);
borderPanel.add(borderColorLabel);
BorderColorList = new JList(BorderColors);
BorderColorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane borderColorScrollPane = new JScrollPane(BorderColorList);
borderColorScrollPane.setAlignmentX(LEFT_ALIGNMENT);
borderColorScrollPane.setPreferredSize(new Dimension(80,40));
borderPanel.add(borderColorScrollPane);
controlsPanel.add(borderPanel);
*/
JPanel buttonPanel= new JPanel();
buttonPanel.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
JButton applyButton = new JButton("Apply");
applyButton.setActionCommand("apply");
applyButton.addActionListener(this);
JButton saveButton = new JButton("Accept");
saveButton.setActionCommand("save");
saveButton.addActionListener(this);
JButton cancelButton = new JButton("Cancel");
cancelButton.setActionCommand("cancel");
cancelButton.addActionListener(this);
buttonPanel.add(applyButton);
buttonPanel.add(saveButton);
buttonPanel.add(cancelButton);
contentPane.add(centerPanel);
contentPane.add(controlsPanel);
contentPane.add(buttonPanel);
this.pack();
setVisible(true);
}
private void previewSelectedImage()
{
ListSelectionModel sm = ImageList.getSelectionModel();
if(!sm.isSelectionEmpty())
{
String theImage = imageList[sm.getMinSelectionIndex()];
try
{
// Clear the preview area
PreviewPane.setText("");
StringBuffer attrString = new StringBuffer();
if(!ImageHeight.getText().equals(""))
{
attrString.append("HEIGHT=\"" + ImageHeight.getText() + "\" ");
}
if(!ImageWidth.getText().equals(""))
{
attrString.append("WIDTH=\"" + ImageWidth.getText() + "\" ");
}
if(!ImageAltText.getText().equals(""))
{
attrString.append("ALT=\"" + ImageAltText.getText() + "\" ");
}
if(!WrapList.getSelectionModel().isSelectionEmpty())
{
String theWrap = Wraps[WrapList.getSelectionModel().getMinSelectionIndex()];
if(!theWrap.equals("none"))
{
attrString.append("ALIGN=\"" + theWrap + "\" ");
}
}
/*
if(!BorderList.getSelectionModel().isSelectionEmpty())
{
String theBorder = Borders[BorderList.getSelectionModel().getMinSelectionIndex()];
if(!theBorder.equals("none"))
{
*/
String borderSize = null;
String borderColor = null;
if(!BorderSizeList.getSelectionModel().isSelectionEmpty())
{
borderSize = BorderSizes[BorderSizeList.getSelectionModel().getMinSelectionIndex()];
if(!borderSize.equals("none"))
{
attrString.append("BORDER=" + borderSize);
}
}
else
{
borderSize = BorderSizes[0];
}
/*
if(!BorderColorList.getSelectionModel().isSelectionEmpty())
{
borderColor = BorderColors[BorderColorList.getSelectionModel().getMinSelectionIndex()];
}
else
{
borderColor = "gray";
}
attrString.append("STYLE=\"border: " + borderColor + " " + borderSize + "px " + theBorder + "\"");
}
}
*/
previewImage = "<IMG SRC=" + imageDir + "/" + theImage + " " + attrString.toString() + ">";
ImageHtmlKit.insertHTML(ImageHtmlDoc, 0, previewImage, 0, 0, HTML.Tag.IMG);
repaint();
}
catch(Exception ex)
{
System.err.println("Exception previewing image");
}
}
}
private boolean validateControls()
{
boolean result = true;
if(!ImageWidth.getText().equals(""))
{
try
{
Integer.parseInt(ImageWidth.getText());
}
catch (NumberFormatException e)
{
result = false;
SimpleInfoDialog sidAbout = new SimpleInfoDialog(parent, "Error", true, "Image Width is not an integer", SimpleInfoDialog.ERROR);
ImageWidth.requestFocus();
}
}
if( result && !ImageHeight.getText().equals(""))
{
try
{
Integer.parseInt(ImageHeight.getText());
}
catch (NumberFormatException e)
{
result = false;
SimpleInfoDialog sidAbout = new SimpleInfoDialog(parent, "Error", true, "Image Height is not an integer", SimpleInfoDialog.ERROR);
ImageHeight.requestFocus();
}
}
return result;
}
public String getSelectedImage()
{
return selectedImage;
}
}