/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package monitor;

import java.awt.*;
import java.awt.event.*;
import javax.swing.JTable;
import javax.swing.table.*;

public class GridRecuerdo extends JTable {

   Configuracion conf;
   public Font fuenteCelda;
   Ventana ventana;
   Color colorBanda1, colorBanda2;
   int ancho1, ancho2, ancho3;
   boolean tresColumnas = true;
   DefaultTableModel moddat = null;

   protected GridRecuerdo(Ventana v) {
      super();
      conf = Configuracion.instanciaUnica();
      ventana = v;
   }

   public void ajustaGrid(java.awt.Rectangle rec) {
      int altoFila = rec.height / conf.numFilas;
      setRowHeight(altoFila);
   }

   public void ajustarAnchoColumnas(boolean tresColumnas, java.awt.Rectangle rec) {
   }

   public void ajustarAlineacionCelda(int column, javax.swing.table.DefaultTableCellRenderer celda) {
   }

   public void prepararGrid(java.awt.Rectangle rec, boolean tresColumnas, boolean ant, Color color1, Color color2) {
       if (moddat == null) {
             moddat =  modeloDatos();
       }
      setModel(moddat);
      this.tresColumnas = tresColumnas;
      setDoubleBuffered(true);
      setIntercellSpacing(new java.awt.Dimension(0, 0));
      this.setShowVerticalLines(true);
      ajustaGrid(rec);
      fuenteCelda = getFont().deriveFont(conf.altoTipo);
      TableColumnModel modelo = this.getColumnModel();
      colorBanda1 = color1;
      colorBanda2 = color2;
     
      modelo.getColumn(0).setCellRenderer(new renderCeldaColoreada());
      modelo.getColumn(1).setCellRenderer(new renderCeldaColoreada());
      modelo.getColumn(2).setCellRenderer(new renderCeldaColoreada());

      ajustarAnchoColumnas(tresColumnas, rec);
      modelo.getColumn(0).setPreferredWidth(ancho1);
      modelo.getColumn(1).setPreferredWidth(ancho2);
      modelo.getColumn(2).setPreferredWidth(ancho3);
   }

   public void cambiaFont() {
      fuenteCelda = getFont().deriveFont(conf.altoTipo);
      setValueAt("" + conf.altoTipo, 3, 1);
      repaint();
      conf.guardar();
   }
   javax.swing.table.DefaultTableModel modeloDatos()
   {
       
   DefaultTableModel modeloTabla  = new javax.swing.table.DefaultTableModel();
   modeloTabla.addColumn("");
   modeloTabla.addColumn("");
   modeloTabla.addColumn("");
   
   for (int i = 0 ;i <= conf.numFilas  ; i++) {  
   String[] dd = {"","",""};
   modeloTabla.addRow(dd);
   }
   return modeloTabla;
   }

   @Override
   protected void processKeyEvent(KeyEvent evt) {
      if (evt.getKeyChar() == 'q') {
         ventana.cerrar();
      }
      if (evt.getKeyCode() == KeyEvent.VK_ADD) {
         ventana.cambiaFuenteGrid(1);
      }
      if (evt.getKeyCode() == KeyEvent.VK_SUBTRACT) {
         ventana.cambiaFuenteGrid(-1);
      }
   }

   @Override
   public void paint(Graphics g) {
      Graphics2D g2 = (Graphics2D) g;
      g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
              RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
      g2.setRenderingHint(RenderingHints.KEY_RENDERING,
              RenderingHints.VALUE_RENDER_QUALITY);
      super.paint(g2);
   }

   class renderCeldaColoreada extends javax.swing.table.DefaultTableCellRenderer {

      public renderCeldaColoreada() {
         super();
      }

      @Override
      public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, Object value, boolean isSelected,
              boolean hasFocus, int row, int column) {
         try {
            if ((row % 2) == 0) {
               setBackground(colorBanda1);
               setForeground(colorBanda2);
            } else {
               setBackground(colorBanda2);
               setForeground(colorBanda1);
            }
            if(!tresColumnas && column==2) {
               setText("");
            } else {
               setText((String) value);
            } 
            setFont(fuenteCelda);
            ajustarAlineacionCelda(column, this);
            return this;
         } catch (Exception exc) {
            exc.printStackTrace();
            return null;
         }
      }
   }
}

