ChapterChooser.java :  » Test-Coverage » salome-tmf » salomeTMF_plug » docXML » common » Java Open Source

Java Open Source » Test Coverage » salome tmf 
salome tmf » salomeTMF_plug » docXML » common » ChapterChooser.java
/*
 * SalomeTMF is a Test Management Framework
 * Copyright (C) 2005 France Telecom R&D
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 *
 * @author Aurore PENAULT
 *
 * Contact: mikael.marche@rd.francetelecom.com
 */
package salomeTMF_plug.docXML.common;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

import org.objectweb.salome_tmf.ihm.models.TreeRenderer;
import org.objectweb.salome_tmf.ihm.tools.Tools;

import salomeTMF_plug.docXML.languages.Language;

/**
 * Classe qui construit la fentre permettant de choisir les chapitres  insrer
 * dans la documentation
 * @author vapu8214
 */
public class ChapterChooser extends JDialog {

  private DefaultMutableTreeNode chosenRootNode;
  private DefaultMutableTreeNode chapterRootNode;
  private JTree chosenTree;
  private JTree chapterTree;
  private DefaultTreeModel chosenTreeModel;

  private ArrayList<String> chosenNodes = new ArrayList<String>();
  private ArrayList<String> allChaptersList;

  private String chapitres = Language.getInstance().getText("Chapitres");

  private GenDocDialog parentDialog;

