/*
* Copyright (C) 2004 The Concord Consortium, Inc.,
* 10 Concord Crossing, Concord, MA 01742
*
* Web Site: http://www.concord.org
* Email: info@concord.org
*
* 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
*
* END LICENSE */
package org.concord.swing.editor;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.Hashtable;
import javax.swing.ImageIcon;
import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JPopupMenu;
import javax.swing.UIManager;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledEditorKit;
import org.concord.swing.ExtensionFileFilter;
public class XMEditorKit
extends StyledEditorKit
{
protected Hashtable imageTable = new Hashtable();
protected Hashtable imageFileTable = new Hashtable();
public XMEditorKit()
{
super();
}
static public class XMTextAction
extends StyledTextAction
{
public XMTextAction(String name)
{
super(name);
}
public XMEditor getXMEditor(ActionEvent event)
{
XMEditor editor = (XMEditor) super.getEditor(event);
if (editor == null)
{
Object c = event.getSource();
while (c != null)
{
c = ((Container) c).getParent();
if (c instanceof JPopupMenu)
{
c = ((JPopupMenu) c).getInvoker();
if (c instanceof XMEditor)
{
editor = (XMEditor) c;
break;
}
}
}
}
return editor;
}
public void actionPerformed(ActionEvent event)
{
}
}
static public class TextColorAction
extends XMTextAction
{
protected JColorChooser colorChooser = new JColorChooser();
public TextColorAction(String nm)
{
super(nm);
}
public void actionPerformed(ActionEvent event)
{
XMEditor editor = getXMEditor(event);
if (editor != null)
{
Color color = JColorChooser.showDialog(editor, "Choose Background Color", Color.white);
if ((event != null) && (event.getSource() == editor))
{
String s = event.getActionCommand();
try
{
color = Color.decode(s);
}
catch (NumberFormatException nfe)
{
}
}
if (color != null)
{
MutableAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setForeground(attr, color);
setCharacterAttributes(editor, attr, false);
}
else
{
UIManager.getLookAndFeel().provideErrorFeedback(editor);
}
}
}
}
static public class TextBackgroundAction
extends XMTextAction
{
protected JColorChooser colorChooser = new JColorChooser();
/**
* Creates a new ForegroundAction.
*
* @param nm the action name
* @param fg the foreground color
*/
public TextBackgroundAction(String nm)
{
super(nm);
}
/**
* Sets the foreground color.
*
* @param e the action event
*/
public void actionPerformed(ActionEvent event)
{
XMEditor editor = getXMEditor(event);
if (editor != null)
{
Color color = JColorChooser.showDialog(editor, "Choose Background Color", Color.white);
if ((event != null) && (event.getSource() == editor))
{
String s = event.getActionCommand();
try
{
color = Color.decode(s);
}
catch (NumberFormatException nfe)
{
}
}
if (color != null)
{
MutableAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBackground(attr, color);
setCharacterAttributes(editor, attr, false);
}
else
{
UIManager.getLookAndFeel().provideErrorFeedback(editor);
}
}
}
}
static public class BackgroundAction
extends XMTextAction
{
protected JColorChooser colorChooser = new JColorChooser();
/**
* Creates a new ForegroundAction.
*
* @param nm the action name
* @param fg the foreground color
*/
public BackgroundAction(String nm)
{
super(nm);
}
/**
* Sets the foreground color.
*
* @param e the action event
*/
public void actionPerformed(ActionEvent event)
{
XMEditor editor = getXMEditor(event);
if (editor != null)
{
Color color = JColorChooser.showDialog(editor, "Choose Background Color", editor.getBackground());
if ((event != null) && (event.getSource() == editor))
{
String s = event.getActionCommand();
try
{
color = Color.decode(s);
}
catch (NumberFormatException nfe)
{
}
}
if (color != null)
{
editor.setBackground(color);
}
else
{
UIManager.getLookAndFeel().provideErrorFeedback(editor);
}
}
}
}
static public class InsertImageAction
extends XMTextAction
{
protected JFileChooser imageFileChooser = new JFileChooser();
public InsertImageAction(String name)
{
super(name);
ExtensionFileFilter filter = new ExtensionFileFilter();
filter.addExtension("jpg");
filter.addExtension("gif");
filter.setDescription("JPG & GIF Images");
imageFileChooser.setFileFilter(filter);
}
public void actionPerformed(ActionEvent event)
{
XMEditor editor = getXMEditor(event);
if (editor != null)
{
XMEditorKit editorKit = (XMEditorKit) editor.getEditorKit();
int returnVal = imageFileChooser.showOpenDialog(editor);
if(returnVal == JFileChooser.APPROVE_OPTION)
{
File imageFile = imageFileChooser.getSelectedFile();
ImageIcon image = new ImageIcon(imageFile.getAbsolutePath());
editor.insertIcon(image);
editorKit.imageTable.put(image, imageFile);
editorKit.imageFileTable.put(imageFile.getAbsolutePath(), image);
}
}
}
}
}