/*
* FontDialog.java
*
* Created on 26 juillet 2008, 13:21
*/
package feuille.lib;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import javax.swing.DefaultListModel;
/**
* <p>This is a dialog for the choice of font.<br />
* C'est une boîte de dialogue pour le choix de police.</p>
* @author The Wingate 2940
*/
public class FontDialog extends javax.swing.JDialog {
private ButtonPressed bp;
private Font f;
private Font[] flist;
private List<FontX> fxlist = new ArrayList<FontX>();
private DefaultListModel lmFont;
private DefaultListModel lmStyle;
private DefaultListModel lmSize;
private String sPlain = "Normal";
private String sItalic = "Italic";
private String sBold = "Bold";
private String sBoldItalic = "Bold Italic";
private Language localeLanguage = feuille.MainFrame.getLanguage();
public enum ButtonPressed{
NONE, OK_BUTTON, CANCEL_BUTTON;
}
public enum FontStyle{
PLAIN, BOLD, ITALIC, BOLDITALIC;
}
public enum FontType{
TRUETYPE, OPENTYPE, POSTSCRIPT_TYPE1, SCREEN;
}
/** <p>Creates new form FontDialog.<hr />
* Cr�e une nouvelle dialogue FontDialog.</p> */
public FontDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
setSize(485,360);
bp = ButtonPressed.NONE;
lmFont = new DefaultListModel();
lstFont.setModel(lmFont);
lmStyle = new DefaultListModel();
lstStyle.setModel(lmStyle);
lmSize = new DefaultListModel();
lstSize.setModel(lmSize);
lmSize.addElement(8); lmSize.addElement(9); lmSize.addElement(10);
lmSize.addElement(11); lmSize.addElement(12); lmSize.addElement(14);
lmSize.addElement(16); lmSize.addElement(18); lmSize.addElement(20);
lmSize.addElement(22); lmSize.addElement(24); lmSize.addElement(26);
lmSize.addElement(28); lmSize.addElement(36); lmSize.addElement(48);
lmSize.addElement(52); lmSize.addElement(64); lmSize.addElement(72);
getFontXList();
String lastFx = null;
for (FontX fx : fxlist){
if(fx.getFamily().equals(lastFx)==false){
lmFont.addElement(fx);
}
// TODO - Ajouter support police verticale "@"+font.getFamily()
lastFx = fx.getFamily();
}
// System.out.println("Taille de la liste : "+lmFont.size());
// System.out.println("Nombre de polices au total : "+flist.length);
//Force visibility
setAlwaysOnTop(true);
javax.swing.border.TitledBorder tb;
if(localeLanguage.getValueOf("titleFDL")!=null){setTitle(localeLanguage.getValueOf("titleFDL"));}
if(localeLanguage.getValueOf("buttonOk")!=null){OK_Button.setText(localeLanguage.getValueOf("buttonOk"));}
if(localeLanguage.getValueOf("buttonCancel")!=null){Cancel_Button.setText(localeLanguage.getValueOf("buttonCancel"));}
tb = (javax.swing.border.TitledBorder)panFont.getBorder();
if(localeLanguage.getValueOf("tbdFont")!=null){tb.setTitle(localeLanguage.getValueOf("tbdFont"));}
tb = (javax.swing.border.TitledBorder)panStyle.getBorder();
if(localeLanguage.getValueOf("tbdStyle")!=null){tb.setTitle(localeLanguage.getValueOf("tbdStyle"));}
tb = (javax.swing.border.TitledBorder)panSize.getBorder();
if(localeLanguage.getValueOf("tbdSize")!=null){tb.setTitle(localeLanguage.getValueOf("tbdSize"));}
tb = (javax.swing.border.TitledBorder)panPreview.getBorder();
if(localeLanguage.getValueOf("tbdPreview")!=null){tb.setTitle(localeLanguage.getValueOf("tbdPreview"));}
// setCommonFont(assfxmaker.AssFxMaker.getDefaultFont(), getContentPane().getComponents());
}
/** <p>Creates new form FontDialog with a fonts list initialization.<hr />
* Cr�e une nouvelle dialogue FontDialog avec une liste de polices.</p> */
public FontDialog(java.awt.Frame parent, boolean modal, Font[] flist) {
super(parent, modal);
initComponents();
setSize(410,380);
bp = ButtonPressed.NONE;
lmSize.addElement(8); lmSize.addElement(9); lmSize.addElement(10);
lmSize.addElement(11); lmSize.addElement(12); lmSize.addElement(14);
lmSize.addElement(16); lmSize.addElement(18); lmSize.addElement(20);
lmSize.addElement(22); lmSize.addElement(24); lmSize.addElement(26);
lmSize.addElement(28); lmSize.addElement(36); lmSize.addElement(48);
lmSize.addElement(52); lmSize.addElement(64); lmSize.addElement(72);
this.flist = flist;
}
/** <p>Set the font.<br />D&finit la police.</p> */
@Override
public void setFont(Font f){
this.f = f;
tfFont.setText(f.getFamily());
switch(f.getStyle()){
case Font.PLAIN: tfStyle.setText(sPlain); break;
case Font.BOLD: tfStyle.setText(sBold); break;
case Font.ITALIC: tfStyle.setText(sItalic); break;
case Font.BOLD+Font.ITALIC: tfStyle.setText(sBoldItalic); break;
default : tfStyle.setText(sPlain); break;
}
tfSize.setText(f.getSize()+"");
}
/** <p>Get the font.<br />Obtient la police.</p> */
@Override
public Font getFont(){
try{
Font newFont = new Font(tfFont.getText(),
getFontStyleFromText(),Integer.parseInt(tfSize.getText()));
return newFont;
}catch(Exception exc){
return f;
}
}
/** <p>Show the dialog and wait for a font choosen by user.<br />
* Montre la dialogue et attent une police choisit par l'utilisateur.</p> */
public Font showDialog(Font f){
setFont(f);
setVisible(true);
if(bp.equals(ButtonPressed.OK_BUTTON)){
return getFont();
}else{
return f;
}
}
/** <p>Search for fonts of the operating system.<br />
* Recherche les polices pr�sente sur le syst�me.</p> */
private void searchFonts(){
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
flist = ge.getAllFonts();
}
/** <p>Get the font list.<br />
* Obtient la liste des polices.</p> */
public Font[] getFonts(){
return flist;
}
/** <p>Set the font list.<br />
* D�finit la liste des polices.</p> */
public void setFonts(Font[] flist){
this.flist = flist;
}
/** <p>Select a font from its name.<br />
* Sélectionne une police à partir de son nom.</p> */
public void selectFont(String fontname){
lmStyle.clear();
// lmSize.clear();
// Affiche la police dans la zone de texte.
tfFont.setText(fontname);
// Renseigne les styles disponibles pour cette police.
for (FontX fx : fxlist){
FontX fxSel = (FontX)lstFont.getSelectedValue();
if(fxSel.getFamily().equals(fx.getFamily())){
switch(fx.getFontStyle()){
case PLAIN:
if(lmStyle.contains(sPlain)==false){
lmStyle.addElement(sPlain);
}
break;
case ITALIC:
if(lmStyle.contains(sItalic)==false){
lmStyle.addElement(sItalic);
}
break;
case BOLD:
if(lmStyle.contains(sBold)==false){
lmStyle.addElement(sBold);
}
break;
case BOLDITALIC:
if(lmStyle.contains(sBoldItalic)==false){
lmStyle.addElement(sBoldItalic);
}
break;
}
}
}
// S�lectionne le premier style.
lstStyle.setSelectedIndex(0);
// Renseigne les tailles.
// On ne met pas de taille pr�d�fini si il y a une taille fixe.
// lmSize.addElement(8); lmSize.addElement(9); lmSize.addElement(10);
// lmSize.addElement(11); lmSize.addElement(12); lmSize.addElement(14);
// lmSize.addElement(16); lmSize.addElement(18); lmSize.addElement(20);
// lmSize.addElement(22); lmSize.addElement(24); lmSize.addElement(26);
// lmSize.addElement(28); lmSize.addElement(36); lmSize.addElement(48);
// lmSize.addElement(52); lmSize.addElement(64); lmSize.addElement(72);
// S�lectionne le premier style.
if(lstSize.getSelectedValue()==null){
lstSize.setSelectedIndex(9);
}
// S�lectionne le premier style.
if(lmSize.getSize()>1){
lstStyle.setSelectedIndex(4);
}else{
lstStyle.setSelectedIndex(0);
}
// Rafraichit la police de l'aper�u.
refreshPreview();
}
/** <p>Refresh the preview of the font.<br />
* Rafraichit la police de l'aper�u.</p> */
public void refreshPreview(){
FontX fx = (FontX)lstFont.getSelectedValue();
String style = lstStyle.getSelectedValue().toString();
float size = 22;
if(lstSize.getSelectedValue()!=null){
size = Float.parseFloat(lstSize.getSelectedValue().toString());
}
Font fpreview = fx.getFont().deriveFont(Font.PLAIN, size);
if(style.equals(sPlain)){
fpreview = fpreview.deriveFont(Font.PLAIN);
}else if(style.equals(sItalic)){
fpreview = fpreview.deriveFont(Font.ITALIC);
}else if(style.equals(sBold)){
fpreview = fpreview.deriveFont(Font.BOLD);
}else if(style.equals(sBoldItalic)){
fpreview = fpreview.deriveFont(Font.BOLD+Font.ITALIC);
}
lblPreview.setFont(fpreview);
}
/** <p>Get a fontX list.<br />Obtient une liste de policeX</p> */
private List<FontX> getFontXList(){
fxlist.clear();
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
flist = ge.getAllFonts();
for (Font font : flist){
FontX fx = new FontX(font);
//System.out.println(fx.getFontName() + " - " + fx.getFontStyle());
if (fxlist.contains(fx)==false){
fxlist.add(fx);
}
}
return fxlist;
}
/** <p>Get the font style from the text.<br />
* Obtient un style de police à partir du texte.</p> */
private int getFontStyleFromText(){
if(tfStyle.getText().equalsIgnoreCase(sPlain)){return Font.PLAIN;}
if(tfStyle.getText().equalsIgnoreCase(sBold)){return Font.BOLD;}
if(tfStyle.getText().equalsIgnoreCase(sItalic)){return Font.ITALIC;}
if(tfStyle.getText().equalsIgnoreCase(sBoldItalic)){return Font.BOLD+Font.ITALIC;}
return Font.PLAIN;//Otherwise
}
private void setCommonFont(Font f, java.awt.Component[] comps){
for(java.awt.Component c : comps){
if (c instanceof javax.swing.JComponent){
javax.swing.JComponent jcomp = (javax.swing.JComponent)c;
Font origin = jcomp.getFont();
if(origin.isPlain()){
jcomp.setFont(f);
}else{
jcomp.setFont(f.deriveFont(origin.getStyle(), origin.getSize2D()));
}
setCommonFont(f, jcomp.getComponents());
}
if (c instanceof javax.swing.JPanel){
javax.swing.JPanel pan = (javax.swing.JPanel)c;
javax.swing.border.Border bord = pan.getBorder();
if (bord instanceof javax.swing.border.TitledBorder){
javax.swing.border.TitledBorder tb = (javax.swing.border.TitledBorder)bord;
Font origin = tb.getTitleFont();
if(origin.isPlain()){
tb.setTitleFont(f);
}else{
tb.setTitleFont(f.deriveFont(origin.getStyle(), origin.getSize2D()));
}
}
}
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
popFont = new javax.swing.JPopupMenu();
mnuAbcd = new javax.swing.JMenuItem();
mnuEn = new javax.swing.JMenuItem();
mnuFr = new javax.swing.JMenuItem();
mnuSp = new javax.swing.JMenuItem();
Cancel_Button = new javax.swing.JButton();
OK_Button = new javax.swing.JButton();
panFont = new javax.swing.JPanel();
tfFont = new javax.swing.JTextField();
spFont = new javax.swing.JScrollPane();
lstFont = new javax.swing.JList();
panStyle = new javax.swing.JPanel();
tfStyle = new javax.swing.JTextField();
spStyle = new javax.swing.JScrollPane();
lstStyle = new javax.swing.JList();
panSize = new javax.swing.JPanel();
tfSize = new javax.swing.JTextField();
spSize = new javax.swing.JScrollPane();
lstSize = new javax.swing.JList();
panPreview = new javax.swing.JPanel();
lblPreview = new javax.swing.JLabel();
mnuAbcd.setText("ABCD abcd");
mnuAbcd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mnuAbcdActionPerformed(evt);
}
});
popFont.add(mnuAbcd);
mnuEn.setText("English");
mnuEn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mnuEnActionPerformed(evt);
}
});
popFont.add(mnuEn);
mnuFr.setText("Français");
mnuFr.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mnuFrActionPerformed(evt);
}
});
popFont.add(mnuFr);
mnuSp.setText("Español");
mnuSp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mnuSpActionPerformed(evt);
}
});
popFont.add(mnuSp);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Choose a font...");
getContentPane().setLayout(null);
Cancel_Button.setText("Cancel");
Cancel_Button.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Cancel_ButtonActionPerformed(evt);
}
});
getContentPane().add(Cancel_Button);
Cancel_Button.setBounds(360, 290, 100, 23);
OK_Button.setText("OK");
OK_Button.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
OK_ButtonActionPerformed(evt);
}
});
getContentPane().add(OK_Button);
OK_Button.setBounds(250, 290, 100, 23);
panFont.setBorder(javax.swing.BorderFactory.createTitledBorder("Font"));
panFont.setLayout(null);
panFont.add(tfFont);
tfFont.setBounds(10, 20, 260, 30);
lstFont.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
lstFont.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
lstFontValueChanged(evt);
}
});
spFont.setViewportView(lstFont);
panFont.add(spFont);
spFont.setBounds(10, 60, 260, 100);
getContentPane().add(panFont);
panFont.setBounds(0, 0, 280, 170);
panStyle.setBorder(javax.swing.BorderFactory.createTitledBorder("Style"));
panStyle.setLayout(null);
panStyle.add(tfStyle);
tfStyle.setBounds(10, 20, 90, 30);
lstStyle.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
lstStyle.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
lstStyleValueChanged(evt);
}
});
spStyle.setViewportView(lstStyle);
panStyle.add(spStyle);
spStyle.setBounds(10, 60, 90, 100);
getContentPane().add(panStyle);
panStyle.setBounds(280, 0, 110, 170);
panSize.setBorder(javax.swing.BorderFactory.createTitledBorder("Size"));
panSize.setLayout(null);
panSize.add(tfSize);
tfSize.setBounds(10, 20, 60, 30);
lstSize.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "10", "12", "18", "24", "36", "102" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
lstSize.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
lstSize.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
lstSizeValueChanged(evt);
}
});
spSize.setViewportView(lstSize);
panSize.add(spSize);
spSize.setBounds(10, 60, 60, 100);
getContentPane().add(panSize);
panSize.setBounds(390, 0, 80, 170);
panPreview.setBorder(javax.swing.BorderFactory.createTitledBorder("Preview"));
panPreview.setLayout(null);
lblPreview.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblPreview.setText("<html>ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />\nabcdefghijklmnopqrstuvwxyz<br />\n0123456789</html>");
lblPreview.setComponentPopupMenu(popFont);
panPreview.add(lblPreview);
lblPreview.setBounds(10, 20, 450, 80);
getContentPane().add(panPreview);
panPreview.setBounds(0, 170, 470, 110);
pack();
}// </editor-fold>//GEN-END:initComponents
private void OK_ButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_OK_ButtonActionPerformed
bp = ButtonPressed.OK_BUTTON;
dispose();
}//GEN-LAST:event_OK_ButtonActionPerformed
private void Cancel_ButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Cancel_ButtonActionPerformed
bp = ButtonPressed.CANCEL_BUTTON;
dispose();
}//GEN-LAST:event_Cancel_ButtonActionPerformed
private void lstFontValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_lstFontValueChanged
// Change the font.
selectFont(lstFont.getSelectedValue().toString());
}//GEN-LAST:event_lstFontValueChanged
private void lstStyleValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_lstStyleValueChanged
// Change the style of the font.
try{
tfStyle.setText(lmStyle.getElementAt(lstStyle.getSelectedIndex()).toString());
// Rafraichit la police de l'aper�u.
refreshPreview();
}catch (ArrayIndexOutOfBoundsException aioobe){
}
}//GEN-LAST:event_lstStyleValueChanged
private void mnuAbcdActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuAbcdActionPerformed
lblPreview.setText("<html>ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />" +
"abcdefghijklmnopqrstuvwxyz<br />" +
"0123456789</html>");
}//GEN-LAST:event_mnuAbcdActionPerformed
private void mnuEnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuEnActionPerformed
lblPreview.setText("<html>It doesn't matter...<br />" +
"Enjoy it!</html>");
}//GEN-LAST:event_mnuEnActionPerformed
private void mnuFrActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuFrActionPerformed
lblPreview.setText("<html>À cœur vaillant rien d'impossible.<br />" +
"Il n'y a que la vérité qui blesse.</html>");
}//GEN-LAST:event_mnuFrActionPerformed
private void mnuSpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuSpActionPerformed
lblPreview.setText("<html>Pensar en la mañana.<br />" +
"¿Verdad que es bonita?</html>");
}//GEN-LAST:event_mnuSpActionPerformed
private void lstSizeValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_lstSizeValueChanged
// Change size of the font.
tfSize.setText(lmSize.getElementAt(lstSize.getSelectedIndex()).toString());
refreshPreview();
}//GEN-LAST:event_lstSizeValueChanged
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
FontDialog dialog = new FontDialog(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton Cancel_Button;
private javax.swing.JButton OK_Button;
private javax.swing.JLabel lblPreview;
private javax.swing.JList lstFont;
private javax.swing.JList lstSize;
private javax.swing.JList lstStyle;
private javax.swing.JMenuItem mnuAbcd;
private javax.swing.JMenuItem mnuEn;
private javax.swing.JMenuItem mnuFr;
private javax.swing.JMenuItem mnuSp;
private javax.swing.JPanel panFont;
private javax.swing.JPanel panPreview;
private javax.swing.JPanel panSize;
private javax.swing.JPanel panStyle;
private javax.swing.JPopupMenu popFont;
private javax.swing.JScrollPane spFont;
private javax.swing.JScrollPane spSize;
private javax.swing.JScrollPane spStyle;
private javax.swing.JTextField tfFont;
private javax.swing.JTextField tfSize;
private javax.swing.JTextField tfStyle;
// End of variables declaration//GEN-END:variables
/** Cette classe facilite la lecture des fontes. */
public class FontX extends Object{
Font f = null;
FontStyle fs = FontStyle.PLAIN;
FontType ft = FontType.SCREEN;
/** Initialise une police et un style normal. */
public FontX(Font f){
this.f = f;
initFontStyle(f);
}
/** Initialise une police et son style. */
public FontX(Font f, FontStyle fs){
this.f = f;
this.fs = fs;
}
/** D�finit une police. */
public void setFont(Font f){
this.f = f;
}
/** Obtient une police. */
public Font getFont(){
return f;
}
/** Obtient la famille d'une police. */
public String getFamily(){
return f.getFamily();
}
/** Obtient le nom d'une police. */
public String getFontName(){
return f.getFontName(Locale.US);
}
/** Obtient le nom PostScript d'une police. */
public String getPSName(){
return f.getPSName();
}
/** Obtient le nom complet d'une police. */
public String getName(){
return f.getName();
}
/** Obtient le nom complet d'une police. */
@Override
public String toString(){
return getFamily();
}
/** D�finit un style. */
public void setFontStyle(FontStyle fs){
this.fs = fs;
}
/** D�finit le style. */
private void initFontStyle(Font font){
if(font.getFontName(Locale.US)
.toLowerCase().endsWith("bold italic")
&& font.getFontName(Locale.US)
.length() > "bold italic".length()){
fs = FontStyle.BOLDITALIC;
}else if(font.getFontName(Locale.US)
.toLowerCase().endsWith("bold-italic")
&& font.getFontName(Locale.US)
.length() > "bold-italic".length()){
fs = FontStyle.BOLDITALIC;
}else if(font.getFontName(Locale.US)
.toLowerCase().endsWith("bolditalic")
&& font.getFontName(Locale.US)
.length() > "bolditalic".length()){
fs = FontStyle.BOLDITALIC;
}else if(font.getFontName(Locale.US)
.toLowerCase().endsWith("italic")
&& font.getFontName(Locale.US)
.length() > "italic".length()){
fs = FontStyle.ITALIC;
}else if(font.getFontName(Locale.US)
.toLowerCase().endsWith("bold")
&& font.getFontName(Locale.US)
.length() > "bold".length()){
fs = FontStyle.BOLD;
}else{
fs = FontStyle.PLAIN;
}
}
/** Obtient un style. */
public FontStyle getFontStyle(){
return fs;
}
/** Obtient un type. */
public FontType getFontType(){
return ft;
}
}
}