From: <bma...@us...> - 2008-08-12 15:48:55
|
Revision: 3787 http://fudaa.svn.sourceforge.net/fudaa/?rev=3787&view=rev Author: bmarchan Date: 2008-08-12 15:48:58 +0000 (Tue, 12 Aug 2008) Log Message: ----------- CalqueFindCourbeTreeModel g?\195?\169n?\195?\169ralis?\195?\169 et renomm?\195?\169 en CalqueGISTreeModel Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGeometryVisitor.java branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindComponentPolygone.java branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilderFromTree.java Added Paths: ----------- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java Removed Paths: ------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindCourbeTreeModel.java Copied: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java (from rev 3783, branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindCourbeTreeModel.java) =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java (rev 0) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java 2008-08-12 15:48:58 UTC (rev 3787) @@ -0,0 +1,348 @@ +/* + * @creation 21 nov. 06 + * @modification $Date: 2007-05-04 13:49:46 $ + * @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; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.util.ArrayList; +import java.util.List; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JLabel; +import javax.swing.JTree; +import javax.swing.UIManager; +import javax.swing.border.Border; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.DefaultTreeSelectionModel; +import javax.swing.tree.TreeCellRenderer; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; + +import org.fudaa.ctulu.CtuluLib; +import org.fudaa.ctulu.CtuluLibArray; +import org.fudaa.ctulu.CtuluLibString; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeModelObjectInterface; +import org.fudaa.ctulu.gis.GISGeometry; +import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.ctulu.gis.GISVisitorChooser; +import org.fudaa.ctulu.gis.GISVisitorGeometryCollector; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ctulu.gui.CtuluCellRenderer; +import org.fudaa.ctulu.image.CtuluLibImage; +import org.fudaa.ebli.commun.EbliLib; +import org.fudaa.ebli.ressource.EbliResource; + +import com.vividsolutions.jts.geom.Geometry; + +/** + * Un TreeModel repr\xE9sentant les calques contenant des g\xE9om\xE9tries. Ces g\xE9om\xE9tries peuvent \xEAtre filtr\xE9es par type. + * Ce mod\xE8le est automatiquement mis a jour si une instance de l'arbre des calque lui est fourni. + * + * @author Fred Deniger, Bertrand Marchand + * @version $Id: CalqueFindCourbeTreeModel.java,v 1.5 2007-05-04 13:49:46 deniger Exp $ + */ +public class CalqueGISTreeModel extends DefaultTreeModel implements Observer { + + final BGroupeCalque rootLayer_; + LayerNode rootNode_; + final CalqueGeometryVisitor finder_ = new CalqueGeometryVisitor(); + GISVisitorChooser chooser_ = new GISVisitorChooser(); + + /** + * Le renderer pour l'arbre, gerant la non selection des calques si non autoris\xE9. + * @author Bertrand Marchand + */ + public static class CellRenderer extends JLabel implements TreeCellRenderer { + final Color selectedBackground_ = UIManager.getColor("Tree.selectionBackground"); + final Color selectedForground_ = UIManager.getColor("Tree.selectionForeground"); + final Border focusBorderColor_ = BorderFactory.createLineBorder(UIManager.getColor("Tree.selectionBorderColor"), 1); + final boolean onlyLineSelectable_; + + public CellRenderer(final boolean _onlyGeomSelectable) { + this.setOpaque(true); + setPreferredSize(new Dimension(120, 25)); + onlyLineSelectable_ = _onlyGeomSelectable; + } + + protected boolean isSelectable(final Object _value, final boolean _leaf) { + if (onlyLineSelectable_) { + if (!_leaf) { + return false; + } + final LayerNode node = (LayerNode) _value; + return node.idxGeom_ >= 0; + } + return true; + + } + + public Component getTreeCellRendererComponent(final JTree _tree, final Object _value, final boolean _selected, + final boolean _expanded, final boolean _leaf, final int _row, final boolean _hasFocus) { + this.setFont(_tree.getFont()); + setIcon(((LayerNode) _value).getIcon()); + setText(_value.toString()); + final boolean selectable = isSelectable(_value, _leaf); + if (_selected && selectable) { + setBackground(selectedBackground_); + setForeground(selectedForground_); + } else { + setBackground(_tree.getBackground()); + setForeground(_tree.getForeground()); + } + if (selectable) { + setToolTipText(getText()); + } else { + setToolTipText(getText() + ": " + CtuluLib.getS("Non s\xE9lectionnable")); + } + setBorder((selectable && _hasFocus) ? focusBorderColor_ : CtuluCellRenderer.BORDER_NO_FOCUS); + setEnabled(_tree.isEnabled()); + return this; + } + } + + /** + * Modele de selection de l'arbre, gerant la non selection des calques si non autoris\xE9. + * @author Bertrand Marchand + */ + public static class OnlyGeomTreeSelectionModel extends DefaultTreeSelectionModel { + + public void setSelectionPaths(final TreePath[] _paths) { + super.setSelectionPaths(getCorrectPaths(_paths)); + } + + public void addSelectionPaths(final TreePath[] _paths) { + super.addSelectionPaths(getCorrectPaths(_paths)); + } + + private TreePath[] getCorrectPaths(final TreePath[] _paths) { + TreePath[] paths = _paths; + if (!CtuluLibArray.isEmpty(_paths)) { + final List<TreePath> correctPath = new ArrayList<TreePath>(paths.length); + for (int i = 0; i < paths.length; i++) { + if (paths[i] != null && paths[i].getLastPathComponent() != null + && ((LayerNode) paths[i].getLastPathComponent()).idxGeom_ >= 0) { + correctPath.add(paths[i]); + } + } + if (correctPath.size() != paths.length) { + paths=correctPath.toArray(new TreePath[correctPath.size()]); + } + } + return paths; + } + + } + + /** + * Un noeud de l'arbre, customis\xE9 suivant le nom de la g\xE9om\xE9trie et son type. + * @author Bertrand Marchand + */ + public static class LayerNode extends DefaultMutableTreeNode { + + int idxGeom_ = -1; + String titre_; + final Icon icon_; + + public LayerNode(final BCalque _userObject) { + super(_userObject, true); + icon_ = CtuluLibImage.resize(_userObject, 16, 16); + } + + public LayerNode(final ZCalqueAffichageDonneesAbstract _userObject, final int _idx, final String _titre) { + super(_userObject, false); + idxGeom_ = _idx; + titre_ = _titre; + + if (_userObject instanceof ZCalqueMultiPoint) { + icon_ = EbliResource.EBLI.getIcon("draw-multipoint"); + } +// else if (_userObject instanceof ZCalquePoint) { +// icon_ = EbliResource.EBLI.getIcon("draw-add-pt"); +// } + else { + if (((ZCalqueLigneBrisee)_userObject).getModele().isGeometryFermee(_idx)) { + icon_=EbliResource.EBLI.getIcon("draw-polygon"); + } + else { + icon_=EbliResource.EBLI.getIcon("draw-polyline"); + } + } + } + + public String toString() { + if (titre_ != null) { + return titre_; + } + return ((BCalque) userObject).getTitle(); + } + + public Icon getIcon() { + return icon_; + } + + public int getIdxGeom() { + return idxGeom_; + } + + } + + /** + * Cr\xE9ation du modele a partir de la racine des calques. + */ + public CalqueGISTreeModel(final BArbreCalqueModel _model, final BGroupeCalque _root) { + super(new LayerNode(_root)); + rootNode_=(LayerNode)getRoot(); + rootLayer_ = _root; + if (_model != null) { + _model.getObservable().addObserver(this); + } + + buildTree(); + } + + public final void buildTree() { + rootNode_.removeAllChildren(); + addLayer(rootNode_, rootLayer_); + } + + protected boolean containsGeometries(final BCalque _cq) { + finder_.resetFound(); + _cq.apply(finder_); + return finder_.isFound(); + } + + /** + * Remplit la liste avec les geometries du noeud. + * @param _nd Le noeud. + * @param _dest La liste de destination. + */ + public void fillWithGeometries(LayerNode _nd, final List<Geometry> _dest) { + if (_nd.idxGeom_ >= 0) { + final ZModeleGeom md=(ZModeleGeom)((ZCalqueAffichageDonneesAbstract)_nd.getUserObject()).modeleDonnees(); + _dest.add(md.getGeomData().getGeometry(_nd.idxGeom_)); + } else if (((BCalque) _nd.getUserObject()).isGroupeCalque()) { + final BCalque[] cqs = ((BCalque) _nd.getUserObject()).getTousCalques(); + if (cqs != null) { + for (int i = cqs.length - 1; i >= 0; i--) { + fillWithLayerGeometries(_dest, cqs[i]); + } + } + + } else { + fillWithLayerGeometries(_dest, (BCalque) _nd.getUserObject()); + } + + } + + private void fillWithLayerGeometries(final List<Geometry> _dest, final BCalque _cq) { + if (_cq instanceof ZCalqueAffichageDonneesAbstract) { + final GISZoneCollection collec = ((ZModeleGeom)((ZCalqueAffichageDonneesAbstract)_cq).modeleDonnees()).getGeomData(); + final GISVisitorGeometryCollector visitor = new GISVisitorGeometryCollector(finder_.getMask()); + collec.accept(visitor); + _dest.addAll(visitor.getGeometries()); + } + } + + void addLayer(final LayerNode _parent, final BGroupeCalque _gc) { + final BCalque[] cq = _gc.getCalques(); + if (CtuluLibArray.isEmpty(cq)) { + return; + } + for (int i = 0; i < cq.length; i++) { + final LayerNode node = new LayerNode(cq[i]); + if (finder_.isMatching(cq[i])) { + _parent.add(node); + addGeometries(node, (ZCalqueAffichageDonneesAbstract) cq[i]); + } + else if (cq[i].isGroupeCalque() && containsGeometries(cq[i])) { + _parent.add(node); + addLayer(node, (BGroupeCalque) cq[i]); + } + } + } + + void addGeometries(final LayerNode _parent, final ZCalqueAffichageDonneesAbstract _cq) { + final GISZoneCollection collec = ((ZModeleGeom)_cq.modeleDonnees()).getGeomData(); + final GISAttributeModelObjectInterface nameAtt = (GISAttributeModelObjectInterface) collec.getModel(GISAttributeConstants.TITRE); + final int nb = collec.getNumGeometries(); + for (int i = 0; i < nb; i++) { + chooser_.clear(); + ((GISGeometry) collec.getGeometry(i)).accept(chooser_); + + boolean badd=false; + String name=null; + if (chooser_.isMultiPoint() && (finder_.getMask()&GISLib.MASK_MULTIPOINT)!=0) { + badd=true; + name="Multipoint {0}"; + } +// else if (chooser_.isPt() && (finder_.getMask()&GISLib.MASK_POINT)!=0) { +// badd=true; +// name="Point {0}"; +// } + else if (chooser_.isPolyligne() && (finder_.getMask()&GISLib.MASK_POLYLINE)!=0) { + badd=true; + name="Ligne ouverte {0}"; + } + else if (chooser_.isPolygone() && (finder_.getMask()&GISLib.MASK_POLYGONE)!=0) { + badd=true; + name="Ligne ferm\xE9e {0}"; + } + + if (badd) { + if (nameAtt!=null) + name=(String)nameAtt.getValue(i); + else + name=EbliLib.getS(name, CtuluLibString.getString(i+1)); + _parent.add(new LayerNode(_cq, i, name)); + } + } + } + + public void update(final Observable _o, final Object _arg) { + buildTree(); + } + + /** + * Filtre sur les g\xE9om\xE9tries. Par defaut, toutes g\xE9om\xE9tries. + */ + public void setMask(int _mask) { + finder_.setMask(_mask); + buildTree(); + } + + /** + * Creation d'une vue pour le modele. + */ + public JTree createView(final boolean _onlyGeomSelected, final boolean _multiSelection) { + final JTree tree = new JTree(this); + tree.setEditable(false); + tree.setShowsRootHandles(true); + tree.setExpandsSelectedPaths(true); + tree.setCellRenderer(new CellRenderer(_onlyGeomSelected)); + tree.setRootVisible(false); + tree.setFocusable(true); + if (_onlyGeomSelected) { + final TreeSelectionModel onlyGeomSelectionModel = new OnlyGeomTreeSelectionModel(); + tree.setSelectionModel(onlyGeomSelectionModel); + } + + if (_multiSelection) + tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); + else + tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); + + return tree; + } + +} Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java ___________________________________________________________________ Added: svn:mergeinfo + Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGeometryVisitor.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGeometryVisitor.java 2008-08-12 15:47:33 UTC (rev 3786) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGeometryVisitor.java 2008-08-12 15:48:58 UTC (rev 3787) @@ -52,19 +52,19 @@ * @return True si trouv\xE9. */ public boolean isMatching(final BCalque _cq) { - if (_cq instanceof ZCalquePoint && (mask_&GISLib.MASK_POINT)!=0) { - return ((ZCalquePoint) _cq).modeleDonnees().getNombre() > 0; + if (_cq instanceof ZCalqueMultiPoint && (mask_&GISLib.MASK_MULTIPOINT)!=0) { + return ((ZCalqueMultiPoint)_cq).modeleDonnees().getNombre() > 0; } - else if (_cq instanceof ZCalqueMultiPoint && (mask_&GISLib.MASK_MULTIPOINT)!=0) { - return ((ZCalqueMultiPoint) _cq).modeleDonnees().getNombre() > 0; - } +// else if (_cq instanceof ZCalquePoint && (mask_&GISLib.MASK_POINT)!=0) { +// return ((ZCalquePoint) _cq).modeleDonnees().getNombre() > 0; +// } else if (_cq instanceof ZCalqueLigneBrisee && (mask_&GISLib.MASK_POLYLINE)!=0) { boolean bok=((ZCalqueLigneBrisee) _cq).modeleDonnees().getNombre() > 0; - return bok && (!((ZCalqueLigneBrisee) _cq).containsPolygone()); + return bok && ((ZCalqueLigneBrisee)_cq).getModele().getNbLigneBrisee()!=0; } else if (_cq instanceof ZCalqueLigneBrisee && (mask_&GISLib.MASK_POLYGONE)!=0) { - boolean bok=((ZCalqueLigneBrisee) _cq).modeleDonnees().getNombre() > 0; - return bok && ((ZCalqueLigneBrisee) _cq).containsPolygone(); + boolean bok=((ZCalqueLigneBrisee)_cq).modeleDonnees().getNombre() > 0; + return bok && ((ZCalqueLigneBrisee)_cq).getModele().getNbPolygone()!=0; } return false; } Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindComponentPolygone.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindComponentPolygone.java 2008-08-12 15:47:33 UTC (rev 3786) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindComponentPolygone.java 2008-08-12 15:48:58 UTC (rev 3787) @@ -27,10 +27,12 @@ import com.memoire.bu.BuVerticalLayout; import org.fudaa.ctulu.CtuluLibString; +import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ebli.calque.BGroupeCalque; +import org.fudaa.ebli.calque.CalqueGISTreeModel; import org.fudaa.ebli.calque.ZEbliCalquesPanel; -import org.fudaa.ebli.calque.find.CalqueFindCourbeTreeModel.LayerNode; +import org.fudaa.ebli.calque.CalqueGISTreeModel.LayerNode; import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.find.EbliFindComponent; @@ -39,7 +41,7 @@ * @version $Id: CalqueFindComponentPolygone.java,v 1.2 2007-05-04 13:49:46 deniger Exp $ */ public class CalqueFindComponentPolygone implements EbliFindComponent { - private final CalqueFindCourbeTreeModel model_; + private final CalqueGISTreeModel model_; TreeSelectionModel selection_; JPanel pn_; BuComboBox cb_; @@ -49,8 +51,8 @@ } public CalqueFindComponentPolygone(final BGroupeCalque _cqRoot) { - model_ = new CalqueFindCourbeTreeModel(null, _cqRoot); - model_.setOnlyLigneFerme(true); + model_ = new CalqueGISTreeModel(null, _cqRoot); + model_.setMask(GISLib.MASK_POLYGONE); cb_ = new BuComboBox(new String[] { EbliLib.getS("Tous les sommets sont s\xE9lectionn\xE9s"), EbliLib.getS("Au moins un sommet est s\xE9lectionn\xE9"), EbliLib.getS("le barycentre est s\xE9lectionn\xE9"), @@ -61,7 +63,7 @@ if (pn_ == null) { pn_ = new BuPanel(new BuBorderLayout(0, 5)); pn_.setBorder(BuBorders.EMPTY3333); - final JTree tree = CalqueFindCourbeTreeModel.createCalqueTree(model_, false); + final JTree tree = model_.createView(false, true); selection_ = tree.getSelectionModel(); final BuScrollPane sc = new BuScrollPane(tree); sc.setPreferredHeight(80); @@ -86,7 +88,7 @@ final List res = new ArrayList(20); final TreePath[] paths = selection_.getSelectionPaths(); for (int i = paths.length - 1; i >= 0; i--) { - ((LayerNode) paths[i].getLastPathComponent()).fillWithPolygone(res); + model_.fillWithGeometries(((LayerNode) paths[i].getLastPathComponent()), res); } return res.toArray(new LinearRing[res.size()]); } Deleted: branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindCourbeTreeModel.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindCourbeTreeModel.java 2008-08-12 15:47:33 UTC (rev 3786) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindCourbeTreeModel.java 2008-08-12 15:48:58 UTC (rev 3787) @@ -1,331 +0,0 @@ -/* - * @creation 21 nov. 06 - * @modification $Date: 2007-05-04 13:49:46 $ - * @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.find; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.util.ArrayList; -import java.util.List; -import java.util.Observable; -import java.util.Observer; - -import javax.swing.BorderFactory; -import javax.swing.Icon; -import javax.swing.JLabel; -import javax.swing.JTree; -import javax.swing.UIManager; -import javax.swing.border.Border; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.DefaultTreeSelectionModel; -import javax.swing.tree.TreeCellRenderer; -import javax.swing.tree.TreeModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; - -import org.fudaa.ctulu.CtuluLib; -import org.fudaa.ctulu.CtuluLibArray; -import org.fudaa.ctulu.CtuluLibString; -import org.fudaa.ctulu.gis.GISAttributeConstants; -import org.fudaa.ctulu.gis.GISAttributeModelObjectInterface; -import org.fudaa.ctulu.gis.GISGeometry; -import org.fudaa.ctulu.gis.GISLib; -import org.fudaa.ctulu.gis.GISVisitorChooser; -import org.fudaa.ctulu.gis.GISVisitorLigneCollector; -import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; -import org.fudaa.ctulu.gui.CtuluCellRenderer; -import org.fudaa.ctulu.image.CtuluLibImage; - -import org.fudaa.ebli.calque.BArbreCalqueModel; -import org.fudaa.ebli.calque.BCalque; -import org.fudaa.ebli.calque.BGroupeCalque; -import org.fudaa.ebli.calque.CalqueGeometryVisitor; -import org.fudaa.ebli.calque.ZCalqueLigneBrisee; -import org.fudaa.ebli.commun.EbliLib; -import org.fudaa.ebli.ressource.EbliResource; - -/** - * Une classe permettant d'avoir un TreeModel repr\xE9sentant les calques contentant des lignes bris\xE9es et les lignes - * bris\xE9es Il est possible d'avoir que les calques contenant des lignes ferm\xE9es. Ce mod\xE8le est automatiquement mis a - * jour si une instance de l'arbre des calque lui est fourni. - * - * @author fred deniger - * @version $Id: CalqueFindCourbeTreeModel.java,v 1.5 2007-05-04 13:49:46 deniger Exp $ - */ -public class CalqueFindCourbeTreeModel implements Observer { - - final BGroupeCalque rootLayer_; - LayerNode rootNode_; - boolean onlyLigneFerme_; - final CalqueGeometryVisitor finder_ = new CalqueGeometryVisitor(GISLib.MASK_POLYLINE|GISLib.MASK_POLYGONE); - - public static class CellRenderer extends JLabel implements TreeCellRenderer { - final Color selectedBackground_ = UIManager.getColor("Tree.selectionBackground"); - final Color selectedForground_ = UIManager.getColor("Tree.selectionForeground"); - final Border focusBorderColor_ = BorderFactory.createLineBorder(UIManager.getColor("Tree.selectionBorderColor"), 1); - final boolean onlyLineSelectable_; - - public CellRenderer(final boolean _onlyLineSelectable) { - this.setOpaque(true); - setPreferredSize(new Dimension(120, 25)); - onlyLineSelectable_ = _onlyLineSelectable; - } - - protected boolean isSelectable(final Object _value, final boolean _leaf) { - if (onlyLineSelectable_) { - if (!_leaf) { - return false; - } - final LayerNode node = (LayerNode) _value; - return node.idxPoly_ >= 0; - } - return true; - - } - - public Component getTreeCellRendererComponent(final JTree _tree, final Object _value, final boolean _selected, - final boolean _expanded, final boolean _leaf, final int _row, final boolean _hasFocus) { - this.setFont(_tree.getFont()); - setIcon(((LayerNode) _value).getIcon()); - setText(_value.toString()); - final boolean selectable = isSelectable(_value, _leaf); - if (_selected && selectable) { - setBackground(selectedBackground_); - setForeground(selectedForground_); - } else { - setBackground(_tree.getBackground()); - setForeground(_tree.getForeground()); - } - if (selectable) { - setToolTipText(getText()); - } else { - setToolTipText(getText() + ": " + CtuluLib.getS("Non s\xE9lectionnable")); - } - setBorder((selectable && _hasFocus) ? focusBorderColor_ : CtuluCellRenderer.BORDER_NO_FOCUS); - setEnabled(_tree.isEnabled()); - return this; - } - } - - public static CellRenderer createRenderer(final boolean _selectOnlyLeaf) { - return new CellRenderer(_selectOnlyLeaf); - - } - - public static TreeSelectionModel getOnlyCourbeSelectionModel() { - return new OnlyCourbeTreeSelectionModel(); - } - - public static class OnlyCourbeTreeSelectionModel extends DefaultTreeSelectionModel { - - public void setSelectionPaths(final TreePath[] _paths) { - super.setSelectionPaths(getCorrectPaths(_paths)); - } - - public void addSelectionPaths(final TreePath[] _paths) { - super.addSelectionPaths(getCorrectPaths(_paths)); - } - - private TreePath[] getCorrectPaths(final TreePath[] _paths) { - TreePath[] paths = _paths; - if (!CtuluLibArray.isEmpty(_paths)) { - final List correctPath = new ArrayList(paths.length); - for (int i = 0; i < paths.length; i++) { - if (paths[i] != null && paths[i].getLastPathComponent() != null - && ((LayerNode) paths[i].getLastPathComponent()).idxPoly_ >= 0) { - correctPath.add(paths[i]); - } - } - if (correctPath.size() != paths.length) { - paths = (TreePath[]) correctPath.toArray(new TreePath[correctPath.size()]); - } - } - return paths; - } - - } - - public static class LayerNode extends DefaultMutableTreeNode { - - int idxPoly_ = -1; - String titre_; - final Icon icon_; - - public LayerNode(final BCalque _userObject) { - super(_userObject, true); - icon_ = CtuluLibImage.resize(_userObject, 16, 16); - } - - public LayerNode(final ZCalqueLigneBrisee _userObject, final int _idx, final String _titre) { - super(_userObject, false); - idxPoly_ = _idx; - titre_ = _titre; - if (_userObject.getModele().isGeometryFermee(_idx)) { - icon_ = EbliResource.EBLI.getIcon("draw-polygon"); - } else { - icon_ = EbliResource.EBLI.getIcon("draw-polyline"); - } - } - - public void fillWithPolygone(final List _dest) { - - if (idxPoly_ >= 0) { - final ZCalqueLigneBrisee cq = (ZCalqueLigneBrisee) userObject; - if (cq.getModele().isGeometryFermee(idxPoly_)) { - _dest.add(cq.getModele().getGeomData().getGeometry(idxPoly_)); - } - } else if (((BCalque) userObject).isGroupeCalque()) { - final BCalque[] cqs = ((BCalque) userObject).getTousCalques(); - if (cqs != null) { - for (int i = cqs.length - 1; i >= 0; i--) { - addPolygones(_dest, cqs[i]); - } - } - - } else { - addPolygones(_dest, (BCalque) userObject); - } - - } - - private void addPolygones(final List _dest, final BCalque _cq) { - if (_cq instanceof ZCalqueLigneBrisee) { - final ZCalqueLigneBrisee cq = (ZCalqueLigneBrisee) _cq; - final GISVisitorLigneCollector visitor = new GISVisitorLigneCollector(true); - cq.getModele().getGeomData().accept(visitor); - _dest.addAll(visitor.getPolygones()); - } - } - - public String toString() { - if (titre_ != null) { - return titre_; - } - return ((BCalque) userObject).getTitle(); - } - - public Icon getIcon() { - return icon_; - } - - public int getIdxPoly() { - return idxPoly_; - } - - } - - DefaultTreeModel treeModel_; - - public CalqueFindCourbeTreeModel(final BArbreCalqueModel _model, final BGroupeCalque _root) { - super(); - rootLayer_ = _root; - if (_model != null) { - _model.getObservable().addObserver(this); - } - - rootNode_ = new LayerNode(rootLayer_); - treeModel_ = new DefaultTreeModel(rootNode_); - buildTree(); - } - - public final void buildTree() { - rootNode_.removeAllChildren(); - addLayer(rootNode_, rootLayer_); - treeModel_.setRoot(null); - treeModel_.setRoot(rootNode_); - - } - - protected boolean containsLigne(final BCalque _cq) { - finder_.resetFound(); - _cq.apply(finder_); - return finder_.isFound(); - } - - void addLayer(final LayerNode _parent, final BGroupeCalque _gc) { - final BCalque[] cq = _gc.getCalques(); - if (CtuluLibArray.isEmpty(cq)) { - return; - } - for (int i = 0; i < cq.length; i++) { - final LayerNode node = new LayerNode(cq[i]); - if (finder_.isMatching(cq[i])) { - _parent.add(node); - addLigne(node, (ZCalqueLigneBrisee) cq[i]); - } else if (cq[i].isGroupeCalque() && containsLigne(cq[i])) { - _parent.add(node); - addLayer(node, (BGroupeCalque) cq[i]); - } - - } - - } - - GISVisitorChooser chooser_ = new GISVisitorChooser(); - - void addLigne(final LayerNode _parent, final ZCalqueLigneBrisee _brisee) { - final GISZoneCollectionLigneBrisee collec = (GISZoneCollectionLigneBrisee) _brisee.getModele().getGeomData(); - final GISAttributeModelObjectInterface str = (GISAttributeModelObjectInterface) collec - .getModel(GISAttributeConstants.TITRE); - final int nb = collec.getNumGeometries(); - for (int i = 0; i < nb; i++) { - chooser_.clear(); - ((GISGeometry) collec.getGeometry(i)).accept(chooser_); - if (chooser_.isPolygone() || (chooser_.isPolyligne() && !onlyLigneFerme_)) { - String titre = null; - if (str != null) { - titre = (String) str.getValue(i); - } else if (chooser_.isPolygone()) { - titre = EbliLib.getS("Ligne ferm\xE9e {0}", CtuluLibString.getString(i + 1)); - } else { - titre = EbliLib.getS("Ligne ouverte {0}", CtuluLibString.getString(i + 1)); - } - _parent.add(new LayerNode(_brisee, i, titre)); - } - } - - } - - public void update(final Observable _o, final Object _arg) { - buildTree(); - } - - public boolean isOnlyLigneFerme() { - return onlyLigneFerme_; - } - - public void setOnlyLigneFerme(final boolean _onlyLigneFerme) { - onlyLigneFerme_ = _onlyLigneFerme; - int mask=GISLib.MASK_POLYGONE; - if (!_onlyLigneFerme) mask|=GISLib.MASK_POLYLINE; - finder_.setMask(mask); - buildTree(); - } - - public TreeModel getTreeModel() { - return treeModel_; - } - - public static JTree createCalqueTree(final CalqueFindCourbeTreeModel _treeModel, final boolean _onlyCourbeSelected) { - final JTree tree = new JTree(_treeModel.getTreeModel()); - tree.setEditable(false); - tree.setShowsRootHandles(true); - tree.setExpandsSelectedPaths(true); - tree.setCellRenderer(createRenderer(_onlyCourbeSelected)); - tree.setRootVisible(false); - tree.setFocusable(true); - if (_onlyCourbeSelected) { - final TreeSelectionModel onlyCourbeSelectionModel = getOnlyCourbeSelectionModel(); - onlyCourbeSelectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); - tree.setSelectionModel(onlyCourbeSelectionModel); - } - return tree; - } - -} Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilderFromTree.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilderFromTree.java 2008-08-12 15:47:33 UTC (rev 3786) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilderFromTree.java 2008-08-12 15:48:58 UTC (rev 3787) @@ -36,15 +36,16 @@ import org.fudaa.ctulu.CtuluUI; import org.fudaa.ctulu.CtuluVariable; import org.fudaa.ctulu.ProgressionInterface; +import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gui.CtuluDialogPanel; import org.fudaa.ctulu.gui.CtuluLibSwing; import org.fudaa.dodico.ef.operation.EfLineIntersectionsCorrectionTester; import org.fudaa.dodico.ef.operation.EfLineIntersectionsResultsI; +import org.fudaa.ebli.calque.CalqueGISTreeModel; import org.fudaa.ebli.calque.ZCalqueLigneBrisee; import org.fudaa.ebli.calque.ZEbliCalquesPanel; -import org.fudaa.ebli.calque.find.CalqueFindCourbeTreeModel; import org.fudaa.ebli.commun.EbliLib; import org.fudaa.fudaa.commun.FudaaLib; @@ -53,12 +54,13 @@ public class MvProfileBuilderFromTree extends MvProfileBuilder { final LineString initSelected_; - final CalqueFindCourbeTreeModel lineTreeModel_; + final CalqueGISTreeModel lineTreeModel_; public MvProfileBuilderFromTree(final MvProfileTarget _data, final CtuluUI _ui, final LineString _selected, final ZEbliCalquesPanel _panel, EfLineIntersectionsCorrectionTester _tester) { super(_data, _ui, _panel, _tester); - lineTreeModel_ = new CalqueFindCourbeTreeModel(null, _panel.getDonneesCalque()); + lineTreeModel_ = new CalqueGISTreeModel(null, _panel.getDonneesCalque()); + lineTreeModel_.setMask(GISLib.MASK_POLYLINE|GISLib.MASK_POLYGONE); initSelected_ = _selected; } @@ -66,23 +68,23 @@ if (_tree.isSelectionEmpty()) { return null; } - final CalqueFindCourbeTreeModel.LayerNode node = (CalqueFindCourbeTreeModel.LayerNode) _tree.getSelectionPath() + final CalqueGISTreeModel.LayerNode node = (CalqueGISTreeModel.LayerNode) _tree.getSelectionPath() .getLastPathComponent(); final ZCalqueLigneBrisee cq = (ZCalqueLigneBrisee) node.getUserObject(); - return (LineString) cq.getModele().getGeomData().getGeometry(node.getIdxPoly()); + return (LineString) cq.getModele().getGeomData().getGeometry(node.getIdxGeom()); } String getSelectedLineTitle(final JTree _tree) { if (_tree.isSelectionEmpty()) { return null; } - final CalqueFindCourbeTreeModel.LayerNode node = (CalqueFindCourbeTreeModel.LayerNode) _tree.getSelectionPath() + final CalqueGISTreeModel.LayerNode node = (CalqueGISTreeModel.LayerNode) _tree.getSelectionPath() .getLastPathComponent(); return node.toString(); } protected JTree buildTree() { - return CalqueFindCourbeTreeModel.createCalqueTree(lineTreeModel_, true); + return lineTreeModel_.createView(true,false); } protected void intersectTest(final JDialog _d, final MvExportChooseVarAndTime _var, final ProgressionInterface _prog) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |