Package syn3d.ui

Source Code of syn3d.ui.TransformDataUI

/* ========================
* JSynoptic : a free Synoptic editor
* ========================
*
* Project Info:  http://jsynoptic.sourceforge.net/index.html
*
* This program 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.1 of the License, or (at your option) any later version.
*
* This program 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
* program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* (C) Copyright 2001-2004, by :
*     Corporate:
*         Astrium SAS
*     Individual:
*         Claude Cazenave
*
* $Id: TransformDataUI.java,v 1.15 2006/06/08 09:50:21 ogor Exp $
*
* Changes
* -------
* 3-Mar-2004 : Creation date (CC);
*
*/
package syn3d.ui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.HashMap;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;

import syn3d.base.ActiveNode;
import syn3d.data.SceneGraphData;
import syn3d.data.TransformData;

/**
* Class description ...
*
* @author Claude CAZENAVE
*
*/
public class TransformDataUI extends SceneGraphDataUI implements ItemListener {

  static final Object[] items=new Object[TransformData.FULL];
  static final HashMap itemsId=new HashMap();
  static {
    for(int i=0;i<TransformData.FULL;i++){
      items[i]=resources.getString("transformDataKind"+(i+1));
      itemsId.put(items[i],new Integer(i+1));
    }
  }
 
  // Manage several transformations
  protected JPanel composedTransformPanel;
  protected ArrayList transformCombos;
  protected ArrayList transformTables;
  protected ArrayList transformTablesPanels;
  protected JButton bAdd, bRemove;
 
 
  public TransformDataUI(ActiveNode node, TransformData d, boolean transformAvailable){
    super(node, d, transformAvailable);
    this.transformAvailable = transformAvailable;

  }
 
  protected JPanel createDataPanel(){
   
    return createTransformDataPanel();
  }
 
