// Copyright 2000, CERN, Geneva, Switzerland and University of Santa Cruz, California, U.S.A.
package org.freehep.graphicsio.test;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import javax.swing.border.Border;
import org.freehep.graphics2d.VectorGraphics;
import org.freehep.graphicsbase.util.export.ExportDialog;
/**
*
* @author Charles Loomis
* @version $Id: freehep-graphicsio-tests/src/main/java/org/freehep/graphicsio/test/TestUnicodeMap.java f493ff6e61b2 2005/12/01 18:46:43 duns $
*/
public class TestUnicodeMap extends JFrame implements ActionListener {
// Export Dialog.
ExportDialog dialog;
// The main panel.
JPanel panel;
// The symbols panel.
TestPanel symbols;
// Fill this panel with nine panels of different colors.
public TestUnicodeMap() {
// Title this frame.
super("Text Test");
// Make this exit when the close button is clicked.
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
quit();
}
});
// Create the Export dialog.
dialog = new ExportDialog();
// Make a menu bar and menu.
JMenuBar menuBar = new JMenuBar();
JMenu file = new JMenu("File");
JMenu page = new JMenu("Page");
JMenu font = new JMenu("Font");
// Add a menu item which will bring up this dialog.
JMenuItem export = new JMenuItem("Export...");
export.addActionListener(this);
file.add(export);
file.addSeparator();
// Quit menu item.
JMenuItem quit = new JMenuItem("Quit");
quit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
quit();
}
});
file.add(quit);
// Latin menu item.
JMenuItem item = new JMenuItem("Latin");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
symbols.setStartString("\u0000");
symbols.setEndString("\u00ff");
symbols.repaint();
}
});
page.add(item);
item = new JMenuItem("Greek");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
symbols.setStartString("\u0300");
symbols.setEndString("\u03ff");
symbols.repaint();
}
});
page.add(item);
item = new JMenuItem("Punctuation");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
symbols.setStartString("\u2000");
symbols.setEndString("\u20ff");
symbols.repaint();
}
});
page.add(item);
item = new JMenuItem("Arrows");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
symbols.setStartString("\u2100");
symbols.setEndString("\u21ff");
symbols.repaint();
}
});
page.add(item);
item = new JMenuItem("MathOps");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
symbols.setStartString("\u2200");
symbols.setEndString("\u22ff");
symbols.repaint();
}
});
page.add(item);
item = new JMenuItem("Dingbats");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
symbols.setStartString("\u2700");
symbols.setEndString("\u27ff");
symbols.repaint();
}
});
page.add(item);
item = new JMenuItem("Courier");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
symbols.setFont("courier");
repaint();
}
});
font.add(item);
item = new JMenuItem("Times");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
symbols.setFont("serif");
repaint();
}
});
font.add(item);
item = new JMenuItem("Helvetica");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
symbols.setFont("sansserif");
repaint();
}
});
font.add(item);
// Add this to the frame.
menuBar.add(file);
menuBar.add(page);
menuBar.add(font);
setJMenuBar(menuBar);
// Get the content pane.
Container content = this.getContentPane();
// Set the layout of this panel.
content.setLayout(new BorderLayout());
// Create a border of white surrounded by black.
Border border = BorderFactory.createCompoundBorder(BorderFactory
.createMatteBorder(1, 1, 1, 1, Color.white), BorderFactory
.createMatteBorder(2, 2, 2, 2, Color.black));
// Create a subpanel to hold the symbol panel.
panel = new JPanel();
panel.setLayout(new BorderLayout());
symbols = new TestPanel();
symbols.setBorder(border);
panel.add(symbols);
// Add this panel to this container.
content.add(panel, BorderLayout.CENTER);
}
// Action performed method used to change color map.
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source instanceof JMenuItem) {
dialog.showExportDialog(this, "Export...", panel, "untitled");
}
}
/**
* This method brings up a dialog box to ask if the user really wants to
* quit. If the answer is yes, the application is stopped.
*/
public void quit() {
// Create a dialog box to ask if the user really wants to quit.
int n = JOptionPane.showConfirmDialog(this,
"Do you really want to quit?", "Confirm Quit",
JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
// Class panel which just paints a given background color.
class TestPanel extends JPanel {
String[] label = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"A", "B", "C", "D", "E", "F" };
String startString = "\u0000";
String endString = "\u00ff";
String fontname = "serif";
int fontsize = 0;
public void setStartString(String startString) {
this.startString = startString;
}
public void setEndString(String endString) {
this.endString = endString;
}
public void setFont(String fontname) {
this.fontname = fontname;
}
public void paintComponent(Graphics g) {
if (g != null) {
VectorGraphics vg = VectorGraphics.create(g);
Dimension dim = getSize();
Insets insets = getInsets();
vg.setColor(Color.white);
vg
.fillRect(insets.left, insets.top, dim.width
- insets.left - insets.right, dim.height
- insets.top - insets.bottom);
int dw = dim.width / 17;
int dh = dim.height / 17;
vg.setColor(Color.black);
fontsize = dh * 2 / 3;
Font font = new Font(fontname, Font.ITALIC, fontsize);
vg.setFont(font);
StringBuffer character = new StringBuffer(" ");
int iy = dh / 2 + dh;
int ix = dw / 2 + dw;
for (int i = 0; i < 16; i++) {
vg.drawString(label[i], dw / 2, iy,
VectorGraphics.TEXT_CENTER,
VectorGraphics.TEXT_CENTER, false, Color.cyan, 2,
false, Color.yellow);
vg.drawString(label[i], ix, dh / 2,
VectorGraphics.TEXT_CENTER,
VectorGraphics.TEXT_CENTER, false, Color.cyan, 2,
false, Color.yellow);
iy += dh;
ix += dw;
}
iy = dh / 2 + dh;
ix = dw / 2;
for (int i = (int) startString.charAt(0); i <= (int) endString
.charAt(0); i++) {
if (i % 16 == 0) {
iy = dh / 2 + dh;
ix += dw;
}
character.setCharAt(0, (char) i);
vg.drawString(character.toString(), ix, iy,
VectorGraphics.TEXT_CENTER,
VectorGraphics.TEXT_CENTER, false, Color.cyan, 2,
true, Color.yellow);
iy += dh;
}
}
}
}
public static void main(String[] args) {
// Create a new instance of this class and add it to the frame.
TestUnicodeMap test = new TestUnicodeMap();
// Give the frame a size and make it visible.
test.pack();
test.setSize(new Dimension(400, 600));
test.setVisible(true);
}
}