Package freegressi.tableur

Source Code of freegressi.tableur.JDialogVarExp$AjouterLignesAction

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    Copyright (C) 2011-2012  Marchand Eric <ricoh51@free.fr>
   
    This file is part of Freegressi.

    Freegressi is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Freegressi is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Freegressi.  If not, see <http://www.gnu.org/licenses/>.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package freegressi.tableur;

import beans.JLabelRouge;
import beans.JTextFieldSouligne;
import freegressi.parser.Verificateur;
import freegressi.utils.Utils;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

/**
*
* @author marchand
*/
public class JDialogVarExp extends JDialog implements ActionListener {

  private JButton jbOk, jbAnnuler;
  private boolean ok = false;
  private JLabelRouge jlErreur = new JLabelRouge(Sym.AUCUNE_ERREUR);
  private static int NOMBRE_COLONNES_JTFS = 20;
  private JTextFieldSouligne jtfsActif;
  private List<LigneNomUniteTemp> listeLignes = new ArrayList<LigneNomUniteTemp>();
  private ArrayList<String> listeNoms = new ArrayList<String>();
  private ArrayList<String> listeUnites = new ArrayList<String>();
  private JPanel jpLignes = new JPanel();
  /**  */
  private AjouterLignesAction ajouterLignesAction = new AjouterLignesAction(null,
          new javax.swing.ImageIcon(getClass().getResource("/freegressi/img/insertrows_26x26.png")),
          "Ajouter une ou plusieurs lignes vierges", 0);
  /**  */
  private SupprimerLigneAction supprimerLigneAction = new SupprimerLigneAction(null,
          new javax.swing.ImageIcon(getClass().getResource("/freegressi/img/deleterows_26x26.png")),
          "Supprimer une ligne", 0);
  private GrecsAction grecsAction = new GrecsAction(null,
          new javax.swing.ImageIcon(getClass().getResource("/freegressi/img/insertsymbol_26x26.png")),
          "Insérer un caractère grec", 0);

  public JDialogVarExp(JFrame parent) {
    super(parent, true);
    creerUI();
    setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
    setTitle("Définir les variables expérimentales");
    //jlErreur.setText("E\nE");
    pack();
    setLocationRelativeTo(null);
    listeLignes.get(0).getJtfNom().requestFocus();
    checkErreurs();
  }

  private void creerUI() {
    jbOk = new JButton("Ok", new javax.swing.ImageIcon(getClass().getResource("/freegressi/img/Crystal_Clear_app_clean-24.png")));
    jbOk.addActionListener(this);
    jbAnnuler = new JButton("Annuler", new javax.swing.ImageIcon(getClass().getResource("/freegressi/img/Crystal_Clear_action_button_cancel-24.png")));
    jbAnnuler.addActionListener(this);

    JToolBar jToolbar = new JToolBar();
    jToolbar.setFloatable(false); // toolbar fixe
//    JButton jbAjouterLignes = new JButton(ajouterLignesAction);
//    jToolbar.add(jbAjouterLignes);
//    JButton jbSupprimerLigne = new JButton(supprimerLigneAction);
//    jToolbar.add(jbSupprimerLigne);
    JButton jButtonGrecs = new JButton(grecsAction);
    jToolbar.add(jButtonGrecs);
    // Ajout de la toolbar, le BorderLayout est le layout par défaut
    add(jToolbar, BorderLayout.PAGE_START);

    JPanel jpBoutons = new JPanel();
    FlowLayout layout2 = new FlowLayout();
    jpBoutons.setLayout(layout2);
    layout2.setAlignment(FlowLayout.RIGHT);
    jpBoutons.add(jbAnnuler);
    jpBoutons.add(jbOk);
    add(jpBoutons, BorderLayout.PAGE_END);

    creerLignes();

  }

