From: <bma...@us...> - 2008-09-12 07:56:04
|
Revision: 3912 http://fudaa.svn.sourceforge.net/fudaa/?rev=3912&view=rev Author: bmarchan Date: 2008-09-12 07:56:15 +0000 (Fri, 12 Sep 2008) Log Message: ----------- Optimisation du traiment de d?\195?\169placement/rotation des points d'un semis. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java 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-11 22:20:32 UTC (rev 3911) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueMultiPoint.java 2008-09-12 07:56:15 UTC (rev 3912) @@ -32,6 +32,7 @@ import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISZoneCollection; @@ -310,15 +311,17 @@ final Envelope env = new Envelope(); if (isAtomicMode_) { final EbliListeSelectionMultiInterface multi = getLayerSelectionMulti(); + Coordinate c=new Coordinate(); final TIntObjectIterator it = multi.getIterator(); for (int i = multi.getNbListSelected(); i-- > 0;) { it.advance(); final CtuluListSelectionInterface atomSel = (CtuluListSelectionInterface) it.value(); - final Geometry g = (Geometry) modele_.getGeomData().getGeometry(it.key()); + final CoordinateSequence seq = modele_.getGeomData().getCoordinateSequence(it.key()); final int max = atomSel.getMaxIndex(); for (int j = atomSel.getMinIndex(); j <= max; j++) { if (atomSel.isSelected(j)) { - env.expandToInclude(g.getCoordinates()[j]); + seq.getCoordinate(j,c); + env.expandToInclude(c); } } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java 2008-09-11 22:20:32 UTC (rev 3911) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java 2008-09-12 07:56:15 UTC (rev 3912) @@ -338,7 +338,8 @@ return 0; } final Geometry gi = geometries_.getGeometry(_idxLigne); - return gi.getNumPoints(); + return gi.getNumGeometries(); +// return gi.getNumPoints(); } public final int getNombre() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-09-15 13:34:53
|
Revision: 3925 http://fudaa.svn.sourceforge.net/fudaa/?rev=3925&view=rev Author: emmanuel_martin Date: 2008-09-15 13:34:59 +0000 (Mon, 15 Sep 2008) Log Message: ----------- Am?\195?\169lioration de l'interface utilisateur et correction dans la gestion des attributs pour les rectangles et les ?\195?\169llipses. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BVueCalque.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/ZEditionAttibutesContainer.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/ZEditorLigneBriseePanel.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BVueCalque.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BVueCalque.java 2008-09-14 20:51:52 UTC (rev 3924) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BVueCalque.java 2008-09-15 13:34:59 UTC (rev 3925) @@ -518,7 +518,9 @@ // Mouse // MouseMotion - public void mouseEntered(final MouseEvent _evt) {} + public void mouseEntered(final MouseEvent _evt) { + grabFocus(); + } public void mouseExited(final MouseEvent _evt) {} 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-09-14 20:51:52 UTC (rev 3924) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditionInteraction.java 2008-09-15 13:34:59 UTC (rev 3925) @@ -17,11 +17,18 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Set; import java.util.Vector; +import java.util.Map.Entry; +import javax.swing.JComponent; + import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluLibGeometrie; import org.fudaa.ctulu.CtuluLibString; +import org.fudaa.ctulu.gis.GISAttributeInterface; import org.fudaa.ebli.calque.BCalqueInteraction; import org.fudaa.ebli.calque.dessin.DeForme; import org.fudaa.ebli.calque.dessin.DeLigneBrisee; @@ -540,6 +547,7 @@ private ZEditionAttibutesContainer.LigneBriseeData data_; private boolean moved_; // Vrai quand le curseur est en mouvement private Vector<Integer> keyPresse_; // Pour la gestion du mode 'carre' + private HashMap<GISAttributeInterface, JComponent> attributs_; public FormDelegateEllipse(){ keyPresse_=new Vector<Integer>(); @@ -615,10 +623,6 @@ public void mousePressed(final MouseEvent _e) { if (origine_==null) { origine_=getPointReel(_e); - if (features_!=null) - data_=features_.createEllipseData(); - if (data_!=null) - data_.addPoint(); if (support_!=null) support_.atomicChanged(); moved_=false; @@ -682,7 +686,42 @@ */ public void keyTyped(KeyEvent _e) {} - private GrPolygone getPolygone(){ + public void setDataAttributs(HashMap<GISAttributeInterface, JComponent> _attributs){ + attributs_ = _attributs; + } + + public boolean isSetDataAttributs(){ + return attributs_ != null; + } + + private void addData() { + if (data_!=null&&attributs_!=null) { + // Pour chaque propri\xE9t\xE9es + for (Entry<GISAttributeInterface, JComponent> element : attributs_.entrySet()) { + GISAttributeInterface key=element.getKey(); + Object value=key.getEditor().getValue(element.getValue()); + // Si elle existe : inscrire la valeur + if (data_.atomicAttribute_.containsKey(key)) { + ArrayList<Object> values=data_.atomicAttribute_.get(key); + for (int i=0; i<values.size(); i++) + values.set(i, value); + } + // Si elle n'existe pas la cr\xE9er pour tout les points et inscrire la + // valeur + else { + ArrayList<Object> values=new ArrayList<Object>(data_.nbGeom_); + for (int i=0; i<data_.nbGeom_; i++) + values.add(value); + data_.atomicAttribute_.put(key, values); + } + } + } + } + + private GrPolygone getPolygone(boolean _withData){ + if(data_ == null && features_ != null) + data_ = features_.createEllipseData(); + if(data_==null) _withData = false; GrPolygone poly = new GrPolygone(); if(origine_ == null) return poly; @@ -691,8 +730,16 @@ return poly; } final double incT=(2*Math.PI)/nbPoints_; - for(double t = 0; t< 2*Math.PI;t+=incT) - poly.sommets_.ajoute(getXEllipse(t)+origine_.x_, getYEllipse(t)+origine_.y_, 0); + if (_withData) { + data_.atomicAttribute_.clear(); + data_.nbGeom_=0; + } + for (double t=0; t<2*Math.PI; t+=incT) { + poly.sommets_.ajoute(getXEllipse(t)+origine_.x_, getYEllipse(t)+origine_.y_, 0); + if(_withData) data_.addPoint(); + } + // Mise a jour des attributs + if(_withData) addData(); return poly; } @@ -700,25 +747,32 @@ if (origine_!=null&&grandRayon_!=0&&petitRayon_!=0) { final Graphics2D g=(Graphics2D)getGraphics(); g.setXORMode(Color.white); + // Recup\xE9ration des points + VecteurGrPoint points=getPolygone(false).sommets_; // Trace l'ellipse - GrPoint tmp=new GrPoint(); - tmp.initialiseAvec(origine_); - tmp.autoApplique(getVersEcran()); - - - TraceGeometrie tg = new TraceGeometrie(getVersEcran()); - tg.dessineEllipse(g, new GrPoint(origine_.x_+grandRayon_, origine_.y_+petitRayon_, 0), new GrPoint(origine_.x_-grandRayon_, origine_.y_ + petitRayon_, 0), new GrPoint(origine_.x_-grandRayon_, origine_.y_-petitRayon_, 0), new GrPoint(origine_.x_+grandRayon_, origine_.y_ - petitRayon_, 0), false, false); - /*g.setColor(tp_.getCouleur()); - g.drawOval((int)(tmp.x_-grandRayon_), (int)(tmp.y_-petitRayon_), 2*(int)Math.round(grandRayon_), 2*(int)Math - .round(petitRayon_)); - */ - // Trace les points - VecteurGrPoint points=getPolygone().sommets_; - for (int i=0; i<points.nombre(); i++) { - tmp=points.renvoie(i); + if (points.nombre()<10) { + GrPoint tmp=new GrPoint(); + tmp.initialiseAvec(origine_); tmp.autoApplique(getVersEcran()); - tp_.dessinePoint(g, tmp.x_, tmp.y_); + TraceGeometrie tg=new TraceGeometrie(getVersEcran()); + tg.setForeground(tp_.getCouleur()); + tg.dessineEllipse(g, new GrPoint(origine_.x_+grandRayon_, origine_.y_+petitRayon_, 0), new GrPoint(origine_.x_ + -grandRayon_, origine_.y_+petitRayon_, 0), new GrPoint(origine_.x_-grandRayon_, origine_.y_-petitRayon_, 0), + new GrPoint(origine_.x_+grandRayon_, origine_.y_-petitRayon_, 0), false, false); } + // Trace les points + GrPoint pointPre=points.renvoie(0); + pointPre.autoApplique(getVersEcran()); + GrPoint pointAct; + for (int i=1; i<points.nombre(); i++) { + pointAct=points.renvoie(i); + pointAct.autoApplique(getVersEcran()); + tl_.dessineTrait(g, pointPre.x_, pointPre.y_, pointAct.x_, pointAct.y_); + pointPre = pointAct; + } + pointAct = points.renvoie(0); + // Sur ce point getVersEcran() a d\xE9j\xE0 \xE9t\xE9 fait + tl_.dessineTrait(g, pointPre.x_, pointPre.y_, pointAct.x_, pointAct.y_); } } @@ -748,7 +802,7 @@ @Override void addCurrentForme() { if (origine_!=null&&grandRayon_>0&&petitRayon_>0) { - support_.addNewPolygone(getPolygone(), data_); + support_.addNewPolygone(getPolygone(true), data_); origine_=null; grandRayon_=0; petitRayon_=0; @@ -808,7 +862,7 @@ */ @Override public GrObjet getFormeEnCours() { - return getPolygone(); + return getPolygone(true); } } @@ -820,6 +874,7 @@ private GrPoint pointDep_, pointFin_; // Les deux points d\xE9finissant le rectangle private Vector<Integer> keyPresse_; // Pour la gestion du mode 'carre' private int nbPointsLargeur_, nbPointsHauteur_; // Nombres de point ajout\xE9 sur les cot\xE9s + private HashMap<GISAttributeInterface, JComponent> attributs_; public FormDelegateRectangle() { super(); @@ -828,14 +883,24 @@ nbPointsHauteur_ = 0; } + public void setDataAttributs(HashMap<GISAttributeInterface, JComponent> _attributs){ + attributs_ = _attributs; + } + + public boolean isSetDataAttributs(){ + return attributs_ != null; + } + /** * Permet de renseigner le point d'origine de la forme. * * @param _origine */ public void setPointOrigine(GrPoint _origine) { - if (_origine!=null) + if (_origine!=null){ + effaceDessin(); pointDep_=_origine; + } } /** @@ -844,8 +909,10 @@ * @param _fin */ public void setPointFin(GrPoint _fin) { - if (_fin!=null) + if (_fin!=null){ + effaceDessin(); pointFin_=_fin; + } } /** @@ -892,7 +959,7 @@ private void realiseDessin() { final Graphics2D g=(Graphics2D)getGraphics(); g.setXORMode(Color.white); - VecteurGrPoint points=getPolygone().sommets_; + VecteurGrPoint points=getPolygone(false).sommets_; GrPoint pointPre = points.renvoie(0); pointPre.autoApplique(getVersEcran()); GrPoint pointAct; @@ -958,10 +1025,6 @@ public void mousePressed(final MouseEvent _e) { if (pointDep_ == null) { pointDep_ = getPointReel(_e); - if (features_ != null) - data_ = features_.createRectangleData(); - if (data_ != null) - data_.addPoint(); if (support_ != null) support_.atomicChanged(); moved_ = false; @@ -1027,7 +1090,34 @@ */ public void keyTyped(KeyEvent _e) {} - private GrPolygone getPolygone(){ + private void addData() { + if (data_!=null&&attributs_!=null) { + // Pour chaque propri\xE9t\xE9es + for (Entry<GISAttributeInterface, JComponent> element : attributs_.entrySet()) { + GISAttributeInterface key=element.getKey(); + Object value=key.getEditor().getValue(element.getValue()); + // Si elle existe : inscrire la valeur + if (data_.atomicAttribute_.containsKey(key)) { + ArrayList<Object> values=data_.atomicAttribute_.get(key); + for (int i=0; i<values.size(); i++) + values.set(i, value); + } + // Si elle n'existe pas la cr\xE9er pour tout les points et inscrire la + // valeur + else { + ArrayList<Object> values=new ArrayList<Object>(data_.nbGeom_); + for (int i=0; i<data_.nbGeom_; i++) + values.add(value); + data_.atomicAttribute_.put(key, values); + } + } + } + } + + private GrPolygone getPolygone(boolean _withData){ + if(data_ == null && features_ != null) + data_ = features_.createRectangleData(); + if(data_==null) _withData = false; GrPolygone poly = new GrPolygone(); if(pointDep_ == null) return poly; @@ -1035,31 +1125,45 @@ poly.sommets_.ajoute(pointDep_); return poly; } + if(_withData){ + data_.atomicAttribute_.clear(); + data_.nbGeom_=0; + } double x0=Math.min(pointDep_.x_, pointFin_.x_), y0=Math.min(pointDep_.y_, pointFin_.y_), z0=pointDep_.z_, x1=Math.max(pointDep_.x_, pointFin_.x_), y1=Math.max(pointDep_.y_, pointFin_.y_); double largeur = Math.abs(x1 - x0), hauteur = Math.abs(y1 - y0); // Ajout des sommets dans le bonne ordre poly.sommets_.ajoute(x0, y0, z0); - for (int i=0; i<nbPointsHauteur_; i++) + if(_withData) data_.addPoint(); + for (int i=0; i<nbPointsHauteur_; i++){ poly.sommets_.ajoute(x0, y0 + (i + 1) * (hauteur / (nbPointsHauteur_ + 1)), z0); + if(_withData) data_.addPoint(); + } poly.sommets_.ajoute(x0, y1, z0); - for (int i=0; i<nbPointsLargeur_; i++) + if(_withData) data_.addPoint(); + for (int i=0; i<nbPointsLargeur_; i++){ poly.sommets_.ajoute(x0 + (i + 1) * (largeur / (nbPointsLargeur_ + 1)), y1, z0); + if(_withData) data_.addPoint(); + } poly.sommets_.ajoute(x1, y1, z0); - for (int i=nbPointsHauteur_; i>0; i--) + if(_withData) data_.addPoint(); + for (int i=nbPointsHauteur_; i>0; i--){ poly.sommets_.ajoute(x1, y1 - (nbPointsHauteur_ - i + 1) * hauteur / (nbPointsHauteur_ + 1), z0); - poly.sommets_.ajoute(x1, y0, z0); - for (int i=nbPointsLargeur_; i>0; i--) + if(_withData) data_.addPoint(); + } + poly.sommets_.ajoute(x1, y0, z0); + if(_withData) data_.addPoint(); + for (int i=nbPointsLargeur_; i>0; i--){ poly.sommets_.ajoute(x1 - (nbPointsLargeur_ - i + 1) * largeur / (nbPointsLargeur_ + 1), y0, z0); + if(_withData) data_.addPoint(); + } + // Mise a jour des attributs + if(_withData) addData(); return poly; } void addCurrentForme() { if (pointDep_!=null&&pointFin_!=null) { - if (data_!=null) { - if (data_.getNumGeometry()<2) - data_.addPoint(); - } - support_.addNewPolygone(getPolygone(), data_); + support_.addNewPolygone(getPolygone(true), data_); pointDep_=null; pointFin_=null; data_=null; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditionAttibutesContainer.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditionAttibutesContainer.java 2008-09-14 20:51:52 UTC (rev 3924) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditionAttibutesContainer.java 2008-09-15 13:34:59 UTC (rev 3925) @@ -30,20 +30,20 @@ */ public class LigneBriseeData extends ZEditionAttributesDataI { - final Map globalAttribute_; - final Map atomicAttribute_; + final HashMap<GISAttributeInterface, Object> globalAttribute_; + final HashMap<GISAttributeInterface, ArrayList<Object>> atomicAttribute_; /** * Construit les maps par defaut. */ public LigneBriseeData() { - globalAttribute_ = new HashMap(); - atomicAttribute_ = new HashMap(); + globalAttribute_ = new HashMap<GISAttributeInterface, Object>(); + atomicAttribute_ = new HashMap<GISAttributeInterface, ArrayList<Object>>(); if (name_ != null) { for (int i = name_.length - 1; i >= 0; i--) { final GISAttributeInterface att = name_[i]; if (att.isAtomicValue()) { - atomicAttribute_.put(att, new ArrayList(20)); + atomicAttribute_.put(att, new ArrayList<Object>(20)); } else { globalAttribute_.put(att, null); } @@ -198,20 +198,6 @@ public RectangleData() { super(); } - - public void addPoint() { - super.addPoint(); - if (super.nbGeom_ == 2) { - for (final Iterator it = atomicAttribute_.values().iterator(); it.hasNext();) { - final ArrayList l = (ArrayList) it.next(); - final Object last = l.get(l.size() - 1); - l.add(last); - l.add(last); - l.add(last); - } - } - } - } /** 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-09-14 20:51:52 UTC (rev 3924) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2008-09-15 13:34:59 UTC (rev 3925) @@ -64,7 +64,7 @@ * @author Fred Deniger * @version $Id: ZEditorDefault.java,v 1.20.6.5 2008-05-13 12:10:24 bmarchan Exp $ */ -public class ZEditorDefault implements ZCalqueEditionInteractionTargetI, ZEditorInterface, KeyListener, +public class ZEditorDefault implements ZCalqueEditionInteractionTargetI, ZEditorInterface, PropertyChangeListener, ZCalqueDeplacementTargetInterface { class CommandSaisieMultiple implements CtuluCommandPersitant { @@ -175,11 +175,9 @@ */ public ZEditorDefault(final ZEbliCalquesPanel _panel, final ZSceneEditor _editor) { super(); - keyListener = new Vector<KeyListener>(); panel_ = _panel; sceneEditor_=_editor; // panel_.addKeyListener(this); - panel_.getVueCalque().addKeyListener(this); buildDeletesAction(); EbliLib.updateMapKeyStroke(_panel, getDeleteActions()); installSceneActions(); @@ -392,7 +390,7 @@ if (forme >= 0) { if (dessin_ == null) { dessin_ = new ZCalqueEditionInteraction(this); - addKeyListener(dessin_); + panel_.getVueCalque().addKeyListener(dessin_); dessin_.setName("cqInteractifDessin"); panel_.addCalqueInteraction(dessin_); dessin_.addPropertyChangeListener("gele", this); @@ -549,24 +547,6 @@ public boolean isEditable(final Object _target) { return _target instanceof ZCalqueEditable; } - - Vector<KeyListener> keyListener; - - public void addKeyListener(KeyListener _l){ - if(!keyListener.contains(_l)) - keyListener.add(_l); - } - - public void removeKeyListener(KeyListener _l){ - if(keyListener.contains(_l)) - keyListener.remove(_l); - } - - public void keyPressed(final KeyEvent _e) { - for(KeyListener l : keyListener){ - l.keyPressed(_e); - } - } // Pas sur que la m\xE9thode soit utilis\xE9. public void keyReleased(final KeyEvent _e) { @@ -577,9 +557,6 @@ // } // ((ZCalqueEditable) calque).removeSelectedObjects(mng_, null); // } - for(KeyListener l : keyListener){ - l.keyReleased(_e); - } if (_e.getKeyCode() == KeyEvent.VK_DELETE) { delete(); } @@ -591,12 +568,6 @@ } } - public void keyTyped(final KeyEvent _e) { - for(KeyListener l : keyListener){ - l.keyTyped(_e); - } - } - public void moved(final double _dx, final double _dy, final double _dz) { sceneEditor_.moveSelectedObjects(_dx, _dy, _dz); // ZCalqueEditable[] cqs=getSupport().getEditableLayers(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorLigneBriseePanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorLigneBriseePanel.java 2008-09-14 20:51:52 UTC (rev 3924) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorLigneBriseePanel.java 2008-09-15 13:34:59 UTC (rev 3925) @@ -1,935 +1,1013 @@ -/* - * @creation 4 avr. 2005 - * @modification $Date: 2008-03-26 16:46:43 $ - * @license GNU General Public License 2 - * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail de...@fu... - */ -package org.fudaa.ebli.calque.edition; - -import java.awt.BorderLayout; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.border.EmptyBorder; -import javax.swing.table.AbstractTableModel; - -import org.fudaa.ctulu.CtuluLibString; -import org.fudaa.ctulu.gis.GISAttributeInterface; -import org.fudaa.ctulu.gui.CtuluValueEditorI; -import org.fudaa.ebli.calque.dessin.DeForme; -import org.fudaa.ebli.calque.edition.ZCalqueEditionInteraction.FormDelegateEllipse; -import org.fudaa.ebli.calque.edition.ZCalqueEditionInteraction.FormDelegateRectangle; -import org.fudaa.ebli.commun.EbliFormatterInterface; -import org.fudaa.ebli.commun.EbliLib; -import org.fudaa.ebli.geometrie.GrPoint; -import org.fudaa.ebli.geometrie.GrPolyligne; -import org.fudaa.ebli.ressource.EbliResource; - -import com.memoire.bu.BuButton; -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.BuTable; -import com.memoire.bu.BuTextField; -import com.memoire.bu.BuVerticalLayout; -import com.memoire.fu.Fu; -import com.memoire.fu.FuLog; - -/** - * Un panneau d'\xE9dition d'une ligne bris\xE9e qui s'affiche lorsque l'outil ligne bris\xE9e est s\xE9lectionn\xE9. - * Ce panneau est inclu dans le panneau des outils. - * - * @author Fred Deniger - * @version $Id: ZEditorLigneBriseePanel.java,v 1.21.4.3 2008-03-26 16:46:43 bmarchan Exp $ - */ -public class ZEditorLigneBriseePanel extends BuPanel implements ZEditionAttributesCreatorInterface, ZEditorPanelInterface, ActionListener { - - protected class ValueModel extends AbstractTableModel { - - GISAttributeInterface[] atomicAttr_; - - protected ValueModel() { - updateAtomicArrays(); - } - - protected void updateAtomic() { - super.fireTableDataChanged(); - } - - protected final void updateAtomicArrays() { - if (editorComps_ != null && editorAttribute_ != null && editorAttribute_.size() > 0) { - final List r = new ArrayList(editorAttribute_.size()); - for (final Iterator it = editorAttribute_.keySet().iterator(); it.hasNext();) { - final GISAttributeInterface att = (GISAttributeInterface) it.next(); - if (att.isAtomicValue()) { - r.add(att); - } - } - atomicAttr_ = new GISAttributeInterface[r.size()]; - r.toArray(atomicAttr_); - } - } - - public Class getColumnClass(final int _columnIndex) { - if (_columnIndex > 2) { - return atomicAttr_[_columnIndex - 3].getDataClass(); - } - return Double.class; - } - - public int getColumnCount() { - return 3 + (atomicAttr_ == null ? 0 : atomicAttr_.length); - } - - public String getColumnName(final int _column) { - if (_column == 0) { - return CtuluLibString.ESPACE; - } - if (_column == 1) { - return "X"; - } - if (_column == 2) { - return "Y"; - } - final int idxFeature = _column - 3; - if (atomicAttr_ != null) { - return atomicAttr_[idxFeature].getName(); - } - return super.getColumnName(_column); - } - - public int getRowCount() { - final ZCalqueEditionInteraction.FormDelegate forme = edition_.getFormeEnCours(); - if (!forme.enCours()) { - return 0; - } - if (forme.getForme() == DeForme.RECTANGLE) { - return 1; - } - return forme.enCours() ? ((GrPolyligne) forme.getFormeEnCours()).nombre() : 0; - } - - public Object getValueAt(final int _rowIndex, final int _columnIndex) { - if (_columnIndex == 0) { - return CtuluLibString.getString(_rowIndex + 1); - } - final ZCalqueEditionInteraction.FormDelegate forme = edition_.getFormeEnCours(); - if (!forme.enCours()) { - return CtuluLibString.EMPTY_STRING; - } - final boolean isRect = forme.getForme() == DeForme.RECTANGLE; - GrPolyligne o = null; - GrPoint init = null; - if (isRect) { - init = (GrPoint) forme.getFormeEnCours(); - } else { - o = (GrPolyligne) forme.getFormeEnCours(); - } - if (o != null) { - if (_columnIndex == 1) { - if (init == null) { - return formatter_.getXYFormatter().format(o.sommets_.renvoieX(_rowIndex)); - } - formatter_.getXYFormatter().format(init.x_); - } else if (_columnIndex == 2) { - if (init == null) { - return formatter_.getXYFormatter().format(o.sommets_.renvoieY(_rowIndex)); - } - formatter_.getXYFormatter().format(init.y_); - } else if (atomicAttr_ != null) { - final int featureIdx = _columnIndex - 3; - if (featureIdx >= 0 && attributes_ != null && attributes_.length > 0) { - return forme.getData().getValue(atomicAttr_[featureIdx], _rowIndex); - } - - } - } - return null; - } - - public boolean isCellEditable(final int _rowIndex, final int _columnIndex) { - return _columnIndex > 0; - } - - public void setValueAt(final Object _value, final int _rowIndex, final int _columnIndex) { - if (_value == null) return; - final ZCalqueEditionInteraction.FormDelegate forme = edition_.getFormeEnCours(); - final boolean isRect = forme.getForme() == DeForme.RECTANGLE; - GrPolyligne o = null; - GrPoint init = null; - if (isRect) { - init = (GrPoint) forme.getFormeEnCours(); - } else { - o = (GrPolyligne) forme.getFormeEnCours(); - } - if (o != null && o.sommets_ != null) { - if (_columnIndex == 1) { - if (init == null) { - o.sommets_.setX(Double.parseDouble(_value.toString()), _rowIndex); - } else { - init.x_ = Double.parseDouble(_value.toString()); - } - edition_.repaint(); - - } else if (_columnIndex == 2) { - if (init == null) { - o.sommets_.setY(Double.parseDouble(_value.toString()), _rowIndex); - } else { - init.y_ = Double.parseDouble(_value.toString()); - - } - edition_.repaint(); - - } else if (atomicAttr_ != null) { - forme.getData().setValue(atomicAttr_[_columnIndex - 3], _rowIndex, _value); - } - } - super.fireTableDataChanged(); - } - - } - - /** - * Interface graphique permettant de g\xE9rer les propri\xE9t\xE9s de l'ellipse lors de - * sa construction - * - * @author Emmanuel Martin - */ - protected class EllipseParameterGUI extends BuPanel implements ActionListener { - - private BuTextField tfCoordX_; - private BuTextField tfCoordY_; - private BuTextField tfRayonX_; - private BuTextField tfRayonY_; - private BuTextField tfNbPoints_; - private boolean userRayonX_; - private boolean userRayonY_; - - public EllipseParameterGUI() { - super(); - userRayonX_=false; - userRayonY_=false; - int hauteur=20; - int largeur=60; - setBorder(new EmptyBorder(2, 2, 2, 2)); - // Create BuTextFields & Dimension - tfCoordX_=BuTextField.createDoubleField(); - tfCoordY_=BuTextField.createDoubleField(); - tfRayonX_=BuTextField.createDoubleField(); - tfRayonY_=BuTextField.createDoubleField(); - tfNbPoints_=BuTextField.createIntegerField(); - tfCoordX_.setPreferredSize(new Dimension(largeur, hauteur)); - tfCoordY_.setPreferredSize(new Dimension(largeur, hauteur)); - tfRayonX_.setPreferredSize(new Dimension(largeur, hauteur)); - tfRayonY_.setPreferredSize(new Dimension(largeur, hauteur)); - tfNbPoints_.setPreferredSize(new Dimension(largeur, hauteur)); - // ActionListener - tfCoordX_.addActionListener(this); - tfCoordY_.addActionListener(this); - tfRayonX_.addActionListener(this); - tfRayonY_.addActionListener(this); - tfNbPoints_.addActionListener(this); - // Default value - tfNbPoints_.setText("3"); - // Conteneur principal - Box mainContainer=new Box(BoxLayout.Y_AXIS); - Box head=new Box(BoxLayout.X_AXIS); - Container foot=new Container(); - foot.setLayout(new GridLayout(1, 1, 0, 0)); - // Gestion des coordonn\xE9es - Box tmp=new Box(BoxLayout.Y_AXIS); - tmp.add(new JLabel(EbliResource.EBLI.getString("Coord X "))); - tmp.add(new JLabel(EbliResource.EBLI.getString("Coord Y "))); - head.add(tmp); - tmp=new Box(BoxLayout.Y_AXIS); - tmp.add(tfCoordX_); - tmp.add(tfCoordY_); - head.add(tmp); - // Taille - tmp=new Box(BoxLayout.Y_AXIS); - tmp.add(new JLabel(EbliResource.EBLI.getString("RayonX "))); - tmp.add(new JLabel(EbliResource.EBLI.getString("RayonY "))); - head.add(tmp); - tmp=new Box(BoxLayout.Y_AXIS); - tmp.add(tfRayonX_); - tmp.add(tfRayonY_); - head.add(tmp); - // Nombre de point - foot.add(new JLabel(EbliResource.EBLI.getString("Nombre de Points:"))); - foot.add(tfNbPoints_); - // Add to mainContainer - mainContainer.add(head); - mainContainer.add(foot); - // Add to Panel - add(mainContainer); - } - - /** - * Met \xE0 jour le contenu de l'interface en cas de changement des coordonn\xE9es - * du point d'origine. - */ - public void update() { - if (edition_!=null&&edition_.getFormeEnCours()!=null&&edition_.getFormeEnCours().enCours()) { - GrPoint pointOrigine=((FormDelegateEllipse)edition_.getFormeEnCours()).getPointOrigine(); - if (pointOrigine!=null) { - tfCoordX_.setText(formatter_.getXYFormatter().format(new Double(pointOrigine.x_))); - tfCoordY_.setText(formatter_.getXYFormatter().format(new Double(pointOrigine.y_))); - } - else { - tfCoordX_.setText(""); - tfCoordY_.setText(""); - } - } - } - - /** - * Cette m\xE9thode g\xE8re la mise \xE0 jour de l'interface lors de mouvement de la - * souris. - * - * @param _x - * : coordonn\xE9e x de la sourie - * @param _y - * coordonn\xE9e y de la sourie - */ - public void updateMove(double _x, double _y) { - if (edition_!=null&&edition_.getFormeEnCours()!=null&&edition_.getFormeEnCours().enCours()) { - GrPoint pointOrigine=((FormDelegateEllipse)edition_.getFormeEnCours()).getPointOrigine(); - tfRayonX_.setText(formatter_.getXYFormatter().format(new Double(Math.abs(_x-pointOrigine.x_)))); - tfRayonY_.setText(formatter_.getXYFormatter().format(new Double(Math.abs(_y-pointOrigine.y_)))); - userRayonX_=false; - userRayonY_=false; - } - } - - /** - * Si un rayon est donn\xE9 par l'utilisateur, fnir l'ellipse celle-ci, sinon - * ne fait rien. - */ - private void buildEllipse() { - if (edition_!=null&&edition_.getFormeEnCours()!=null&&userRayonX_&&userRayonY_) { - ((FormDelegateEllipse)edition_.getFormeEnCours()).buildEllipse(); - } - userRayonX_=false; - userRayonY_=false; - } - - /* - * (non-Javadoc) - * - * @see - * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) - */ - public void actionPerformed(ActionEvent _e) { - if (edition_!=null&&edition_.getFormeEnCours()!=null&&edition_.getFormeEnCours().getForme()==DeForme.ELLIPSE) { - boolean error=false; - if (_e.getSource()==tfCoordX_||_e.getSource()==tfCoordY_) { - double x=0, y=0; - try { - x=Double.parseDouble(tfCoordX_.getText()); - } - catch (NumberFormatException ex) { - tfCoordX_.setText(""); - error=true; - } - try { - y=Double.parseDouble(tfCoordY_.getText()); - } - catch (NumberFormatException ex) { - tfCoordY_.setText(""); - error=true; - } - if (!error) - ((FormDelegateEllipse)edition_.getFormeEnCours()).setPointOrigine(new GrPoint(x, y, 0)); - } - else if (_e.getSource()==tfNbPoints_) { - try { - ((FormDelegateEllipse)edition_.getFormeEnCours()).setNbPoints(Integer.parseInt(tfNbPoints_.getText())); - } - catch (NumberFormatException ex) { - tfNbPoints_.setText(""); - } - } - else if (_e.getSource()==tfRayonX_) { - try { - ((FormDelegateEllipse)edition_.getFormeEnCours()).setRayonX(Double.parseDouble(tfRayonX_.getText())); - userRayonX_=true; - } - catch (NumberFormatException ex) { - tfRayonX_.setText(""); - } - } - else if (_e.getSource()==tfRayonY_) { - try { - ((FormDelegateEllipse)edition_.getFormeEnCours()).setRayonY(Double.parseDouble(tfRayonY_.getText())); - userRayonY_=true; - } - catch (NumberFormatException ex) { - tfRayonY_.setText(""); - } - // Construction de l'ellipse avec les donn\xE9es du panel - buildEllipse(); - } - else { - // Mise a jour de l'interface graphique suite \xE0 une action de - // l'utilisateur - update(); - } - } - } - } - - /** - * Interface graphique permettant de g\xE9rer les propri\xE9t\xE9s du rectangle lors de - * sa construction - * - * @author Emmanuel Martin - */ - protected class RectangleParameterGUI extends BuPanel implements ActionListener { - - private BuTextField tfCoordX_; - private BuTextField tfCoordY_; - private BuTextField tfSizeY_; - private BuTextField tfSizeX_; - private BuTextField tfNbPointX_; - private BuTextField tfNbPointY_; - private boolean userSizeX_; - private boolean userSizeY_; - - public RectangleParameterGUI() { - super(); - userSizeX_=false; - userSizeY_=false; - int hauteur=20; - int largeur=60; - setBorder(new EmptyBorder(2, 2, 2, 2)); - // Create BuTextFields & Dimension - tfCoordX_=BuTextField.createDoubleField(); - tfCoordY_=BuTextField.createDoubleField(); - tfSizeY_=BuTextField.createDoubleField(); - tfSizeX_=BuTextField.createDoubleField(); - tfNbPointY_=BuTextField.createIntegerField(); - tfNbPointX_=BuTextField.createIntegerField(); - tfCoordX_.setPreferredSize(new Dimension(largeur, hauteur)); - tfCoordY_.setPreferredSize(new Dimension(largeur, hauteur)); - tfSizeY_.setPreferredSize(new Dimension(largeur, hauteur)); - tfSizeX_.setPreferredSize(new Dimension(largeur, hauteur)); - tfNbPointY_.setPreferredSize(new Dimension(largeur, hauteur)); - tfNbPointX_.setPreferredSize(new Dimension(largeur, hauteur)); - // ActionListener - tfCoordX_.addActionListener(this); - tfCoordY_.addActionListener(this); - tfSizeY_.addActionListener(this); - tfSizeX_.addActionListener(this); - tfNbPointY_.addActionListener(this); - tfNbPointX_.addActionListener(this); - // Default value - tfNbPointY_.setText("0"); - tfNbPointX_.setText("0"); - // Conteneur principal - Box mainContainer=new Box(BoxLayout.Y_AXIS); - Box head=new Box(BoxLayout.X_AXIS); - Container foot=new Container(); - foot.setLayout(new GridLayout(2, 2, 0, 0)); - // Gestion des coordonn\xE9es - Box tmp=new Box(BoxLayout.Y_AXIS); - tmp.add(new JLabel(EbliResource.EBLI.getString("Coord X "))); - tmp.add(new JLabel(EbliResource.EBLI.getString("Coord Y "))); - head.add(tmp); - tmp=new Box(BoxLayout.Y_AXIS); - tmp.add(tfCoordX_); - tmp.add(tfCoordY_); - head.add(tmp); - // Taille - tmp=new Box(BoxLayout.Y_AXIS); - tmp.add(new JLabel(EbliResource.EBLI.getString("Hauteur "))); - tmp.add(new JLabel(EbliResource.EBLI.getString("Largeur "))); - head.add(tmp); - tmp=new Box(BoxLayout.Y_AXIS); - tmp.add(tfSizeY_); - tmp.add(tfSizeX_); - head.add(tmp); - // Nombre de point - foot.add(new JLabel(EbliResource.EBLI.getString("Nb points Hauteur :"))); - foot.add(tfNbPointY_); - foot.add(new JLabel(EbliResource.EBLI.getString("Nb points Largeur :"))); - foot.add(tfNbPointX_); - // Add to mainContainer - mainContainer.add(head); - mainContainer.add(foot); - // Add to Panel - add(mainContainer); - } - - /** - * Met \xE0 jour le contenu de l'interface en cas de changement des coordonn\xE9es - * du point d'origine. - */ - public void update() { - if (edition_!=null&&edition_.getFormeEnCours()!=null&&edition_.getFormeEnCours().enCours()) { - GrPoint pointOrigine=(GrPoint)edition_.getFormeEnCours().getFormeEnCours(); - if (pointOrigine!=null) { - tfCoordX_.setText(formatter_.getXYFormatter().format(new Double(pointOrigine.x_))); - tfCoordY_.setText(formatter_.getXYFormatter().format(new Double(pointOrigine.y_))); - } - else { - tfCoordX_.setText(""); - tfCoordY_.setText(""); - } - } - } - - /** - * Cette m\xE9thode g\xE8re la mise \xE0 jour de l'interface lors de mouvement de la - * souris. - * - * @param _x - * : coordonn\xE9e x de la sourie - * @param _y - * coordonn\xE9e y de la sourie - */ - public void updateMove(double _x, double _y) { - if (edition_!=null&&edition_.getFormeEnCours()!=null&&edition_.getFormeEnCours().enCours()) { - GrPoint pointOrigine=(GrPoint)edition_.getFormeEnCours().getFormeEnCours(); - tfSizeX_.setText(formatter_.getXYFormatter().format(new Double(Math.abs(_x-pointOrigine.x_)))); - tfSizeY_.setText(formatter_.getXYFormatter().format(new Double(Math.abs(_y-pointOrigine.y_)))); - userSizeX_=false; - userSizeY_=false; - } - } - - /** - * Si une largeur ou une hauteur est donn\xE9 par l'utilisateur, finir le - * rectangle avec celle-ci, sinon ne fait rien. - */ - private void buildRectangle() { - if (edition_!=null&&edition_.getFormeEnCours()!=null&&edition_.getFormeEnCours().getFormeEnCours()!=null&&userSizeX_ - &&userSizeY_) { - double pointEndX, pointEndY, pointDebX, pointDebY; - - try { - pointDebX=((GrPoint)edition_.getFormeEnCours().getFormeEnCours()).x_; - pointDebY=((GrPoint)edition_.getFormeEnCours().getFormeEnCours()).y_; - pointEndX=Double.parseDouble(tfSizeX_.getText())+pointDebX; - pointEndY=Double.parseDouble(tfSizeY_.getText())+pointDebY; - } - catch (NumberFormatException ex) { - return; // Cas o\xF9 n'importe quoi est entr\xE9e dans les champs de saisie. - } - FormDelegateRectangle rec=((FormDelegateRectangle)edition_.getFormeEnCours()); - rec.setPointOrigine(new GrPoint(pointDebX, pointDebY, 0)); - rec.setPointFin(new GrPoint(pointEndX, pointEndY, 0)); - rec.buildRectangle(); - userSizeX_=false; - userSizeY_=false; - } - } - - /* - * (non-Javadoc) - * - * @see - * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) - */ - public void actionPerformed(ActionEvent e) { - if (edition_!=null&&edition_.getFormeEnCours()!=null&&edition_.getFormeEnCours().getFormeEnCours()!=null - &&edition_.getFormeEnCours().getForme()==DeForme.RECTANGLE) { - boolean error=false; - if (e.getSource()==tfCoordX_||e.getSource()==tfCoordY_) { - double x=0, y=0; - try { - x=Double.parseDouble(tfCoordX_.getText()); - } - catch (NumberFormatException ex) { - tfCoordX_.setText(""); - error=true; - } - try { - y=Double.parseDouble(tfCoordY_.getText()); - } - catch (NumberFormatException ex) { - tfCoordY_.setText(""); - error=true; - } - if (!error) - ((FormDelegateRectangle)edition_.getFormeEnCours()).setPointOrigine(new GrPoint(x, y, 0)); - } - else if (e.getSource()==tfNbPointX_||e.getSource()==tfNbPointY_) { - try { - ((FormDelegateRectangle)edition_.getFormeEnCours()).setNbPointsLargeur(Integer.parseInt(tfNbPointX_.getText())); - } - catch (NumberFormatException ex) { - tfNbPointX_.setText(""); - } - try { - ((FormDelegateRectangle)edition_.getFormeEnCours()).setNbPointsHauteur(Integer.parseInt(tfNbPointY_.getText())); - } - catch (NumberFormatException ex) { - tfNbPointY_.setText(""); - } - } - else if (e.getSource()==tfSizeY_) { - double coordX=0; - try { - coordX=Double.parseDouble(tfSizeX_.getText())+((GrPoint)edition_.getFormeEnCours().getFormeEnCours()).x_; - userSizeX_=true; - } - catch (NumberFormatException ex) { - tfSizeX_.setText(""); - } - ((FormDelegateRectangle)edition_.getFormeEnCours()).setPointFin(new GrPoint(coordX, Double.parseDouble(tfSizeY_.getText()) - +((GrPoint)edition_.getFormeEnCours().getFormeEnCours()).y_, 0)); - // Construction du rectangle avec les donn\xE9es du panel - buildRectangle(); - } - else if (e.getSource()==tfSizeX_) { - double coordY=0; - try { - coordY=Double.parseDouble(tfSizeY_.getText())+((GrPoint)edition_.getFormeEnCours().getFormeEnCours()).y_; - userSizeY_=true; - } - catch (NumberFormatException ex) { - tfSizeY_.setText(""); - } - ((FormDelegateRectangle)edition_.getFormeEnCours()).setPointFin(new GrPoint(Double.parseDouble(tfSizeX_.getText()) - +((GrPoint)edition_.getFormeEnCours().getFormeEnCours()).x_, coordY, 0)); - // Construction du rectangle avec les donn\xE9es du panel - buildRectangle(); - } - else { - // Mise a jour de l'interface graphique suite \xE0 une action de - // l'utilisateur - update(); - } - } - } - } - - private ValueModel tableModel_; - - BuButton btReprise_; - BuButton btSaveLine_; - - RectangleParameterGUI rectangleBuilderGUI_; - EllipseParameterGUI ellipseBuilderGUI_; - - ZEditionAttibutesContainer container_; - - ZCalqueEditionInteraction edition_; - - Map editorAttribute_; - - /** Type de g\xE9ometrie a \xE9diter */ - int typeForme_; - - EbliFormatterInterface formatter_; - - String initState_; - - BPaletteEdition palette_; - - protected GISAttributeInterface[] attributes_; - - protected JComponent[] editorComps_; - - /** - * @param _editor l'editeur parent - * @param _typeForme Le type de g\xE9om\xE9trie a \xE9diter. - */ - public ZEditorLigneBriseePanel(final ZEditorDefault _editor, int _typeForme) { - setLayout(new BuVerticalLayout(2, true, true)); - if (_editor.getTarget() != null && _editor.getTarget().getModelEditable().getGeomData() != null) { - attributes_ = _editor.getTarget().getModelEditable().getGeomData().getAttributes(); - } - palette_ = _editor.palette_; - edition_ = _editor.dessin_; - initState_ = _editor.getCurrentAction(); - if (btReprise_ == null) { - btReprise_ = new BuButton(); - btReprise_.setText(EbliLib.getS("Reprise")); - btReprise_.setEnabled(false); - btReprise_.addActionListener(this); - } - if (btSaveLine_ == null) { - btSaveLine_ = new BuButton(); - btSaveLine_.setText(EbliLib.getS("Ajouter la forme en cours")); - btSaveLine_.setIcon(BuResource.BU.getToolIcon("ajouter")); - btSaveLine_.setEnabled(false); - btSaveLine_.addActionListener(this); - btSaveLine_.setToolTipText("<html><body>" + EbliLib.getS("Ajouter la forme en cours") + "<br>" - + EbliLib.getS("Vous pouvez \xE9galement cliquer 2 fois pour ajouter la forme") + "<br>" - + EbliLib.getS("ou utiliser la touche 'Ctrl' et cliquer sur le dernier point de la forme")); - } - if (palette_.getSelectedButton() != null) { - btReprise_.setIcon(palette_.getSelectedButton().getIcon()); - } - add(btReprise_); - if (isParametersEditable()) { - add(btSaveLine_); - } - updateFeaturePanel(); - if (tableModel_ != null) { - tableModel_.updateAtomic(); - } - typeForme_=_typeForme; - addParametersPanel(); - - formatter_ = _editor.getXYFormatter(); - } - - /** - * Ajoute le panneau pour pr\xE9ciser les parametres de g\xE9om\xE9trie. - */ - private void addParametersPanel() { - FuLog.trace("Type de g\xE9om\xE9trie en cours: "+typeForme_); - if (!isParametersEditable()) return; - - if (typeForme_==DeForme.LIGNE_BRISEE || - typeForme_==DeForme.POLYGONE || typeForme_==DeForme.MULTI_POINT) - add(getPolyParametersPanel()); - else if(typeForme_==DeForme.RECTANGLE){ - add(getRectangleParametersPanel()); - } - else if (typeForme_==DeForme.ELLIPSE) - add(getEllipseParametersPanel()); - } - - /** - * - * @return un panneau de propri\xE9t\xE9s modifiables lors de la cr\xE9ation d'une ellipse. - */ - private JPanel getEllipseParametersPanel(){ - ellipseBuilderGUI_ = new EllipseParameterGUI(); - return ellipseBuilderGUI_; - } - - /** - * @return un panneau de propri\xE9t\xE9s modifiables lors de la cr\xE9ation d'un - * rectangle. - */ - private JPanel getRectangleParametersPanel() { - rectangleBuilderGUI_ = new RectangleParameterGUI(); - return rectangleBuilderGUI_; - } - - /** - * @return un panneau de coordonn\xE9es modifiables lors de la cr\xE9ation d'une - * polyligne. - */ - private JPanel getPolyParametersPanel() { - BuPanel pn=new BuPanel(); - pn.setLayout(new BorderLayout()); - pn.setBorder(new EmptyBorder(2, 2, 2, 2)); - tableModel_=createValueModel(); - final BuTable tb=new BuTable(tableModel_); - final BuScrollPane sp=new BuScrollPane(tb); - sp.setPreferredWidth(190); - sp.setPreferredHeight(60); - tb.getColumnModel().getColumn(0).setWidth(10); - pn.add(new BuLabel(EbliResource.EBLI.getString("Coordonn\xE9es")), BorderLayout.NORTH); - pn.add(sp, BorderLayout.CENTER); - return pn; - } - - protected final boolean isParametersEditable() { - if (edition_ == null) { - return false; - } - final ZCalqueEditionInteraction.FormDelegate delegate = edition_.getFormeEnCours(); - if (delegate != null) { - final int forme = delegate.getForme(); - if (forme == DeForme.RECTANGLE || forme == DeForme.LIGNE_BRISEE || forme == DeForme.POLYGONE || forme==DeForme.MULTI_POINT || forme==DeForme.ELLIPSE) { - return true; - } - } - return false; - } - - /** - * @return le modele a utiliser pour afficher les valeurs - */ - protected ValueModel createValueModel() { - if (isParametersEditable()) { - return new ValueModel(); - } - return null; - } - - protected void updateFeaturePanel() { - if (attributes_ != null && attributes_.length > 0) { - final BuPanel pnFeature = new BuPanel(); - pnFeature.setLayout(new BuGridLayout(2, 0, 0)); - final List editor = new ArrayList(attributes_.length); - if (editorAttribute_ == null) { - editorAttribute_ = new HashMap(); - } else { - editorAttribute_.clear(); - } - for (int i = 0; i < attributes_.length; i++) { - final GISAttributeInterface attr = attributes_[i]; - if (Fu.DEBUG && FuLog.isDebug()) { - FuLog.trace("EZM: add for " + attr.getName()); - } - if (attr.isEditable()) { - pnFeature.add(new BuLabel(attr.getName() + ':')); - final CtuluValueEditorI ed = attr.getEditor(); - final JComponent ci = ed.createEditorComponent(); - editorAttribute_.put(attr, ci); - editor.add(ci); - final Object defaultVal = attr.getDefaultValue(); - ed.setValue(defaultVal == null ? null : defaultVal.toString(), ci); - pnFeature.add(ci); - } - } - editorComps_ = (JComponent[]) editor.toArray(new JComponent[editor.size()]); - add(pnFeature); - } - } - - public void actionPerformed(final ActionEvent _e) { - if (_e.getSource() == btReprise_) { - edition_.setGele(false); - } else if (_e.getSource() == btSaveLine_) { - (edition_.getFormeEnCours()).addCurrentForme(); - } - } - - public void atomicChanged() { - if (tableModel_!=null) { - tableModel_.updateAtomic(); - } - boolean enable=false; - if (!edition_.isGele() - &&edition_.getFormeEnCours()!=null - &&edition_.getFormeEnCours().getFormeEnCours()!=null - &&(edition_.getFormeEnCours().getForme()==DeForme.POLYGONE||edition_.getFormeEnCours().getForme()==DeForme.LIGNE_BRISEE||edition_ - .getFormeEnCours().getForme()==DeForme.MULTI_POINT)) { - final int nb=((GrPolyligne)edition_.getFormeEnCours().getFormeEnCours()).nombre(); - if (edition_.getFormeEnCours().getForme()==DeForme.POLYGONE) { - enable=nb>=3; - } - else if (edition_.getFormeEnCours().getForme()==DeForme.LIGNE_BRISEE) { - enable=nb>=2; - } - else { - enable=nb>=1; - } - - } - else if (!edition_.isGele()&&edition_.getFormeEnCours()!=null&&edition_.getFormeEnCours().getFormeEnCours()!=null - &&edition_.getFormeEnCours().getForme()==DeForme.RECTANGLE && rectangleBuilderGUI_!=null) { - rectangleBuilderGUI_.update(); - }else if (!edition_.isGele()&&edition_.getFormeEnCours()!=null&&edition_.getFormeEnCours().getFormeEnCours()!=null - &&edition_.getFormeEnCours().getForme()==DeForme.ELLIPSE&&ellipseBuilderGUI_!=null) { - ellipseBuilderGUI_.update(); - } - btSaveLine_.setEnabled(enable); - } - - public void calqueInteractionChanged() { - btReprise_.setEnabled(edition_.isGele()); - if (palette_.getSelectedButton() != null) { - btReprise_.setIcon(palette_.getSelectedButton().getIcon()); - } - atomicChanged(); - } - - public void close() { - btReprise_ = null; - } - - public void editionStopped() { - btSaveLine_.setEnabled(false); - } - - public ZEditionAttibutesContainer getAttributeContainer() { - if (container_ == null || attributes_ != null) { - container_ = new ZEditionAttibutesContainer(attributes_); - container_.setCreator(this); - } - return container_; - } - - public JComponent getComponent() { - return this; - } - - public Object getData(final GISAttributeInterface _attr) { - if (editorComps_ == null) { - if (Fu.DEBUG && FuLog.isDebug()) { - FuLog.trace("EZM: " + getClass().getName() + " no component"); - } - return null; - } - final JComponent c = (JComponent) editorAttribute_.get(_attr); - if (c != null) { - if (Fu.DEBUG && FuLog.isDebug()) { - FuLog.trace("EZM: " + getClass().getName() + " component for attribute " + _attr.getName() + " value= " - + _attr.getEditor().getValue(c)); - - } - return _attr.getEditor().getValue(c); - } - if (Fu.DEBUG && FuLog.isDebug()) { - FuLog.trace("EZM: " + getClass().getName() + " NO component for attribute " + _attr.getName()); - } - return null; - } - - public AbstractTableModel getTableModel() { - return tableModel_; - } - - public void objectAdded() { - atomicChanged(); - } - - public void targetChanged(final ZCalqueEditable _new) { - GISAttributeInterface[] newAtt = null; - if (_new != null && _new.getModelEditable() != null && _new.getModelEditable().getGeomData() != null) { - newAtt = _new.getModelEditable().getGeomData().getAttributes(); - } - if (!Arrays.equals(newAtt, attributes_)) { - attributes_ = newAtt; - container_ = null; - removeAll(); - updateFeaturePanel(); - if (tableModel_ != null) { - tableModel_.updateAtomicArrays(); - } - addParametersPanel(); - } - } - - /* - * (non-Javadoc) - * - * @see - * org.fudaa.ebli.calque.edition.ZEditorPanelInterface#pointMove - * (double, double) - */ - public void pointMove(double _x, double _y) { - if (edition_!=null&&edition_.getFormeEnCours()!=null) { - if (edition_.getFormeEnCours().getForme()==DeForme.RECTANGLE) - rectangleBuilderGUI_.updateMove(_x, _y); - if (edition_.getFormeEnCours().getForme()==DeForme.ELLIPSE) - ellipseBuilderGUI_.updateMove(_x, _y); - } - } -} +/* + * @creation 4 avr. 2005 + * @modification $Date: 2008-03-26 16:46:43 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.calque.edition; + +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; +import javax.swing.table.AbstractTableModel; + +import org.fudaa.ctulu.CtuluLibString; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gui.CtuluValueEditorI; +import org.fudaa.ebli.calque.dessin.DeForme; +import org.fudaa.ebli.calque.edition.ZCalqueEditionInteraction.FormDelegateEllipse; +import org.fudaa.ebli.calque.edition.ZCalqueEditionInteraction.FormDelegateRectangle; +import org.fudaa.ebli.commun.EbliFormatterInterface; +import org.fudaa.ebli.commun.EbliLib; +import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.geometrie.GrPolyligne; +import org.fudaa.ebli.ressource.EbliResource; + +import com.memoire.bu.BuButton; +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.BuTable; +import com.memoire.bu.BuTextField; +import com.memoire.bu.BuVerticalLayout; +import com.memoire.fu.Fu; +import com.memoire.fu.FuLog; + +/** + * Un panneau d'\xE9dition d'une ligne bris\xE9e qui s'affiche lorsque l'outil ligne bris\xE9e est s\xE9lectionn\xE9. + * Ce panneau est inclu dans le panneau des outils. + * + * @author Fred Deniger + * @version $Id: ZEditorLigneBriseePanel.java,v 1.21.4.3 2008-03-26 16:46:43 bmarchan Exp $ + */ +public class ZEditorLigneBriseePanel extends BuPanel implements ZEditionAttributesCreatorInterface, ZEditorPanelInterface, ActionListener { + + protected class ValueModel extends AbstractTableModel { + + GISAttributeInterface[] atomicAttr_; + + protected ValueModel() { + updateAtomicArrays(); + } + + protected void updateAtomic() { + super.fireTableDataChanged(); + } + + protected final void updateAtomicArrays() { + if (editorComps_ != null && editorAttribute_ != null && editorAttribute_.size() > 0) { + final List r = new ArrayList(editorAttribute_.size()); + for (final Iterator it = editorAttribute_.keySet().iterator(); it.hasNext();) { + final GISAttributeInterface att = (GISAttributeInterface) it.next(); + if (att.isAtomicValue()) { + r.add(att); + } + } + atomicAttr_ = new GISAttributeInterface[r.size()]; + r.toArray(atomicAttr_); + } + } + + public Class getColumnClass(final int _columnIndex) { + if (_columnIndex > 2) { + return atomicAttr_[_columnIndex - 3].getDataClass(); + } + return Double.class; + } + + public int getColumnCount() { + return 3 + (atomicAttr_ == null ? 0 : atomicAttr_.length); + } + + public String getColumnName(final int _column) { + if (_column == 0) { + return CtuluLibString.ESPACE; + } + if (_column == 1) { + return "X"; + } + if (_column == 2) { + return "Y"; + } + final int idxFeature = _column - 3; + if (atomicAttr_ != null) { + return atomicAttr_[idxFeature].getName(); + } + return super.getColumnName(_column); + } + + public int getRowCount() { + final ZCalqueEditionInteraction.FormDelegate forme = edition_.getFormeEnCours(); + if (!forme.enCours()) { + return 0; + } + if (forme.getForme() == DeForme.RECTANGLE) { + return 1; + } + return forme.enCours() ? ((GrPolyligne) forme.getFormeEnCours()).nombre() : 0; + } + + public Object getValueAt(final int _rowIndex, final int _columnIndex) { + if (_columnIndex == 0) { + return CtuluLibString.getString(_rowIndex + 1); + } + final ZCalqueEditionInteraction.FormDelegate forme = edition_.getFormeEnCours(); + if (!forme.enCours()) { + return CtuluLibString.EMPTY_STRING; + } + final boolean isRect = forme.getForme() == DeForme.RECTANGLE; + GrPolyligne o = null; + GrPoint init = null; + if (isRect) { + init = (GrPoint) forme.getFormeEnCours(); + } else { + o = (GrPolyligne) forme.getFormeEnCours(); + } + if (o != null) { + if (_columnIndex == 1) { + if (init == null) { + return formatter_.getXYFormatter().format(o.sommets_.renvoieX(_rowIndex)); + } + formatter_.getXYFormatter().format(init.x_); + } else if (_columnIndex == 2) { + if (init == null) { + return formatter_.getXYFormatter().format(o.sommets_.renvoieY(_rowIndex)); + } + formatter_.getXYFormatter().format(init.y_); + } else if (atomicAttr_ != null) { + final int featureIdx = _columnIndex - 3; + if (featureIdx >= 0 && attributes_ != null && attributes_.length > 0) { + return forme.getData().getValue(atomicAttr_[featureIdx], _rowIndex); + } + + } + } + return null; + } + + public boolean isCellEditable(final int _rowIndex, final int _columnIndex) { + return _columnIndex > 0; + } + + public void setValueAt(final Object _value, final int _rowIndex, final int _columnIndex) { + if (_value == null) return; + final ZCalqueEditionInteraction.FormDelegate forme = edition_.getFormeEnCours(); + final boolean isRect = forme.getForme() == DeForme.RECTANGLE; + GrPolyligne o = null; + GrPoint init = null; + if (isRect) { + init = (GrPoint) forme.getFormeEnCours(); + } else { + o = (GrPolyligne) forme.getFormeEnCours(); + } + if (o != null && o.sommets_ != null) { + if (_columnIndex == 1) { + if (init == null) { + o.sommets_.setX(Double.parseDouble(_value.toString()), _rowIndex); + } else { + init.x_ = Double.parseDouble(_value.toString()); + } + edition_.repaint(); + + } else if (_columnIndex == 2) { + if (init == null) { + o.sommets_.setY(Double.parseDouble(_value.toString()), _rowIndex); + } else { + init.y_ = Double.parseDouble(_value.toString()); + + } + edition_.repaint(); + + } else if (atomicAttr_ != null) { + forme.getData().setValue(atomicAttr_[_columnIndex - 3], _rowIndex, _value); + } + } + super.fireTableDataChanged(); + } + + } + + /** + * Interface graphique permettant de g\xE9rer les propri\xE9t\xE9s de l'ellipse lors de + * sa construction + * + * @author Emmanuel Martin + */ + protected class EllipseBuilderGUI extends BuPanel implements ActionListener { + + private BuTextField tfCoordX_; + private BuTextField tfCoordY_; + private BuTextField tfRayonX_; + private BuTextField tfRayonY_; + private BuTextField tfNbPoints_; + private String nbPointsDefaultValue_; + + public EllipseBuilderGUI() { + super(); + int hauteur=20; + in... [truncated message content] |
From: <emm...@us...> - 2008-09-30 16:14:33
|
Revision: 4011 http://fudaa.svn.sourceforge.net/fudaa/?rev=4011&view=rev Author: emmanuel_martin Date: 2008-09-30 16:14:11 +0000 (Tue, 30 Sep 2008) Log Message: ----------- Commit de test sur le comportement de la boite d'edition. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java 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/BPaletteEdition.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 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-09-30 14:22:41 UTC (rev 4010) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java 2008-09-30 16:14:11 UTC (rev 4011) @@ -14,27 +14,22 @@ import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map.Entry; import javax.swing.Action; import javax.swing.JComponent; import javax.swing.JMenu; import javax.swing.JPopupMenu; import javax.swing.KeyStroke; -import javax.swing.event.TreeModelEvent; -import javax.swing.event.TreeModelListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; -import com.memoire.bu.BuSeparator; -import com.memoire.fu.Fu; -import com.memoire.fu.FuLog; - import org.fudaa.ctulu.CtuluLibArray; import org.fudaa.ctulu.CtuluLibMessage; import org.fudaa.ctulu.CtuluLibString; import org.fudaa.ctulu.CtuluUI; - import org.fudaa.ebli.calque.action.CalqueActionInteraction; import org.fudaa.ebli.calque.action.CalqueActionTable; import org.fudaa.ebli.calque.action.CalqueSelectionAction; @@ -54,6 +49,10 @@ import org.fudaa.ebli.repere.ZTransformationDomaine; import org.fudaa.ebli.ressource.EbliResource; +import com.memoire.bu.BuSeparator; +import com.memoire.fu.Fu; +import com.memoire.fu.FuLog; + /** * Un controleur des actions du panneau d'affichage 2D des calques. Il gere en particulier * les actions de navigation, de selection. Il g\xE8re \xE9galement les actions exclusives. Une action @@ -68,6 +67,12 @@ class CalqueInteractionListener implements PropertyChangeListener { + private HashMap<String, List<PropertyChangeListener>> listeners_; + + public CalqueInteractionListener(){ + listeners_=new HashMap<String, List<PropertyChangeListener>>(); + } + public void propertyChange(final PropertyChangeEvent _evt) { final BCalqueInteraction c = (BCalqueInteraction) _evt.getSource(); if (c.isGele()) { @@ -75,7 +80,49 @@ } else { setCalqueInteractionActif(c); } + firePropertyChange(_evt.getSource(), _evt.getPropertyName(), _evt.getOldValue(), _evt.getNewValue()); } + + // Gestion des properties listeners + + public void addPropertyChangeListener(PropertyChangeListener listener) { + if (listener!=null) { + if (!listeners_.containsKey("all")) + listeners_.put("all", new ArrayList<PropertyChangeListener>()); + listeners_.get("all").add(listener); + } + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + if (listener!=null) + for (Entry<String, List<PropertyChangeListener>> element : listeners_.entrySet()){ + listeners_.get(element.getKey()).remove(listener); + if (listeners_.get(element.getKey()).size()==0) + listeners_.remove(element.getKey()); + } + } + + public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + if (listener!=null) + if (!listeners_.containsKey(propertyName)) + listeners_.put(propertyName, new ArrayList<PropertyChangeListener>()); + listeners_.get(propertyName).add(listener); + + } + + public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + if (listener!=null&&listeners_.containsKey(propertyName)) { + listeners_.get(propertyName).remove(listener); + if (listeners_.get(propertyName).size()==0) + listeners_.remove(propertyName); + } + } + + protected void firePropertyChange(Object _source, String _propertyName, Object _oldValue, Object _newValue) { + PropertyChangeEvent event=new PropertyChangeEvent(_source, _propertyName, _oldValue, _newValue); + for (int i=0; i<listeners_.get(_propertyName).size(); i++) + listeners_.get(_propertyName).get(i).propertyChange(event); + } } /** @@ -423,6 +470,10 @@ _b.addPropertyChangeListener("gele", interactionListener_); } + public BCalqueInteraction getCalqueInteraction(String name){ + return (BCalqueInteraction) cqAdmin_.getCalqueParNom(name); + } + public ZCalqueSondeInteraction addCalqueSondeInteraction() { ZCalqueSondeInteraction r = getCalqueSondeInteraction(); if (r == null) { @@ -713,4 +764,25 @@ public ZEbliCalquesPanel getPn() { return pn_; } + + // Gestion des properties listeners + public void addPropertyChangeListener(PropertyChangeListener listener) { + interactionListener_.addPropertyChangeListener(listener); + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + interactionListener_.removePropertyChangeListener(listener); + } + + public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + interactionListener_.addPropertyChangeListener(propertyName, listener); + } + + public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + interactionListener_.removePropertyChangeListener(propertyName, listener); + } + + protected void firePropertyChange(Object _source, String _propertyName, Object _oldValue, Object _newValue) { + interactionListener_.firePropertyChange(_source,_propertyName, _oldValue, _newValue); + } } 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-09-30 14:22:41 UTC (rev 4010) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java 2008-09-30 16:14:11 UTC (rev 4011) @@ -7,12 +7,18 @@ */ package org.fudaa.ebli.calque.action; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.event.TreeSelectionEvent; import javax.swing.tree.TreeSelectionModel; +import org.fudaa.ebli.calque.BCalqueInteraction; import org.fudaa.ebli.calque.ZScene; import org.fudaa.ebli.calque.edition.BPaletteEdition; import org.fudaa.ebli.calque.edition.ZCalqueEditable; -import org.fudaa.ebli.calque.edition.ZEditorInterface; +import org.fudaa.ebli.calque.edition.ZCalqueEditionInteraction; +import org.fudaa.ebli.calque.edition.ZEditorDefault; import org.fudaa.ebli.commun.BPalettePanelInterface; import org.fudaa.ebli.commun.EbliActionPaletteTreeModel; import org.fudaa.ebli.ressource.EbliResource; @@ -20,50 +26,60 @@ /** * Une action pour afficher une palette d'outils GIS, reagissant au changement de calque selectionn\xE9. * @author Fred Deniger - * @version $Id: CalqueGISEditionAction.java,v 1.6.6.2 2008-05-13 12:10:47 bmarchan Exp $ + * @version $Id: CalqueGISEditionAction.java,v 1.6.6.2 2008-05-13 12:10:47 emartin Exp $ */ -public class CalqueGISEditionAction extends EbliActionPaletteTreeModel { +public class CalqueGISEditionAction extends EbliActionPaletteTreeModel implements PropertyChangeListener { - ZEditorInterface editor_; - ZScene scene_; + private ZEditorDefault editor_; + private ZScene scene_; + private boolean hide_; // Vrai si le panel d'\xE9dition est ferm\xE9. + // Calques utilis\xE9 dans cette action + private BCalqueInteraction calqueZoom_; // Calque ne fermant pas l'edition + private BCalqueInteraction calqueDeplacementVue_; // Calque ne fermant pas l'edition + private ZCalqueEditionInteraction calqueEdition_; // Le calque d'\xE9dition -// public final ZEditorInterface getEditor() { -// return editor_; -// } - /** * @param _editor l'editeur */ public final void setScene(final ZScene _scene) { scene_ = _scene; -// if (editor_ != null) { -// editor_.setDesktop(desktop_); -// } } /** * @param _m l'arbre des calques */ - public CalqueGISEditionAction(final TreeSelectionModel _m, final ZEditorInterface _editor, ZScene _scene) { + public CalqueGISEditionAction(final TreeSelectionModel _m, final ZEditorDefault _editor, ZScene _scene) { super(EbliResource.EBLI.getString("Edition dessin"), EbliResource.EBLI.getToolIcon("draw-palette"), "PALETTE_EDTION", _m); + hide_ = true; editor_=_editor; + calqueZoom_ = editor_.getPanel().getController().getCalqueInteraction("cqAGRANDIR"); + calqueDeplacementVue_ = editor_.getPanel().getController().getCalqueInteraction("cqDEPLACEMENT_VUE-I"); + editor_.getPanel().getController().addPropertyChangeListener("gele", this); setScene(_scene); setEnabled(isTargetValid(null)); setResizable(true); -// setEnabled(editor_ != null && editor_.isEditable(target_)); + target_ = (target_ instanceof ZCalqueEditable)?target_:null; } protected boolean isTargetValid(final Object _o) { return (scene_!=null && (!scene_.isRestrictedToCalqueActif() || scene_.isCalqueActifEditable())); -// return editor_ != null && editor_.isEditable(_o); } /** + * D\xE9active le panel. + */ + private void unactivePanel() { + if(calqueEdition_!=null) + calqueEdition_.cancelEdition(); + if(palette_!=null) + ((BPaletteEdition)palette_).resetPalette(); + } + + /** * Le calque target, c'est \xE0 dire le calque actif. */ protected void setTarget(final Object _o) { final Object newTarget=(_o instanceof ZCalqueEditable)?_o:null; -// final Object newTarget = isTargetValid(_o) ? _o : null; if (target_ != newTarget) { target_ = newTarget; if (isSelected()) { @@ -78,6 +94,25 @@ } } + /* (non-Javadoc) + * @see org.fudaa.ebli.commun.EbliActionPaletteAbstract#changeAction() + */ + @Override + public void changeAction() { + super.changeAction(); + hide_ = !hide_; + if(hide_){ + unactivePanel(); + // Gele du calque d'edition + if(calqueEdition_!=null) + editor_.getPanel().unsetCalqueInteractionActif(calqueEdition_); + } + else + // R\xE9cup\xE9ration du calque d'edition + if(calqueEdition_==null) + calqueEdition_ = editor_.buildCalqueDessin(""); + } + public void updateBeforeShow() { if (palette_ != null) { if (editor_ == null) { @@ -93,4 +128,24 @@ protected BPalettePanelInterface buildPaletteContent() { return new BPaletteEdition(); } + + /** + * Appel\xE9e quand il y a un changement de selection dans l'arbre des calques. + */ + public void valueChanged(final TreeSelectionEvent _e) { + unactivePanel(); + setTarget(getTarget((TreeSelectionModel) _e.getSource())); + } + + /* (non-Javadoc) + * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) + */ + public void propertyChange(PropertyChangeEvent _evt) { + // Cas un autre calque que celui du zoom, du deplacement de vue et d'edition + // est d\xE9gel\xE9 donc on ferme le pannel d'edition si il \xE9tait ouvert. + if (_evt.getSource()!=calqueZoom_&&_evt.getSource()!=calqueDeplacementVue_&&_evt.getSource()!=calqueEdition_ + &&!((Boolean)_evt.getNewValue()).booleanValue()&&palette_!=null&&((BPaletteEdition)palette_).isEditionOnGoing()) { + unactivePanel(); + } + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java 2008-09-30 14:22:41 UTC (rev 4010) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java 2008-09-30 16:14:11 UTC (rev 4011) @@ -311,14 +311,54 @@ final static String ATOM_ACTION = "MODE_ATOME"; /** + * Envoie les commandes au receveur suite \xE0 un click sur un bouton. + */ + public void actionPerformed(final ActionEvent _e) { + sendCommand(_e.getActionCommand()); + } + + /** + * Reset la palette : ferme le panel de construction de forme en cours. + */ + public void resetPalette(){ + for(int i=0;i<globalButtons_.size();i++){ + if(globalButtons_.get(i)!=null){ + AbstractButton button = (AbstractButton)globalButtons_.get(i); + if(button.isSelected()){ + button.setSelected(false); + sendCommand(button.getActionCommand()); + } + } + } + } + + /** + * Retourne vrai si un des boutons de cr\xE9ation de forme est actif. + */ + public boolean isEditionOnGoing(){ + boolean actif = false; + int i=0; + while(!actif&&i<globalButtons_.size()){ + if(globalButtons_.get(i)!=null){ + AbstractButton button = (AbstractButton)globalButtons_.get(i); + if(button.isSelected()&&button.getActionCommand().matches("GLOBAL_ADD_[a-zA-Z0-9]*")){ + actif = true; + } + } + i++; + } + return actif; + } + + /** * Envoie les commandes au receveur. */ - public void actionPerformed(final ActionEvent _e) { + private void sendCommand(String _command){ if (target_ != null) { - target_.doAction(_e.getActionCommand(), this); + target_.doAction(_command, this); } } - + /** * Verifie que les boutons coch\xE9s soient activ\xE9s. */ 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-09-30 14:22:41 UTC (rev 4010) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2008-09-30 16:14:11 UTC (rev 4011) @@ -96,7 +96,7 @@ ZCalqueEditionInteraction dessin_; protected ZEditorPanelInterface editorPanel_; - + CtuluCommandManager mng_; protected ZSceneEditor sceneEditor_=null; @@ -226,6 +226,10 @@ } } + public ZCalqueEditionInteraction getCalqueDessin(){ + return dessin_; + } + private boolean isStateGlobalMove() { return "GLOBAL_MOVE".equals(state_); } @@ -385,20 +389,18 @@ * @param _com la commande * @return le calque de dessin */ - protected final ZCalqueEditionInteraction buildCalqueDessin(final String _com) { + public final ZCalqueEditionInteraction buildCalqueDessin(final String _com) { int forme=getForme(); - if (forme >= 0) { - if (dessin_ == null) { - dessin_ = new ZCalqueEditionInteraction(this); - panel_.getVueCalque().addKeyListener(dessin_); - dessin_.setName("cqInteractifDessin"); - panel_.addCalqueInteraction(dessin_); - dessin_.addPropertyChangeListener("gele", this); - } - dessin_.setTypeForme(forme); - return dessin_; + if (dessin_==null) { + dessin_=new ZCalqueEditionInteraction(this); + panel_.getVueCalque().addKeyListener(dessin_); + dessin_.setName("cqInteractifDessin"); + panel_.addCalqueInteraction(dessin_); + dessin_.setGele(true); + dessin_.addPropertyChangeListener("gele", this); } - return null; + dessin_.setTypeForme(forme); + return dessin_; } /** @@ -470,7 +472,7 @@ } public boolean cancelEdition() { - if (dessin_ != null && !dessin_.isGele() && dessin_.isEnCours()) { + if (dessin_ != null && dessin_.isEnCours()) { dessin_.cancelEdition(); return true; } @@ -494,7 +496,6 @@ changeState(_com); } } - } public ZScene getSupport() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-10-03 10:57:18
|
Revision: 4026 http://fudaa.svn.sourceforge.net/fudaa/?rev=4026&view=rev Author: emmanuel_martin Date: 2008-10-03 10:57:09 +0000 (Fri, 03 Oct 2008) Log Message: ----------- Am?\195?\169lioration du comportement de la boite d'edition. 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/BPaletteEdition.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-02 18:32:19 UTC (rev 4025) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java 2008-10-03 10:57:09 UTC (rev 4026) @@ -77,6 +77,13 @@ ((BPaletteEdition)palette_).resetPalette(); } + private void unactivePaletteCreation(){ + if(calqueEdition_!=null) + calqueEdition_.cancelEdition(); + if(palette_!=null) + ((BPaletteEdition)palette_).resetPaletteCreation(); + } + /** * Le calque target, c'est \xE0 dire le calque actif. */ @@ -137,7 +144,7 @@ * Appel\xE9e quand il y a un changement de selection dans l'arbre des calques. */ public void valueChanged(final TreeSelectionEvent _e) { - unactivePanel(); + unactivePaletteCreation(); if(editor_.getPanel().getController().getCqSelectionI()!=null) editor_.getPanel().getController().getCqSelectionI().setGele(false); setTarget(getTarget((TreeSelectionModel) _e.getSource())); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java 2008-10-02 18:32:19 UTC (rev 4025) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java 2008-10-03 10:57:09 UTC (rev 4026) @@ -319,6 +319,7 @@ /** * Reset la palette : ferme le panel de construction de forme en cours. + * et d\xE9active tout les autres bouton du panel */ public void resetPalette(){ for(int i=0;i<globalButtons_.size();i++){ @@ -333,6 +334,21 @@ } /** + * reset les boutons d'\xE9ditions du panel + */ + public void resetPaletteCreation() { + for(int i=0;i<globalButtons_.size();i++){ + if(globalButtons_.get(i)!=null){ + AbstractButton button = (AbstractButton)globalButtons_.get(i); + if(button.isSelected()&&button.getActionCommand().matches("GLOBAL_ADD_[a-zA-Z0-9]*")){ + button.setSelected(false); + sendCommand(button.getActionCommand()); + } + } + } + } + + /** * Retourne vrai si un des boutons de cr\xE9ation de forme est actif. */ public boolean isEditionOnGoing(){ @@ -469,6 +485,8 @@ * @param _target le nouveau receveur de commande */ public final void setTargetClient(final BPaletteEditionClientInterface _target) { + if(_target==null) + resetPalette(); target_ = _target; if (target_ == null) { setAllEnable(false); 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:39:14
|
Revision: 4086 http://fudaa.svn.sourceforge.net/fudaa/?rev=4086&view=rev Author: emmanuel_martin Date: 2008-10-21 09:05:18 +0000 (Tue, 21 Oct 2008) Log Message: ----------- correction d'un bug sur l'edition dans le prepro via le double click Modified Paths: -------------- 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/ZEditorDefault.java 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 2008-10-21 08:36:50 UTC (rev 4085) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java 2008-10-21 09:05:18 UTC (rev 4086) @@ -40,11 +40,10 @@ } protected boolean editionAsked() { -// if (getScene() != null) { - return editor_.edit()!=null; -// return true; -// } -// return false; + String message = editor_.edit(); + if(message!=null) + FuLog.trace("EBL : ZCalqueSelectionInteractionSimple : "+message); + return message!=null; } /** 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-10-21 08:36:50 UTC (rev 4085) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2008-10-21 09:05:18 UTC (rev 4086) @@ -725,7 +725,7 @@ ZCalqueAffichageDonneesInterface[] calques=panel_.getScene().getAllLayers(); ArrayList<ZCalqueAffichageDonneesInterface> claquesWithSelectedObjects=new ArrayList<ZCalqueAffichageDonneesInterface>(); for (int i=0; i<calques.length; i++) - if (!calques[i].isSelectionEmpty()&&calques[i] instanceof ZCalqueEditable) + if (!calques[i].isSelectionEmpty()) claquesWithSelectedObjects.add(calques[i]); // Verification du le nombre de calques contenant des selections if (claquesWithSelectedObjects.size()==0) @@ -734,27 +734,32 @@ ui_.warn("Information", "La selection dans plusieurs calques n'est pas g\xE9r\xE9e par la fen\xEAtre d'\xE9dition.", false); return EbliLib.getS("La selection dans plusieurs calques n'est pas g\xE9r\xE9e par la fen\xEAtre d'\xE9dition."); } - ZCalqueEditable calque=(ZCalqueEditable)claquesWithSelectedObjects.get(0); - - // G\xE9n\xE9ration d'une boite d'\xE9dition selon le type de selection et d'\xE9dition \\ - if (((ZCalqueEditable)calque).isAtomicMode()) - editVertexObject(calque); - else if (calque.isOnlyOneObjectSelected()) - // Une seule g\xE9om\xE9trie est \xE0 \xE9diter - editSingleObject(calque); + if (!(claquesWithSelectedObjects.get(0) instanceof ZCalqueEditable)) + // Calque n'impl\xE9mentant pas l'interface ZCalqueEditable, donc on le laisse g\xE9rer son \xE9dition. + claquesWithSelectedObjects.get(0).editSelected(); else { - // Plusieurs g\xE9om\xE9tries sont \xE0 \xE9diter - CtuluDialogPanel pn=null; - if (calque.getModelEditable().getGeomData() instanceof GISZoneCollectionPoint) - pn=GISGuiBuilder.buildFor((GISZoneCollectionPoint)calque.getModelEditable().getGeomData(), calque.getLayerSelection() - .getSelectedIndex(), getMng()); - else - pn=GISGuiBuilder.buildForGlobAtt(calque.getModelEditable().getGeomData(), calque.getLayerSelection().getSelectedIndex(), - getMng()); - if (pn==null) - getUi().message(calque.getTitle(), EbliLib.getS("Aucune donn\xE9e \xE0 \xE9diter"), true); - else - pn.afficheModale(getFrame(), calque.getTitle()); + ZCalqueEditable calque=(ZCalqueEditable)claquesWithSelectedObjects.get(0); + // G\xE9n\xE9ration d'une boite d'\xE9dition selon le type de selection et + // d'\xE9dition \\ + if (((ZCalqueEditable)calque).isAtomicMode()) + editVertexObject(calque); + else if (calque.isOnlyOneObjectSelected()) + // Une seule g\xE9om\xE9trie est \xE0 \xE9diter + editSingleObject(calque); + else { + // Plusieurs g\xE9om\xE9tries sont \xE0 \xE9diter + CtuluDialogPanel pn=null; + if (calque.getModelEditable().getGeomData() instanceof GISZoneCollectionPoint) + pn=GISGuiBuilder.buildFor((GISZoneCollectionPoint)calque.getModelEditable().getGeomData(), calque.getLayerSelection() + .getSelectedIndex(), getMng()); + else + pn=GISGuiBuilder.buildForGlobAtt(calque.getModelEditable().getGeomData(), calque.getLayerSelection().getSelectedIndex(), + getMng()); + if (pn==null) + getUi().message(calque.getTitle(), EbliLib.getS("Aucune donn\xE9e \xE0 \xE9diter"), true); + else + pn.afficheModale(getFrame(), calque.getTitle()); + } } return null; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-11-05 10:51:04
|
Revision: 4168 http://fudaa.svn.sourceforge.net/fudaa/?rev=4168&view=rev Author: bmarchan Date: 2008-11-05 10:50:53 +0000 (Wed, 05 Nov 2008) Log Message: ----------- Factorisation des ?\195?\169venements envoy?\195?\169s en cas de selection pour en limiter le nombre. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java 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 2008-11-05 10:36:07 UTC (rev 4167) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java 2008-11-05 10:50:53 UTC (rev 4168) @@ -53,9 +53,6 @@ if (internalGetScene().isRestrictedToCalqueActif() && internalGetScene().getCalqueActif() == null) { return; } - if (modificateur_.getModificateur() == EbliSelectionState.ACTION_REPLACE) { - internalGetScene().clearSelection(); - } if (mode_ == PONCTUEL || (mode_ == RECTANGLE && listePoints_.renvoie(0).distanceXY(listePoints_.renvoie(2))<4)) { final GrPoint pt = listePoints_.renvoie(0); 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 2008-11-05 10:36:07 UTC (rev 4167) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java 2008-11-05 10:50:53 UTC (rev 4168) @@ -23,6 +23,7 @@ import org.fudaa.ebli.calque.edition.ZCalqueEditable; import org.fudaa.ebli.commun.EbliActionInterface; 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; @@ -366,14 +367,21 @@ } /** - * Efface la selection du calque. + * Efface la selection de la scene. */ public void clearSelection() { - for (ZCalqueAffichageDonneesInterface cq : getTargetLayers()) cq.clearSelection(); + internalClearSelection(); fireSelectionEvent(); } /** + * Efface la selection sans envoyer d'evenement. + */ + private void internalClearSelection() { + for (ZCalqueAffichageDonneesInterface cq : getTargetLayers()) cq.clearSelection(); + } + + /** * Tout selectionner. */ public void selectAll() { @@ -424,7 +432,7 @@ } /** - * Permet de modifier la selection du calque \xE0 partir d'un selection ponctuelle. Le premier objet trouv\xE9 + * Permet de modifier la selection de la scene \xE0 partir d'un selection ponctuelle. Le premier objet trouv\xE9 * interrompt la s\xE9lection. * * @param _pointReel le point de selection en coordonnees reelles @@ -434,6 +442,10 @@ * @see ZCalqueSelectionInteractionAbstract */ public boolean changeSelection(GrPoint _pointReel, int _tolerancePixel, int _action) { + if (_action == EbliSelectionState.ACTION_REPLACE) { + internalClearSelection(); + } + boolean ret=false; for (ZCalqueAffichageDonneesInterface cq : getTargetLayers()) { if (cq.changeSelection(_pointReel, _tolerancePixel, _action)) { @@ -446,7 +458,7 @@ } /** - * Permet de modifier la selection du calque \xE0 partir d'un poly de selection. + * Permet de modifier la selection de la scene \xE0 partir d'un poly de selection. * * @param _p le polygone englobant en COORDONNEES REELS * @param _action l'action sur la selection (voir les action de ZCalqueSelectionInteraction) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-11-05 12:25:44
|
Revision: 4169 http://fudaa.svn.sourceforge.net/fudaa/?rev=4169&view=rev Author: bmarchan Date: 2008-11-05 12:25:28 +0000 (Wed, 05 Nov 2008) Log Message: ----------- Ajout d'une methode setSelection sur la scene. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java 2008-11-05 10:50:53 UTC (rev 4168) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java 2008-11-05 12:25:28 UTC (rev 4169) @@ -49,6 +49,12 @@ void selectAll(); /** + * Selectionne les objets d'indices donn\xE9es. + * @param _idx Les indices. + */ + boolean setSelection(int[] _idx); + + /** * Inverser la selection. */ void inverseSelection(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java 2008-11-05 10:50:53 UTC (rev 4168) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java 2008-11-05 12:25:28 UTC (rev 4169) @@ -134,6 +134,15 @@ return true; } + /** + * Selectionne les objets d'indice donn\xE9s. La toltalit\xE9 de l'objet doit \xEAtre selectionn\xE9e. + * @param _idx Les indices a selectionner. + * @return true si une selection a \xE9t\xE9 effectu\xE9e. + */ + public boolean setSelection(final int[] _idx) { + return false; + } + public boolean isSelectionEmpty() { return selection_ == null ? true : selection_.isEmpty(); } 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 2008-11-05 10:50:53 UTC (rev 4168) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java 2008-11-05 12:25:28 UTC (rev 4169) @@ -7,6 +7,7 @@ */ package org.fudaa.ebli.calque; +import gnu.trove.TIntArrayList; import gnu.trove.TIntObjectIterator; import java.awt.Graphics2D; @@ -397,6 +398,24 @@ fireSelectionEvent(); } + /** + * Selection d'indices de scene. + */ + public void setSelection(int[] _idx) { + TIntArrayList tb=new TIntArrayList(_idx); + int idecal=0; + int idx=0; + for (ZCalqueAffichageDonneesInterface cq : getTargetLayers()) { + int nb=cq.modeleDonnees().getNombre(); + tb.clear(); + while (idx<_idx.length && _idx[idx] < idecal+nb) { + tb.add(_idx[idx]-idecal); + idx++; + } + cq.setSelection(tb.toNativeArray()); + idecal+=nb; + } + } // boolean isEditable(); /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-11-05 16:29:37
|
Revision: 4175 http://fudaa.svn.sourceforge.net/fudaa/?rev=4175&view=rev Author: bmarchan Date: 2008-11-05 16:29:35 +0000 (Wed, 05 Nov 2008) Log Message: ----------- Passage par ZScene pour declenchement des ZSelectionEvent en cas de selectPrevious ou selectNext Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.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/edition/ZSceneEditor.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java 2008-11-05 16:12:55 UTC (rev 4174) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java 2008-11-05 16:29:35 UTC (rev 4175) @@ -1,7 +1,7 @@ /** * @file ZCalqueAffichageDonneesInterface.java * @creation 24 oct. 2003 - * @modification $Date: 2008-02-21 15:16:09 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -31,7 +31,7 @@ * pouvant etre une cible d'une palette de couleurs. * * @author deniger - * @version $Id: ZCalqueAffichageDonneesInterface.java,v 1.27.6.2 2008-02-21 15:16:09 bmarchan Exp $ + * @version $Id$ */ public interface ZCalqueAffichageDonneesInterface extends EbliFindableItem, BPalettePlageTarget, EbliTableInfoTarget, ZCalqueAffichageInterface { @@ -55,6 +55,19 @@ boolean setSelection(int[] _idx); /** + * Selectionne l'objet suivant de l'objet en cours. + * @return true si la selection a \xE9t\xE9 modifi\xE9e. + */ + public boolean selectNext(); + + + /** + * Selectionne l'objet suivant de l'objet en cours. + * @return true si la selection a \xE9t\xE9 modifi\xE9e. + */ + public boolean selectPrevious(); + + /** * Inverser la selection. */ void inverseSelection(); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java 2008-11-05 16:12:55 UTC (rev 4174) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java 2008-11-05 16:29:35 UTC (rev 4175) @@ -1,6 +1,6 @@ /* * @creation 24 oct. 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 */ @@ -17,7 +17,7 @@ /** * @author deniger - * @version $Id: ZCalqueAffichageDonneesMulti.java,v 1.15 2007-05-04 13:49:43 deniger Exp $ + * @version $Id$ */ public abstract class ZCalqueAffichageDonneesMulti extends ZCalqueAffichageDonneesAbstract { @@ -143,6 +143,14 @@ return false; } + public boolean selectPrevious() { + return false; + } + + public boolean selectNext() { + return false; + } + public boolean isSelectionEmpty() { return selection_ == null ? true : selection_.isEmpty(); } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id 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 2008-11-05 16:12:55 UTC (rev 4174) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java 2008-11-05 16:29:35 UTC (rev 4175) @@ -390,6 +390,24 @@ fireSelectionEvent(); } + public boolean selectNext() { + if (isSelectionEmpty()) return false; + int idx=getSelectionHelper().getUniqueSelectedIdx(); + ZCalqueAffichageDonneesInterface cq=getLayerForId(idx); + boolean b=cq.selectNext(); + if (b) fireSelectionEvent(); + return b; + } + + public boolean selectPrevious() { + if (isSelectionEmpty()) return false; + int idx=getSelectionHelper().getUniqueSelectedIdx(); + ZCalqueAffichageDonneesInterface cq=getLayerForId(idx); + boolean b=cq.selectPrevious(); + if (b) fireSelectionEvent(); + return b; + } + /** * Inverser la selection. */ Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZSceneEditor.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZSceneEditor.java 2008-11-05 16:12:55 UTC (rev 4174) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZSceneEditor.java 2008-11-05 16:29:35 UTC (rev 4175) @@ -156,19 +156,13 @@ * Selectionne l'objet suivant celui selectionn\xE9. */ public void selectNextObject() { - int idx=getScene().getSelectionHelper().getUniqueSelectedIdx(); - ZCalqueAffichageDonnees cq=(ZCalqueAffichageDonnees)getScene().getLayerForId(idx); - - cq.selectNext(); + scene_.selectNext(); } /** * Selectionne l'objet pr\xE9c\xE9dent celui selectionn\xE9. */ public void selectPreviousObject() { - int idx=getScene().getSelectionHelper().getUniqueSelectedIdx(); - ZCalqueAffichageDonnees cq=(ZCalqueAffichageDonnees)getScene().getLayerForId(idx); - - cq.selectPrevious(); + scene_.selectPrevious(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-11-20 13:31:45
|
Revision: 4229 http://fudaa.svn.sourceforge.net/fudaa/?rev=4229&view=rev Author: emmanuel_martin Date: 2008-11-20 13:31:40 +0000 (Thu, 20 Nov 2008) Log Message: ----------- modification du comportement de la boite de distance et correction de bug a propos des listeners de la tableau de visibilit?\195?\169. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowDistanceAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDistance.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowDistanceAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowDistanceAction.java 2008-11-20 13:21:24 UTC (rev 4228) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowDistanceAction.java 2008-11-20 13:31:40 UTC (rev 4229) @@ -27,7 +27,7 @@ * points. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class SceneShowDistanceAction extends EbliActionPaletteSpecAbstract implements PropertyChangeListener { @@ -75,8 +75,10 @@ // Cas un autre calque que celui du zoom, du deplacement de vue et d'edition // est d\xE9gel\xE9 donc on ferme le pannel d'edition si il \xE9tait ouvert. if (_evt.getSource()!=calqueZoom_&&_evt.getSource()!=calqueDeplacementVue_&&_evt.getSource()!=calqueDistance_ - &&!((Boolean)_evt.getNewValue()).booleanValue()) { + &&!((Boolean)_evt.getNewValue()).booleanValue()&&isSelected()) { calqueDistance_.cancelEdition(); + setSelected(false); + super.changeAction(); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDistance.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDistance.java 2008-11-20 13:21:24 UTC (rev 4228) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDistance.java 2008-11-20 13:31:40 UTC (rev 4229) @@ -30,7 +30,7 @@ /** * Palette affichant les informations de distances. * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class BPaletteDistance extends BuPanel implements ActionListener, BPalettePanelInterface, PropertyChangeListener { @@ -41,7 +41,7 @@ /** Le calque qui contient les informations de distance. */ protected ZCalqueDistanceInteraction calqueDistance_; /** Le bouton 'continuer'. */ - protected BuButton btContinuer_=new BuButton(EbliLib.getS("Continuer")); + protected BuButton btContinuer_=new BuButton(EbliLib.getS("Reprise")); protected EbliFormatterInterface formatter_; private ZEbliCalquesPanel calquesPanel_; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java 2008-11-20 13:21:24 UTC (rev 4228) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java 2008-11-20 13:31:40 UTC (rev 4229) @@ -1,6 +1,6 @@ /* * @creation 23 oct. 2008 - * @modification $Date:$ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail fud...@li... @@ -215,9 +215,11 @@ boolean selected=table_.getSelectionModel().isSelectedIndex(rowIndex); if(columnIndex==0){ rows_[rowIndex][columnIndex]=value; + listenSelection=false; fireTableDataChanged(); if(selected) table_.getSelectionModel().addSelectionInterval(rowIndex, rowIndex); + listenSelection=true; } else if(columnIndex==1){ if (rows_[rowIndex][columnIndex]!=value) { @@ -232,9 +234,11 @@ for (int i=rowIndex+1; i<rows_.length; i++) newRows[i-1]=rows_[i]; rows_=newRows; + listenSelection=false; fireTableDataChanged(); if (selected) table_.getSelectionModel().addSelectionInterval(rowIndex, rowIndex); + listenSelection=true; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |