/* 
* 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 servidor.configurador;



import java.awt.Color;
import java.awt.Component;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.text.MessageFormat;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.InputVerifier;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTextField;
import javax.swing.JToolTip;
import javax.swing.ListCellRenderer;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.plaf.basic.BasicComboBoxEditor;

import servidor.utiles.MultiLineToolTip;

public class Varios {
	
	public static class MiAdaptador extends KeyAdapter{
		public MiAdaptador(){
			super();
		}
		public void keyTyped(KeyEvent e){
			char strx=e.getKeyChar();
			if (!Character.isISOControl(strx)){
	    			JTextField jFTFx=(JTextField) e.getSource();
	    			if ((jFTFx.getText().length()>=jFTFx.getColumns()) || (!Character.isDigit(strx) ))
	    				e.consume();
				
			}
			
		}	
	}
	
	
	public static class MiAdaptadorCadena extends KeyAdapter{
		public MiAdaptadorCadena(){
			super();
		}
		public void keyTyped(KeyEvent e){
			char strx=e.getKeyChar();
			if (!Character.isISOControl(strx)){
	    			JTextField jFTFx=(JTextField) e.getSource();
	    			if ((jFTFx.getText().length()>=jFTFx.getColumns()) )
	    				e.consume();
				
			}
			
		}	
	}
	public static class MiAdaptadorPalabra extends KeyAdapter{
		public MiAdaptadorPalabra(){
			super();

		}
		public void keyTyped(KeyEvent e){
			char strx=e.getKeyChar();
			if  (!Character.isISOControl(strx)){
				if (Character.isLetter(strx)){
		    			JTextField jFTFx=(JTextField) e.getSource();
		    			if ((jFTFx.getText().length()>=jFTFx.getColumns()) ||  !Character.isLetter(strx) )
		    				e.consume();
				}	
				else
					e.consume();
			}	
		}	
	}
	
	public static class MiAdaptadorNumeroNegativo extends KeyAdapter{
		public MiAdaptadorNumeroNegativo(){
			super();

		}
		public void keyTyped(KeyEvent e){
			char strx=e.getKeyChar();
			if  (!Character.isISOControl(strx)){
				if (Character.isDigit(strx) || (strx=='-')){
		    			JTextField jFTFx=(JTextField) e.getSource();
		    			if ((jFTFx.getText().length()>=jFTFx.getColumns()))
		    				e.consume();
				}	
				else
					e.consume();
			}	
		}
		
	}
	
	public static class MiAdaptadorCodigoNumero extends KeyAdapter{
		public MiAdaptadorCodigoNumero(){
			super();

		}
		public void keyTyped(KeyEvent e){
			char strx=e.getKeyChar();
			if  (!Character.isISOControl(strx)){
				if (Character.isDigit(strx)){
		    			JTextField jFTFx=(JTextField) e.getSource();
		    			if ((jFTFx.getText().length()>=jFTFx.getColumns()))
		    				e.consume();
				}	
				else
					e.consume();
			}	
		}
		
	}
	
	public static class MiAdaptadorCola extends KeyAdapter{
		public MiAdaptadorCola(){
			super();

		}
		public void keyTyped(KeyEvent e){
			char strx=e.getKeyChar();
			String cadenafinal;
			if  (!Character.isISOControl(strx)){
				JTextField jFTFx=(JTextField) e.getSource();
    			if ((jFTFx.getText().length()>=jFTFx.getColumns()))
    				e.consume();
    			cadenafinal=jFTFx.getText()+strx;
    			if ((!Character.isLetter(cadenafinal.charAt(0)))){
    				e.consume();
    			}
			}	
			else
				e.consume();
				
		}	
	}
	public static long  valorEntero(JComponent input){
		   JTextField jtf=(JTextField)input;
		   long valor=0;
		   try {
	           valor=Long.parseLong ( jtf.getText());
		   }
		   catch (NumberFormatException e){
			   valor=0;
		   }
		   return valor;
		     
	   }

	public static class miNumericVerifier extends InputVerifier{
		 long valormin;
		 long valormax;
		 long valordefecto;
	       public miNumericVerifier(long min,long max,long defecto){
	    	   super();
	    	   valormin=min;
	    	   valormax=max;
	    	   valordefecto=defecto;
	    	   
	       }
	       public miNumericVerifier(long min,long max){
	    	   super();
	    	   valormin=min;
	    	   valormax=max;
	    	   valordefecto=0;
	    	   
	       }
			public boolean verify(JComponent input) {
				long valor=valorEntero(input);
				boolean salida=(valor>=valormin && valor<=valormax);
				JTextField jtf=(JTextField)input;
				if (!salida){
					 
				    jtf.setText(valordefecto==0?"":String.valueOf(valordefecto));
				    jtf.selectAll() ;
				}    
			    else
			    {
			    jtf.setText(Long.toString(valor));

				}
				return salida ;
			}
	}
	
	public static class miJComboBoxEditor extends BasicComboBoxEditor
	{

	   private final JComboBox box;
	   private  String _entry = null;
	   private  final miJTextField _textField;


	   private boolean doNotListen = false;

	   public miJComboBoxEditor(JComboBox box,int longitud) {
	       super();
	       this.box= box;
	       this.box.setEditor(this);
	       _textField = new miJTextField(longitud);
	       _textField.addKeyListener(new Varios.MiAdaptadorCadena());
	       _textField.getDocument().addDocumentListener(new DocumentListener() {
	               public void changedUpdate(DocumentEvent e) {
	               }
	               public void insertUpdate(DocumentEvent e) {
	                  updateComboBox();
	               }
	               public void removeUpdate(DocumentEvent e) {
	                   updateComboBox();
	               }
	           });

	   }

	   public java.awt.Component getEditorComponent() {

	       return _textField;

	   }


	   public void setItem(final Object obj) {

	       _entry = (String) obj;
	       if (!doNotListen) {
	           _textField.setText(_entry.toString());
	       }
	   }


	   public Object getItem() {
	       if ((_entry == null) || _entry.toString().equals(_textField.getText())) {
	           return _entry;
	       }
	       return new String(_textField.getText());
	   }

	   private void updateComboBox() {
	       if (getItem() != null) {
	           doNotListen = true;
	           this.box.setSelectedItem(getItem());
	           doNotListen = false;
	       }
	   }	
   
	}
	public static class miJTextField extends JTextField{
		public miJTextField(int longi){
			super(longi);
		}
		public JToolTip createToolTip(){
			return new MultiLineToolTip();
		}
	}	
	
	public static class miJCheckBox extends JCheckBox{
		public miJCheckBox(String str){
			super(str);
		}
		public JToolTip createToolTip(){
			return new MultiLineToolTip();
		}
	}
	
	
	public static class miJComboBox extends JComboBox{
		public miJComboBox(Object[] entradas){
			super(entradas);
		}
		public JToolTip createToolTip(){
			return new MultiLineToolTip();
		}	
		public void setToolTipText(String texto){
			
			((miJTextField)this.getEditor().getEditorComponent()).setToolTipText(texto);
		}
		
	}
}