/* 
* 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 gestor;

import java.awt.Rectangle;
import javax.swing.*;

public class DistribuidorBotones {

   public static final int[][] distribuciones = {null, {1}, {1, 1}, {2, 1}, {2, 2}, {2, 2, 1}, {2, 2, 2}, {2, 2, 2, 1}, {2, 2, 2, 2}, {3, 3, 3},
      {3, 3, 3, 1}, {3, 3, 3, 2}, {3, 3, 3, 3}, {3, 3, 3, 3, 1}, {3, 3, 3, 3, 2}, {3, 3, 3, 3, 3}, {3, 3, 3, 3, 3, 1}, {3, 3, 3, 3, 3, 2}, {3, 3, 3, 3, 3, 3}};
   
   public static final int[][] distribucionesBis = {null, {1}, {1, 1}, {1, 2}, {2, 2}, {1, 2, 2}, {2, 2, 2}, {1, 2, 2, 2}, {2, 2, 2, 2}, {3, 3, 3},
      {1, 3, 3, 3}, {2, 3, 3, 3}, {3, 3, 3, 3}, {1, 3, 3, 3, 3}, {2, 3, 3, 3, 3}, {3, 3, 3, 3, 3}, {1, 3, 3, 3, 3, 3}, {2, 3, 3, 3, 3, 3}, {3, 3, 3, 3, 3, 3}};

   public DistribuidorBotones() {
   }

   public static Rectangle calcularBotones(int numBotones, int ancho) {
      int[] dist = distribuciones[numBotones];
      int nColumnas = dist[0];
      Rectangle rec = new Rectangle();
      rec.height = Configuracion.instanciaUnica().altoBoton;
      rec.width = nColumnas == 3? ((int) (ancho / 3.5)) : (ancho /3);
      return rec;
   }

   public static void distribuir(PanelBotones panel) {
      if(panel.dimBoton == null) {
         panel.dimBoton = PanelTactil.dimBoton;
      }
      if(panel.incrBotonMenu == -999) {
         panel.incrBotonMenu = Configuracion.instanciaUnica().incrBotonMenu;
      }
      int n = panel.botones.size();
      if (n == 0) {
         return;
      } 
      if(n > 18) n = 18;
      int delta = 0;
      if (panel.etiqueta != null) {
         panel.etiqueta.setSize(panel.getWidth(), 50);
         delta = 50;
      }
      int[] dist;
      if(Configuracion.instanciaUnica().usandoSubmenus && panel.tieneSubMenus) {
         dist = distribucionesBis[n];
      } else {
         dist = distribuciones[n];
      }
      int nFilas = dist.length;
      int restoVertical = panel.getHeight() - (nFilas * panel.dimBoton.height) - delta;
      int huecoVertical = restoVertical / (nFilas + 1);
      int altoBoton = panel.dimBoton.height;
      int anchoBoton = panel.dimBoton.width;
      int numBoton = 0;
      for (int f = 0; f < nFilas; f++) {
         int y = delta + huecoVertical + f * (huecoVertical + altoBoton);
         int restoHorizontal = panel.getWidth() - (dist[f] * anchoBoton);
         int huecoHorizontal = restoHorizontal / (dist[f] + 1);
         int incrHoriz = panel.incrBotonMenu / 2;
         int incrVerti = panel.incrBotonMenu / 4;
         for (int c = 0; c < dist[f]; c++) {
            int x = huecoHorizontal + (c * (huecoHorizontal + anchoBoton));
            JButton boton = panel.botones.get(numBoton++);
            if(boton instanceof PanelTactil.BotonMenu) {
               boton.setLocation(x-incrHoriz, y-incrVerti);
            } else {
               boton.setLocation(x, y);
            }
         }
      }
   }   
}
