package ste.pendu.wordeditor;

import java.io.Serializable;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * Interface pour aider à la création de la vue.
 * 
 * <p>Pour créer votre vue, il faut implémenter cette classe. La
 * fabrique de contrôleurs attendra comme information cette interface
 * pour pouvoir construire un contrôleur.</p>
 *
 * <p><img src="doc-files/wordeditor-screenshot.png"/></p> 
 * 
 * <ul><ol>la liste des mots (Cette classe doit étendre JPanel, faites
 * là comme un Bean et utilisez le composant javax.swing.JList)</ol>
 * <ol>un JTextField où l'utilisateur encodera les mots qu'il veut
 * ajouter ou supprimer</ol>
 * </ul>
 * 
 * <p>Fonctions des trois boutons:</p>
 * 
 * <ul><li>Lorsque l'utilisateur clique sur <b>Ajouter</b>, il ajoute à
 * la liste le mot qu'il a écrit dans le JTextField puis le champ se
 * vide.</li>
 * 
 * <li>Lorsque l'utilisateur clique sur <b>Recommencer</b>,
 * il vide le champ de texte</li>
 * 
 * <li>Lorsque l'utilisateur clique sur <b>Supprimer</b>, il supprime
 * non seulement le mot qui correspond à celui qui a été encodé dans le
 * champ, mais aussi tous les mots qui ont été sélectionnés</li></ul>
 * 
 * @see ControlFactory
 * @see javax.swing.JPanel
 * @see javax.swing.JList
 * @see javax.swing.JTextField
 */
public interface View extends Serializable
{

  /**
   * Retourne l'index sélectionné; -1 si aucun item n'est sélectionné.
   * 
   * @return l'index sélectionné; -1 si aucun n'est sélectionné
   */
  public int getSelectedIndex();

  /**
   * Retourne un tableau des indexes sélectionnés.
   * 
   * @return un tableau d'indices
   */
  public int[] getSelectedIndices();

  /**
   * Retourne le mot sélectionné, ou null s'il n'y en a aucun
   * sélectionné.
   * 
   * @return le mot sélectionné
   */
  public String getSelectedWord();

  /**
   * Retourne un tableau des mots sélectionnés.
   * 
   * @return un tableau des mots sélectionnés
   */
  public String[] getSelectedWords();

  /**
   * Donne l'état de la sélection.
   * 
   * @return <code>true</code> si rien n'est sélectionné
   */
  public boolean isSelectionEmpty();

  /**
   * Retourne le mot qui a été encodé dans le JTextField.
   * 
   * @return le mot encodé par l'utilisateur
   */
  public String getWord();

  /**
   * Efface le contenu du JTextField.
   */
  public void clean();

  /**
   * Met à jour le modèle.
   * 
   * @param wordListModel le modèle
   */
  public void setWordListModel(WordListModel wordListModel);

  /**
   * Récupère le modèle.
   * 
   * @return le modèle WordListModel
   */
  public WordListModel getWordListModel();

  /**
   * Retourne le ControlFactory de cette vue.
   * 
   * @return le ControlFactory
   */
  public ControlFactory getControlFactory();

}