  private void creerLignes() {
//    JPanel jp = new JPanel();
    jpLignes.setLayout(new BoxLayout(jpLignes, BoxLayout.Y_AXIS));
    jpLignes.add(new LigneNomUniteTemp(true));
    for (int i = 0; i < 10; i++) {
      LigneNomUniteTemp lnu = new LigneNomUniteTemp(false);
      jpLignes.add(lnu);
      listeLignes.add(lnu);
    }
    jpLignes.add(jlErreur);
    add(jpLignes, BorderLayout.CENTER);
  }

  public ArrayList<String> getListeNoms() {
    // normalement listeNoms est à jour
    return listeNoms;
  }

  public ArrayList<String> getListeUnites() {
    return listeUnites;
  }

  /**
   * Teste si un nom de variable existe déjà
   * @param nom le nom de la variable à tester
   * @return true si le nom existe déjà
   */
  private boolean nomExiste(String nom) {
    for (String str : listeNoms) {
      if (str.equals(nom)) {
        return true;
      }
    }
    return false;
  }

  /**
   * Ajoute un nom de variable à la liste
   * @param nom le nom de la variable
   * @return true si le nom est bien ajouté
   */
  private boolean ajouteNom(String nom) {
    if (!nomExiste(nom.trim())) {
      listeNoms.add(nom.trim());
      return true;
    }
    return false;
  }

  /**
   * Vérifie s'il y a des erreurs, et (des)active le bouton Ok
   * Remplit le label erreur
   * @return true si aucune erreur n'est détectée
   */
  private void checkErreurs() {
    boolean aucuneErreur = true;
    String nom;

    listeNoms.clear();
    listeUnites.clear();
    for (LigneNomUniteTemp lnu : listeLignes) { // pour chaque ligne
      nom = lnu.getJtfNom().getText().trim();
      if (nom.equals("")) {
        continue;
      }
      // le jtfsnom ne doit pas être actif
      if (lnu.getJtfNom().getEtat() == JTextFieldSouligne.ACTIF) {
        jlErreur.setText(Sym.ERREUR_NOM);
        aucuneErreur = false;
        break;
      }
      // le jtfsunite non plus
      if (lnu.getJtfUnite().getEtat() == JTextFieldSouligne.ACTIF) {
        jlErreur.setText(Sym.ERREUR_UNITE);
        aucuneErreur = false;
        break;
      }
      // le nom doit être différent des précédents
      if (!ajouteNom(nom)) {
        jlErreur.setText(Sym.ERREUR_NOM_UNIQUE);
        aucuneErreur = false;
        break;
      } else {
        listeUnites.add(lnu.getJtfUnite().getText().trim());
      }
    }
    // il doit y avoir au moins un nom
    if (aucuneErreur && listeNoms.isEmpty()) {
      jlErreur.setText(Sym.ERREUR_AUCUN_NOM);
      aucuneErreur = false;
    }
    if (aucuneErreur) {
      jlErreur.setText(Sym.AUCUNE_ERREUR);
    }
    jbOk.setEnabled(aucuneErreur);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    if (e.getSource().equals(jbOk)) {
      ok = true;
    }
    setVisible(false);
  }

  /**
   *
   * @return true si le dialog s'est terminé avec Ok false sinon
   */
  public boolean isOk() {
    return ok;
  }

  /**
   * La classe qui permet d'insérer un caractère grec
   */
  class GrecsAction extends AbstractAction {

    public GrecsAction(String text, ImageIcon icon, String desc, Integer mnemonic) {
      super(text, icon);
      putValue(SHORT_DESCRIPTION, desc);
      putValue(MNEMONIC_KEY, mnemonic);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      Utils.insertGreekCaracter(jtfsActif);
      checkErreurs();
    }
  }

  /**
   * La classe qui permet d'ajouter une nouvelle ligne
   */
  class AjouterLignesAction extends AbstractAction {

    public AjouterLignesAction(String text, ImageIcon icon, String desc, Integer mnemonic) {
      super(text, icon);
      putValue(SHORT_DESCRIPTION, desc);
      putValue(MNEMONIC_KEY, mnemonic);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
//      JDialogAjouterLignes jdal = new JDialogAjouterLignes(null, tableur.getRowCount());
//      jdal.setVisible(true);
//      if (jdal.isOk()){
//
//
//      }
//      jdal.dispose();
    }
  }