  /**
   * Permet de slectionner les chapitres qui apparatront dans le rapport
   * @param dialog
   * @param initChapterSelection true si la liste des chapitres a dj t initialise
   * @param allTitlesList liste des extensions dont on peut choisir de les ajouter ou de les retirer du rapport
   */
  public ChapterChooser(GenDocDialog dialog, boolean initChapterSelection, ArrayList<String> allTitlesList) {
    super(dialog,true);

    parentDialog = dialog;
    allChaptersList = allTitlesList;

    TreeRenderer chosenRenderer = new TreeRenderer();
    TreeRenderer chapterRenderer = new TreeRenderer();

    chosenRootNode = new DefaultMutableTreeNode(Language.getInstance().getText("Chapitres"));
    if (initChapterSelection) {
      chosenNodes = parentDialog.getChosenChaptersList();
      ArrayList<String> newChosenNodes = new ArrayList<String>();
      for (String chapterTitle : newChosenNodes) {
        if (allChaptersList.contains(chapterTitle)) {
          DefaultMutableTreeNode node = new DefaultMutableTreeNode(chapterTitle);
          chosenRootNode.add(node);
          newChosenNodes.add(chapterTitle);
        }
      }
      chosenNodes = newChosenNodes;
    } else {
      for (String chapterTitle : allChaptersList) {
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(chapterTitle);
        chosenRootNode.add(node);
        chosenNodes.add(chapterTitle);
      }
    }
    chapterRootNode = new DefaultMutableTreeNode(chapitres);
    for (String chapterTitle : allChaptersList) {
      DefaultMutableTreeNode node = new DefaultMutableTreeNode(chapterTitle);
      chapterRootNode.add(node);
    }

    chosenTree = new JTree();
    chosenTree.setCellRenderer(chosenRenderer);
    chosenTreeModel = new DefaultTreeModel(chosenRootNode);
    chosenTree.setModel(chosenTreeModel);

    chapterTree = new JTree();
    chapterTree.setCellRenderer(chapterRenderer);
    chapterTree.setModel(new DefaultTreeModel(chapterRootNode));

    JButton addButton = new JButton(">");
    addButton.setToolTipText(Language.getInstance().getText("Ajouter__la_slection"));
    addButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        TreePath[] pathTab = chapterTree.getSelectionPaths();
        if (pathTab != null) {
          for (int i = 0; i < pathTab.length; i++) {
            String nodeValue = (String)((DefaultMutableTreeNode)pathTab[i].getLastPathComponent()).getUserObject();
            if (!chosenNodes.contains(nodeValue)) {
              int index = getIndexFor(nodeValue);
              chosenNodes.add(index, nodeValue);
              DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(nodeValue);
              chosenTreeModel.insertNodeInto(newNode, chosenRootNode, index);
              chosenTree.scrollPathToVisible(new TreePath(newNode.getPath()));
            }
          }
        }
      }
    });

    JButton removeButton = new JButton("<");
    removeButton.setToolTipText(Language.getInstance().getText("Retirer_de_la_slection"));
    removeButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        TreePath[] pathTab = chosenTree.getSelectionPaths();
        if (pathTab != null) {
          for (int i=0; i < pathTab.length; i++) {
            DefaultMutableTreeNode nodeToRemove = (DefaultMutableTreeNode)pathTab[i].getLastPathComponent();
            String nodeValue = (String)nodeToRemove.getUserObject();
            chosenTreeModel.removeNodeFromParent(nodeToRemove);
            chosenNodes.remove(nodeValue);
          }
        }

      }
    });

    JPanel buttonSet = new JPanel();
    buttonSet.setLayout(new BoxLayout(buttonSet, BoxLayout.Y_AXIS));
    buttonSet.add(addButton);
    buttonSet.add(Box.createRigidArea(new Dimension(1,25)));
    buttonSet.add(removeButton);

    JScrollPane chosenScrollPane = new JScrollPane(chosenTree);
    chosenScrollPane.setBorder(BorderFactory.createTitledBorder(Language.getInstance().getText("Slection")));
    chosenScrollPane.setPreferredSize(new Dimension(300,450));

    JScrollPane chapterScrollPane = new JScrollPane(chapterTree);
    chapterScrollPane.setBorder(BorderFactory.createTitledBorder(Language.getInstance().getText("Document")));
    chapterScrollPane.setPreferredSize(new Dimension(300,450));

    JPanel windowPanel = new JPanel();
    windowPanel.setLayout(new BoxLayout(windowPanel, BoxLayout.X_AXIS));
    windowPanel.add(chapterScrollPane);
    windowPanel.add(Box.createRigidArea(new Dimension(20,50)));
    windowPanel.add(buttonSet);
    windowPanel.add(Box.createRigidArea(new Dimension(20,50)));
    windowPanel.add(chosenScrollPane);

    JButton validate = new JButton(Language.getInstance().getText("Valider"));
    validate.setToolTipText(Language.getInstance().getText("Valider"));
    validate.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        try {
          parentDialog.setChosenChaptersList(chosenNodes);
          parentDialog.setInitChapterSelection(true);
          ChapterChooser.this.dispose();
        } catch (Exception ex) {
          Tools.ihmExceptionView(ex);
        }
      }
    });

    JButton cancel = new JButton(Language.getInstance().getText("Annuler"));
    cancel.setToolTipText(Language.getInstance().getText("Annuler"));
    cancel.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        try {
          ChapterChooser.this.dispose();
        } catch (Exception ex) {
          Tools.ihmExceptionView(ex);
        }
      }
    });

    JPanel secondButtonSet = new JPanel();
    secondButtonSet.add(validate);
    secondButtonSet.add(cancel);

    JPanel center = new JPanel();
    center.add(windowPanel);

    JPanel page = new JPanel();
    page.setLayout(new BoxLayout(page, BoxLayout.Y_AXIS));
    page.add(center);
    page.add(secondButtonSet);

    getContentPane().add(page, BorderLayout.CENTER);
    setTitle(Language.getInstance().getText("Ajouter_des_chapitres__la_slection"));
    //setLocation(300,200);
    centerScreen();
  }
  
  void centerScreen() {
    Dimension dim = getToolkit().getScreenSize();
    this.pack();
    Rectangle abounds = getBounds();
    setLocation((dim.width - abounds.width) / 2, (dim.height - abounds.height) / 2);   
    this.setVisible(true); 
    requestFocus();
  }

  protected int getIndexFor(String nodeValue) {
    if (chosenNodes.size() == 0) {
      return 0;
    } else {
      int allChapterIndex = allChaptersList.indexOf(nodeValue);
      int i=0;
      while (i<chosenNodes.size()) {
        String currentNode = (String)chosenNodes.get(i);
        int currentNodeChapterIndex = allChaptersList.indexOf(currentNode);
        if (allChapterIndex<currentNodeChapterIndex) {
          return i;
        }
        if (i==chosenNodes.size()-1) return i+1;
        i++;
      }
    }
    return 0;
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.