From: <emm...@us...> - 2008-09-22 14:24:22
|
Revision: 3967 http://fudaa.svn.sourceforge.net/fudaa/?rev=3967&view=rev Author: emmanuel_martin Date: 2008-09-22 14:23:49 +0000 (Mon, 22 Sep 2008) Log Message: ----------- Extension des fonctionnalit?\195?\169s lors de l'?\195?\169dition de polyligne. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliAtomicCoordinatesTableModel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/courbe/EGCourbeModelProfile.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliAtomicCoordinatesTableModel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliAtomicCoordinatesTableModel.java 2008-09-21 23:14:52 UTC (rev 3966) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliAtomicCoordinatesTableModel.java 2008-09-22 14:23:49 UTC (rev 3967) @@ -233,8 +233,8 @@ } else { c.y = ((Double) _value).doubleValue(); } - } + fireTableCellUpdated(_rowIndex, _columnIndex); } public boolean isCellEditable(final int _rowIndex, final int _columnIndex) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java 2008-09-21 23:14:52 UTC (rev 3966) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java 2008-09-22 14:23:49 UTC (rev 3967) @@ -7,23 +7,26 @@ */ package org.fudaa.ebli.calque.edition; -import gnu.trove.TIntObjectIterator; - import java.awt.Color; import java.awt.Container; import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.Graphics2D; import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import javax.swing.AbstractButton; +import javax.swing.Box; +import javax.swing.BoxLayout; import javax.swing.JComponent; import javax.swing.JTable; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.TableModel; import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ctulu.CtuluCommandComposite; @@ -31,7 +34,6 @@ import org.fudaa.ctulu.CtuluCommandManager; import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.gis.GISAttributeModel; -import org.fudaa.ctulu.gis.GISCoordinateSequence; import org.fudaa.ctulu.gis.GISCoordinateSequenceUnique; import org.fudaa.ctulu.gis.GISPoint; import org.fudaa.ctulu.gis.GISZoneCollection; @@ -61,36 +63,47 @@ import com.vividsolutions.jts.geom.CoordinateSequence; /** - * Un panneau d'\xE9dition d'un objet GIS unique contenu dans un calque editable {@link ZCalqueEditable}. Ce panneau permet l'edition - * des coordonn\xE9es de l'objet ainsi que de ses attributs. Ce panneau est associ\xE9 \xE0 un mod\xE8le \xE9ditable de calque. Un gestionnaire - * de commandes peut \xEAtre ajout\xE9 au panneau. + * Un panneau d'\xE9dition d'un objet GIS unique contenu dans un calque editable + * {@link ZCalqueEditable}. Ce panneau permet l'edition des coordonn\xE9es de + * l'objet ainsi que de ses attributs. Ce panneau est associ\xE9 \xE0 un mod\xE8le + * \xE9ditable de calque. Un gestionnaire de commandes peut \xEAtre ajout\xE9 au panneau. * * @author Fred Deniger - * @version $Id: EbliSingleObjectEditorPanel.java,v 1.10.6.2 2008-04-01 07:28:15 bmarchan Exp $ + * @version $Id: EbliSingleObjectEditorPanel.java,v 1.10.6.2 2008-04-01 07:28:15 + * bmarchan Exp $ */ public class EbliSingleObjectEditorPanel extends CtuluDialogPanel { /** * Cette classe repr\xE9sente les informations sous forme d'un tableau de - * donn\xE9es. Les donn\xE9es affich\xE9es dans ce tableau peuvent-\xEAtre \xE9dit\xE9es. + * donn\xE9es. Les donn\xE9es affich\xE9es dans ce tableau peuvent \xEAtre \xE9dit\xE9es. * * @author MARTIN Emmanuel - * @version $Id: EbliSingleObjectEditorPanel.java,v 1.10.6.2 2008-04-01 07:28:15 emartin Exp $ + * @version $Id: EbliSingleObjectEditorPanel.java,v 1.10.6.2 2008-04-01 + * 07:28:15 emartin Exp $ */ - public class TableRepresentation extends BuPanel{ - + public class TableRepresentation extends BuPanel { + // Contener d'attributs globaux - private GISAttributeModel[] globalAttr_; // Tableau des attributs globaux - private CtuluValueEditorI[] globalAttrEditor_; // Tableau des editeurs d'attributs, cr\xE9e en utilisant globalAttr_ - private JComponent[] globalComp_; // tableau des composants graphique des attributs globaux, - // cr\xE9e en utilisant globalAttrEditor_ - // Coordonn\xE9es - private JComponent tfX_, tfY_; // Repr\xE9sentation graphique dans le cas o\xF9 on a un point unique \xE0 repr\xE9senter - private JTable table_; // Repr\xE9sentation graphique dans le cas o\xF9 on plusieurs points \xE0 repr\xE9senter - private boolean isTableStat_; // Vrai si l'objet est en mode repr\xE9sentation par tableau + private GISAttributeModel[] globalAttr_; // Tableau des attributs globaux + private CtuluValueEditorI[] globalAttrEditor_; // Tableau des editeurs + // d'attributs, cr\xE9e en + // utilisant globalAttr_ + private JComponent[] globalComp_; // tableau des composants graphique des + // attributs globaux, + // cr\xE9e en utilisant globalAttrEditor_ + // Coordonn\xE9es + private JComponent tfX_, tfY_; // Repr\xE9sentation graphique dans le cas o\xF9 on + // a un point unique \xE0 repr\xE9senter + private JTable table_; // Repr\xE9sentation graphique dans le cas o\xF9 on + // plusieurs points \xE0 repr\xE9senter + private boolean isTableStat_; // Vrai si l'objet est en mode repr\xE9sentation + // par tableau // Formateur - private final EbliFormatterInterface xyFormatter_; // Formateur g\xE9rant le format des informations \xE0 afficher - + private final EbliFormatterInterface xyFormatter_; // Formateur g\xE9rant le + // format des informations \xE0 + // afficher + /** * @param _editAttribut * indique si les attributs globaux sont \xE9ditable (dans le cas o\xF9 @@ -103,7 +116,7 @@ */ public TableRepresentation(final boolean _editAttributGlobaux, final boolean _editVertexAttribut, final EbliFormatterInterface _xyFormatter) { - xyFormatter_ = _xyFormatter; + xyFormatter_=_xyFormatter; final boolean isPoint=(zone_.getGeometry(idx_) instanceof GISPoint); // Construction de la table des attributs globaux (globalAttr_) \\ if (_editAttributGlobaux) { @@ -119,10 +132,11 @@ globalAttr_=new GISAttributeModel[globalAttributs.size()]; globalAttributs.toArray(globalAttr_); } - else // On \xE9dite pas les attributs globaux, donc globalAttr_ est vide + else + // On \xE9dite pas les attributs globaux, donc globalAttr_ est vide globalAttr_=new GISAttributeModel[0]; - globalAttrEditor_ = new CtuluValueEditorI[globalAttr_.length]; - globalComp_ = new JComponent[globalAttr_.length]; + globalAttrEditor_=new CtuluValueEditorI[globalAttr_.length]; + globalComp_=new JComponent[globalAttr_.length]; // Construction du panneau \\ setLayout(new BuBorderLayout(5, 5)); // Zone de t\xEAte contenant les attributs globaux @@ -179,10 +193,10 @@ // d'afficher les informations else { isTableStat_=true; - BuPanel pnTableau = new BuPanel(); + BuPanel pnTableau=new BuPanel(); pnTableau.setLayout(new BuBorderLayout()); // Construction de la table - table_ = new CtuluTable(); + table_=new CtuluTable(); table_.setModel(model_); model_.updateCellEditor(table_); // Ajout des \xE9l\xE9ments \xE0 l'interface @@ -190,14 +204,14 @@ add(pnTableau, BuBorderLayout.CENTER); } } - + /** * @return la s\xE9quence des coordonn\xE9es modifi\xE9es. */ protected CoordinateSequence getNewCoordinate() { // Cas o\xF9 on a repr\xE9sent\xE9 un ensemble de points if (isTableStat_) - return ((EbliAtomicCoordinatesTableModel.Line) model_).getNewCoordinateSequence(); + return ((EbliAtomicCoordinatesTableModel.Line)model_).getNewCoordinateSequence(); // Cas o\xF9 on a repr\xE9sent\xE9 un point unique else if (zone_.isGeomModifiable()) { Double newX=null, newY=null; @@ -209,193 +223,305 @@ } return null; } - + /** * Enregistre les modifications effectu\xE9es. */ public void apply() { // Cr\xE9ation d'une nouvelle commande - final CtuluCommandComposite cmp = (cmd_ == null ? null : new CtuluCommandComposite()); + final CtuluCommandComposite cmp=(cmd_==null ? null:new CtuluCommandComposite()); // Application des modifications des attributs globaux for (int i=globalAttr_.length-1; i>=0; i--) { final Object val=globalAttrEditor_[i].getValue(globalComp_[i]); globalAttr_[i].setObject(idx_, val, cmp); } // Cas du tableau modifi\xE9 - if(isTableStat_) + if (isTableStat_) model_.apply(cmp); // Cas du point unique modifi\xE9 - else if(zone_.isGeomModifiable()) + else if (zone_.isGeomModifiable()) zone_.setCoordinateSequence(idx_, getNewCoordinate(), cmp); // Ajout de la nouvelle commande \xE0 cmd_ - if (cmd_ != null) + if (cmd_!=null) cmd_.addCmd(cmp.getSimplify()); } - + /** * Stop l'\xE9dition si le mode tableau est actif */ - public void stopCellEditing(){ - if (isTableStat_ && table_.isEditing()) + public void stopCellEditing() { + if (isTableStat_&&table_.isEditing()) table_.getCellEditor().stopCellEditing(); } } /** - * Cette classe repr\xE9sente une information (choisie) sous forme d'une courbe. + * Cette classe repr\xE9sente l'information z sous forme d'une courbe. * Cette information peut-\xEAtre \xE9dit\xE9e via la courbe. * * @author MARTIN Emmanuel - * @version $Id: EbliSingleObjectEditorPanel.java,v 1.10.6.2 2008-04-01 07:28:15 emartin Exp $ + * @version $Id: EbliSingleObjectEditorPanel.java,v 1.10.6.2 2008-04-01 + * 07:28:15 emartin Exp $ */ - public class CourbeRepresentation extends BuPanel { - - private double lengthPolyligne_; // Taille de la polyligne, utile pour l'axe des abscisses - private GISAttributeModel[] attributs_; // Attributs de la g\xE9om\xE9trie, dont le z - private HashMap<Integer, Double> courbeModelIndCoordX_; // Association entre l'index du point et sa coordnn\xE9e x - /* - * courbeModif_ contient les valeurs modifi\xE9es de la courbe. Elles sont enregistr\xE9es ici pour pourvoir - * les annuler en cas de sortie de la fen\xEAtre par le bouton 'annuler'. - * Association entre l'index du point et sa nouvelle coordonn\xE9e z. + public class CourbeRepresentation extends BuPanel implements TableModelListener, ActionListener { + + /** + * Cette classe donne un acc\xE8s restraint au model 'model_'. Concr\xE8tement + * seul deux colones sont visibles : curviligne et z. Et seul z est \xE9ditable. + * + * @author Emmanuel MARTIN + * @version $Id:$ */ - private HashMap<Integer, Double> courbeModif_; - private int zId_; // Index de l'attribut 'z' - private double maxZ_; // Valeur actuelle maximal de z - private EGGraphe grapheVue_; // Le conteneur de la courbe + protected class LimitedTableRepresentation extends AbstractTableModel implements TableModelListener { - public CourbeRepresentation(){ - CoordinateSequence coordSequence = modeleSrc_.getGeomData().getCoordinateSequence(idx_); - courbeModif_ = new HashMap<Integer, Double>(); - // Cr\xE9ation du model de donn\xE9es de la courbe \\ - // Recherche de l'attribut z - attributs_ = modeleSrc_.getGeomData().getAtomicAttributeSubModel(idx_); - zId_ = -1; - int j=0; - while(j<attributs_.length && zId_==-1){ - if(attributs_[j].getAttribute().getName().compareTo("z") == 0) - zId_=j; - j++; + private EbliFormatterInterface xyFormatter_; + + /** + * @param _xyFormatter le formateur pour la colonne des curvilignes + */ + public LimitedTableRepresentation(EbliFormatterInterface _xyFormatter){ + xyFormatter_=_xyFormatter; + model_.addTableModelListener(this); } - // calcul de lengthPolyligne et remplissage de courbeModel_ et de coordX - // et coordY contenant les informations pour instancier la courbe - double[] coordX, coordY; - if(zId_==-1){ - lengthPolyligne_ = 0; - courbeModelIndCoordX_ = new HashMap<Integer, Double>(0); - coordX = new double[0]; - coordY = new double[0]; + + /* + * (non-Javadoc) + * + * @see javax.swing.table.TableModel#getColumnCount() + */ + public int getColumnCount() { + return 2; } - else { - // Initialisation - lengthPolyligne_=0; - coordX = new double[coordSequence.size()]; - coordY = new double[coordSequence.size()]; - courbeModelIndCoordX_=new HashMap<Integer, Double>(coordSequence.size()); - Coordinate lastCoord=coordSequence.getCoordinate(0); - Coordinate currentCoord=null; - // Remplissage et construction des attributs - courbeModelIndCoordX_.put(0, lengthPolyligne_); - coordX[0] = lengthPolyligne_; - coordY[0] = (Double)attributs_[zId_].getObjectValueAt(0); - maxZ_ = (Double)attributs_[zId_].getObjectValueAt(0); - for (int i=1; i<coordSequence.size(); i++) { - currentCoord=coordSequence.getCoordinate(i); - lengthPolyligne_+=Math.sqrt(Math.pow(lastCoord.x-currentCoord.x, 2)+Math.pow(lastCoord.y-currentCoord.y, 2)); - courbeModelIndCoordX_.put(i, lengthPolyligne_); - coordX[i] = lengthPolyligne_; - coordY[i] = (Double)attributs_[zId_].getObjectValueAt(i); - maxZ_ = Math.max(maxZ_, (Double)attributs_[zId_].getObjectValueAt(i)); - lastCoord=currentCoord; + + /* + * (non-Javadoc) + * + * @see javax.swing.table.TableModel#getRowCount() + */ + public int getRowCount() { + return model_.getRowCount(); + } + + /* + * (non-Javadoc) + * + * @see javax.swing.table.TableModel#getValueAt(int, int) + */ + public Object getValueAt(int _rowIndex, int _columnIndex) { + switch (_columnIndex) { + case 0: + return xyFormatter_.getXYFormatter().format(getX(_rowIndex)); + case 1: + return getY(_rowIndex); + default: + return null; } } + + public boolean isCellEditable(final int _rowIndex, final int _columnIndex) { + if (_columnIndex == 0) + return false; + return model_.isCellEditable(_rowIndex, _columnIndex); + } + + public void setValueAt(final Object _value, final int _rowIndex, final int _columnIndex) { + if(_columnIndex == 1) + setY(_rowIndex, (Double)_value, null); + } + + public String getColumnName(int _column) { + switch (_column) { + case 0: + return EbliLib.getS("curviligne"); + case 1: + return model_.getColumnName(zCol_); + default: + return null; + } + } + + /* (non-Javadoc) + * @see javax.swing.event.TableModelListener#tableChanged(javax.swing.event.TableModelEvent) + */ + public void tableChanged(TableModelEvent _e) { + int col=_e.getColumn(); + if (_e.getColumn()==zCol_) + col=1; + fireTableChanged(new TableModelEvent((TableModel)_e.getSource(), _e.getFirstRow(), _e.getLastRow(), col, _e.getType())); + } + } + + // Taille de la polyligne, utile pour l'axe des abscisses + private double lengthPolyligne_; + // Association entre l'index du point et sa coordnn\xE9e x + private HashMap<Integer, Double> courbeModelIndCoordX_; + // Valeur actuelle maximal de z + private double maxZ_; + // Le conteneur de la courbe + private EGGraphe grapheVue_; + // Axes du la courbe + private EGAxeHorizontal axeX_; + private EGAxeVertical axeY_; + // Gestion des boutons + private HashMap<AbstractButton, EbliActionInterface> buttonActionInt_; + private AbstractButton pressedButton_; + + public CourbeRepresentation() { + model_.addTableModelListener(this); // Construction de la courbe \\ - EGGrapheSimpleModel grapheModel = new EGGrapheSimpleModel(); - grapheVue_ = new EGGraphe(grapheModel); + EGGrapheSimpleModel grapheModel=new EGGrapheSimpleModel(); + grapheVue_=new EGGraphe(grapheModel); grapheVue_.setPreferredSize(new Dimension(400, 600)); grapheVue_.setSize(grapheVue_.getPreferredSize()); // Axe des X - final EGAxeHorizontal axeX = new EGAxeHorizontal(false); - axeX.setTitre("distance"); - axeX.setUnite("m\xE8tre"); - axeX.setBounds(0, lengthPolyligne_); - axeX.setGraduations(true); - grapheVue_.setXAxe(axeX); + axeX_=new EGAxeHorizontal(false); + axeX_.setTitre("distance"); + axeX_.setUnite("m\xE8tre"); + axeX_.setGraduations(true); + grapheVue_.setXAxe(axeX_); // Axe des Y - EGAxeVertical axeY = new EGAxeVertical(); - axeY.setGraduations(true); - axeY.setBounds(0, maxZ_); - axeY.setTitre("Z"); - axeY.setUnite("m\xE8tre"); + axeY_=new EGAxeVertical(); + axeY_.setGraduations(true); + axeY_.setTitre("Z"); + axeY_.setUnite("m\xE8tre"); + // Calcule des x + generateCoordX(); // La courbe - EGCourbeModelProfile courbeModel = new EGCourbeModelProfile(this, "Les petits z sont partout"); - EGCourbeSimple courbeVue_ = new EGCourbeSimple(axeY, courbeModel); + EGCourbeModelProfile courbeModel=new EGCourbeModelProfile(this, ""); + EGCourbeSimple courbeVue_=new EGCourbeSimple(axeY_, courbeModel); courbeVue_.setAspectContour(Color.BLUE); grapheModel.addCourbe(courbeVue_, new CtuluCommandManager()); // Conteneur de graphe - EGFillePanelDialog pnD = new EGFillePanelDialog(grapheVue_); - // Gestion des bouton - EbliActionInterface[] actions = pnD.buildActions(); - Container con = new Container(); - con.setLayout(new GridLayout(7, 1)); + EGFillePanelDialog pnD=new EGFillePanelDialog(grapheVue_); + // Construction des boutons \\ + EbliActionInterface[] actions=pnD.buildActions(); + Container buttons=new Container(); + buttons.setLayout(new GridLayout(5, 1)); EbliLib.updateMapKeyStroke(this, actions); - for(int i =0 ; i<actions.length;i++){ - AbstractButton b = actions[i].buildButton(EbliComponentFactory.INSTANCE); - con.add(b); + buttonActionInt_ = new HashMap<AbstractButton, EbliActionInterface>(actions.length); + for (int i=0; i<actions.length; i++) { + AbstractButton button = actions[i].buildButton(EbliComponentFactory.INSTANCE); + button.addActionListener(this); + buttonActionInt_.put(button, actions[i]); + buttons.add(button); } + // Construction du tableau \\ + BuPanel tableau = new BuPanel(); + LimitedTableRepresentation t = new LimitedTableRepresentation(model_.xyFormatter_); + CtuluTable jt = new CtuluTable(); + jt.setModel(t); + // Met le bon \xE9diteurs dans le tableau pour l'attribut z + jt.getColumnModel().getColumn(1) + .setCellEditor(model_.modeles_[zInd_].getAttribute().getEditor().createTableEditorComponent()); // Ajout au panel - setLayout(new FlowLayout()); - add(con, FlowLayout.LEFT); - add(pnD, FlowLayout.CENTER); + BuScrollPane scrollPane = new BuScrollPane(jt); + tableau.add(scrollPane); + Box left = new Box(BoxLayout.Y_AXIS); + scrollPane.setPreferredSize(new Dimension(130, 335)); + left.add(buttons); + left.add(tableau); + setLayout(new BuBorderLayout()); + add(left, BuBorderLayout.WEST); + add(pnD, BuBorderLayout.CENTER); + setPreferredSize(new Dimension(150, 250)); } - - public int getNbValues(){ + + public int getNbValues() { return model_.getRowCount(); - //return courbeModelIndCoordX_.size(); } + public double getX(int _id) { - return Double.parseDouble((String)model_.getValueAt(_id, 0)); - //return courbeModelIndCoordX_.get(_id); + return courbeModelIndCoordX_.get(_id); } + public double getY(int _id) { return (Double)model_.getValueAt(_id, zCol_); - /*if(courbeModif_.get(_id)!=null) - return courbeModif_.get(_id); - return (Double)attributs_[zId_].getObjectValueAt(_id); - */ } - public void setY(int _id, double _value, CtuluCommandContainer _cmd){ + + public void setY(int _id, double _value, CtuluCommandContainer _cmd) { model_.setValueAt(new Double(_value), _id, zCol_); - /*courbeModif_.put(_id, new Double(_value));*/ - grapheVue_.fullRepaint(); } - /* - public void apply(){ - // Cr\xE9ation d'une nouvelle commande - final CtuluCommandComposite cmp = (cmd_ == null ? null : new CtuluCommandComposite()); - // Application des modifications des z - for(Map.Entry<Integer, Double> pair: courbeModif_.entrySet()) - attributs_[zId_].setObject(pair.getKey(), pair.getValue(), cmp); - // Ajout de la nouvelle commande \xE0 cmd_ - if (cmd_ != null) - cmd_.addCmd(cmp.getSimplify()); - } - */ + /** - * @return la s\xE9quence des coordonn\xE9es modifi\xE9es. Toujours null puisque ni x ni y ne sont modifi\xE9s (seulement z). + * @return la s\xE9quence des coordonn\xE9es modifi\xE9es. Toujours null puisque ni x + * ni y ne sont modifi\xE9s (seulement z). */ protected CoordinateSequence getNewCoordinate() { return null; } + + /** + * Build or rebuild 'courbeModelIndCoordX_' with data in model_. + */ + protected void generateCoordX() { + double oldLengthPolyligne = lengthPolyligne_; + double oldMaxZ = maxZ_; + lengthPolyligne_=0; + courbeModelIndCoordX_=new HashMap<Integer, Double>(model_.getRowCount()); + double lastX=Double.parseDouble((String)model_.getValueAt(0, 1)); + double lastY=Double.parseDouble((String)model_.getValueAt(0, 2)); + double currentX, currentY; + // Remplissage et construction des attributs + courbeModelIndCoordX_.put(0, lengthPolyligne_); + maxZ_=getY(0); // Le Y de getY (y de la courbe) est le Z du model + for (int i=1; i<model_.getRowCount(); i++) { + currentX=Double.parseDouble((String)model_.getValueAt(i, 1)); + currentY=Double.parseDouble((String)model_.getValueAt(i, 2)); + lengthPolyligne_+=Math.sqrt(Math.pow(lastX-currentX, 2)+Math.pow(lastY-currentY, 2)); + courbeModelIndCoordX_.put(i, lengthPolyligne_); + maxZ_=Math.max(maxZ_, (Double)model_.getValueAt(i, 3)); + lastX=currentX; + lastY=currentY; + } + if(oldLengthPolyligne != lengthPolyligne_) + axeX_.setBounds(0, lengthPolyligne_); + if(oldMaxZ != maxZ_) + axeY_.setBounds(0, maxZ_); + } + + /* + * (non-Javadoc) + * + * @seejavax.swing.event.TableModelListener#tableChanged(javax.swing.event. + * TableModelEvent) + */ + public void tableChanged(TableModelEvent e) { + generateCoordX(); + grapheVue_.fullRepaint(); + } + + /* (non-Javadoc) + * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) + */ + public void actionPerformed(ActionEvent _e) { + // Simule un click sur le bouton selectionn\xE9 pour le d\xE9activer + if (pressedButton_==(AbstractButton)_e.getSource()) + pressedButton_=null; + else if (pressedButton_==null) + pressedButton_=(AbstractButton)_e.getSource(); + else { + pressedButton_.doClick(); + pressedButton_=(AbstractButton)_e.getSource(); + } + } } - + private CtuluCommandContainer cmd_; - private final int idx_; // Num\xE9ro de la g\xE9om\xE9rie dans zone_ que l'on veut traiter + private final int idx_; // Num\xE9ro de la g\xE9om\xE9rie dans zone_ que l'on veut + // traiter private ZModeleEditable modeleSrc_; - private final GISZoneCollection zone_; // Objet contenant toutes les g\xE9nom\xE9ries (seule celle \xE0 idx_ nous interesse) et divers info - private TableRepresentation tableRep_; // Onglet repr\xE9sentant les informations sous forme de table - private CourbeRepresentation courbeRep_; // Onglet repr\xE9sentant une information sous forme de courbe - private EbliAtomicCoordinatesTableModel model_; // Model central pour les deux repr\xE9sentations + private final GISZoneCollection zone_; // Objet contenant toutes les + // g\xE9nom\xE9ries (seule celle \xE0 idx_ nous + // interesse) et divers info + private TableRepresentation tableRep_; // Onglet repr\xE9sentant les informations + // sous forme de table + private CourbeRepresentation courbeRep_; // Onglet repr\xE9sentant une + // information sous forme de courbe + private EbliAtomicCoordinatesTableModel model_; // Model central pour les deux + // repr\xE9sentations private int zCol_; // Num\xE9ro de la colonne contenant les z dans le model + private int zInd_; // Num\xE9ro de l'index des z dans model_.modeles_ + /** * @param _zone * @param _idx @@ -405,38 +531,46 @@ public EbliSingleObjectEditorPanel(final ZModeleEditable _zone, final int _idx, final boolean _editAttribut, final boolean _editVertexAttribut, final EbliFormatterInterface _xyFormatter) { super(); - idx_ = _idx; - zone_ = _zone.getGeomData(); - modeleSrc_ = _zone; + idx_=_idx; + zone_=_zone.getGeomData(); + modeleSrc_=_zone; + zCol_ = zInd_ = -1; // Contruction du model de donn\xE9es commun aux deux repr\xE9sentations if (!(zone_.getGeometry(idx_) instanceof GISPoint)) { + boolean zAttr=false; model_=new EbliAtomicCoordinatesTableModel.Line(_xyFormatter, modeleSrc_.getGeomData(), idx_, null, _editVertexAttribut, modeleSrc_); - boolean found=false; + // construction de zCol_ int k=0; - while (!found&&k<model_.getColumnCount()) { - found=model_.getColumnName(k).equalsIgnoreCase("z"); + while (!zAttr&&k<model_.getColumnCount()) { + zAttr=model_.getColumnName(k).equalsIgnoreCase("z"); k++; } - if (found) { + if (zAttr) zCol_=--k; - // Gestionnaire d'onglet - BuTabbedPane tabbedPane=new BuTabbedPane(); - // Les onglets - tableRep_=new TableRepresentation(_editAttribut, _editVertexAttribut, _xyFormatter); - courbeRep_=new CourbeRepresentation(); - // Ajout - tabbedPane.add("Table", tableRep_); - tabbedPane.add("Courbe", courbeRep_); - add(tabbedPane); + // Construction de zInd_ + zAttr = false; + k=0; + while(!zAttr && k < model_.modeles_.length){ + zAttr = model_.modeles_[k].getAttribute().getName().equalsIgnoreCase("z"); + k++; } - else { - tableRep_=new TableRepresentation(_editAttribut, _editVertexAttribut, _xyFormatter); - add(tableRep_); - } + if(zAttr) + zInd_ = --k; } - else { // Cas avec un point unique + if (zCol_!=-1&&zInd_!=-1) { + // Gestionnaire d'onglet + BuTabbedPane tabbedPane=new BuTabbedPane(); + // Les onglets tableRep_=new TableRepresentation(_editAttribut, _editVertexAttribut, _xyFormatter); + courbeRep_=new CourbeRepresentation(); + // Ajout + tabbedPane.add("Table", tableRep_); + tabbedPane.add("Courbe", courbeRep_); + add(tabbedPane); + } + else { + tableRep_=new TableRepresentation(_editAttribut, _editVertexAttribut, _xyFormatter); add(tableRep_); } } @@ -453,7 +587,7 @@ * appell\xE9e lors du click sur le bouton 'Valider' */ public void apply() { - if(tableRep_!=null) + if (tableRep_!=null) tableRep_.apply(); } @@ -462,20 +596,20 @@ } public final void setCmd(final CtuluCommandContainer _cmd) { - cmd_ = _cmd; + cmd_=_cmd; } /** - * Appell\xE9 lors du click sur le bouton 'valider' pour sortir de la fen\xEAtre. Retourne vrai si toutes les - * modification sont valides. + * Appell\xE9 lors du click sur le bouton 'valider' pour sortir de la fen\xEAtre. + * Retourne vrai si toutes les modification sont valides. */ public boolean valide() { - if(tableRep_!=null){ + if (tableRep_!=null) { tableRep_.stopCellEditing(); - final CoordinateSequence s = getNewCoordinate(); - if (s != null) { - final CtuluAnalyze ana = new CtuluAnalyze(); - final boolean valide = modeleSrc_.isCoordinateValid(s, ana); + final CoordinateSequence s=getNewCoordinate(); + if (s!=null) { + final CtuluAnalyze ana=new CtuluAnalyze(); + final boolean valide=modeleSrc_.isCoordinateValid(s, ana); if (!valide) { setErrorText(ana.getFatalError().getMessage()); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/courbe/EGCourbeModelProfile.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/courbe/EGCourbeModelProfile.java 2008-09-21 23:14:52 UTC (rev 3966) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/courbe/EGCourbeModelProfile.java 2008-09-22 14:23:49 UTC (rev 3967) @@ -17,7 +17,7 @@ * la vue qui va les traiter. * * @author Emmanuel Martin - * @version $Id:$ + * @version $Id$ */ public class EGCourbeModelProfile implements EGModel { @@ -33,7 +33,6 @@ * @see org.fudaa.ebli.courbe.EGModel#addValue(double, double, org.fudaa.ctulu.CtuluCommandContainer) */ public boolean addValue(double _x, double _y, CtuluCommandContainer _cmd) { - System.out.println("addValue 1"); return false; } @@ -41,7 +40,6 @@ * @see org.fudaa.ebli.courbe.EGModel#addValue(double[], double[], org.fudaa.ctulu.CtuluCommandContainer) */ public boolean addValue(double[] _x, double[] _y, CtuluCommandContainer _cmd) { - System.out.println("addValue 2"); return false; } @@ -58,7 +56,6 @@ * @see org.fudaa.ebli.courbe.EGModel#fillWithInfo(org.fudaa.ebli.palette.BPaletteInfo.InfoData, org.fudaa.ctulu.CtuluListSelectionInterface) */ public void fillWithInfo(InfoData _table, CtuluListSelectionInterface pt) { - System.out.println("fillWithInfo"); } /* (non-Javadoc) @@ -137,7 +134,6 @@ * @see org.fudaa.ebli.courbe.EGModel#isDuplicatable() */ public boolean isDuplicatable() { - System.out.println("isDuplicatable"); return false; } @@ -159,7 +155,6 @@ * @see org.fudaa.ebli.courbe.EGModel#isRemovable() */ public boolean isRemovable() { - System.out.println("isRemovable"); return false; } @@ -174,7 +169,6 @@ * @see org.fudaa.ebli.courbe.EGModel#isTitleModifiable() */ public boolean isTitleModifiable() { - System.out.println("isTitleModifiable"); return false; } @@ -189,7 +183,6 @@ * @see org.fudaa.ebli.courbe.EGModel#removeValue(int, org.fudaa.ctulu.CtuluCommandContainer) */ public boolean removeValue(int _i, CtuluCommandContainer _cmd) { - System.out.println("removeValue1"); return false; } @@ -197,7 +190,6 @@ * @see org.fudaa.ebli.courbe.EGModel#removeValue(int[], org.fudaa.ctulu.CtuluCommandContainer) */ public boolean removeValue(int[] _i, CtuluCommandContainer _cmd) { - System.out.println("removeValue2"); return false; } @@ -205,7 +197,6 @@ * @see org.fudaa.ebli.courbe.EGModel#setTitle(java.lang.String) */ public boolean setTitle(String name) { - System.out.println("setTitle"); return false; } @@ -213,7 +204,6 @@ * @see org.fudaa.ebli.courbe.EGModel#setValue(int, double, double, org.fudaa.ctulu.CtuluCommandContainer) */ public boolean setValue(int _i, double _x, double _y, CtuluCommandContainer _cmd) { - System.out.println("setValue1"); return false; } @@ -221,7 +211,6 @@ * @see org.fudaa.ebli.courbe.EGModel#setValues(int[], double[], double[], org.fudaa.ctulu.CtuluCommandContainer) */ public boolean setValues(int[] _idx, double[] _x, double[] _y, CtuluCommandContainer _cmd) { - System.out.println("setValues2"); return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |