209 lines
6.0 KiB
Java
209 lines
6.0 KiB
Java
/*
|
|
|
|
Copyright 2006 Rene Grothmann, modified by Eric Hakenholz
|
|
|
|
This file is part of C.a.R. software.
|
|
|
|
C.a.R. is a free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, version 3 of the License.
|
|
|
|
C.a.R. 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 General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
package rene.dialogs;
|
|
|
|
import java.awt.BorderLayout;
|
|
import java.awt.Canvas;
|
|
import java.awt.Checkbox;
|
|
import java.awt.Choice;
|
|
import java.awt.Dimension;
|
|
import java.awt.Font;
|
|
import java.awt.FontMetrics;
|
|
import java.awt.Frame;
|
|
import java.awt.Graphics;
|
|
import java.awt.GraphicsEnvironment;
|
|
import java.awt.GridLayout;
|
|
import java.awt.TextField;
|
|
|
|
import eric.JEricPanel;
|
|
|
|
import rene.gui.ButtonAction;
|
|
import rene.gui.CheckboxAction;
|
|
import rene.gui.ChoiceAction;
|
|
import rene.gui.CloseDialog;
|
|
import rene.gui.Global;
|
|
import rene.gui.IntField;
|
|
import rene.gui.MyLabel;
|
|
import rene.gui.MyPanel;
|
|
import rene.gui.Panel3D;
|
|
import rene.gui.TextFieldAction;
|
|
|
|
/**
|
|
* A canvas to display a sample of the chosen font. The samples is drawn from
|
|
* the GetFontSize dialog.
|
|
*/
|
|
|
|
class ExampleCanvas extends Canvas {
|
|
/**
|
|
*
|
|
*/
|
|
private static final long serialVersionUID = 1L;
|
|
FontEditor GFS;
|
|
|
|
public ExampleCanvas(final FontEditor gfs) {
|
|
GFS = gfs;
|
|
}
|
|
|
|
@Override
|
|
public void paint(final Graphics g) {
|
|
GFS.example(g, getSize().width, getSize().height);
|
|
}
|
|
|
|
@Override
|
|
public Dimension getPreferredSize() {
|
|
return new Dimension(200, 100);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* A dialog to get the font size of the fixed font and its name. Both items are
|
|
* stored as a Global Parameter.
|
|
*/
|
|
|
|
public class FontEditor extends CloseDialog {
|
|
/**
|
|
*
|
|
*/
|
|
private static final long serialVersionUID = 1L;
|
|
String FontTag;
|
|
TextField FontName;
|
|
IntField FontSize, FontSpacing;
|
|
Choice Fonts, Mode;
|
|
Canvas Example;
|
|
String E = Global.name("fonteditor.sample");
|
|
Checkbox Smooth;
|
|
|
|
/**
|
|
* @param fonttag
|
|
* ,fontdef the font name resource tag and its default value
|
|
* @param sizetag
|
|
* ,sizedef the font size resource tag and its default value
|
|
*/
|
|
public FontEditor(final Frame f, final String fonttag,
|
|
final String fontdef, final int sizedef) {
|
|
super(f, Global.name("fonteditor.title"), true);
|
|
FontTag = fonttag;
|
|
setLayout(new BorderLayout());
|
|
final JEricPanel p = new MyPanel();
|
|
p.setLayout(new GridLayout(0, 2));
|
|
p.add(new MyLabel(Global.name("fonteditor.name")));
|
|
p.add(FontName = new TextFieldAction(this, "FontName"));
|
|
FontName.setText(Global.getParameter(fonttag + ".name", fontdef));
|
|
p.add(new MyLabel(Global.name("fonteditor.available")));
|
|
// p.add(Fonts = new ChoiceAction(this, "Fonts"));
|
|
final String[] fonts = GraphicsEnvironment
|
|
.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
|
|
// String[] fonts=Toolkit.getDefaultToolkit().getFontList();
|
|
if (fonts != null) {
|
|
for (final String font2 : fonts) {
|
|
Fonts.add(font2);
|
|
}
|
|
} else {
|
|
Fonts.add("Dialog");
|
|
Fonts.add("SansSerif");
|
|
Fonts.add("Serif");
|
|
Fonts.add("Monospaced");
|
|
Fonts.add("DialogInput");
|
|
}
|
|
Fonts.add("Courier");
|
|
Fonts.add("TimesRoman");
|
|
Fonts.add("Helvetica");
|
|
Fonts.select(FontName.getText());
|
|
p.add(new MyLabel(Global.name("fonteditor.mode")));
|
|
// p.add(Mode = new ChoiceAction(this, "Mode"));
|
|
Mode.add(Global.name("fonteditor.plain"));
|
|
Mode.add(Global.name("fonteditor.bold"));
|
|
Mode.add(Global.name("fonteditor.italic"));
|
|
final String name = Global.getParameter(fonttag + ".mode", "plain");
|
|
if (name.startsWith("bold"))
|
|
Mode.select(1);
|
|
else if (name.startsWith("italic"))
|
|
Mode.select(2);
|
|
else
|
|
Mode.select(0);
|
|
p.add(new MyLabel(Global.name("fonteditor.size")));
|
|
p.add(FontSize = new IntField(this, "FontSize", Global.getParameter(
|
|
fonttag + ".size", sizedef)));
|
|
p.add(new MyLabel(Global.name("fonteditor.spacing")));
|
|
p.add(FontSpacing = new IntField(this, "FontSpacing", Global
|
|
.getParameter(fonttag + ".spacing", 0)));
|
|
p.add(new MyLabel(Global.name("fonteditor.antialias")));
|
|
p.add(Smooth = new CheckboxAction(this, "", "Smooth"));
|
|
Smooth.setState(Global.getParameter("font.smooth", true));
|
|
add("North", new Panel3D(p));
|
|
Example = new ExampleCanvas(this);
|
|
add("Center", new Panel3D(Example));
|
|
final JEricPanel bp = new MyPanel();
|
|
bp.add(new ButtonAction(this, Global.name("OK"), "OK"));
|
|
bp.add(new ButtonAction(this, Global.name("close"), "Close"));
|
|
add("South", new Panel3D(bp));
|
|
pack();
|
|
}
|
|
|
|
@Override
|
|
public void doAction(final String o) {
|
|
if ("OK".equals(o)) {
|
|
Global.setParameter(FontTag + ".name", FontName.getText());
|
|
String s = "plain";
|
|
if (mode() == Font.BOLD)
|
|
s = "bold";
|
|
else if (mode() == Font.ITALIC)
|
|
s = "Italic";
|
|
Global.setParameter(FontTag + ".mode", s);
|
|
Global.setParameter(FontTag + ".size", FontSize.value(3, 50));
|
|
Global.setParameter(FontTag + ".spacing", FontSpacing
|
|
.value(-10, 10));
|
|
Global.setParameter("font.smooth", Smooth.getState());
|
|
doclose();
|
|
} else
|
|
super.doAction(o);
|
|
Example.repaint();
|
|
}
|
|
|
|
@Override
|
|
public void itemAction(final String s, final boolean flag) {
|
|
FontName.setText(Fonts.getSelectedItem());
|
|
Example.repaint();
|
|
}
|
|
|
|
int mode() {
|
|
if (Mode.getSelectedItem().equals(Global.name("fonteditor.bold")))
|
|
return Font.BOLD;
|
|
else if (Mode.getSelectedItem()
|
|
.equals(Global.name("fonteditor.italic")))
|
|
return Font.ITALIC;
|
|
else
|
|
return Font.PLAIN;
|
|
}
|
|
|
|
public void example(final Graphics g, final int w, final int h) {
|
|
final Font f = new Font(FontName.getText(), mode(), FontSize.value(3,
|
|
50));
|
|
g.setFont(f);
|
|
final FontMetrics fm = g.getFontMetrics();
|
|
final int d = FontSpacing.value(-10, 10);
|
|
for (int i = 1; i <= 4; i++)
|
|
g.drawString(E, 5, 5 + d + i * d + fm.getLeading() + fm.getAscent()
|
|
+ i * fm.getHeight());
|
|
}
|
|
}
|