package uk.ac.reload.editor.style;

import uk.ac.reload.editor.EditorFrame;


//Esta clase es el TableCellEditor proporcionado para editar los objetos (propiedades)
//de la clase java.awt.Color;
public class FontEditor extends javax.swing.AbstractCellEditor implements CellEditor,java.awt.event.ActionListener {
    
    //El PreferencesCellEditor que delegó en este editor (para notificaciones)
    private PreferencesCellEditor oEditor;
    
   //Variable que almacena el valor editado.
     private Object editedValue;
    
   
     public FontEditor() {};
    
    
    //Método que devuelve el editor para su presentación en la tabla.
    //Es un panel con un botón para lanzar un FontChooser.
     public java.awt.Component getTableCellEditorComponent(javax.swing.JTable oTable,Object oValue,boolean isSelected,int iRow,int iColumn) {
        javax.swing.JPanel oPanel = new javax.swing.JPanel();
        javax.swing.JLabel oJLabel= new javax.swing.JLabel();
        if (oValue!=null) {
            this.editedValue=oValue;
            java.awt.Font oFont = (java.awt.Font) oValue;
            String sStyle=null;
            switch(oFont.getStyle()) {
                case 0: sStyle="plain";
                break;
                case 1: sStyle="bold";
                break;
                case 2: sStyle="italic";
                break;
                case 3: sStyle="bold + italic";
                break;
            }
            
            oJLabel.setText(oFont.getFamily()+" "+sStyle+" "+oFont.getSize());
        }
        javax.swing.JButton oButton = new javax.swing.JButton("E");
        oButton.addActionListener(this);
        oPanel.setLayout(new java.awt.GridBagLayout());
        java.awt.Rectangle oRect = oTable.getCellRect(iRow,iColumn,true);
        oButton.setSize(20, oRect.height);
        oButton.setMinimumSize(oButton.getSize());
        oJLabel.setSize(oRect.width-20,oRect.height);
        oJLabel.setMinimumSize(oJLabel.getSize());
        oPanel.add(oJLabel);
        oPanel.add(oButton);
        return oPanel;
        
    }
    
    //Devuelve la clase correspondiente a java.awt.Font. Es decir, el tipo
    //de propiedad para el que se usará este editor.
    public Class getTypeEditor() {
        return java.awt.Font.class;
    }
    
    public Object getCellEditorValue() {
        return editedValue;
    }
    
    //Se utiliza la referencia a este editor (PreferencesCellEditor) para avisarlo de que una 
    //propiedad ha concluido o cancelado su edición
    public void setDelegation(PreferencesCellEditor oEditor) {
        this.oEditor = oEditor;
    }
    
   //Método que es llamado cuando el usuario pulsa sobre el botón de elección de
   // fuente (lanza un FontChooser)
    public void actionPerformed(java.awt.event.ActionEvent oEvento) {
        if (oEvento.getActionCommand().equals("E")) { //Si el usuario ha pulsado el botón
            EditorFrame ef = EditorFrame.getInstance();
            FontChooser oFontChooser = new FontChooser(ef,(java.awt.Font)editedValue);
            oFontChooser.setTitle("Select a font");
            oFontChooser.setSize(550, 400);
            oFontChooser.setLocation(ef.getX()+(ef.getWidth()-oFontChooser.getWidth())/2,ef.getY()+(ef.getHeight()-oFontChooser.getHeight())/2);
            oFontChooser.setVisible(true);
            java.awt.Font oFont = oFontChooser.getFont();
            if (oFont == null) oEditor.vCancel();
            else { //Si el usuario ha elegido una fuente
                editedValue = oFont;
                oEditor.vEditado();
               
            }
        }
    }
}