  protected JPanel createTransformDataPanel(){
 
    JPanel p=new JPanel(new BorderLayout());
    JPanel p1=new JPanel(new BorderLayout());
    bedit=resources.getCheckBox("editable",this);
    p1.add(bedit, BorderLayout.WEST);
    p1.add(new JLabel("Transformation"), BorderLayout.CENTER);
   
    JPanel p2=new JPanel(new GridLayout(1,0));
   
    bAdd = resources.getButton("addTransform", this);
    p2.add(bAdd);
    bRemove = resources.getButton("removeTransform", this);
    p2.add(bRemove);
    p1.add(p2, BorderLayout.EAST);
     
    composedTransformPanel = new  JPanel();
    composedTransformPanel.setLayout(new BoxLayout(composedTransformPanel, BoxLayout.Y_AXIS));
   
    // Make panel for all composed transformations
    transformCombos =  new ArrayList(((TransformData)dataCopy).getTransformChildren().size() +1);
    transformTables =  new ArrayList(((TransformData)dataCopy).getTransformChildren().size() +1);
 
    // First the root transformation
    transformTablesPanels = new ArrayList();
   
    JPanel mtransformPanel = new JPanel(new BorderLayout());
    transformTablesPanels.add(mtransformPanel);
    JComboBox mcombo = new JComboBox();
   
    transformCombos.add(mcombo);
    mtransformPanel.add(mcombo, BorderLayout.NORTH);

    for(int j=0;j<TransformData.FULL;j++){
      mcombo.addItem(items[j]);
    }
    mcombo.addItemListener(this);
    mcombo.setSelectedItem(items[((TransformData)dataCopy).getKind()-1]);
   
    JTable mtable = createTableDataPanel(dataCopy);
    transformTables.add(mtable);
    mtransformPanel.add(mtable, BorderLayout.CENTER);
    composedTransformPanel.add(mtransformPanel);
   
    // Then the sub transformations
    for(int i=0;i< ((TransformData)dataCopy).getTransformChildren().size(); i++){
   
      TransformData composedDataCopy = ((TransformData)((TransformData)dataCopy).getTransformChildren().get(i));
      JPanel transformPanel = new JPanel(new BorderLayout());   
      transformTablesPanels.add(transformPanel);
     
      JComboBox combo = new JComboBox();
     
      transformCombos.add(combo);
      transformPanel.add(combo, BorderLayout.NORTH);
      for(int j=0;j<TransformData.FULL;j++){
        combo.addItem(items[j]);
      }
      combo.addItemListener(this);
      combo.setSelectedItem(items[composedDataCopy.getKind()-1]);
     
      JTable table = createTableDataPanel(composedDataCopy);
      transformTables.add(table);
      transformPanel.add(table, BorderLayout.CENTER);

      composedTransformPanel.add(transformPanel);
   
    if (transformAvailable){
      p.add(p1, BorderLayout.NORTH);
      p.add(composedTransformPanel,BorderLayout.CENTER);
   
    }
    return p;
  }
 
 
  protected JTable createTableDataPanel(SceneGraphData dataCopy){
    TransformTableModel transformTableModel = new TransformTableModel(dstree,  (TransformData)dataCopy);
    JTable table=new JTable(transformTableModel);
    TableColumn c;
    c=table.getColumn("2");
    c.setPreferredWidth(10);
    c=table.getColumn("3");
    return  table;
  }
 

  /* (non-Javadoc)
   * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
   */
  public void itemStateChanged(ItemEvent e) {
    TransformData composedDataCopy = null;
    int index=0;
   
    if (e.getSource() == (JComboBox)transformCombos.get(0)){
      composedDataCopy = (TransformData)dataCopy;
    }
    else for(int i=0; i<((TransformData)dataCopy).getTransformChildren().size();i++){
      if (e.getSource() == ( (JComboBox)transformCombos.get(i+1))){
        composedDataCopy = ((TransformData)((TransformData)dataCopy).getTransformChildren().get(i));
        index = i+1;
        break;
      }
    }
    if (composedDataCopy!=null){
      int newKind=((Integer)itemsId.get(e.getItem())).intValue();
      if ((e.getStateChange() == ItemEvent.SELECTED)
          && (newKind != composedDataCopy.getKind())) {
       
        composedDataCopy.setKind(newKind);
       
        ((JPanel)transformTablesPanels.get(index)).remove((JTable)transformTables.get(index));
        ((JPanel)transformTablesPanels.get(index)).add((JTable)transformTables.get(index));
       
        dialog.pack();
        dialog.repaint();
      }
    } 
   
  }


  public void actionPerformed(ActionEvent e) {
    super.actionPerformed(e);
   
    if(e.getSource()==bAdd){ 
      // Add a new transformation

      TransformData newTransform = ((TransformData)dataCopy).addComposedTransformation();
      newTransform.setEditable(dataCopy.isEditable());
      JPanel mtransformPanel = new JPanel(new BorderLayout());
      transformTablesPanels.add(mtransformPanel);
     
      JComboBox mcombo = new JComboBox();
      mcombo.addItemListener(this);
      transformCombos.add(mcombo);
      mtransformPanel.add(mcombo, BorderLayout.NORTH);
      for(int j=0;j<TransformData.FULL;j++){
        mcombo.addItem(items[j]);
      }
      mcombo.setSelectedItem(items[newTransform.getKind()-1]);
     
      JTable mtable = createTableDataPanel(newTransform);
     
      transformTables.add(mtable);
      mtransformPanel.add(mtable, BorderLayout.CENTER);
      composedTransformPanel.add(mtransformPanel);
     
      updateEditable();
      dialog.pack();
      dialog.repaint()

    }else if (e.getSource()==bRemove){
     
      // Remove last transformation
      if ( ((TransformData)dataCopy).getTransformChildren().size() > 0){
       
        transformCombos.remove(transformCombos.size()-1);
        transformTables.remove(transformTables.size()-1);
        composedTransformPanel.remove(composedTransformPanel.getComponentCount()-1);
        ((TransformData)dataCopy).removeLastComposedTransformation();
        transformTablesPanels.remove(transformTablesPanels.size()-1);
       
     
     
      }
      dialog.pack();
      dialog.repaint()
    }
  }
 
  public void setEditable(boolean b){
    super.setEditable(b);
    for(int i=0;i< ((TransformData)dataCopy).getTransformChildren().size(); i++){
      ((TransformData)((TransformData)dataCopy).getTransformChildren().get(i)).setEditable(b);
    }
  }
 
 
  public void updateEditable(){
    super.updateEditable();
    if (transformAvailable){
      for(int i=0; i<transformCombos.size();i++)
        ( (JComboBox)transformCombos.get(i)).setEnabled(dataCopy.isEditable());
     
      for(int i=0; i<transformTables.size();i++){ 
        ((JTable)transformTables.get(i)).setGridColor(dataCopy.isEditable()? Color.BLACK : Color.GRAY)
        ((JTable)transformTables.get(i)).setForeground(dataCopy.isEditable()? Color.BLACK : Color.GRAY);
      }
    }
  }
 
  public void synchronizeDataPanel(){
    if (transformAvailable){
      for(int i=0; i<transformTables.size();i++){
        TableCellEditor tce=( ( (JTable)transformTables.get(i)).getCellEditor());
        if(tce!=null){
          tce.stopCellEditing();
        }
      } 
    }
  }

}
TOP

Related Classes of syn3d.ui.TransformDataUI

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.