package ftp_client;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;

// Zone de saisie avec un texte d'indication
// Exemple : Une zone de saisie avec comme texte "Cliquez-ici", et lorsque la zone de saisie prend le focus,
// le texte disparait pour laisser l'utilisateur rentrer une valeur,
// si l'uilisateur laisse la zone de saisie vide, le texte "Cliquer-ici" reapparait.
public class LabelText extends Text {

	/* Variable */
	// Texte d'indication
	private String texte;
	
	// Couleur de la saisie
	private Color colorA = new Color(Display.getCurrent(), 0, 0, 0);
	// Couleur de l'indication
	private Color colorB = new Color(Display.getCurrent(), 150, 150, 150);
	
	/* Constructors */
	// Constructeur avec le conteneur parent et le texte d'indication
	public LabelText(Composite parent, String txt){
		super(parent, SWT.BORDER);
		init(parent, txt);
	}
	// Constructeur avec le conteneur parent, le texte d'indication et si il s'agit d'une zone de saisie de mot de passe
	public LabelText(Composite parent, String txt, boolean isPassword){
		super(parent, SWT.BORDER | (isPassword?SWT.PASSWORD:SWT.NONE));
		init(parent, txt);
	}
	
	/* Init */
	private void init(Composite parent, String txt){
		this.texte = txt;
		
		this.setText(texte);
		this.setForeground(colorB);
		
		// Ecouteur du focus de la zone de saisie
		this.addFocusListener(new org.eclipse.swt.events.FocusAdapter() {
			// Quand la zone de saisie perd le focus et que le texte est vide, on remet la couleur et le texte d'indication
			public void focusLost(org.eclipse.swt.events.FocusEvent e) { 
				if(super_getText().length() == 0){
					setForeground(colorB);
					super_setText(texte);
				}
			}
			
			// Quand la zone de saisie prend le focus et qu'elle est en "mode d'indication", on efface le texte et on met la couleur de saisie
			public void focusGained(org.eclipse.swt.events.FocusEvent e) {
				if(getForeground().equals(colorB)){
					setForeground(colorA);
					super_setText("");
				}
			}
		});
	}
	
	/* getText/setText override */
	// Remplace la fonction getText() de base (evite de retourner le texte d'indication si il n'y a pas de saisie d'utilisateur)
	public String getText(){
		if(getForeground().equals(colorB)) return "";
		return super.getText();
	}
	// Remplace la fonction setText() de base (permet si "text" est vide de passer en mode d'indication)
	public void setText(String text){
		if(text == null || text.isEmpty()){
			setForeground(colorB);
			super.setText(texte);
		}else{
			setForeground(colorA);
			super.setText(text);
		}
	}
	
	// Appel des fonctions getText() et setText() de base
	private String super_getText(){ return super.getText(); }
	private void super_setText(String text){ super.setText(text); }
	
	
	/* Subclassing not allowed in SWT */
	protected void checkSubclass() {}
}