  /**
   * La classe qui permet de supprimer des lignes
   */
  class SupprimerLigneAction extends AbstractAction {

    public SupprimerLigneAction(String text, ImageIcon icon, String desc, Integer mnemonic) {
      super(text, icon);
      putValue(SHORT_DESCRIPTION, desc);
      putValue(MNEMONIC_KEY, mnemonic);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      for (LigneNomUniteTemp lnu : listeLignes) {
        if (lnu.getJtfNom().equals(jtfsActif)
                || lnu.getJtfUnite().equals(jtfsActif)) {
          // A FINIR
        }
      }
    }
  }

  public void jtfuKeyReleased(java.awt.event.KeyEvent evt) {
    JTextFieldSouligne jtfsu = (JTextFieldSouligne) evt.getSource();
    int n = Verificateur.parseUnite(jtfsu.getText());
    if (n == -1) { // pas d'erreur dans l'unité
      jtfsu.effaceTout();
    } else { // erreur il faut souligner
      jtfsu.souligne(n, n + 1);
    }
    checkErreurs();
  }

  public void jtfnKeyReleased(java.awt.event.KeyEvent evt) {
    JTextFieldSouligne jtfsn = (JTextFieldSouligne) evt.getSource();
    // Créer un noeud avec le nom de la variable
    Noeud noeud = Verificateur.parseNomDeVariable(jtfsn.getText());
    // Si le noeud est null, ok pas d'erreur
    if (noeud == null || noeud.getType() != Sym.ERROR) {
      jtfsn.effaceTout();
    } else {
      // si le noeud esr une erreur, afficher l'erreur
      if (noeud.getType() == Sym.ERROR) {
        jtfsn.souligne(noeud.getColonne(), noeud.getColonne() + 1);
      }
    }
    checkErreurs();
  }

  private class LigneNomUniteTemp extends JPanel {

    private JTextFieldSouligne jtfNom = new JTextFieldSouligne();
    private JTextFieldSouligne jtfUnite = new JTextFieldSouligne();

    public LigneNomUniteTemp(boolean titre) {
      jtfNom.setColumns(NOMBRE_COLONNES_JTFS);
      jtfUnite.setColumns(NOMBRE_COLONNES_JTFS);
      this.setLayout(new BorderLayout(0, 0));
      this.add(jtfNom, BorderLayout.WEST);
      this.add(jtfUnite, BorderLayout.CENTER);
      if (titre) {
        jtfNom.setText("Noms");
        jtfNom.setEditable(false);
        jtfNom.setHorizontalAlignment(JTextField.CENTER);
        jtfUnite.setText("Unités");
        jtfUnite.setEditable(false);
        jtfUnite.setHorizontalAlignment(JTextField.CENTER);
      } else {
        jtfNom.addKeyListener(new java.awt.event.KeyAdapter() {

          @Override
          public void keyReleased(java.awt.event.KeyEvent evt) {
            jtfnKeyReleased(evt);
          }
        });
        jtfNom.addFocusListener(new java.awt.event.FocusAdapter() {

          @Override
          public void focusGained(java.awt.event.FocusEvent evt) {
            jtfsActif = jtfNom;
          }
        });
        jtfUnite.addKeyListener(new java.awt.event.KeyAdapter() {

          @Override
          public void keyReleased(java.awt.event.KeyEvent evt) {
            jtfuKeyReleased(evt);
          }
        });
        jtfUnite.addFocusListener(new java.awt.event.FocusAdapter() {

          @Override
          public void focusGained(java.awt.event.FocusEvent evt) {
            jtfsActif = jtfUnite;
          }
        });
      }
    }

    public JTextFieldSouligne getJtfNom() {
      return jtfNom;
    }

    public JTextFieldSouligne getJtfUnite() {
      return jtfUnite;
    }
  }
}
TOP

Related Classes of freegressi.tableur.JDialogVarExp$AjouterLignesAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.