Back to index

wims  3.65+svn20090927
FontEditor.java
Go to the documentation of this file.
00001 package rene.dialogs;
00002 
00003 import java.awt.BorderLayout;
00004 import java.awt.Canvas;
00005 import java.awt.Checkbox;
00006 import java.awt.Choice;
00007 import java.awt.Dimension;
00008 import java.awt.Font;
00009 import java.awt.FontMetrics;
00010 import java.awt.Frame;
00011 import java.awt.Graphics;
00012 import java.awt.GridLayout;
00013 import java.awt.Panel;
00014 import java.awt.TextField;
00015 import java.awt.Toolkit;
00016 
00017 import rene.gui.ButtonAction;
00018 import rene.gui.CheckboxAction;
00019 import rene.gui.ChoiceAction;
00020 import rene.gui.CloseDialog;
00021 import rene.gui.Global;
00022 import rene.gui.IntField;
00023 import rene.gui.MyLabel;
00024 import rene.gui.MyPanel;
00025 import rene.gui.Panel3D;
00026 import rene.gui.TextFieldAction;
00027 
00033 class ExampleCanvas extends Canvas
00034 {   FontEditor GFS;
00035     public ExampleCanvas (FontEditor gfs)
00036     {   GFS=gfs;
00037     }
00038     public void paint (Graphics g)
00039     {   GFS.example(g,getSize().width,getSize().height);
00040     }
00041     public Dimension getPreferredSize ()
00042     {  return new Dimension(200,100);
00043     }
00044 }
00045 
00051 public class FontEditor extends CloseDialog
00052 {      String FontTag;
00053        TextField FontName;
00054        IntField FontSize,FontSpacing;
00055        Choice Fonts,Mode;
00056        Canvas Example;
00057        String E=Global.name("fonteditor.sample");
00058        Checkbox Smooth;
00063        public FontEditor (Frame f, String fonttag,
00064               String fontdef, int sizedef)
00065        {      super(f,Global.name("fonteditor.title"),true);
00066               FontTag=fonttag;
00067               setLayout(new BorderLayout());
00068               Panel p=new MyPanel();
00069               p.setLayout(new GridLayout(0,2));
00070               p.add(new MyLabel(Global.name("fonteditor.name")));
00071               p.add(FontName=new TextFieldAction(this,"FontName"));
00072               FontName.setText(Global.getParameter(fonttag+".name",fontdef));
00073               p.add(new MyLabel(Global.name("fonteditor.available")));
00074               p.add(Fonts=new ChoiceAction(this,"Fonts"));
00075               String[] fonts=Toolkit.getDefaultToolkit().getFontList();
00076               if (fonts!=null)
00077               {      for (int i=0; i<fonts.length; i++)
00078                      {   Fonts.add(fonts[i]);
00079                      }
00080               }
00081               else
00082               {      Fonts.add("Dialog");
00083                      Fonts.add("SansSerif");
00084                      Fonts.add("Serif");
00085                      Fonts.add("Monospaced");
00086                      Fonts.add("DialogInput");
00087               }
00088               Fonts.add("Courier");
00089               Fonts.add("TimesRoman");
00090               Fonts.add("Helvetica");
00091               Fonts.select(FontName.getText());
00092               p.add(new MyLabel(Global.name("fonteditor.mode")));
00093               p.add(Mode=new ChoiceAction(this,"Mode"));
00094               Mode.add(Global.name("fonteditor.plain"));
00095               Mode.add(Global.name("fonteditor.bold"));
00096               Mode.add(Global.name("fonteditor.italic"));
00097               String name=Global.getParameter(fonttag+".mode","plain");
00098            if (name.startsWith("bold")) Mode.select(1);
00099            else if (name.startsWith("italic")) Mode.select(2);
00100            else Mode.select(0);
00101               p.add(new MyLabel(Global.name("fonteditor.size")));
00102               p.add(FontSize=new IntField(this,"FontSize",
00103                      Global.getParameter(fonttag+".size",sizedef)));
00104               p.add(new MyLabel(Global.name("fonteditor.spacing")));
00105               p.add(FontSpacing=new IntField(this,"FontSpacing",
00106                      Global.getParameter(fonttag+".spacing",0)));
00107               p.add(new MyLabel(Global.name("fonteditor.antialias")));
00108               p.add(Smooth=new CheckboxAction(this,"","Smooth"));
00109               Smooth.setState(Global.getParameter("font.smooth",true));
00110               add("North",new Panel3D(p));
00111               Example=new ExampleCanvas(this);
00112               add("Center",new Panel3D(Example));
00113               Panel bp=new MyPanel();
00114               bp.add(new ButtonAction(this,Global.name("OK"),"OK"));
00115               bp.add(new ButtonAction(this,Global.name("close"),"Close"));
00116               add("South",new Panel3D(bp));
00117               pack();
00118        }
00119        public void doAction (String o)
00120        {      if ("OK".equals(o))
00121            {  Global.setParameter(FontTag+".name",FontName.getText());
00122                      String s="plain";
00123               if (mode()==Font.BOLD) s="bold";
00124               else if (mode()==Font.ITALIC) s="Italic";
00125               Global.setParameter(FontTag+".mode",s);
00126                   Global.setParameter(FontTag+".size",FontSize.value(3,50));
00127                   Global.setParameter(FontTag+".spacing",FontSpacing.value(-10,10));
00128                   Global.setParameter("font.smooth",Smooth.getState());
00129                   doclose();
00130        }
00131               else super.doAction(o);
00132         Example.repaint();
00133        }
00134        public void itemAction (String s, boolean flag)
00135        {   FontName.setText(Fonts.getSelectedItem());
00136            Example.repaint();
00137        }
00138        int mode ()
00139        {   if (Mode.getSelectedItem().equals(Global.name("fonteditor.bold")))
00140                return Font.BOLD;
00141            else if (Mode.getSelectedItem().equals(Global.name("fonteditor.italic")))
00142                return Font.ITALIC;
00143            else return Font.PLAIN;
00144        }
00145        public void example (Graphics g, int w, int h)
00146        {   Font f=new Font(FontName.getText(),mode(),FontSize.value(3,50));
00147            g.setFont(f);
00148            FontMetrics fm=g.getFontMetrics();
00149            int d=FontSpacing.value(-10,10);
00150            for (int i=1; i<=4; i++)
00151                g.drawString(E,5,
00152                      5+d+i*d+fm.getLeading()+fm.getAscent()+i*fm.getHeight());
00153        }
00154 }