From: <emm...@us...> - 2008-09-05 13:44:13
|
Revision: 3891 http://fudaa.svn.sourceforge.net/fudaa/?rev=3891&view=rev Author: emmanuel_martin Date: 2008-09-05 13:44:23 +0000 (Fri, 05 Sep 2008) Log Message: ----------- Changement sur quelques icons et curseurs. Teste sous linux effectu?\195?\169. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueRepereInteraction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneDeplacementAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacement.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/loupe-etendue.gif Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/fleche-deplacement.gif branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/fleche-polygone.png branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/transform-transparent_16.png Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueRepereInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueRepereInteraction.java 2008-09-05 13:09:41 UTC (rev 3890) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueRepereInteraction.java 2008-09-05 13:44:23 UTC (rev 3891) @@ -8,6 +8,7 @@ import java.awt.Color; import java.awt.Component; +import java.awt.Cursor; import java.awt.Graphics; import java.awt.Point; import java.awt.event.KeyEvent; @@ -19,6 +20,7 @@ import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.ressource.EbliResource; /** * @author deniger @@ -41,6 +43,10 @@ */ } + public Cursor getSpecificCursor() { + return EbliResource.EBLI.getCursor("loupe-etendue", -1, new Point(8, 8)); + } + public String getDescription() { return EbliLib.getS("Zoom") + (zoomMoins_ ? " -" : " +"); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java 2008-09-05 13:09:41 UTC (rev 3890) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java 2008-09-05 13:44:23 UTC (rev 3891) @@ -156,7 +156,6 @@ modificateur_.setXor(true); } - // private Cursor cursor_=new Cursor(Cursor.HAND_CURSOR); public Cursor getSpecificCursor() { return new Cursor(Cursor.DEFAULT_CURSOR); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneDeplacementAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneDeplacementAction.java 2008-09-05 13:09:41 UTC (rev 3890) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneDeplacementAction.java 2008-09-05 13:44:23 UTC (rev 3891) @@ -42,7 +42,7 @@ * @param _m l'arbre des calques */ public SceneDeplacementAction(final TreeSelectionModel _m, final ZSceneEditor _sceneEditor, EbliFormatterInterface _formatter, ZCalqueDeplacement _cqDep) { - super(EbliResource.EBLI.getString("D\xE9placer des objets"), EbliResource.EBLI.getToolIcon("draw-move"), "GLOBAL_MOVE", _m); + super(EbliResource.EBLI.getString("D\xE9placer des objets"), EbliResource.EBLI.getToolIcon("fleche-deplacement"), "GLOBAL_MOVE", _m); formatter_=_formatter; cqDep_=_cqDep; setSceneEditor(_sceneEditor); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacement.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacement.java 2008-09-05 13:09:41 UTC (rev 3890) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacement.java 2008-09-05 13:44:23 UTC (rev 3891) @@ -8,8 +8,10 @@ package org.fudaa.ebli.calque.edition; import java.awt.Color; +import java.awt.Cursor; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; @@ -24,6 +26,7 @@ import org.fudaa.ebli.commun.EbliSelectionState; import org.fudaa.ebli.geometrie.GrPoint; import org.fudaa.ebli.geometrie.GrVecteur; +import org.fudaa.ebli.ressource.EbliResource; import org.fudaa.ebli.trace.TraceIcon; /** @@ -55,6 +58,10 @@ return specPanel_; } + public Cursor getSpecificCursor() { + return EbliResource.EBLI.getCursor("fleche-deplacement", -1, new Point(0, 0)); + } + public String getDescription() { return BuResource.BU.getString("D\xE9placer"); } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/fleche-deplacement.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/fleche-polygone.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/transform-transparent_16.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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. |
From: <bma...@us...> - 2008-09-22 15:59:05
|
Revision: 3968 http://fudaa.svn.sourceforge.net/fudaa/?rev=3968&view=rev Author: bmarchan Date: 2008-09-22 15:58:47 +0000 (Mon, 22 Sep 2008) Log Message: ----------- Modification de la couleur pour la g?\195?\169om?\195?\169trie s?\195?\169lectionn?\195?\169e en cas de s?\195?\169lection sommet. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSelectionTrace.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceIcon.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java 2008-09-22 14:23:49 UTC (rev 3967) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java 2008-09-22 15:58:47 UTC (rev 3968) @@ -120,6 +120,8 @@ protected ZModeleGeometry modele_; /** La selection a utilise dans le mode selection sommets */ protected EbliListeSelectionMulti selectionMulti_; + /** Pour le trac\xE9 de la selection en mode atomique. */ + protected ZSelectionTrace traceAtomic_; /** Le mod\xE8le pour le trac\xE9 de surfaces */ protected TraceSurfaceModel surfModel_; @@ -560,9 +562,14 @@ if (isSelectionEmpty()) return; if (isAtomicMode_) { + if (traceAtomic_==null) { + Color cg=attenueCouleur(_trace.getColor()); + Color cs=_trace.getColor(); + traceAtomic_=new ZSelectionTrace(cg,cs); + } CtuluListSelection containers=new CtuluListSelection(selectionMulti_.getIdxSelection()); - paintSelectionSimple(_g, _trace, _versEcran, _clipReel, containers); - paintSelectionMulti(_g, _trace, _versEcran, _clipReel); + paintSelectionSimple(_g, traceAtomic_, _versEcran, _clipReel, containers); + paintSelectionMulti(_g, traceAtomic_, _versEcran, _clipReel); } else { paintSelectionSimple(_g, _trace, _versEcran, _clipReel, selection_); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2008-09-22 14:23:49 UTC (rev 3967) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2008-09-22 15:58:47 UTC (rev 3968) @@ -121,10 +121,10 @@ protected TraceLigneModel ligneModelOuvert_; protected ZModeleLigneBrisee modele_; - /** - * La selection a utilise dans le mode selection de points de polygone. - */ + /** La selection a utilise dans le mode selection de points de polygone. */ protected EbliListeSelectionMulti selectionMulti_; + /** Pour le trac\xE9 de la selection en mode atomique. */ + protected ZSelectionTrace traceAtomic_; /** * @@ -599,9 +599,14 @@ if (isSelectionEmpty()) return; if (isAtomicMode_) { + if (traceAtomic_==null) { + Color cg=attenueCouleur(_trace.getColor()); + Color cs=_trace.getColor(); + traceAtomic_=new ZSelectionTrace(cg,cs); + } CtuluListSelection containers=new CtuluListSelection(selectionMulti_.getIdxSelection()); - paintSelectionSimple(_g, _trace, _versEcran, _clipReel, containers); - paintSelectionMulti(_g, _trace, _versEcran, _clipReel); + paintSelectionSimple(_g, traceAtomic_, _versEcran, _clipReel, containers); + paintSelectionMulti(_g, traceAtomic_, _versEcran, _clipReel); } else { paintSelectionSimple(_g, _trace, _versEcran, _clipReel, selection_); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java 2008-09-22 14:23:49 UTC (rev 3967) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java 2008-09-22 15:58:47 UTC (rev 3968) @@ -117,6 +117,8 @@ /** La selection a utilise dans le mode selection sommets */ protected EbliListeSelectionMulti selectionMulti_; + /** Pour le trac\xE9 de la selection en mode atomique. */ + protected ZSelectionTrace traceAtomic_; /** @@ -466,9 +468,14 @@ if (isSelectionEmpty()) return; if (isAtomicMode_) { + if (traceAtomic_==null) { + Color cg=attenueCouleur(_trace.getColor()); + Color cs=_trace.getColor(); + traceAtomic_=new ZSelectionTrace(cg,cs); + } CtuluListSelection containers=new CtuluListSelection(selectionMulti_.getIdxSelection()); - paintSelectionSimple(_g, _trace, _versEcran, _clipReel, containers); - paintSelectionMulti(_g, _trace, _versEcran, _clipReel); + paintSelectionSimple(_g, traceAtomic_, _versEcran, _clipReel, containers); + paintSelectionMulti(_g, traceAtomic_, _versEcran, _clipReel); } else { paintSelectionSimple(_g, _trace, _versEcran, _clipReel, selection_); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSelectionTrace.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSelectionTrace.java 2008-09-22 14:23:49 UTC (rev 3967) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSelectionTrace.java 2008-09-22 15:58:47 UTC (rev 3968) @@ -23,18 +23,13 @@ * @version $Id: ZSelectionTrace.java,v 1.3.8.1 2008-03-18 07:58:48 bmarchan Exp $ */ public class ZSelectionTrace { + TraceIconModelImmutable iconeModel_; + TraceIconImmutable icone_; + TraceIconModelImmutable iconeModelInterne_; + TraceIconImmutable iconeInterne_; + TraceLigneModelImmutable ligneModel_; + TraceLigneImmutable ligne_; - Color color_ = Color.BLUE; - - TraceIconModelImmutable iconeModel_ = new TraceIconModelImmutable(TraceIcon.CARRE_SELECTION, 4, - Color.BLUE); - TraceIconImmutable icone_=new TraceIconImmutable(iconeModel_); - TraceIconModelImmutable iconeModelInterne_ = new TraceIconModelImmutable( - TraceIcon.CARRE_SELECTION_ELEMENT, 4, Color.BLUE); - TraceIconImmutable iconeInterne_=new TraceIconImmutable(iconeModelInterne_); - TraceLigneModelImmutable ligneModel_ = new TraceLigneModelImmutable(TraceLigne.LISSE, 1.5f, Color.BLUE); - TraceLigneImmutable ligne_=new TraceLigneImmutable(ligneModel_); - public final TraceIconImmutable getIcone(){ return icone_; } @@ -44,18 +39,35 @@ public final TraceLigneImmutable getLigne(){ return ligne_; } + /** - * + * Par defaut, toute selection bleue. */ public ZSelectionTrace() { + this(Color.BLUE, Color.BLUE); + } + + /** + * Une couleur de selection pour le trac\xE9 de la g\xE9om\xE9trie, une couleur pour les sommets. + * @param _cgeom La couleur pour la g\xE9om\xE9trie. + * @param _csom La couleur pour les sommets. + */ + public ZSelectionTrace(Color _cgeom, Color _csom) { super(); + iconeModel_=new TraceIconModelImmutable(TraceIcon.CARRE_SELECTION, 4, _cgeom); + ligneModel_=new TraceLigneModelImmutable(TraceLigne.LISSE, 1.5f, _cgeom); + iconeModelInterne_=new TraceIconModelImmutable(TraceIcon.CARRE_SELECTION_ELEMENT, 4, _csom); + + icone_=new TraceIconImmutable(iconeModel_); + ligne_=new TraceLigneImmutable(ligneModel_); + iconeInterne_=new TraceIconImmutable(iconeModelInterne_); } /** * @return la couleur a utiliser pour dessiner la selection */ public final Color getColor(){ - return color_; + return ligneModel_.getCouleur(); } /** Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceIcon.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceIcon.java 2008-09-22 14:23:49 UTC (rev 3967) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceIcon.java 2008-09-22 15:58:47 UTC (rev 3968) @@ -165,11 +165,11 @@ _g.setColor(Color.WHITE); _g.drawRect(x + 1, y + 1, taille - 3, taille - 3); _g.setColor(oldColor);*/ - _g.drawRect(x, y, taille - 1, taille - 1); - final Color oldColor = _g.getColor(); - _g.setColor(Color.WHITE); - _g.fillRect(x + 1, y + 1, taille - 3, taille - 3); - _g.setColor(oldColor); +// final Color oldColor = _g.getColor(); +// _g.setColor(Color.WHITE); + _g.fillRect(x, y, taille, taille); +// _g.setColor(oldColor); +// _g.drawRect(x, y, taille - 1, taille - 1); break; case CARRE_PLEIN: _g.fillRect(x, y, taille, taille); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-10-02 12:26:18
|
Revision: 4023 http://fudaa.svn.sourceforge.net/fudaa/?rev=4023&view=rev Author: emmanuel_martin Date: 2008-10-02 12:26:09 +0000 (Thu, 02 Oct 2008) Log Message: ----------- Modification du comportement de la fen?\195?\170tre d'edition de g?\195?\169ometry et correction d'un bug. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditionInteraction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionPaletteAbstract.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java 2008-10-01 21:14:21 UTC (rev 4022) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java 2008-10-02 12:26:09 UTC (rev 4023) @@ -10,6 +10,8 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import javax.swing.event.InternalFrameEvent; +import javax.swing.event.InternalFrameListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.tree.TreeSelectionModel; @@ -29,7 +31,7 @@ * @version $Id: CalqueGISEditionAction.java,v 1.6.6.2 2008-05-13 12:10:47 emartin Exp $ */ public class CalqueGISEditionAction extends EbliActionPaletteTreeModel implements PropertyChangeListener { - + private ZEditorDefault editor_; private ZScene scene_; private boolean hide_; // Vrai si le panel d'\xE9dition est ferm\xE9. @@ -103,6 +105,8 @@ hide_ = !hide_; if(hide_){ unactivePanel(); + if(editor_.getPanel().getController().getCqSelectionI()!=null) + editor_.getPanel().getController().getCqSelectionI().setGele(false); // Gele du calque d'edition if(calqueEdition_!=null) editor_.getPanel().unsetCalqueInteractionActif(calqueEdition_); @@ -134,6 +138,8 @@ */ public void valueChanged(final TreeSelectionEvent _e) { unactivePanel(); + if(editor_.getPanel().getController().getCqSelectionI()!=null) + editor_.getPanel().getController().getCqSelectionI().setGele(false); setTarget(getTarget((TreeSelectionModel) _e.getSource())); } @@ -148,4 +154,10 @@ unactivePanel(); } } + + public void internalFrameClosing(InternalFrameEvent e) { + unactivePanel(); + if(editor_.getPanel().getController().getCqSelectionI()!=null) + editor_.getPanel().getController().getCqSelectionI().setGele(false); + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditionInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditionInteraction.java 2008-10-01 21:14:21 UTC (rev 4022) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditionInteraction.java 2008-10-02 12:26:09 UTC (rev 4023) @@ -1432,20 +1432,23 @@ * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent) */ public void keyPressed(KeyEvent _e) { - getFormeEnCours().keyPressed(_e); + if(getFormeEnCours()!=null) + getFormeEnCours().keyPressed(_e); } /* (non-Javadoc) * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent) */ public void keyReleased(KeyEvent _e) { - getFormeEnCours().keyReleased(_e); + if(getFormeEnCours()!=null) + getFormeEnCours().keyReleased(_e); } /* (non-Javadoc) * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent) */ public void keyTyped(KeyEvent _e) { - getFormeEnCours().keyTyped(_e); + if(getFormeEnCours()!=null) + getFormeEnCours().keyTyped(_e); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java 2008-10-01 21:14:21 UTC (rev 4022) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java 2008-10-02 12:26:09 UTC (rev 4023) @@ -15,7 +15,6 @@ import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.CtuluUI; -import org.fudaa.ctulu.gis.GISPolygone; import org.fudaa.ebli.calque.ZCalqueLigneBrisee; import org.fudaa.ebli.calque.ZModeleLigneBrisee; import org.fudaa.ebli.calque.dessin.DeForme; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionPaletteAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionPaletteAbstract.java 2008-10-01 21:14:21 UTC (rev 4022) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionPaletteAbstract.java 2008-10-02 12:26:09 UTC (rev 4023) @@ -10,7 +10,6 @@ import java.awt.Dialog; import java.awt.Dimension; import java.awt.Point; -import java.awt.Window; import java.awt.event.MouseWheelListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -23,19 +22,20 @@ import javax.swing.JInternalFrame; import javax.swing.SwingUtilities; import javax.swing.event.InternalFrameEvent; +import javax.swing.event.InternalFrameListener; +import org.fudaa.ctulu.gui.CtuluLibSwing; + import com.memoire.bu.BuDesktop; import com.memoire.bu.BuLib; import com.memoire.bu.BuPalette; -import org.fudaa.ctulu.gui.CtuluLibSwing; - /** * Une action d\xE9clenchant l'affichage d'une palette. * @author deniger * @version $Id: EbliActionPaletteAbstract.java,v 1.21 2007-06-13 12:57:45 deniger Exp $ */ -public abstract class EbliActionPaletteAbstract extends EbliActionChangeState { +public abstract class EbliActionPaletteAbstract extends EbliActionChangeState implements InternalFrameListener { private static int nbr_ = -1; JDialog dial_; @@ -84,6 +84,7 @@ window_.setContent(buildContentPane); window_.getContentPane().setFocusable(true); window_.pack(); + window_.addInternalFrameListener(this); } } @@ -281,4 +282,38 @@ public void updateStateBeforeShow() {} + /* (non-Javadoc) + * @see javax.swing.event.InternalFrameListener#internalFrameActivated(javax.swing.event.InternalFrameEvent) + */ + public void internalFrameActivated(InternalFrameEvent e) {} + + /* (non-Javadoc) + * @see javax.swing.event.InternalFrameListener#internalFrameClosed(javax.swing.event.InternalFrameEvent) + */ + public void internalFrameClosed(InternalFrameEvent e) {} + + /* (non-Javadoc) + * @see javax.swing.event.InternalFrameListener#internalFrameClosing(javax.swing.event.InternalFrameEvent) + */ + public void internalFrameClosing(InternalFrameEvent e) {} + + /* (non-Javadoc) + * @see javax.swing.event.InternalFrameListener#internalFrameDeactivated(javax.swing.event.InternalFrameEvent) + */ + public void internalFrameDeactivated(InternalFrameEvent e) {} + + /* (non-Javadoc) + * @see javax.swing.event.InternalFrameListener#internalFrameDeiconified(javax.swing.event.InternalFrameEvent) + */ + public void internalFrameDeiconified(InternalFrameEvent e) {} + + /* (non-Javadoc) + * @see javax.swing.event.InternalFrameListener#internalFrameIconified(javax.swing.event.InternalFrameEvent) + */ + public void internalFrameIconified(InternalFrameEvent e) {} + + /* (non-Javadoc) + * @see javax.swing.event.InternalFrameListener#internalFrameOpened(javax.swing.event.InternalFrameEvent) + */ + public void internalFrameOpened(InternalFrameEvent e) {} } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-10-21 09:36:33
|
Revision: 4085 http://fudaa.svn.sourceforge.net/fudaa/?rev=4085&view=rev Author: emmanuel_martin Date: 2008-10-21 08:36:50 +0000 (Tue, 21 Oct 2008) Log Message: ----------- pr?\195?\169 commit sur la modification du panel d'information Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java 2008-10-20 16:31:59 UTC (rev 4084) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java 2008-10-21 08:36:50 UTC (rev 4085) @@ -7,12 +7,13 @@ */ package org.fudaa.ebli.calque; +import java.util.ArrayList; + import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; -import org.fudaa.ctulu.CtuluLibMessage; import org.fudaa.ctulu.CtuluLibString; - +import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.palette.BPaletteInfo; /** * Un panel affichant les infos envoyes par TrPanelInfoSender. @@ -21,63 +22,108 @@ */ public class BCalquePaletteInfo extends BPaletteInfo implements TreeSelectionListener, ZSelectionListener { - BCalque layer_; - BArbreCalqueModel m_; + private ArrayList<ZCalqueAffichageDonneesInterface> calqueWithGeometriesSelected_; + private BArbreCalqueModel treeModel_; - /** - * - */ + private class CalqueVisitor implements BCalqueVisitor { + private ArrayList<ZCalqueAffichageDonneesInterface> calques=new ArrayList<ZCalqueAffichageDonneesInterface>(); + public boolean visit(BCalque _cq) { + if(_cq instanceof ZCalqueAffichageDonneesInterface) + calques.add((ZCalqueAffichageDonneesInterface)_cq); + return true; + } + public ZCalqueAffichageDonneesInterface[] getCalques(){ + return calques.toArray(new ZCalqueAffichageDonneesInterface[0]); + } + } + public BCalquePaletteInfo(final BArbreCalqueModel _m) { super(); - m_ = _m; - m_.addTreeSelectionListener(this); + treeModel_ = _m; + treeModel_.addTreeSelectionListener(this); + + calqueWithGeometriesSelected_=new ArrayList<ZCalqueAffichageDonneesInterface>(); + ZCalqueAffichageDonneesInterface[] calques = getCalques(); + for(int i=0;i<calques.length;i++) + calques[i].addSelectionListener(this); } - /** - * + * @return les calques de type ZCalqueAffichageDonneesInterface contenus dans l'arbre de calque. */ - public void selectionChanged(final ZSelectionEvent _evt){ - if (isAvailable() && (_evt.getSource() == layer_) && layer_ != null) { - txtTitle_.setText(CtuluLibString.EMPTY_STRING); - tableModel_.clear(); - layer_.fillWithInfo(tableModel_); + private ZCalqueAffichageDonneesInterface[] getCalques(){ + CalqueVisitor visitor=new CalqueVisitor(); + treeModel_.getRootCalque().apply(visitor); + return visitor.getCalques(); + } + + /** + * Met \xE0 jour les informations contenues dans le tableau. + */ + private void updateTableModel(){ + // Suppression des anciennes informations + txtTitle_.setText(CtuluLibString.EMPTY_STRING); + tableModel_.clear(); + // Ajout des nouvelles informations \\ + // Informations g\xE9n\xE9rales + ZCalqueAffichageDonneesInterface[] calques = getCalques(); + int nbGeom=0; + int nbGeomSelected=0; + for(int i=0;i<calques.length;i++){ + nbGeom+=calques[i].modeleDonnees().getNombre(); + if(calques[i].getLayerSelection()!=null) + nbGeomSelected+=calques[i].getLayerSelection().getNbSelectedIndex(); + } + if(nbGeomSelected>0) + tableModel_.put(EbliLib.getS("nombre total de s\xE9lections"), Integer.toString(nbGeomSelected)+"/"+Integer.toString(nbGeom)); + // Informations relatives aux calques + switch (calqueWithGeometriesSelected_.size()) { + case 0: + treeModel_.getSelectedCalque().fillWithInfo(tableModel_); tableModel_.fireTableDataChanged(); - updateSize(); - + break; + case 1: + calqueWithGeometriesSelected_.get(0).fillWithInfo(tableModel_); + tableModel_.fireTableDataChanged(); + break; + default: + tableModel_.setTitle(EbliLib.getS("Selection Multicalque")); } + updateSize(); } - - public void updateState(){ - if (!isAvailable()) { - return; - } - if (CtuluLibMessage.DEBUG) { - CtuluLibMessage.debug(getClass().getName() + " maj info"); - } - final BCalque newLa= m_.getSelectedCalque(); - if (newLa != layer_) { - if (layer_ != null) { - layer_.removeSelectionListener(this); + public void selectionChanged(final ZSelectionEvent _evt) { + if (isAvailable()) { + if (_evt.getSource().getLayerSelection()!=null&&_evt.getSource().getLayerSelection().getNbSelectedIndex()>0) { + if (!calqueWithGeometriesSelected_.contains(_evt.getSource())) + calqueWithGeometriesSelected_.add(_evt.getSource()); } - if (newLa != null) { - newLa.addSelectionListener(this); + else { + if (calqueWithGeometriesSelected_.contains(_evt.getSource())) + calqueWithGeometriesSelected_.remove(_evt.getSource()); } + updateTableModel(); } - layer_ = newLa; - tableModel_.clear(); - txtTitle_.setText(CtuluLibString.EMPTY_STRING); - if (layer_ != null) { - layer_.fillWithInfo(tableModel_); - } - tableModel_.fireTableDataChanged(); - updateSize(); } - public void valueChanged(final TreeSelectionEvent _e){ + + public void updateState() { if (isAvailable()) { - updateState(); + calqueWithGeometriesSelected_.clear(); + // R\xE9cup\xE9ration des calques ayant une selection + ZCalqueAffichageDonneesInterface[] calques=getCalques(); + for (int i=0; i<calques.length; i++) + if (calques[i].getLayerSelection()!=null&&calques[i].getLayerSelection().getNbSelectedIndex()>0) + calqueWithGeometriesSelected_.add(calques[i]); + // Mise \xE0 jour du tableau des informations + updateTableModel(); } } + + + + public void valueChanged(final TreeSelectionEvent _e) { + if (isAvailable()&&calqueWithGeometriesSelected_.size()==0) + updateTableModel(); + } } \ No newline at end of file Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java 2008-10-20 16:31:59 UTC (rev 4084) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java 2008-10-21 08:36:50 UTC (rev 4085) @@ -111,6 +111,7 @@ public void fillWithInfo(final InfoData _m) { if (_m != null) { final BCalque[] cqs = getCalques(); + _m.setTitle(getTitle()); _m.put(EbliLib.getS("Nombre de calques"), cqs == null ? CtuluLibString.ZERO : CtuluLibString .getString(cqs.length)); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java 2008-10-20 16:31:59 UTC (rev 4084) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java 2008-10-21 08:36:50 UTC (rev 4085) @@ -57,12 +57,12 @@ */ public final class PanelTableModel extends AbstractTableModel implements InfoData { - private List name_; - private List value_; + private List<String> name_; + private List<String> value_; public PanelTableModel() { - name_ = new ArrayList(); - value_ = new ArrayList(); + name_ = new ArrayList<String>(); + value_ = new ArrayList<String>(); } public void clear() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-10-24 15:54:01
|
Revision: 4093 http://fudaa.svn.sourceforge.net/fudaa/?rev=4093&view=rev Author: emmanuel_martin Date: 2008-10-24 15:53:49 +0000 (Fri, 24 Oct 2008) Log Message: ----------- remplacement du param?\195?\168tre Object _data par int[] _index dans BPaletteInfo.InfoData.put Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java 2008-10-23 16:30:33 UTC (rev 4092) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java 2008-10-24 15:53:49 UTC (rev 4093) @@ -172,7 +172,7 @@ return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } }; - _d.put(attr.getLongName(), value, attr.getEditor(), renderer, this, new Object[]{attr.getID(), geometriesSelected}); + _d.put(attr.getLongName(), value, attr.getEditor(), renderer, this, geometriesSelected); } else _d.put(attr.getLongName(), value==null?"< "+EbliLib.getS("Ind\xE9fini")+" >":value.toString()); @@ -203,20 +203,18 @@ /* (non-Javadoc) * @see org.fudaa.ebli.palette.BPaletteInfo.ModifyPropertyInfo#modifyProperty(java.lang.String, java.lang.Object) */ - public void modifyProperty(String _key, Object _value, Object _data) { - if (_data!=null) { - if (_data instanceof int[]) { - // Recherche de l'attribut d\xE9fini par _key - boolean found=false; - int i=-1; - while (!found&&++i<geometries_.getNbAttributes()) - found=geometries_.getAttribute(i).getLongName().equals(_key); - // Modification de cet attribut - if (found) { - int[] geometries=(int[]) _data; - for (int j=0; j<geometries.length; j++) - geometries_.getModel(i).setObject(geometries[j], _value, null); - } + public void modifyProperty(String _key, Object _value, int[] _index) { + if (_index!=null) { + // Recherche de l'attribut d\xE9fini par _key + boolean found=false; + int i=-1; + while (!found&&++i<geometries_.getNbAttributes()) + found=geometries_.getAttribute(i).getLongName().equals(_key); + // Modification de cet attribut + if (found) { + int[] geometries=_index; + for (int j=0; j<geometries.length; j++) + geometries_.getModel(i).setObject(geometries[j], _value, null); } } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java 2008-10-23 16:30:33 UTC (rev 4092) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java 2008-10-24 15:53:49 UTC (rev 4093) @@ -350,11 +350,11 @@ /* (non-Javadoc) * @see org.fudaa.ebli.palette.BPaletteInfo.ModifyPropertyInfo#modifyProperty(java.lang.String, java.lang.Object) */ - public void modifyProperty(String _key, Object _value, final Object _data) { - super.modifyProperty(_key, _value, _data); - if (_data!=null&&_value!=null&&_key==CtuluLib.getS("Ferm\xE9")&&_data instanceof int[]) { + public void modifyProperty(String _key, Object _value, final int[] _index) { + super.modifyProperty(_key, _value, _index); + if (_index!=null&&_value!=null&&_key==CtuluLib.getS("Ferm\xE9")) { // Modification de la propri\xE9t\xE9 - int[] indexPolylines=(int[])_data; + int[] indexPolylines=_index; for (int i=0; i<indexPolylines.length; i++) { int indexPolyligne=indexPolylines[i]; // Cr\xE9ation de la nouvelle g\xE9om\xE9trie Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java 2008-10-23 16:30:33 UTC (rev 4092) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java 2008-10-24 15:53:49 UTC (rev 4093) @@ -64,10 +64,9 @@ * @param _owner l'object qui sera appel\xE9 (via modifyProperty) pour que * la modification soit prise en compte. Si null l'attribut est * consid\xE9r\xE9 comme non modifiable. - * @param _data autorise \xE0 passer une information (ou un tableau d'informations) - * qui sera redonn\xE9 \xE0 modifyProperty. + * @param _index un tableau de int contenant les index des g\xE9om\xE9tries \xE0 modifier. */ - void put(String _key, Object _value, CtuluValueEditorI _editor, TableCellRenderer _renderer, ModifyPropertyInfo _owner, Object _data); + void put(String _key, Object _value, CtuluValueEditorI _editor, TableCellRenderer _renderer, ModifyPropertyInfo _owner, int[] _data); void setTitle(String _title); @@ -96,9 +95,9 @@ * fournie \xE0 InfoData. * @param _key le nom de la propri\xE9t\xE9 * @param _newValue la nouvelle valeur de la prorpi\xE9t\xE9 - * @param _data l'information pass\xE9 en param\xE8tre du put + * @param _index l'information pass\xE9 en param\xE8tre du put */ - void modifyProperty(String _key, Object _newValue, Object _data); + void modifyProperty(String _key, Object _newValue, int[] _index); } /** @@ -249,7 +248,7 @@ * javax.swing.table.TableCellRenderer, * org.fudaa.ebli.palette.BPaletteInfo.ModifyPropertyInfo) */ - public void put(String _key, Object _value, CtuluValueEditorI _editor, TableCellRenderer _renderer, ModifyPropertyInfo _owner, Object _data) { + public void put(String _key, Object _value, CtuluValueEditorI _editor, TableCellRenderer _renderer, ModifyPropertyInfo _owner, int[] _index) { if (_key==null) throw new IllegalArgumentException("_key et _value doivent \xEAtre non null."); ArrayList<Object> row=new ArrayList<Object>(); @@ -258,7 +257,7 @@ row.add(2, _editor); row.add(3, _renderer); row.add(4, _owner); - row.add(5, _data); + row.add(5, _index); rows_.add(row); if(onlyOneGeometry_) editor_.putEditor(rows_.size()-1, _editor.createTableEditorComponent()); @@ -280,7 +279,7 @@ rows_.get(_rowIndex).set(_columnIndex, _value); // Si la nouvelle valeur est consid\xE9r\xE9e comme valide par l'editeur, on appelle la m\xE9thode de callback if(rows_.get(_rowIndex).get(2)!=null&&((CtuluValueEditorI)rows_.get(_rowIndex).get(2)).isValid(_value)) - ((ModifyPropertyInfo)rows_.get(_rowIndex).get(4)).modifyProperty((String)rows_.get(_rowIndex).get(0), _value, rows_.get(_rowIndex).get(5)); + ((ModifyPropertyInfo)rows_.get(_rowIndex).get(4)).modifyProperty((String)rows_.get(_rowIndex).get(0), _value, (int[]) rows_.get(_rowIndex).get(5)); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-11-06 10:20:37
|
Revision: 4178 http://fudaa.svn.sourceforge.net/fudaa/?rev=4178&view=rev Author: bmarchan Date: 2008-11-06 10:20:31 +0000 (Thu, 06 Nov 2008) Log Message: ----------- Nettoyage pour que la palette info se base sur les ZSelectionEvent en provenance de la scene. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSelectionListener.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSelectionListener.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java 2008-11-05 16:59:14 UTC (rev 4177) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java 2008-11-06 10:20:31 UTC (rev 4178) @@ -1,6 +1,6 @@ /** * @creation 8 d\xE9c. 2003 - * @modification $Date: 2007-05-04 13:49:43 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -8,58 +8,47 @@ package org.fudaa.ebli.calque; import java.util.ArrayList; +import java.util.HashSet; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import org.fudaa.ctulu.CtuluCommandManager; import org.fudaa.ctulu.CtuluLibString; +import org.fudaa.ctulu.CtuluListSelection; +import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.gis.GISAttributeInterface; import org.fudaa.ebli.commun.EbliLib; +import org.fudaa.ebli.commun.EbliListeSelectionMultiInterface; import org.fudaa.ebli.palette.BPaletteInfo; import com.vividsolutions.jts.geom.Geometry; /** * Un panel affichant les infos envoyes par TrPanelInfoSender. * @author deniger - * @version $Id: BCalquePaletteInfo.java,v 1.7 2007-05-04 13:49:43 deniger Exp $ + * @version $Id$ */ public class BCalquePaletteInfo extends BPaletteInfo implements TreeSelectionListener, ZSelectionListener, ZModelGeometryListener { private ArrayList<ZCalqueAffichageDonneesInterface> calqueWithGeometriesSelected_; private BArbreCalqueModel treeModel_; + private ZScene scene_; - private class CalqueVisitor implements BCalqueVisitor { - private ArrayList<ZCalqueAffichageDonneesInterface> calques=new ArrayList<ZCalqueAffichageDonneesInterface>(); - public boolean visit(BCalque _cq) { - if(_cq instanceof ZCalqueAffichageDonneesInterface) - calques.add((ZCalqueAffichageDonneesInterface)_cq); - return true; - } - public ZCalqueAffichageDonneesInterface[] getCalques(){ - return calques.toArray(new ZCalqueAffichageDonneesInterface[0]); - } - } - - public BCalquePaletteInfo(final BArbreCalqueModel _m, CtuluCommandManager _cmd) { + /** + * Cr\xE9ation de la palette. + * @param _scene La scene, pour r\xE9cup\xE9rer tous les calques de donn\xE9es. + * @param _m Le modele d'arbre, pour en r\xE9cup\xE9rer les evenements. + * @param _cmd Le manager de commande. + */ + public BCalquePaletteInfo(final ZScene _scene, final BArbreCalqueModel _m, CtuluCommandManager _cmd) { super(_cmd); treeModel_ = _m; treeModel_.addTreeSelectionListener(this); + scene_=_scene; + scene_.addSelectionListener(this); calqueWithGeometriesSelected_=new ArrayList<ZCalqueAffichageDonneesInterface>(); - ZCalqueAffichageDonneesInterface[] calques = getCalques(); - for(int i=0;i<calques.length;i++) - calques[i].addSelectionListener(this); } - - /** - * @return les calques de type ZCalqueAffichageDonneesInterface contenus dans l'arbre de calque. - */ - private ZCalqueAffichageDonneesInterface[] getCalques(){ - CalqueVisitor visitor=new CalqueVisitor(); - treeModel_.getRootCalque().apply(visitor); - return visitor.getCalques(); - } /** * Met \xE0 jour les informations contenues dans le tableau. @@ -69,15 +58,10 @@ txtTitle_.setText(CtuluLibString.EMPTY_STRING); tableModel_.clear(); // Ajout des nouvelles informations \\ + // Informations g\xE9n\xE9rales - ZCalqueAffichageDonneesInterface[] calques = getCalques(); - int nbGeom=0; - int nbGeomSelected=0; - for(int i=0;i<calques.length;i++){ - nbGeom+=calques[i].modeleDonnees().getNombre(); - if(calques[i].getLayerSelection()!=null) - nbGeomSelected+=calques[i].getLayerSelection().getNbSelectedIndex(); - } + int nbGeom=scene_.getNombre(); + int nbGeomSelected=scene_.getLayerSelection().getNbSelectedIndex(); if(nbGeomSelected>0) tableModel_.put(EbliLib.getS("Nombre total de s\xE9lections"), Integer.toString(nbGeomSelected)+"/"+Integer.toString(nbGeom)); // Informations relatives aux calques @@ -91,62 +75,34 @@ tableModel_.fireTableDataChanged(); break; default: - tableModel_.setTitle(EbliLib.getS("Selection Multiple")); + tableModel_.setTitle(EbliLib.getS("S\xE9lection multicalques")); } updateSize(); } public void selectionChanged(final ZSelectionEvent _evt) { if (isAvailable()) { - if (_evt.getSource().getLayerSelection()!=null&&_evt.getSource().getLayerSelection().getNbSelectedIndex()>0 - ||_evt.getSource().getLayerSelectionMulti()!=null&&_evt.getSource().getLayerSelectionMulti().getNbSelectedItem()>0) { - if (!calqueWithGeometriesSelected_.contains(_evt.getSource())){ - calqueWithGeometriesSelected_.add(_evt.getSource()); - ZModeleDonnees model=_evt.getSource().modeleDonnees(); - if(model instanceof ZModeleGeometry) - ((ZModeleGeometry)model).addModelListener(this); + // Nombre de calques ayant des selections (atomiques ou globales) + calqueWithGeometriesSelected_.clear(); + ZCalqueAffichageDonneesInterface[] cqs=scene_.getAllLayers(); + for (ZCalqueAffichageDonneesInterface cq: cqs) { + if (cq.getLayerSelection()!=null && cq.getLayerSelection().getNbSelectedIndex()>0 || + cq.getLayerSelectionMulti()!=null && cq.getLayerSelectionMulti().getNbSelectedItem()>0) { + if (!calqueWithGeometriesSelected_.contains(cq)) calqueWithGeometriesSelected_.add(cq); } } - else { - if (calqueWithGeometriesSelected_.contains(_evt.getSource())){ - calqueWithGeometriesSelected_.remove(_evt.getSource()); - ZModeleDonnees model=_evt.getSource().modeleDonnees(); - if(model instanceof ZModeleGeometry) - ((ZModeleGeometry)model).removeModelListener(this); - } - } updateTableModel(); } } public void updateState() { - if (isAvailable()) { - // Supression des \xE9coutes sur les calques et des calques - for(int i=0;i<calqueWithGeometriesSelected_.size();i++){ - ZModeleDonnees model=calqueWithGeometriesSelected_.get(i).modeleDonnees(); - if(model instanceof ZModeleGeometry) - ((ZModeleGeometry)model).removeModelListener(this); - } - calqueWithGeometriesSelected_.clear(); - // R\xE9cup\xE9ration des calques ayant une selection et ajout des \xE9coutes - ZCalqueAffichageDonneesInterface[] calques=getCalques(); - for (int i=0; i<calques.length; i++) - if (calques[i].getLayerSelection()!=null&&calques[i].getLayerSelection().getNbSelectedIndex()>0){ - calqueWithGeometriesSelected_.add(calques[i]); - ZModeleDonnees model=calques[i].modeleDonnees(); - if(model instanceof ZModeleGeometry) - ((ZModeleGeometry)model).addModelListener(this); - } - // Mise \xE0 jour du tableau des informations + if (isAvailable()) updateTableModel(); - } } - - public void valueChanged(final TreeSelectionEvent _e) { - if (isAvailable()&&calqueWithGeometriesSelected_.size()==0) + if (isAvailable()&& calqueWithGeometriesSelected_.size()==0) // Seulement pour l'info sur calque. updateTableModel(); } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java 2008-11-05 16:59:14 UTC (rev 4177) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java 2008-11-06 10:20:31 UTC (rev 4178) @@ -1,6 +1,6 @@ /* * @creation 19 sept. 2005 - * @modification $Date: 2008-05-13 12:10:37 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -61,7 +61,7 @@ * Ce controleur peut \xE9galement g\xE9rer des actions exclusives sp\xE9cifiques. * * @author Fred Deniger - * @version $Id: ZEbliCalquePanelController.java,v 1.25.4.3 2008-05-13 12:10:37 bmarchan Exp $ + * @version $Id$ */ public class ZEbliCalquePanelController implements TreeSelectionListener, PropertyChangeListener { @@ -360,7 +360,7 @@ } public JComponent buildContentPane() { - return new BCalquePaletteInfo(pn_.getArbreCalqueModel(), pn_.gisEditor_.getMng()); + return new BCalquePaletteInfo(pn_.getScene(),pn_.getArbreCalqueModel(), pn_.gisEditor_.getMng()); } }; Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSelectionListener.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSelectionListener.java 2008-11-05 16:59:14 UTC (rev 4177) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSelectionListener.java 2008-11-06 10:20:31 UTC (rev 4178) @@ -1,7 +1,7 @@ /* * @file ZSelectionListener.java * @creation 2002-10-02 - * @modification $Date: 2005-08-16 13:02:10 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -9,11 +9,17 @@ package org.fudaa.ebli.calque; import java.util.EventListener; /** - * Interface auditeur de l'evenement <I>SelectionEvent</I>. + * Une interface auditeur des changements de selections d'objets sur un calque. La classe qui l'implemente ecoute l'evenement + * {@link SelectionEvent}. * - * @version $Id: ZSelectionListener.java,v 1.4 2005-08-16 13:02:10 deniger Exp $ + * @version $Id$ * @author Bertrand Marchand */ public interface ZSelectionListener extends EventListener { + + /** + * Methode appel\xE9e lors d'un changement de selection d'objet sur un calque. + * @param _evt L'evenement de selection. + */ void selectionChanged(ZSelectionEvent _evt); } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSelectionListener.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java 2008-11-05 16:59:14 UTC (rev 4177) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java 2008-11-06 10:20:31 UTC (rev 4178) @@ -154,7 +154,7 @@ else { _d.setOnlyOneGeometry(false); // Informations sur les g\xE9om\xE9tries selectionn\xE9es - _d.setTitle(EbliLib.getS("Selection Multiple")); + _d.setTitle(EbliLib.getS("S\xE9lection multiple")); // Informations sur le calque _d.put(EbliLib.getS("Calque"), _layer.getTitle()); // Ajout des attributs et des valeurs de la g\xE9om\xE9trie selectionn\xE9e Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java 2008-11-05 16:59:14 UTC (rev 4177) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java 2008-11-06 10:20:31 UTC (rev 4178) @@ -1,6 +1,6 @@ /* * @creation 8 d\xE9c. 2003 - * @modification $Date: 2006-09-19 14:55:51 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -39,13 +39,13 @@ * Un panel affichant les infos envoyes. * * @author deniger - * @version $Id: BPaletteInfo.java,v 1.9 2006-09-19 14:55:51 deniger Exp $ + * @version $Id$ */ public abstract class BPaletteInfo extends BuPanel { /** * @author fred deniger - * @version $Id: BPaletteInfo.java,v 1.9 2006-09-19 14:55:51 deniger Exp $ + * @version $Id$ */ public interface InfoData { @@ -104,7 +104,7 @@ /** * @author Fred Deniger, Emmanuel Martin - * @version $Id: BPaletteInfo.java,v 1.9 2006-09-19 14:55:51 deniger Exp $ + * @version $Id$ */ public final class PanelTableModel extends AbstractTableModel implements InfoData { @@ -357,6 +357,10 @@ } } + /** + * Retourne la validit\xE9 de la palette. + * @return True si la palette est visible. + */ public final boolean isAvailable() { return isAvailable_; } @@ -365,6 +369,9 @@ isAvailable_=_isAvailable; } + /** + * Mise a jour de la palette lorsqu'elle est r\xE9affich\xE9e. + */ public abstract void updateState(); } \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-11-07 16:25:29
|
Revision: 4196 http://fudaa.svn.sourceforge.net/fudaa/?rev=4196&view=rev Author: emmanuel_martin Date: 2008-11-07 16:25:18 +0000 (Fri, 07 Nov 2008) Log Message: ----------- bugfix : probl?\195?\168me de undo/redo non atomique avec la palette de propri?\195?\169t?\195?\169s Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java 2008-11-07 15:55:59 UTC (rev 4195) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleGeometryDefault.java 2008-11-07 16:25:18 UTC (rev 4196) @@ -8,23 +8,19 @@ package org.fudaa.ebli.calque.edition; import java.awt.Component; -import java.util.ArrayList; -import java.util.List; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellRenderer; -import org.fudaa.ctulu.CtuluCommandManager; +import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.gis.GISAttributeConstants; import org.fudaa.ctulu.gis.GISAttributeInterface; import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ctulu.gis.GISZoneCollectionGeometry; -import org.fudaa.ctulu.gis.GISZoneListener; import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; import org.fudaa.ebli.calque.ZModelGeometryListener; -import org.fudaa.ebli.calque.ZModelListener; import org.fudaa.ebli.calque.ZModeleDonnesAbstract; import org.fudaa.ebli.calque.ZModeleGeometry; import org.fudaa.ebli.commun.EbliLib; @@ -214,7 +210,7 @@ /* (non-Javadoc) * @see org.fudaa.ebli.palette.BPaletteInfo.ModifyPropertyInfo#modifyProperty(java.lang.String, java.lang.Object) */ - public void modifyProperty(String _key, Object _value, int[] _index, CtuluCommandManager _cmd) { + public void modifyProperty(String _key, Object _value, int[] _index, CtuluCommandContainer _cmd) { if (_index!=null) { // Recherche de l'attribut d\xE9fini par _key boolean found=false; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java 2008-11-07 15:55:59 UTC (rev 4195) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeDefault.java 2008-11-07 16:25:18 UTC (rev 4196) @@ -15,7 +15,8 @@ import javax.swing.table.AbstractTableModel; import org.fudaa.ctulu.CtuluAnalyze; -import org.fudaa.ctulu.CtuluCommandManager; +import org.fudaa.ctulu.CtuluCommandComposite; +import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluLibString; import org.fudaa.ctulu.CtuluListSelectionInterface; @@ -352,8 +353,9 @@ /* (non-Javadoc) * @see org.fudaa.ebli.palette.BPaletteInfo.ModifyPropertyInfo#modifyProperty(java.lang.String, java.lang.Object) */ - public void modifyProperty(String _key, Object _value, final int[] _index, CtuluCommandManager _cmd) { - super.modifyProperty(_key, _value, _index, _cmd); + public void modifyProperty(String _key, Object _value, final int[] _index, CtuluCommandContainer _cmd) { + CtuluCommandComposite cmd=new CtuluCommandComposite(); + super.modifyProperty(_key, _value, _index, cmd); if (_index!=null&&_value!=null&&_key==CtuluLib.getS("Ferm\xE9")) { // Modification de la propri\xE9t\xE9 int[] indexPolylines=_index; @@ -368,9 +370,11 @@ else FuLog.error("ZModeleLigneBriseeDefault.modifyProperty : la valeur pour la propri\xE9t\xE9 'ferm\xE9' est inconnue donc intraitable."); // Remplacement de l'ancienne g\xE9om\xE9trie par la nouvelle - geometries_.setGeometry(indexPolyligne, newGeom, _cmd); + geometries_.setGeometry(indexPolyligne, newGeom, cmd); } } + if(_cmd!=null) + _cmd.addCmd(cmd.getSimplify()); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java 2008-11-07 15:55:59 UTC (rev 4195) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/palette/BPaletteInfo.java 2008-11-07 16:25:18 UTC (rev 4196) @@ -25,6 +25,7 @@ import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; +import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluCommandManager; import org.fudaa.ctulu.gui.CtuluTableCellEditorProxy; import org.fudaa.ctulu.gui.CtuluValueEditorI; @@ -88,7 +89,7 @@ * est impl\xE9ment\xE9, permettant ainsi de r\xE9percuter les modification du tableau sur * l'objet concern\xE9. * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public interface ModifyPropertyInfo { /** @@ -99,7 +100,7 @@ * @param _index l'information pass\xE9 en param\xE8tre du put * @param _cmd le gestionnaire de commande pour le undo/redo */ - void modifyProperty(String _key, Object _newValue, int[] _index, CtuluCommandManager _cmd); + void modifyProperty(String _key, Object _newValue, int[] _index, CtuluCommandContainer _cmd); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-11-23 19:03:38
|
Revision: 4236 http://fudaa.svn.sourceforge.net/fudaa/?rev=4236&view=rev Author: bmarchan Date: 2008-11-23 19:03:34 +0000 (Sun, 23 Nov 2008) Log Message: ----------- Chgt de curseur pour le calcul de distance. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/curseur_distance.gif Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java 2008-11-21 16:50:10 UTC (rev 4235) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java 2008-11-23 19:03:34 UTC (rev 4236) @@ -82,7 +82,7 @@ // M\xE9thodes d\xE9riv\xE9es \\ public Cursor getSpecificCursor() { - return EbliResource.EBLI.getCursor("curseur_distance", -1, new Point(2, 2)); + return EbliResource.EBLI.getCursor("curseur_distance", -1, new Point(6, 6)); } public boolean alwaysPaint() { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/curseur_distance.gif =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-12-01 16:09:57
|
Revision: 4257 http://fudaa.svn.sourceforge.net/fudaa/?rev=4257&view=rev Author: emmanuel_martin Date: 2008-12-01 16:09:55 +0000 (Mon, 01 Dec 2008) Log Message: ----------- Tache #116 : "Dialogue d'?\195?\169dition de profil : Corriger le comportement du bouton ajustement automatique" Modified Paths: -------------- 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/ZEditorDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/courbe/EGFillePanel.java 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-12-01 14:49:27 UTC (rev 4256) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java 2008-12-01 16:09:55 UTC (rev 4257) @@ -640,10 +640,25 @@ * @param index : index de l'onglet \xE0 selecionner. */ public void setSelectedTab(int index){ - tabbedPane_.setSelectedIndex(index); + if(tabbedPane_!=null) + tabbedPane_.setSelectedIndex(index); } /** + * Retourne l'index de l'onglet selectionnn\xE9. + */ + public int getSelectedTab(){ + if(tabbedPane_!=null) + return tabbedPane_.getSelectedIndex(); + return 0; + } + + /** Retourne vrai si l'edition contient des onglets. Faux sinon. */ + public boolean hasTab(){ + return tabbedPane_!=null; + } + + /** * @return la s\xE9quence des coordonn\xE9es modifi\xE9es. */ protected CoordinateSequence getNewCoordinate() { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2008-12-01 14:49:27 UTC (rev 4256) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2008-12-01 16:09:55 UTC (rev 4257) @@ -727,7 +727,7 @@ for (int i=0; i<calques.length; i++) if (!calques[i].isSelectionEmpty()) claquesWithSelectedObjects.add(calques[i]); - // Verification du le nombre de calques contenant des selections + // Verification du nombre de calques contenant des selections if (claquesWithSelectedObjects.size()==0) return EbliLib.getS("La s\xE9lection courante est vide"); else if (claquesWithSelectedObjects.size()>1){ @@ -765,6 +765,13 @@ } /** + * Contient l'index de l'onglet selectionn\xE9 dans le panel d'edition d'objet + * seul. C'est pour que d'une \xE9dition \xE0 l'autre le m\xEAme onglet est + * automatiquement selectionn\xE9. + */ + private int SingleObjectEditorPanel_selectedTab_=0; + + /** * L'\xE9dition pour un objet selectionn\xE9 unique. * @param _target Le calque cible editable. */ @@ -774,8 +781,11 @@ final EbliSingleObjectEditorPanel ed = new EbliSingleObjectEditorPanel(_target.getModelEditable(), idxSelected, true, editAttribute, getXYFormatter()); ed.setCmd(getMng()); + if(ed.hasTab()) + ed.setSelectedTab(SingleObjectEditorPanel_selectedTab_); ed.afficheModale(getFrame(), _target.getTitle()); - + if(ed.hasTab()) + SingleObjectEditorPanel_selectedTab_=ed.getSelectedTab(); } protected void editVertexObject(final ZCalqueEditable _target) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/courbe/EGFillePanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/courbe/EGFillePanel.java 2008-12-01 14:49:27 UTC (rev 4256) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/courbe/EGFillePanel.java 2008-12-01 16:09:55 UTC (rev 4257) @@ -135,6 +135,9 @@ getGraphe().setAutoRestore(isSelected()); } }; + // EM:Si la fonctionnalit\xE9 'Restaurer automatiquement' est d\xE9j\xE0 activ\xE9e, selectionner l'action. + ((EbliActionChangeState)s).setSelected(getGraphe().isAutoRestore()); + // s.putValue(Action.SHORT_DESCRIPTION, EbliLib.getS("Restaurer automatiquement la vue")); r.add(s); r.add(new EGActionAxeRepereConfigure(getGraphe())); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2009-01-27 14:45:48
|
Revision: 4405 http://fudaa.svn.sourceforge.net/fudaa/?rev=4405&view=rev Author: emmanuel_martin Date: 2009-01-27 14:45:39 +0000 (Tue, 27 Jan 2009) Log Message: ----------- Tache #136 : "Pouvoir r?\195?\169ordonner un point d'une polyligne par une fonction monter/descendre dans la fen?\195?\170tre du tableau d'?\195?\169dition" Modified Paths: -------------- 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/ZEditorDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapterErrorListener.java 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 2009-01-26 22:59:34 UTC (rev 4404) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java 2009-01-27 14:45:39 UTC (rev 4405) @@ -11,7 +11,10 @@ import java.awt.Color; import java.awt.Container; import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; @@ -25,6 +28,8 @@ import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.event.TableModelEvent; @@ -32,7 +37,6 @@ import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; -import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ctulu.CtuluCommandComposite; import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluCommandManager; @@ -55,6 +59,8 @@ import org.fudaa.ebli.commun.EbliComponentFactory; import org.fudaa.ebli.commun.EbliFormatterInterface; import org.fudaa.ebli.commun.EbliLib; +import org.fudaa.ebli.commun.TableModelModeleAdapter; +import org.fudaa.ebli.commun.TableModelModeleAdapterErrorListener; import org.fudaa.ebli.courbe.EGAxeHorizontal; import org.fudaa.ebli.courbe.EGAxeVertical; import org.fudaa.ebli.courbe.EGCourbeModelProfile; @@ -64,9 +70,12 @@ import org.fudaa.ebli.courbe.EGGrapheSimpleModel; import com.memoire.bu.BuBorderLayout; +import com.memoire.bu.BuButton; +import com.memoire.bu.BuCheckBox; import com.memoire.bu.BuGridLayout; import com.memoire.bu.BuLabel; import com.memoire.bu.BuPanel; +import com.memoire.bu.BuResource; import com.memoire.bu.BuScrollPane; import com.memoire.bu.BuSplit2Pane; import com.memoire.fu.FuLog; @@ -95,14 +104,16 @@ */ public class TableRepresentation extends BuPanel { - // Repr\xE9sentation graphique dans le cas o\xF9 on a un point unique \xE0 repr\xE9senter + /** Repr\xE9sentation graphique dans le cas o\xF9 on a un point unique \xE0 repr\xE9senter. */ private JComponent tfX_, tfY_; - // Repr\xE9sentation graphique dans le cas o\xF9 on plusieurs points \xE0 repr\xE9senter + /** Repr\xE9sentation graphique dans le cas o\xF9 on plusieurs points \xE0 repr\xE9senter. */ private JTable table_; - // Vrai si l'objet est en mode repr\xE9sentation par tableau + /** Vrai si l'objet est en mode repr\xE9sentation par tableau. */ private boolean isTableStat_; - // Formateur g\xE9rant le format des informations \xE0 afficher + /** Formateur g\xE9rant le format des informations \xE0 afficher. */ private final EbliFormatterInterface xyFormatter_; + /** Le checkBox indiquant le mode d'application des changements. */ + protected BuCheckBox modeChangement_; /** * @param _editAttribut @@ -156,22 +167,74 @@ setLayout(new BuBorderLayout()); // Construction de la table table_=new CtuluTable(); - table_.setModel(model_); - model_.updateCellEditor(table_); + table_.setModel(modelData_); + modelData_.updateEditorAndRenderer(table_); + // Gestion des erreurs + setErrorText(modelData_.getErrorMessage()); + modelData_.addTableModelModeleAdapterErrorListener(new TableModelModeleAdapterErrorListener() { + public void modeleAdapterError(String _message) { + setErrorText(_message); + } + public void modeleAdpaterNoError() { + setErrorText(""); + } + }); + // Container des \xE9l\xE9ments en dessous du tableau + Container footCont=new Container(); + footCont.setLayout(new BorderLayout()); + // Construction des boutons de d\xE9placement des points + Container btCont=new Container(); + btCont.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); + BuButton btUp_=new BuButton(BuResource.BU.getIcon(EbliLib.getS("monter"))); + btUp_.setToolTipText(EbliLib.getS("D\xE9cr\xE9menter l'index du point")); + BuButton btDown_=new BuButton(BuResource.BU.getIcon(EbliLib.getS("descendre"))); + btDown_.setToolTipText(EbliLib.getS("Incr\xE9menter l'index du point")); + btUp_.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + int[] newSelection=modelData_.movePoints(table_.getSelectedRows(), -1); + // R\xE9tablissement de la selection dans le tableau + table_.getSelectionModel().clearSelection(); + for(int i=0;i<newSelection.length;i++) + table_.getSelectionModel().addSelectionInterval(newSelection[i], newSelection[i]); + } + }); + btDown_.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + int[] newSelection=modelData_.movePoints(table_.getSelectedRows(), 1); + // R\xE9tablissement de la selection dans le tableau + table_.getSelectionModel().clearSelection(); + for(int i=0;i<newSelection.length;i++) + table_.getSelectionModel().addSelectionInterval(newSelection[i], newSelection[i]); + } + }); + btCont.add(new BuLabel(EbliLib.getS("Changement de l'ordre des points selection\xE9s : "))); + btCont.add(btUp_); + btCont.add(btDown_); + footCont.add(btCont, BuBorderLayout.WEST); + // CheckBox permettant de changer le mode d'application des changements + modeChangement_=new BuCheckBox(EbliLib.getS("Mode diff\xE9r\xE9")); + modeChangement_.setToolTipText(EbliLib.getS("<html>En mode diff\xE9r\xE9 : les actions ne sont appliqu\xE9es qu'\xE0 la fin.<br>En mode imm\xE9diat : les actions sont appliqu\xE9es imm\xE9diatement.</html>")); + modeChangement_.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + if(modeChangement_.isSelected()) + modelData_.setDeferedModifications(true); + else + modelData_.setDeferedModifications(false); + } + }); + footCont.add(modeChangement_, BuBorderLayout.EAST); + add(footCont, BuBorderLayout.SOUTH); // Ajout des \xE9l\xE9ments \xE0 l'interface add(new BuScrollPane(table_), 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(); // Cas o\xF9 on a repr\xE9sent\xE9 un point unique - else if (zone_.isGeomModifiable()) { + if (zone_.isGeomModifiable()) { Double newX=null, newY=null; if (!xyFormatter_.isEmpty(tfX_)&&!xyFormatter_.isEmpty(tfY_)) newX=(Double)xyFormatter_.getValue(tfX_); @@ -185,30 +248,28 @@ /** * Enregistre les modifications effectu\xE9es. */ - public void apply() { + public void apply(CtuluCommandContainer cmd) { boolean modification=false; // true si une modification a \xE9t\xE9 faite - // Cr\xE9ation d'une nouvelle commande - 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]); // Si une modificatin a \xE9t\xE9 faite, modification est mis \xE0 true, sauf si // cette modification est faite sur ETAT_GEOM modification = modification||(!val.equals(globalAttr_[i].getObjectValueAt(idx_))&&globalAttr_[i].getAttribute()!=GISAttributeConstants.ETAT_GEOM); - globalAttr_[i].setObject(idx_, val, cmp); - + if(!globalAttr_[i].getObjectValueAt(idx_).equals(val)&&globalAttr_[i].getAttribute()!=GISAttributeConstants.ETAT_GEOM) + globalAttr_[i].setObject(idx_, val, cmd); } // Cas du tableau modifi\xE9 - if (isTableStat_){ - if(model_.isModified()){ - modification = true; - model_.apply(cmp); - } + if (isTableStat_) { + CtuluCommandContainer c=modelData_.getUndoRedoContainer(); + modelData_.setUndoRedoContainer(cmd); + modelData_.flushData(); + modelData_.setUndoRedoContainer(c); } // Cas du point unique modifi\xE9 else if (zone_.isGeomModifiable()&&!zone_.getCoordinateSequence(idx_).equals(getNewCoordinate())){ modification=true; - zone_.setCoordinateSequence(idx_, getNewCoordinate(), cmp); + zone_.setCoordinateSequence(idx_, getNewCoordinate(), cmd); } // Si une modification a \xE9t\xE9 faite, l'attribut 'Etat' de la g\xE9om\xE9trie passe \xE0 modifi\xE9 if (modification) { @@ -217,11 +278,8 @@ while (!found&&++i<globalAttr_.length) found=globalAttr_[i].getAttribute()==GISAttributeConstants.ETAT_GEOM; if(found) - globalAttr_[i].setObject(idx_, GISAttributeConstants.ATT_VAL_ETAT_MODI, cmp); + globalAttr_[i].setObject(idx_, GISAttributeConstants.ATT_VAL_ETAT_MODI, cmd); } - // Ajout de la nouvelle commande \xE0 cmd_ - if (cmd_!=null) - cmd_.addCmd(cmp.getSimplify()); } /** @@ -259,32 +317,17 @@ */ public LimitedTableRepresentation(EbliFormatterInterface _xyFormatter){ xyFormatter_=_xyFormatter; - model_.addTableModelListener(this); + modelData_.addTableModelListener(this); } - /* - * (non-Javadoc) - * - * @see javax.swing.table.TableModel#getColumnCount() - */ public int getColumnCount() { return 2; } - /* - * (non-Javadoc) - * - * @see javax.swing.table.TableModel#getRowCount() - */ public int getRowCount() { - return model_.getRowCount(); + return modelData_.getRowCount(); } - /* - * (non-Javadoc) - * - * @see javax.swing.table.TableModel#getValueAt(int, int) - */ public Object getValueAt(int _rowIndex, int _columnIndex) { switch (_columnIndex) { case 0: @@ -299,7 +342,7 @@ public boolean isCellEditable(final int _rowIndex, final int _columnIndex) { if (_columnIndex == 0) return false; - return model_.isCellEditable(_rowIndex, _columnIndex); + return modelData_.isCellEditable(_rowIndex, _columnIndex); } public void setValueAt(final Object _value, final int _rowIndex, final int _columnIndex) { @@ -312,15 +355,12 @@ case 0: return EbliLib.getS(EbliLib.getS("Abscisse")); case 1: - return model_.getColumnName(zCol_); + return modelData_.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_) @@ -348,10 +388,13 @@ private CtuluTable tableauVue_; // Selection update private boolean disable; + /** Indice de la colonne z. */ + protected int zCol_; public CourbeRepresentation() { disable = false; - model_.addTableModelListener(this); + zCol_=zone_.getIndiceOf(zone_.getAttributeIsZ())+3; // l'index + les colonnes index, x et y + modelData_.addTableModelListener(this); // Construction de la courbe \\ setPreferredSize(new Dimension(650,450)); EGGrapheSimpleModel grapheModel=new EGGrapheSimpleModel(); @@ -365,7 +408,7 @@ // Axe des Y axeY_=new EGAxeVertical(); axeY_.setGraduations(true); - axeY_.setTitre(EbliLib.getS("Ordonn\xE9e") + " : " + model_.getColumnName(zCol_)); + axeY_.setTitre(EbliLib.getS("Ordonn\xE9e") + " : " + modelData_.getColumnName(zCol_)); axeY_.setUnite(EbliLib.getS("m\xE8tre")); DecimalFormat df=CtuluLib.getDecimalFormat(); df.setMaximumFractionDigits(2); @@ -400,13 +443,13 @@ } } // Construction du tableau \\ - LimitedTableRepresentation tableau = new LimitedTableRepresentation(model_.xyFormatter_); + LimitedTableRepresentation tableau = new LimitedTableRepresentation(modelData_.getFormatter()); tableauVue_ = new CtuluTable(); tableauVue_.setModel(tableau); tableauVue_.getSelectionModel().addListSelectionListener(this); // Met le bon \xE9diteurs dans le tableau pour l'attribut z tableauVue_.getColumnModel().getColumn(1) - .setCellEditor(model_.modeles_[zInd_].getAttribute().getEditor().createTableEditorComponent()); + .setCellEditor(zone_.getAttributeIsZ().getEditor().createTableEditorComponent()); // Ajout au panel \\ BuScrollPane scrollPane = new BuScrollPane(tableauVue_); BuPanel left = new BuPanel(); @@ -421,7 +464,7 @@ } public int getNbValues() { - return model_.getRowCount(); + return modelData_.getRowCount(); } public double getX(int _id) { @@ -429,11 +472,11 @@ } public double getY(int _id) { - return (Double)model_.getValueAt(_id, zCol_); + return (Double)modelData_.getValueAt(_id, zCol_); } public void setY(int _id, double _value, CtuluCommandContainer _cmd) { - model_.setValueAt(new Double(_value), _id, zCol_); + modelData_.setValueAt(new Double(_value), _id, zCol_); } /** @@ -451,36 +494,32 @@ 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; + courbeModelIndCoordX_=new HashMap<Integer, Double>(modelData_.getRowCount()); + if (modelData_.getRowCount()>0) { + double lastX=(Double)modelData_.getValueAt(0, 1); + double lastY=(Double)modelData_.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<modelData_.getRowCount(); i++) { + currentX=(Double)modelData_.getValueAt(i, 1); + currentY=(Double)modelData_.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)modelData_.getValueAt(i, 3)); + lastX=currentX; + lastY=currentY; + } + if (oldLengthPolyligne!=lengthPolyligne_) + axeX_.setBounds(0, lengthPolyligne_); + if (grapheVue_.isAutoRestore()) { + if (oldMaxZ!=maxZ_) + axeY_.setBounds(0, maxZ_); + } } - if(oldLengthPolyligne != lengthPolyligne_) - axeX_.setBounds(0, lengthPolyligne_); - if(grapheVue_.isAutoRestore()){ - if(oldMaxZ != maxZ_) - axeY_.setBounds(0, maxZ_); - } } - /* - * (non-Javadoc) - * - * @seejavax.swing.event.TableModelListener#tableChanged(javax.swing.event. - * TableModelEvent) - */ public void tableChanged(TableModelEvent e) { generateCoordX(); if(grapheVue_.isAutoRestore()) @@ -489,9 +528,6 @@ grapheVue_.fullRepaint(); } - /* (non-Javadoc) - * @see org.fudaa.ctulu.CtuluListSelectionListener#listeSelectionChanged(org.fudaa.ctulu.CtuluListSelectionEvent) - */ public void listeSelectionChanged(CtuluListSelectionEvent _e) { // Un changement de selection a \xE9t\xE9 effectu\xE9 dans la courbe \\ if (!disable) { @@ -508,9 +544,6 @@ } } - /* (non-Javadoc) - * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent) - */ public void valueChanged(ListSelectionEvent _e) { // Un changement de selection a \xE9t\xE9 effectu\xE9 dans le tableau \\ if (!disable) { @@ -542,10 +575,8 @@ private TableRepresentation tableRep_; // Onglet repr\xE9sentant une information sous forme de courbe private CourbeRepresentation courbeRep_; - // Model central pour les deux repr\xE9sentations - private EbliAtomicCoordinatesTableModel model_; - 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_ + /** Le modele de donn\xE9es \xE0 utiliser comme model de tabelau */ + protected TableModelModeleAdapter modelData_; // Tableau des attributs globaux private GISAttributeModel[] globalAttr_; // Tableau des editeurs d'attributs, cr\xE9e en utilisant globalAttr_ @@ -561,13 +592,11 @@ * @param _editAttribut * @param _xyFormatter */ - public EbliSingleObjectEditorPanel(final ZModeleEditable _zone, final int _idx, final boolean _editAttribut, + public EbliSingleObjectEditorPanel(final ZModeleEditable _model, final int _idx, final boolean _editAttribut, final boolean _editVertexAttribut, final EbliFormatterInterface _xyFormatter) { - super(); idx_=_idx; - zone_=_zone.getGeomData(); - modeleSrc_=_zone; - zInd_ = -1; + zone_=_model.getGeomData(); + modeleSrc_=_model; // Construction de la table des attributs globaux (globalAttr_) \\ setLayout(new BuBorderLayout()); if (_editAttribut) { @@ -608,33 +637,19 @@ // Contruction du model de donn\xE9es commun aux deux repr\xE9sentations GISAttributeDouble zAttr=zone_.getAttributeIsZ(); if (!(zone_.getGeometry(idx_) instanceof GISPoint)&&zAttr!=null&&zAttr.isAtomicValue()) { - model_=new EbliAtomicCoordinatesTableModel.Line(_xyFormatter, modeleSrc_.getGeomData(), idx_, null, _editVertexAttribut, - modeleSrc_); - boolean found=false; - // Construction de zInd_ - int k=0; - while (!found&&k<model_.modeles_.length) { - found=model_.modeles_[k].getAttribute()==zAttr; - k++; - } - if (found){ // forc\xE9ment vrai parce que zAttr est non null - zInd_=--k; - // construction de zCol_ - zCol_=zInd_+3; // zInd_ + colonne index, x et y - // Gestionnaire d'onglet - tabbedPane_=new JTabbedPane(); - // Les onglets - tableRep_=new TableRepresentation(_editAttribut, _editVertexAttribut, _xyFormatter); - courbeRep_=new CourbeRepresentation(); - // Ajout - tabbedPane_.add(EbliLib.getS("Table"), tableRep_); - tabbedPane_.add(EbliLib.getS("Courbe"), courbeRep_); - add(tabbedPane_, BuBorderLayout.CENTER); - } + modelData_=new TableModelModeleAdapter(modeleSrc_, idx_, _xyFormatter, new CtuluCommandComposite(), _editVertexAttribut); + // Gestionnaire d'onglet + tabbedPane_=new JTabbedPane(); + // Les onglets + tableRep_=new TableRepresentation(_editAttribut, _editVertexAttribut, _xyFormatter); + courbeRep_=new CourbeRepresentation(); + // Ajout + tabbedPane_.add(EbliLib.getS("Table"), tableRep_); + tabbedPane_.add(EbliLib.getS("Courbe"), courbeRep_); + add(tabbedPane_, BuBorderLayout.CENTER); } - if(zInd_ == -1) { - model_=new EbliAtomicCoordinatesTableModel.Line(_xyFormatter, modeleSrc_.getGeomData(), idx_, null, _editVertexAttribut, - modeleSrc_); + if (zone_.getIndiceOf(zAttr)==-1) { + modelData_=new TableModelModeleAdapter(modeleSrc_, idx_, _xyFormatter, new CtuluCommandComposite(), _editVertexAttribut); tableRep_=new TableRepresentation(_editAttribut, _editVertexAttribut, _xyFormatter); add(tableRep_, BuBorderLayout.CENTER); } @@ -662,22 +677,29 @@ public boolean hasTab(){ return tabbedPane_!=null; } - - /** - * @return la s\xE9quence des coordonn\xE9es modifi\xE9es. - */ - protected CoordinateSequence getNewCoordinate() { - return tableRep_.getNewCoordinate(); - } /** * Enregistre les modifications effectu\xE9es. Cette m\xE9thode est automatiquement * appell\xE9e lors du click sur le bouton 'Valider' */ public void apply() { + CtuluCommandComposite cmd=new CtuluCommandComposite("Modifications de la g\xE9om\xE9trie"); if (tableRep_!=null) - tableRep_.apply(); + tableRep_.apply(cmd); + cmd.addCmd(((CtuluCommandComposite) modelData_.getUndoRedoContainer()).getSimplify()); + if(getCmd()!=null) + getCmd().addCmd(cmd.getSimplify()); + // D\xE9active le model + modelData_.setSource(null, -1); } + + @Override + public void cancel() { + super.cancel(); + // D\xE9active le model + modelData_.setSource(null, -1); + ((CtuluCommandComposite) modelData_.getUndoRedoContainer()).undo(); + } public final CtuluCommandContainer getCmd() { return cmd_; @@ -689,20 +711,13 @@ /** * Appell\xE9 lors du click sur le bouton 'valider' pour sortir de la fen\xEAtre. - * Retourne vrai si toutes les modification sont valides. + * Retourne vrai si toutes les modifications sont valides. */ public boolean valide() { if (tableRep_!=null) { tableRep_.stopCellEditing(); - 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()); - } - return valide; - } + if(modelData_.getErrorMessage()!=null) + return false; } return true; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2009-01-26 22:59:34 UTC (rev 4404) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2009-01-27 14:45:39 UTC (rev 4405) @@ -783,9 +783,8 @@ */ protected void editSingleObject(final ZCalqueEditable _target) { final int idxSelected = ((ZCalqueAffichageDonnees) _target).getLayerSelection().getMaxIndex(); - final boolean editAttribute = true; final EbliSingleObjectEditorPanel ed = new EbliSingleObjectEditorPanel(_target.getModelEditable(), idxSelected, - true, editAttribute, getXYFormatter()); + true, true, getXYFormatter()); ed.setCmd(getMng()); if(ed.hasTab()) ed.setSelectedTab(SingleObjectEditorPanel_selectedTab_); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java 2009-01-26 22:59:34 UTC (rev 4404) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java 2009-01-27 14:45:39 UTC (rev 4405) @@ -523,8 +523,8 @@ s = GISGeometryFactory.INSTANCE.createLineString(_seq); } if (!s.isValid()) { - _analyze.addFatalError(CtuluLib.getS("La nouvelle ligne bris\xE9e n'est pas valide", - CtuluLibString.TROIS)); + if (_analyze!=null) + _analyze.addFatalError(CtuluLib.getS("La nouvelle ligne bris\xE9e n'est pas valide", CtuluLibString.TROIS)); return false; } return true; Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapter.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapter.java 2009-01-27 14:45:39 UTC (rev 4405) @@ -0,0 +1,819 @@ +/* + * @creation 23 janv. 2009 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ebli.commun; + +import java.awt.Component; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.swing.JTable; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableColumnModel; +import javax.swing.table.TableModel; + +import org.fudaa.ctulu.CtuluAnalyze; +import org.fudaa.ctulu.CtuluCommandComposite; +import org.fudaa.ctulu.CtuluCommandContainer; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISAttributeModel; +import org.fudaa.ctulu.gis.GISCoordinateSequenceFactory; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ctulu.gui.CtuluValueEditorI; +import org.fudaa.ebli.calque.ZModelGeometryListener; +import org.fudaa.ebli.calque.ZModeleGeometry; +import org.fudaa.ebli.calque.edition.ZModeleEditable; + +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; + +/** + * Cette classe permet d'adapter l'interface d'un ZModeleGeometry sur une + * g\xE9om\xE9trie sp\xE9cifique. C'est \xE0 dire que que l'adapter se greffe sur le mod\xE8le + * et selectionne une des g\xE9om\xE9tries. Toutes les m\xE9thodes propos\xE9 par cette + * interface seront r\xE9alis\xE9 sur cette g\xE9om\xE9trie. + * + * Ce model contient : + * en premi\xE8re colonne : index + * en seconde colonne : x + * en troisi\xE8me colonne : y en + * quatri\xE8me colonne : z (si il existe et qu'il est atomique) + * les autres attributs atomiques dans l'ordre de la GISZoneCollection + * etc... + * + * Deux modes d'application des modifications sont pr\xE9sents : + * - un mode imm\xE9diate : les modifications sont imm\xE9diatements appliqu\xE9s \xE0 la gis. + * - un mode diff\xE9r\xE9 : les modifications sont mises en cache et aplliqu\xE9 quand flushData() est appel\xE9. + * + * Le model se charge de mettre la g\xE9o\xE9mtrie \xE0 'Modifi\xE9' lorsque celle-ci l'est. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class TableModelModeleAdapter implements TableModel { + + /** + * Le renderer des cellules du tableau. + */ + protected class Renderer extends DefaultTableCellRenderer { + + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, + int column) { + if(value instanceof Double) + return super.getTableCellRendererComponent(table, formatter_.getXYFormatter().format((Double) value), isSelected, hasFocus, row, column); + if(value instanceof Boolean) + return table.getDefaultRenderer(Boolean.class).getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + } + } + + /** + * Classe interface permettant de faire le lien entre la classe m\xE8re et les + * classes g\xE9rant les \xE9tats sp\xE9cifiques. + * Utilisation du design pattern Stat. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ + protected interface TableModelModeleAdapterEtat { + + public Object getValueAt(int rowIndex, int columnIndex); + public void setValueAt(Object value, int rowIndex, int columnIndex); + + /** + * Inverse la position de deux des points de la g\xE9om\xE9trie. + */ + public void switchPoints(int _idx1, int _idx2, CtuluCommandContainer _cmd); + + /** + * Met \xE0 jour les caches utilis\xE9s dans l'instance. Cette m\xE9thode est + * g\xE9n\xE9ralement utilis\xE9 lors d'une modification de mod\xE8le. + */ + public void updateFromModele(); + + /** + * Applique si n\xE9c\xE9ssaire les modifications en attentes. + */ + public void flushData(); + } + + /** + * R\xE9alise les op\xE9rations imm\xE9diatement sur le Modele. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ + protected class ModificationOnTheFly implements TableModelModeleAdapterEtat { + + public ModificationOnTheFly() { + } + + public Object getValueAt(int rowIndex, int columnIndex) { + switch (columnIndex) { + case 0: + return rowIndex; + case 1: + return coordSeq_.getOrdinate(rowIndex, 0); + case 2: + return coordSeq_.getOrdinate(rowIndex, 1); + default: + return mapColonne_.get(columnIndex).modele.getObjectValueAt(rowIndex); + } + } + + public void setValueAt(Object value, int rowIndex, int columnIndex) { + CtuluCommandComposite cmd=new CtuluCommandComposite(EbliLib.getS("Modification d'une g\xE9om\xE9trie")); + if (columnIndex==1||columnIndex==2) { + putGeomModified(cmd); + clearError(); + // Si la g\xE9om\xE9trie est valide avant et invalide apr\xE8s, on ne fait pas la modif + boolean validBefore=modele_.isCoordinateValid(coordSeq_, null); + double oldValue=coordSeq_.getOrdinate(rowIndex, columnIndex-1); + coordSeq_.setOrdinate(rowIndex, columnIndex-1, (Double) value); + boolean validAfter=modele_.isCoordinateValid(coordSeq_, analyzer_); + if (!validAfter) + fireTableModelModeleAdapterError(); + if(!validAfter&&validBefore) + coordSeq_.setOrdinate(rowIndex, columnIndex-1, oldValue); + else { + zone_.setCoordinateSequence(idxSelected_, coordSeq_, cmd); + coordSeq_=new GISCoordinateSequenceFactory().create(zone_.getCoordinateSequence(idxSelected_)); + } + } + else { + mapColonne_.get(columnIndex).modele.setObject(rowIndex, value, cmd); + // Ce fire ne devrait pas \xEAtre utile, mais il semble que pour certains + // models d'attributs ne sont pas \xE9cout\xE9s par leur GISZoneCollection. + fireTableModelListeners(); + } + if(cmd_!=null) + cmd_.addCmd(cmd.getSimplify()); + } + + public void switchPoints(int _idx1, int _idx2, CtuluCommandContainer _cmd) { + putGeomModified(_cmd); + Coordinate tmp=coordSeq_.getCoordinate(_idx1); + coordSeq_.setOrdinate(_idx1, 0, coordSeq_.getOrdinate(_idx2, 0)); + coordSeq_.setOrdinate(_idx1, 1, coordSeq_.getOrdinate(_idx2, 1)); + coordSeq_.setOrdinate(_idx1, 2, coordSeq_.getOrdinate(_idx2, 2)); + coordSeq_.setOrdinate(_idx2, 0, tmp.x); + coordSeq_.setOrdinate(_idx2, 1, tmp.y); + coordSeq_.setOrdinate(_idx2, 2, tmp.z); + zone_.setCoordinateSequence(idxSelected_, coordSeq_, _cmd); + coordSeq_=new GISCoordinateSequenceFactory().create(zone_.getCoordinateSequence(idxSelected_)); + // Inversion des attributs atomiques + for(Map.Entry<Integer, AttributeInformation> entry:mapColonne_.entrySet()) { + Object value=entry.getValue().modele.getObjectValueAt(_idx1); + entry.getValue().modele.setObject(_idx1, entry.getValue().modele.getObjectValueAt(_idx2), _cmd); + entry.getValue().modele.setObject(_idx2, value, _cmd); + } + } + + public void flushData() {} + + public void updateFromModele() {} + } + + /** + * R\xE9alise les op\xE9rations en diff\xE9r\xE9es sur le Modele. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ + protected class ModificationDefered implements TableModelModeleAdapterEtat { + + // Caches \\ + /** M\xE9morisation des index modifi\xE9s. List (colonnes>1) HashMap (ligne -> value). */ + protected List<HashMap<Integer, Object>> modif_=new ArrayList<HashMap<Integer, Object>>(); + /** CoordinateSequence contenant les valeurs temporaires des x et y. */ + protected CoordinateSequence coordSequenceCache_; + /** Crai si il y a eu une modification. */ + protected boolean modificationDone_; + + public ModificationDefered() { + for(int i=0;i<getColumnCount();i++) + modif_.add(new HashMap<Integer, Object>()); + coordSequenceCache_=new GISCoordinateSequenceFactory().create(coordSeq_); + } + + /** + * Retourne vrai si la valeur est en cache. + */ + private boolean isCache(int _idxRow, int _idxCol) { + if(_idxCol==0||_idxCol==1) + return true; + return modif_.get(_idxCol).containsKey(_idxRow); + } + + /** + * Retourne la valeur si elle est en cache, null sinon. + */ + private Object getCacheValue(int _idxRow, int _idxCol) { + switch (_idxCol) { + case 0: + return coordSequenceCache_.getOrdinate(_idxRow, 0); + case 1: + return coordSequenceCache_.getOrdinate(_idxRow, 1); + default: + return modif_.get(_idxCol).get(_idxRow); + } + } + + /** + * Permet d'enregistrer simplement une valeur en cache. + */ + private void setCacheValue(int _idxRow, int _idxCol, Object _value) { + if (_idxCol==1||_idxCol==2) { + modificationDone_=true; + clearError(); + // Si la g\xE9om\xE9trie est valide avant et invalide apr\xE8s, on annule l'\xE9dition + boolean validBefore=modele_.isCoordinateValid(coordSequenceCache_, null); + double oldValue=coordSequenceCache_.getOrdinate(_idxRow, _idxCol-1); + coordSequenceCache_.setOrdinate(_idxRow, _idxCol-1, (Double) _value); + boolean validAfter=modele_.isCoordinateValid(coordSequenceCache_, analyzer_); + if (!validAfter) + fireTableModelModeleAdapterError(); + if(!validAfter&&validBefore) + coordSequenceCache_.setOrdinate(_idxRow, _idxCol-1, oldValue); + } + else if(_idxCol>2) + modif_.get(_idxCol).put(_idxRow, _value); + } + + public void flushData() { + if (modificationDone_) { + CtuluCommandComposite cmd=new CtuluCommandComposite("Modification d'une g\xE9om\xE9trie"); + zone_.setCoordinateSequence(idxSelected_, coordSequenceCache_, cmd); + coordSeq_=new GISCoordinateSequenceFactory().create(zone_.getCoordinateSequence(idxSelected_)); + coordSequenceCache_=(CoordinateSequence) coordSeq_.clone(); + // Flush les attributs atomiques + for (int i=3; i<modif_.size(); i++) + for (Map.Entry<Integer, Object> entry : modif_.get(i).entrySet()) + mapColonne_.get(i).modele.setObject(entry.getKey(), entry.getValue(), cmd); + putGeomModified(cmd); + modificationDone_=false; + if (cmd_!=null) + cmd_.addCmd(cmd.getSimplify()); + } + } + + public Object getValueAt(int rowIndex, int columnIndex) { + switch (columnIndex) { + case 0: + return rowIndex; + case 1: + return coordSequenceCache_.getOrdinate(rowIndex, 0); + case 2: + return coordSequenceCache_.getOrdinate(rowIndex, 1); + default: + if (isCache(rowIndex, columnIndex)) + return getCacheValue(rowIndex, columnIndex); + return mapColonne_.get(columnIndex).modele.getObjectValueAt(rowIndex); + } + } + + public void setValueAt(Object value, int rowIndex, int columnIndex) { + setCacheValue(rowIndex, columnIndex, value); + fireTableModelListeners(); + } + + public void switchPoints(int _idx1, int _idx2, CtuluCommandContainer _cmd) { + modificationDone_=true; + Coordinate tmp=new Coordinate((Double) getValueAt(_idx1, 1), (Double) getValueAt(_idx1, 2)); + setValueAt(getValueAt(_idx2, 1), _idx1, 1); + setValueAt(getValueAt(_idx2, 2), _idx1, 2); + setValueAt(tmp.x, _idx2, 1); + setValueAt(tmp.y, _idx2, 2); + // Inversion des attributs atomiques + for(Map.Entry<Integer, AttributeInformation> entry:mapColonne_.entrySet()) { + Object valueTmp=getValueAt(_idx1, entry.getKey()); + setValueAt(getValueAt(_idx2, entry.getKey()), _idx1, entry.getKey()); + setValueAt(valueTmp, _idx2, entry.getKey()); + } + fireTableModelListeners(); + } + + public void updateFromModele() { + if(mapColonne_.size()!=modif_.size()-3) { + modif_.clear(); + for(int i=0;i<getColumnCount();i++) + modif_.add(new HashMap<Integer, Object>()); + } + } + } + + /** La ZModeleGeometry contenant la g\xE9om\xE9trie. */ + protected ZModeleEditable modele_; + /** La g\xE9om\xE9trie selectionn\xE9e. */ + protected int idxSelected_; + /** Le CtuluCommandContainer pour g\xE9rer l'undo/redo. */ + protected CtuluCommandContainer cmd_; + /** Le container de listener pour le tableau. */ + protected Set<TableModelListener> listenersTable_=new HashSet<TableModelListener>(); + /** Le container de listener pour les erreurs. */ + protected Set<TableModelModeleAdapterErrorListener> listenersError_=new HashSet<TableModelModeleAdapterErrorListener>(); + /** Le listener de la zone. */ + protected ZModeleGeometryListener modeleListener_=new ZModeleGeometryListener(); + /** Le formatter */ + protected EbliFormatterInterface formatter_; + /** L'\xE9tat actuel de l'instance. */ + protected TableModelModeleAdapterEtat stat_; + /** Container d'erreurs. */ + protected CtuluAnalyze analyzer_; + /** Si \xE0 faux les attributs atomiques ne doivent pas \xEAtre visible. */ + protected boolean showAttributes_; + //Caches \\ + /** La GISZoneCollection contenue dans le mod\xE8le. */ + protected GISZoneCollection zone_; + /** Map contenant pour chaque index de colonne une instance de AttributeInformation. */ + protected Map<Integer, AttributeInformation> mapColonne_=new HashMap<Integer, AttributeInformation>(); + /** La CoordinateSequence de la g\xE9om\xE9trie. */ + protected CoordinateSequence coordSeq_; + /** Vrai si la g\xE9om\xE9trie est d\xE9j\xE0 en 'modifi\xE9'. */ + protected boolean alreadyModified_=false; + /** Nombre de lignes dans le tableau */ + protected int nbRow_; + + /** + * Classe servant simplement \xE0 contenir un AttributeInterface et son indice dans la zone. + */ + protected class AttributeInformation { + public GISAttributeInterface attribute; + public GISAttributeModel modele; + public int index; + public AttributeInformation() {}; + public AttributeInformation(GISAttributeInterface _attribute, GISAttributeModel _modele, int _index) { + attribute=_attribute; + modele=_modele; + index=_index; + } + } + + /** + * L'\xE9couteur de la GISZoneCollection. En cas de modification dans celle-ci, + * les caches sont mises \xE0 jour et un fire est lanc\xE9. + */ + protected class ZModeleGeometryListener implements ZModelGeometryListener { + public void attributeAction(Object _source, int att, GISAttributeInterface _att, int _action) { + updateCaches(); + fireTableModelListeners(); + } + public void attributeValueChangeAction(Object _source, int att, GISAttributeInterface _att, int geom, Object value) { + if(_att==GISAttributeConstants.ETAT_GEOM) + alreadyModified_=false; + updateCaches(); + fireTableModelListeners(); + } + public void geometryAction(Object _source, int geom, Geometry _geom, int _action) { + updateCaches(); + fireTableModelListeners(); + } + } + + /** + * @param _modele + * le modele contenant la g\xE9om\xE9trie. Peut \xEAtre null. + * @param _idxSelected + * l'index de la g\xE9om\xE9trie selectionn\xE9. -1 si aucune de selectionn\xE9. + * @param _formatter + * le formatter des valeurs x et y. Peut \xEAtre null. + * @param _cmd + * le gestionnaire d'undo/redo. Peut \xEAtre null + * @param _showAttributes + * Si faux les attributs atomiques ne seront pas visibles. + * @exception IllegalArgumentException + * si _idxSelected n'appartient pas \xE0 _zone. + */ + public TableModelModeleAdapter(ZModeleEditable _modele, int _idxSelected, EbliFormatterInterface _formatter, CtuluCommandContainer _cmd, boolean _showAttributes) { + if ((_modele==null&&_idxSelected!=-1)||(_modele!=null&&_idxSelected!=-1&&(_idxSelected<0||_idxSelected>=_modele.getNombre()))) + throw new IllegalArgumentException(EbliLib.getS("L'index de g\xE9om\xE9trie n'appartient pas \xE0 la zone.")); + modele_=_modele; + idxSelected_=_idxSelected; + formatter_=_formatter; + cmd_=_cmd; + showAttributes_=_showAttributes; + analyzer_=new CtuluAnalyze(); + if (modele_!=null) + modele_.addModelListener(modeleListener_); + stat_=new ModificationOnTheFly(); + updateCaches(); + } + + /** + * Bloque ou d\xE9bloque la visibilit\xE9 des attributs atomiques. + */ + public void setShowAttributesAtomics(boolean _b) { + if(showAttributes_!=_b) { + showAttributes_=_b; + updateCaches(); + fireTableModelListeners(); + } + } + + /** + * Retourne vrai si les attributs atomiques sont visibles. + */ + public boolean isAtomicsAttributesShowed() { + return showAttributes_; + } + + /** + * Permet de changer la source des donn\xE9es. + * + * @param _modele + * le nouveau modele + * @param _idxSelected + * le nouvelle index + * @exception IllegalArgumentException + * si _idxSelected n'appartient pas \xE0 _zone. + */ + public void setSource(ZModeleEditable _modele, int _idxSelected) { + if ((_modele==null&&_idxSelected!=-1)||(_modele!=null&&_idxSelected!=-1&&(_idxSelected<0||_idxSelected>=modele_.getNombre()))) + throw new IllegalArgumentException(EbliLib.getS("L'index de g\xE9om\xE9trie n'appartient pas \xE0 la zone.")); + if (modele_!=_modele||idxSelected_!=_idxSelected) { + if (modele_!=null) + modele_.removeModelListener(modeleListener_); + modele_=_modele; + if (modele_!=null) + modele_.addModelListener(modeleListener_); + idxSelected_=_idxSelected; + updateCaches(); + fireTableModelListeners(); + } + } + + /** + * Active les modifications en diff\xE9r\xE9es. + * Les modifications en cours sont effetu\xE9es. + */ + public void setDeferedModifications(boolean _active) { + if(_active&&!(stat_ instanceof ModificationDefered)) { + stat_.flushData(); + stat_=new ModificationDefered(); + } + else if(!_active&&!(stat_ instanceof ModificationOnTheFly)) { + stat_.flushData(); + stat_=new ModificationOnTheFly(); + } + } + + /** + * Provoque l'\xE9criture des op\xE9rations en cours. + * Inutile si en mode simultan\xE9. + */ + public void flushData() { + stat_.flushData(); + } + + /** + * Changement de la g\xE9om\xE9trie selectionn\xE9e. + * + * @param _idxselected + * l'index de la g\xE9om\xE9trie + * @exception IllegalArgumentException + * si _idxSelected n'appartient pas \xE0 _zone. + */ + public void setSelectionGeometry(int _idxSelected) { + if (_idxSelected!=-1&&(_idxSelected<0||_idxSelected>=modele_.getNombre())) + throw new IllegalArgumentException(EbliLib.getS("L'index de g\xE9om\xE9trie n'appartient pas \xE0 la zone.")); + if (idxSelected_!=_idxSelected) { + idxSelected_=_idxSelected; + fireTableModelListeners(); + } + } + + /** + * Retourne le formatter utilis\xE9. + */ + public EbliFormatterInterface getFormatter() { + return formatter_; + } + + /** + * Change le formatter utilis\xE9. + */ + public void setFormatter(EbliFormatterInterface _formatter) { + if (formatter_!=_formatter) { + formatter_=_formatter; + fireTableModelListeners(); + } + } + + /** + * Retourne le mod\xE8le contenant les g\xE9o\xE9mtries. + */ + public ZModeleGeometry getModeleDonnees() { + return modele_; + } + + /** + * Retourne l'index de la g\xE9om\xE9trie selectionn\xE9e. + */ + public int getSelectedGeometry() { + return idxSelected_; + } + + /** + * Changement du gestionnaire d'undo/redo. + */ + public void setUndoRedoContainer(CtuluCommandContainer _cmd) { + cmd_=_cmd; + } + + /** + * Retourne le gestionnaire d'undo/redo. + */ + public CtuluCommandContainer getUndoRedoContainer() { + return cmd_; + } + + public void addTableModelListener(TableModelListener l) { + if (l!=null&&!listenersTable_.contains(l)) + listenersTable_.add(l); + } + + public void addTableModelModeleAdapterErrorListener(TableModelModeleAdapterErrorListener l) { + if (l!=null&&!listenersError_.contains(l)) + listenersError_.add(l); + } + + public Class<?> getColumnClass(int columnIndex) { + switch (columnIndex) { + case 0: + return Integer.class; + case 1: + return Double.class; + case 2: + return Double.class; + default: + if(mapColonne_!=null) + return mapColonne_.get(columnIndex).attribute.getDataClass(); + else + return null; + } + } + + public int getColumnCount() { + if(mapColonne_!=null) + // index, x, y et les attributs atomiques + return 3+mapColonne_.size(); + else + return 3; + } + + public String getColumnName(int columnIndex) { + switch (columnIndex) { + case 0: + return EbliLib.getS("Index"); + case 1: + return "x"; + case 2: + return "y"; + default: + if(mapColonne_!=null) + return mapColonne_.get(columnIndex).attribute.getLongName(); + else + return null; + } + } + + public int getRowCount() { + if(zone_!=null&&idxSelected_!=-1) + return nbRow_; + else + return 0; + } + + public Object getValueAt(int rowIndex, int columnIndex) { + if(modele_==null||idxSelected_==-1) + throw new IllegalArgumentException(EbliLib.getS("Aucun modele ou aucune g\xE9om\xE9trie selectionn\xE9e.")); + // Colonne index + if(columnIndex==0) + return rowIndex+1; + // Les autres colonnes + return stat_.getValueAt(rowIndex, columnIndex); + } + + public boolean isCellEditable(int rowIndex, int columnIndex) { + if(modele_==null||idxSelected_==-1) + throw new IllegalArgumentException(EbliLib.getS("Aucun modele ou aucune g\xE9om\xE9trie selectionn\xE9e.")); + switch (columnIndex) { + case 0: + return false; + case 1: + return true; + case 2: + return true; + default: + return mapColonne_.get(columnIndex).attribute.isEditable(); + } + } + + public void removeTableModelListener(TableModelListener l) { + if (l!=null&&listenersTable_.contains(l)) + listenersTable_.remove(l); + } + + public void removeTableModelModeleAdapterErrorListener(TableModelModeleAdapterErrorListener l) { + if (l!=null&&listenersError_.contains(l)) + listenersError_.remove(l); + } + + public void setValueAt(Object value, int rowIndex, int columnIndex) { + if(modele_==null||idxSelected_==-1) + throw new IllegalArgumentException(EbliLib.getS("Aucun modele ou aucune g\xE9om\xE9trie selectionn\xE9e.")); + if(!getValueAt(rowIndex, columnIndex).equals(value)&&value!=null) + stat_.setValueAt(value, rowIndex, columnIndex); + } + + /** + * Incr\xE9mente de n les index donn\xE9s. + * Pour d\xE9cr\xE9menter donner un indice n\xE9gatif. + * _idx est modifi\xE9 dans l'op\xE9ration + * @return le tableau des nouveaux index. + */ + public int[] movePoints(int[] _idx, int n) { + if(_idx==null) + throw new IllegalArgumentException(EbliLib.getS("_idx ne doit pas \xEAtre null")); + for (int i=0; i<_idx.length; i++) + if (_idx[i]<0||_idx[i]>=getRowCount()) + throw new IllegalArgumentException(EbliLib.getS("Au moins un des index n'est pas valide.")); + CtuluCommandComposite cmd=new CtuluCommandComposite("Switch points"); + // Tir du tableau en fonction du type d'incr\xE9ment + Arrays.sort(_idx); + if (n>0) + reverse(_idx); + // Incr\xE9ment de chaque index + for (int i=0; i<_idx.length; i++) { + int idx=_idx[i]; + // Si on peut le d\xE9placer + if (idx+n>=0&&idx+n<getRowCount()&&!in(idx+n, _idx)) { + _idx[i]=idx+n; + stat_.switchPoints(idx, idx+n, cmd); + } + } + if (cmd_!=null) + cmd_.addCmd(cmd.getSimplify()); + return _idx; + } + + /** + * Inverse la position de deux des points de la g\xE9om\xE9trie. + */ + public void switchPoints(int _idx1, int _idx2) { + if (_idx1<0||_idx1>=getRowCount()||_idx2<0||_idx2>=getRowCount()) + throw new IllegalArgumentException(EbliLib.getS("Au moins un des deux index n'est pas valide.")); + CtuluCommandComposite cmd=new CtuluCommandComposite(EbliLib.getS("Switch de deux points")); + stat_.switchPoints(_idx1, _idx2, cmd); + if(cmd_!=null) + cmd_.addCmd(cmd.getSimplify()); + } + + /** + * Met \xE0 jour les caches utilis\xE9s dans l'instance. Cette m\xE9thode est + * g\xE9n\xE9ralement utilis\xE9 lors d'une modification de mod\xE8le. + */ + private void updateCaches() { + // Vide les buffers + zone_=null; + mapColonne_.clear(); + coordSeq_=null; + nbRow_=0; + // Mise \xE0 jours des buffers \\ + if (modele_!=null) { + // Mise \xE0 jour de zone_ \\ + zone_=modele_.getGeomData(); + // Mise \xE0 jour du nombre de lignes \\ + nbRow_=zone_.getGeometry(idxSelected_).getNumPoints(); + if (showAttributes_) { + // Mise \xE0 jour de mapColonne \\ + int idxColonne=3; + GISAttributeInterface attrZ=zone_.getAttributeIsZ(); + // Cas particulier : attribut z atomique + if (attrZ!=null&&attrZ.isAtomicValue()) { + int idxAttr=zone_.getIndiceOf(attrZ); + mapColonne_.put(idxColonne++, new AttributeInformation(attrZ, (GISAttributeModel)zone_.getValue(idxAttr, idxSelected_), + idxAttr)); + } + // Le reste des attributs + for (int i=0; i<zone_.getNbAttributes(); i++) { + GISAttributeInterface attribute=zone_.getAttribute(i); + if (attribute.isAtomicValue()&&(attrZ==null||attrZ!=attribute)) { + int idxAttr=zone_.getIndiceOf(attribute); + mapColonne_.put(idxColonne++, new AttributeInformation(attribute, (GISAttributeModel)zone_.getValue(idxAttr, + idxSelected_), idxAttr)); + } + } + } + // Mise \xE0 jour du coordinate sequence + coordSeq_=new GISCoordinateSequenceFactory().create(zone_.getCoordinateSequence(idxSelected_)); + } + stat_.updateFromModele(); + } + + /** + * Met les editors et les renderer correcte sur le JTable. + */ + public void updateEditorAndRenderer(JTable _table) { + TableColumnModel cols=_table.getColumnModel(); + Renderer renderer=new Renderer(); + // Renderer \\ + for(int i=0;i<cols.getColumnCount();i++) + cols.getColumn(i).setCellRenderer(renderer); + // Editors \\ + // Colonnes des attributs + if (modele_!=null) { + for (int i=0; i<mapColonne_.size(); i++) { + CtuluValueEditorI editor=mapColonne_.get(3+i).attribute.getEditor(); + if (editor!=null) + cols.getColumn(3+i).setCellEditor(editor.createTableEditorComponent()); + } + } + } + + /** + * Vide le container d'erreur et envoie un \xE9v\xE9nemen si besoin. + */ + private void clearError() { + if(analyzer_.containsFatalError()) { + analyzer_.clear(); + fireTableModelModeleAdapterNoError(); + } + } + + /** + * Retourne un message d'erreur si la g\xE9o\xE9mtrie en cours de cr\xE9ation est + * invalide. + */ + public String getErrorMessage() { + if(modele_.isCoordinateValid(coordSeq_, analyzer_)) + return null; + else + return analyzer_.getFatalError().getMessage(); + } + + protected void fireTableModelListeners() { + for (TableModelListener listener : listenersTable_) + listener.tableChanged(new TableModelEvent(this)); + } + + protected void fireTableModelModeleAdapterNoError() { + for (TableModelModeleAdapterErrorListener listener : listenersError_) + listener.modeleAdpaterNoError(); + } + + protected void fireTableModelModeleAdapterError() { + for (TableModelModeleAdapterErrorListener listener : listenersError_) + listener.modeleAdapterError(analyzer_.getFatalError().getMessage()); + } + + /** + * Met l'\xE9tat de la g\xE9om\xE9trie (GISAttributeConstants.ETAT_GEOM) \xE0 modifi\xE9. + */ + private void putGeomModified(CtuluCommandContainer _cmd) { + if (!alreadyModified_) { + int idxEtatGeom=zone_.getIndiceOf(GISAttributeConstants.ETAT_GEOM); + if (idxEtatGeom!=-1) + zone_.setAttributValue(idxEtatGeom, idxSelected_, GISAttributeConstants.ATT_VAL_ETAT_MODI, _cmd); + alreadyModified_=true; + } + } + + /** + * Retourne vrai si _value est dans _table + * @param _value + * @param _table + * @return + */ + private boolean in(int _value, int[] _table){ + boolean found=false; + int i=-1; + while(!found&&++i<_table.length) + found=_table[i]==_value; + return found; + } + + /** + * Reverse the table. + */ + private void reverse(int[] _table) { + for(int i=0;i<_table.length/2;i++) { + int tmp=_table[i]; + _table[i]=_table[_table.length-i-1]; + _table[_table.length-i-1]=tmp; + } + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapter.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapterErrorListener.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapterErrorListener.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapterErrorListener.java 2009-01-27 14:45:39 UTC (rev 4405) @@ -0,0 +1,26 @@ +/* + * @creation 26 janv. 2009 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ebli.commun; + +/** + * Interface d'\xE9coute des erreurs g\xE9n\xE9r\xE9es par TableModelModeleAdapter. + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public interface TableModelModeleAdapterErrorListener { + + /** + * Appel\xE9 quand une erreur est d\xE9tect\xE9 dans les donn\xE9es. + */ + public void modeleAdapterError(String _message); + + /** + * Appel\xE9 quand l'erreur n'a plus de raison d'\xEAtre affich\xE9e. + */ + public void modeleAdpaterNoError(); +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapterErrorListener.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-02-02 15:32:52
|
Revision: 4434 http://fudaa.svn.sourceforge.net/fudaa/?rev=4434&view=rev Author: bmarchan Date: 2009-02-02 15:32:42 +0000 (Mon, 02 Feb 2009) Log Message: ----------- Ajout d'une colonne d'index dans le tableau d'?\195?\169dition, onglet courbe. Modified Paths: -------------- 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/ZEditorDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapter.java 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 2009-02-02 09:48:56 UTC (rev 4433) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java 2009-02-02 15:32:42 UTC (rev 4434) @@ -9,6 +9,7 @@ import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; @@ -35,6 +36,9 @@ import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableColumnModel; import javax.swing.table.TableModel; import org.fudaa.ctulu.CtuluCommandComposite; @@ -78,6 +82,7 @@ import com.memoire.bu.BuResource; import com.memoire.bu.BuScrollPane; import com.memoire.bu.BuSplit2Pane; +import com.memoire.bu.BuTableCellRenderer; import com.memoire.fu.FuLog; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.CoordinateSequence; @@ -303,13 +308,27 @@ /** * 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. + * seules trois colonnes sont visibles : index, curviligne et z. Et seul z est \xE9ditable. * * @author Emmanuel MARTIN * @version $Id:$ */ protected class LimitedTableRepresentation extends AbstractTableModel implements TableModelListener { + /** + * Le renderer des cellules du tableau. + */ + protected class Renderer extends DefaultTableCellRenderer { + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, + int column) { + + if(value instanceof Double) + return super.getTableCellRendererComponent(table, xyFormatter_.getXYFormatter().format((Double) value), isSelected, hasFocus, row, column); + else + return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + } + } + private EbliFormatterInterface xyFormatter_; /** @@ -321,9 +340,9 @@ } public int getColumnCount() { - return 2; + return 3; } - + public int getRowCount() { return modelData_.getRowCount(); } @@ -331,8 +350,10 @@ public Object getValueAt(int _rowIndex, int _columnIndex) { switch (_columnIndex) { case 0: - return xyFormatter_.getXYFormatter().format(getX(_rowIndex)); + return _rowIndex+1; case 1: + return /*xyFormatter_.getXYFormatter().format(*/getX(_rowIndex);//); + case 2: return getY(_rowIndex); default: return null; @@ -340,33 +361,60 @@ } public boolean isCellEditable(final int _rowIndex, final int _columnIndex) { - if (_columnIndex == 0) + if (_columnIndex<2) return false; - return modelData_.isCellEditable(_rowIndex, _columnIndex); +// return modelData_.isCellEditable(_rowIndex, _columnIndex); + return true; } public void setValueAt(final Object _value, final int _rowIndex, final int _columnIndex) { - if(_columnIndex == 1) + if(_columnIndex == 2) setY(_rowIndex, (Double)_value, null); } public String getColumnName(int _column) { switch (_column) { case 0: + return EbliLib.getS(EbliLib.getS("Index")); + case 1: return EbliLib.getS(EbliLib.getS("Abscisse")); - case 1: + case 2: return modelData_.getColumnName(zCol_); default: return null; } } + + public Class<?> getColumnClass(int _columnIndex) { + switch (_columnIndex) { + case 0: + return Integer.class; + case 1: + return Double.class; + case 2: + return Double.class; + default: + return null; + } + } public void tableChanged(TableModelEvent _e) { int col=_e.getColumn(); if (_e.getColumn()==zCol_) - col=1; + col=2; fireTableChanged(new TableModelEvent((TableModel)_e.getSource(), _e.getFirstRow(), _e.getLastRow(), col, _e.getType())); } + + public void updateCellEditor(final JTable _table) { + final TableColumnModel cols = _table.getColumnModel(); + // Editor : Abscisse, Z + final TableCellEditor ed = xyFormatter_.createTableEditorComponent(); + cols.getColumn(1).setCellEditor(ed); + cols.getColumn(2).setCellEditor(ed); + // Renderer : Abscisse, Z + cols.getColumn(1).setCellRenderer(new Renderer()); + cols.getColumn(2).setCellRenderer(new Renderer()); + } } // Taille de la polyligne, utile pour l'axe des abscisses @@ -447,9 +495,8 @@ tableauVue_ = new CtuluTable(); tableauVue_.setModel(tableau); tableauVue_.getSelectionModel().addListSelectionListener(this); - // Met le bon \xE9diteurs dans le tableau pour l'attribut z - tableauVue_.getColumnModel().getColumn(1) - .setCellEditor(zone_.getAttributeIsZ().getEditor().createTableEditorComponent()); + tableau.updateCellEditor(tableauVue_); + // Ajout au panel \\ BuScrollPane scrollPane = new BuScrollPane(tableauVue_); BuPanel left = new BuPanel(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2009-02-02 09:48:56 UTC (rev 4433) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2009-02-02 15:32:42 UTC (rev 4434) @@ -769,10 +769,10 @@ /** * Contient l'index de l'onglet selectionn\xE9 dans le panel d'edition d'objet - * seul. C'est pour que d'une \xE9dition \xE0 l'autre le m\xEAme onglet est + * seul. C'est pour que d'une \xE9dition \xE0 l'autre le m\xEAme onglet soit * automatiquement selectionn\xE9. */ - private int SingleObjectEditorPanel_selectedTab_=0; + private int selectedTabInSingleObjectEditorPanel_=0; /** * L'\xE9dition pour un objet selectionn\xE9 unique. @@ -784,10 +784,10 @@ true, true, getXYFormatter()); ed.setCmd(getMng()); if(ed.hasTab()) - ed.setSelectedTab(SingleObjectEditorPanel_selectedTab_); + ed.setSelectedTab(selectedTabInSingleObjectEditorPanel_); ed.afficheModale(getFrame(), _target.getTitle()); if(ed.hasTab()) - SingleObjectEditorPanel_selectedTab_=ed.getSelectedTab(); + selectedTabInSingleObjectEditorPanel_=ed.getSelectedTab(); } protected void editVertexObject(final ZCalqueEditable _target) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapter.java 2009-02-02 09:48:56 UTC (rev 4433) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/TableModelModeleAdapter.java 2009-02-02 15:32:42 UTC (rev 4434) @@ -20,6 +20,7 @@ import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellEditor; import javax.swing.table.TableColumnModel; import javax.swing.table.TableModel; @@ -31,6 +32,7 @@ import org.fudaa.ctulu.gis.GISAttributeModel; import org.fudaa.ctulu.gis.GISCoordinateSequenceFactory; import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ctulu.gui.CtuluValueEditorDefaults; import org.fudaa.ctulu.gui.CtuluValueEditorI; import org.fudaa.ebli.calque.ZModelGeometryListener; import org.fudaa.ebli.calque.ZModeleGeometry; @@ -42,9 +44,9 @@ /** * Cette classe permet d'adapter l'interface d'un ZModeleGeometry sur une - * g\xE9om\xE9trie sp\xE9cifique. C'est \xE0 dire que que l'adapter se greffe sur le mod\xE8le - * et selectionne une des g\xE9om\xE9tries. Toutes les m\xE9thodes propos\xE9 par cette - * interface seront r\xE9alis\xE9 sur cette g\xE9om\xE9trie. + * g\xE9om\xE9trie sp\xE9cifique. C'est \xE0 dire que l'adapter se greffe sur le mod\xE8le + * et selectionne une des g\xE9om\xE9tries. Toutes les m\xE9thodes propos\xE9es par cette + * interface seront r\xE9alis\xE9es sur cette g\xE9om\xE9trie. * * Ce model contient : * en premi\xE8re colonne : index @@ -61,7 +63,7 @@ * Le model se charge de mettre la g\xE9o\xE9mtrie \xE0 'Modifi\xE9' lorsque celle-ci l'est. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class TableModelModeleAdapter implements TableModel { @@ -86,7 +88,7 @@ * Utilisation du design pattern Stat. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ protected interface TableModelModeleAdapterEtat { @@ -114,7 +116,7 @@ * R\xE9alise les op\xE9rations imm\xE9diatement sur le Modele. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ protected class ModificationOnTheFly implements TableModelModeleAdapterEtat { @@ -191,7 +193,7 @@ * R\xE9alise les op\xE9rations en diff\xE9r\xE9es sur le Modele. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ protected class ModificationDefered implements TableModelModeleAdapterEtat { @@ -729,11 +731,17 @@ */ public void updateEditorAndRenderer(JTable _table) { TableColumnModel cols=_table.getColumnModel(); + + // Renderer \\ Renderer renderer=new Renderer(); - // Renderer \\ for(int i=0;i<cols.getColumnCount();i++) cols.getColumn(i).setCellRenderer(renderer); + // Editors \\ + // Colonnes X,Y + TableCellEditor editorXY=CtuluValueEditorDefaults.DOUBLE_EDITOR.createTableEditorComponent(); + cols.getColumn(1).setCellEditor(editorXY); + cols.getColumn(2).setCellEditor(editorXY); // Colonnes des attributs if (modele_!=null) { for (int i=0; i<mapColonne_.size(); i++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-06-11 16:34:57
|
Revision: 4872 http://fudaa.svn.sourceforge.net/fudaa/?rev=4872&view=rev Author: bmarchan Date: 2009-06-11 16:34:48 +0000 (Thu, 11 Jun 2009) Log Message: ----------- Accrochage g?\195?\169om?\195?\169trique/sommet sur selection et d?\195?\169placement. Le calque s?\195?\169lectionn?\195?\169 devient le calque prioritaire de s?\195?\169lection. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueCatchInteraction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSceneSelection.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementInteraction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMultiInterface.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementInteraction.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueCatchInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueCatchInteraction.java 2009-06-11 09:43:24 UTC (rev 4871) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueCatchInteraction.java 2009-06-11 16:34:48 UTC (rev 4872) @@ -13,6 +13,7 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; +import java.util.Arrays; import java.util.HashSet; import org.fudaa.ebli.geometrie.GrPoint; @@ -119,6 +120,7 @@ selAccroch_=scene_.selection(_pt.applique(getVersReel()), tolerancePixel_); idxGeoms_=selAccroch_.getIdxSelected(); + Arrays.sort(idxGeoms_); int igeom=-1; int ivertex=-1; @@ -205,12 +207,12 @@ } /** - * Gere le SHIFT et le TAB.<p> - * SHIFT : pour inactiver le mode d'accrochage, - * TAB : Pour switcher de point accroch\xE9. + * Gere lees actions 'suivant' et 'decrochage'.<p> + * U : pour inactiver le mode d'accrochage, + * N : Pour switcher de point accroch\xE9. */ public void keyPressed(KeyEvent e) { - if (e.getKeyCode()==KeyEvent.VK_SHIFT) { + if (e.getKeyCode()==KeyEvent.VK_U) { bcatch_=false; fireCatchEvent(ZCatchEvent.UNCAUGHT,0,0); } @@ -235,7 +237,7 @@ * SHIFT : pour reactiver le mode d'accrochage */ public void keyReleased(KeyEvent e) { - if (e.getKeyCode()==KeyEvent.VK_SHIFT) { + if (e.getKeyCode()==KeyEvent.VK_U) { bcatch_=true; iidxVertex_=-1; iidxGeom_=-1; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java 2009-06-11 09:43:24 UTC (rev 4871) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java 2009-06-11 16:34:48 UTC (rev 4872) @@ -13,8 +13,6 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; -import java.awt.event.ActionListener; -import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; @@ -22,15 +20,7 @@ import java.awt.event.MouseMotionListener; import javax.swing.Action; -import javax.swing.KeyStroke; -import com.memoire.bu.BuMenu; -import com.memoire.bu.BuMenuItem; -import com.memoire.bu.BuResource; -import com.memoire.fu.FuLog; - -import org.fudaa.ctulu.CtuluLib; - import org.fudaa.ebli.calque.edition.ZEditorDefault; import org.fudaa.ebli.commun.EbliActionMap; import org.fudaa.ebli.commun.EbliEnum; @@ -45,11 +35,13 @@ import org.fudaa.ebli.trace.TraceGeometrie; import org.fudaa.ebli.trace.TraceLigne; +import com.memoire.bu.BuMenu; + /** - * @version $Id: ZCalqueSelectionInteractionAbstract.java,v 1.17.6.3 2008-05-13 12:10:35 bmarchan Exp $ + * @version $Id$ * @author Bertrand Marchand, Fred Deniger */ -public abstract class ZCalqueSelectionInteractionAbstract extends BCalqueInteraction implements MouseListener, +public abstract class ZCalqueSelectionInteractionAbstract extends BCalqueInteraction implements MouseListener, ZCatchListener, MouseMotionListener, KeyListener, ZCalqueAffichageInterface { // Modes de s\xE9lection @@ -111,6 +103,12 @@ * Point d'origine du trac\xE9 courant. */ private GrPoint ptOrig_; + + /** La g\xE9om\xE9trie d'accrochage */ + protected Integer idxGeomAccroch_; + /** Le sommet d'accrochage */ + protected Integer idxVertexAccroch_; + /** * Trace dans le contexte graphique en espace r\xE9el.. */ @@ -526,4 +524,18 @@ it.addActionListener(_l); }*/ } + + public void catchChanged(ZCatchEvent _evt) { + if (isGele()) return; + + if (_evt.type==ZCatchEvent.CAUGHT) { + idxGeomAccroch_=_evt.idxGeom; + idxVertexAccroch_=_evt.idxVertex; + } + else { + idxGeomAccroch_=null; + idxVertexAccroch_=null; + } + } + } \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java 2009-06-11 09:43:24 UTC (rev 4871) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java 2009-06-11 16:34:48 UTC (rev 4872) @@ -14,18 +14,17 @@ import com.memoire.fu.FuLog; +import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.gis.GISGeometryFactory; -import org.fudaa.ebli.calque.edition.ZEditorDefault; import org.fudaa.ebli.commun.EbliSelectionMode; -import org.fudaa.ebli.commun.EbliSelectionState; import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.geometrie.GrMorphisme; import org.fudaa.ebli.geometrie.GrPoint; import org.fudaa.ebli.geometrie.GrPolygone; /** - * @version $Id: ZCalqueSelectionInteractionSimple.java,v 1.14.6.2 2008-05-13 12:10:37 bmarchan Exp $ + * @version $Id$ * @author Bertrand Marchand, Fred Deniger */ public class ZCalqueSelectionInteractionSimple extends ZCalqueSelectionInteractionAbstract { @@ -55,9 +54,17 @@ } if (mode_ == PONCTUEL || (mode_ == RECTANGLE && listePoints_.renvoie(0).distanceXY(listePoints_.renvoie(2))<4)) { - final GrPoint pt = listePoints_.renvoie(0); - pt.autoApplique(getVersReel()); - internalGetScene().changeSelection(pt, tolerancePixel_, modificateur_.getModificateur()); + if (idxGeomAccroch_!=null) { + ZSceneSelection ssel=new ZSceneSelection(internalGetScene()); + CtuluListSelection sel=new CtuluListSelection(new int[]{idxVertexAccroch_}); + ssel.set(idxGeomAccroch_, sel); + internalGetScene().changeSelection(ssel, modificateur_.getModificateur()); + } + else { + final GrPoint pt = listePoints_.renvoie(0); + pt.autoApplique(getVersReel()); + internalGetScene().changeSelection(pt, tolerancePixel_, modificateur_.getModificateur()); + } } else { final GrPolygone poly = plHelper_.toGrPolygone(); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java 2009-06-11 09:43:24 UTC (rev 4871) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java 2009-06-11 16:34:48 UTC (rev 4872) @@ -151,7 +151,7 @@ String[] vars={cqName,idxGeom,idxVertex,x,y,z}; String text= - EbliResource.EBLI.getString("Accroche : Calque={0}, Geom={1}, Sommet={2}, X={3}, Y={4}, Z={5} (n: Suivant)", vars); + EbliResource.EBLI.getString("Accroche : Calque={0} Geom={1} Sommet={2} X={3} Y={4} Z={5} (n:Suivant, u:D\xE9crocher)", vars); pn_.setInfoText(text); } else Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java 2009-06-11 09:43:24 UTC (rev 4871) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java 2009-06-11 16:34:48 UTC (rev 4872) @@ -11,10 +11,7 @@ import gnu.trove.TIntObjectIterator; import java.awt.Graphics2D; -import java.beans.PropertyChangeListener; -import java.lang.ref.WeakReference; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashSet; import javax.swing.event.TreeModelEvent; @@ -23,18 +20,13 @@ import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ebli.calque.edition.ZCalqueEditable; -import org.fudaa.ebli.commun.EbliActionInterface; import org.fudaa.ebli.commun.EbliListeSelectionMulti; import org.fudaa.ebli.commun.EbliListeSelectionMultiInterface; import org.fudaa.ebli.commun.EbliSelectionState; import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.geometrie.GrMorphisme; import org.fudaa.ebli.geometrie.GrPoint; -import org.fudaa.ebli.trace.TraceIconModel; -import org.fudaa.ebli.trace.TraceLigneModel; -import com.memoire.fu.FuLog; -import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.LinearRing; /** @@ -253,7 +245,6 @@ */ public boolean isSelected(int _idx) { int idecal=0; - ZCalqueAffichageDonneesInterface[] cqs=getTargetLayers(); for (ZCalqueAffichageDonneesInterface cq :getTargetLayers()) { if (_idx <= cq.getLayerSelection().getMaxIndex()+idecal) { return cq.getLayerSelection().isSelected(_idx-idecal); @@ -542,6 +533,22 @@ } /** + * Change la selection a partir d'une liste de selection. + * @param _selection La liste de selection. + * @param _action voir les action de ZCalqueSelectionInteraction + * @return true si la selection a \xE9t\xE9 modifi\xE9e. + */ + public boolean changeSelection(ZSceneSelection _selection, int _action) { + boolean b=false; + for (ZCalqueAffichageDonneesInterface cq : getTargetLayers()) { + EbliListeSelectionMultiInterface sel=_selection.getLayerListSelectionMulti(cq); + b|=cq.changeSelection(sel, _action); + } + fireSelectionEvent(); + return b; + } + + /** * Retourne la selection pour le point donn\xE9.<p> * <b>Remarque:</b> Uniquement des sommets pour le moment, et en tenant compte du fait que la selection * est restreinte a un calque ou pas. @@ -806,7 +813,7 @@ */ public ZCalqueAffichageDonneesInterface[] getTargetLayers() { if (!isRestrictedToCalqueActif()) - return getAllLayers(); + return getAllLayersWithSelectedFirst(); else if (treeModel_.getSelectedCalque() instanceof ZCalqueAffichageDonneesInterface) return new ZCalqueAffichageDonneesInterface[]{(ZCalqueAffichageDonneesInterface)treeModel_.getSelectedCalque()}; else @@ -828,6 +835,31 @@ } return cqs_; } + + /** + * Retourne tous les calques de donn\xE9es contenus dans la scene, en mettant en premier les calques selectionn\xE9s, + * puis dans l'ordre de parcours de l'arbre des calques.<p> + * + * Notamment, sert pour la selection de sommets/g\xE9om\xE9tries. + * TODO : Devrait en toute logique remplacer getAllLayers(). + * @return Les calques de donn\xE9es. + */ + public ZCalqueAffichageDonneesInterface[] getAllLayersWithSelectedFirst() { + ArrayList<BCalque> lcqs=new ArrayList<BCalque>(); + for (BCalque cq : treeModel_.getRootCalque().getTousCalques()) { + if (cq instanceof ZCalqueAffichageDonneesInterface) + lcqs.add(cq); + } + BCalque[] cqsel=treeModel_.getSelection(); + for (int i=0; i<cqsel.length; i++) { + if (cqsel[i] instanceof ZCalqueAffichageDonneesInterface) { + lcqs.remove(cqsel[i]); + lcqs.add(i, cqsel[i]); + } + } + cqs_=lcqs.toArray(new ZCalqueAffichageDonneesInterface[0]); + return cqs_; + } public void setAtomicMode(boolean _b) { if (atomicMode_!=_b) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSceneSelection.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSceneSelection.java 2009-06-11 09:43:24 UTC (rev 4871) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZSceneSelection.java 2009-06-11 16:34:48 UTC (rev 4872) @@ -17,7 +17,7 @@ * En cas de selection en mode g\xE9om\xE9tries, la liste des sommets pour un index de g\xE9om\xE9trie est vide. * * @author Bertrand Marchand - * @version $Id:$ + * @version $Id$ */ public class ZSceneSelection extends EbliListeSelectionMulti { ZScene scn_; @@ -69,6 +69,29 @@ } } + /** + * Extrait la selection de vertex d'un calque donn\xE9. + * @param _cq Le calque contenant la liste de selection. + * @return La selection pour un calque donn\xE9. + */ + public EbliListeSelectionMultiInterface getLayerListSelectionMulti(ZCalqueAffichageDonneesInterface _cq) { + int idecal=0; + for (ZCalqueAffichageDonneesInterface cq : scn_.getTargetLayers()) { + if (cq==_cq) break; + idecal+=cq.modeleDonnees().getNombre(); + } + + EbliListeSelectionMulti sel=new EbliListeSelectionMulti(0); + + for (int idx=idecal, iend=idecal+_cq.modeleDonnees().getNombre(); idx<iend; idx++) { + CtuluListSelectionInterface selVertices=getSelection(idx); + if (selVertices!=null) + sel.set(idx-idecal,(CtuluListSelection)selVertices); + } + + return sel; + } + public ZScene getScene() { return scn_; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementInteraction.java 2009-06-11 09:43:24 UTC (rev 4871) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementInteraction.java 2009-06-11 16:34:48 UTC (rev 4872) @@ -20,10 +20,12 @@ import com.memoire.bu.BuResource; +import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ebli.calque.BCalqueInteraction; import org.fudaa.ebli.calque.ZCalqueSelectionInteractionAbstract; import org.fudaa.ebli.calque.ZCatchEvent; import org.fudaa.ebli.calque.ZCatchListener; +import org.fudaa.ebli.calque.ZSceneSelection; import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.commun.EbliSelectionState; import org.fudaa.ebli.geometrie.GrPoint; @@ -34,12 +36,12 @@ /** * Un calque d'interaction d\xE9placement. * @author Fred Deniger, Bertrand Marchand - * @version $Id: ZCalqueDeplacement.java,v 1.13.6.2 2008-05-13 12:10:33 bmarchan Exp $ + * @version $Id$ */ public class ZCalqueDeplacementInteraction extends BCalqueInteraction implements MouseListener, MouseMotionListener, ZCatchListener { /** * @author fred deniger - * @version $Id: ZCalqueDeplacement.java,v 1.13.6.2 2008-05-13 12:10:33 bmarchan Exp $ + * @version $Id$ */ public interface SpecPanel { void updateState(); @@ -51,6 +53,10 @@ /** Le point d'accrochage, pass\xE9 par le calque d'accrochage */ GrPoint ptAccroch_=null; + /** La g\xE9om\xE9trie d'accrochage, pour le d\xE9but du d\xE9placement */ + protected Integer idxGeomAccroch_; + /** Le sommet d'accrochage, pour le d\xE9but du d\xE9placement */ + protected Integer idxVertexAccroch_; /** Le point d'origine */ GrPoint ptOrig_=null; /** Vrai si le point d'origine est accroch\xE9 */ @@ -195,7 +201,17 @@ baccrOrig_=ptAccroch_!=null; ptOrig_=getCurrentPoint(_e); - target_.getSupport().changeSelection(ptOrig_, 5, state_.getModificateur()); + // Accrochage d'un sommet/g\xE9om\xE9trie. + if (idxGeomAccroch_!=null) { + ZSceneSelection ssel=new ZSceneSelection(target_.getSupport()); + CtuluListSelection sel=new CtuluListSelection(new int[]{idxVertexAccroch_}); + ssel.set(idxGeomAccroch_, sel); + target_.getSupport().changeSelection(ssel, state_.getModificateur()); + } + // Pas d'accrochage. On essaye de selectionner. + else { + target_.getSupport().changeSelection(ptOrig_, 5, state_.getModificateur()); + } updateSpecPanel(); repaint(); } @@ -264,9 +280,15 @@ } public void catchChanged(ZCatchEvent _evt) { - if (_evt.type==ZCatchEvent.CAUGHT) + if (_evt.type==ZCatchEvent.CAUGHT) { ptAccroch_=_evt.selection.getScene().getVertex(_evt.idxGeom,_evt.idxVertex); - else + idxGeomAccroch_=_evt.idxGeom; + idxVertexAccroch_=_evt.idxVertex; + } + else { ptAccroch_=null; + idxGeomAccroch_=null; + idxVertexAccroch_=null; + } } } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementInteraction.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMultiInterface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMultiInterface.java 2009-06-11 09:43:24 UTC (rev 4871) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMultiInterface.java 2009-06-11 16:34:48 UTC (rev 4872) @@ -36,7 +36,8 @@ */ CtuluListSelectionInterface getSelection(int _idxGeom); /** - * @return Les indices de geometries, stock\xE9s sous la forme d'un tableau. + * @return Les indices de geometries, stock\xE9s sous la forme d'un tableau. L'ordre des indices retourn\xE9s est + * quelconque. */ int[] getIdxSelected(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |