From: <emm...@us...> - 2009-01-22 13:43:21
|
Revision: 4392 http://fudaa.svn.sourceforge.net/fudaa/?rev=4392&view=rev Author: emmanuel_martin Date: 2009-01-22 13:43:18 +0000 (Thu, 22 Jan 2009) Log Message: ----------- Tache #134 : " Pouvoir exporter uniquement les objets s?\195?\169lectionn?\195?\169s." Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2009-01-22 10:07:02 UTC (rev 4391) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2009-01-22 13:43:18 UTC (rev 4392) @@ -124,26 +124,26 @@ MdlProjectExportPanel pn=new MdlProjectExportPanel(getUi()); if (CtuluDialogPanel.isCancelResponse(pn.afficheModale(getFrame(), FudaaLib.getS("Exporter les donn\xE9es de la fen\xEAtre active")))) return; - final FSigLayerFilter filter = new FSigLayerFilter(); - if (pn.isAllLayers()) { + final FSigLayerFilter filter=new FSigLayerFilter(); + if (pn.isAllLayers()) getPanel().getDonneesCalque().apply(filter); - } else if (pn.isSelectedLayers()) { - final BCalque[] parent = super.getPanel().getArbreCalqueModel().getSelection(); - if (parent!=null) { - for (int i = 0; i < parent.length; i++) { + final BCalque[] parent=getPanel().getArbreCalqueModel().getSelection(); + if (parent!=null) + for (int i=0; i<parent.length; i++) parent[i].apply(filter); - } - } } - else { + else if (pn.isVisibleLayers()) { filter.setTreatmentOnlyOnVisible(true); getPanel().getDonneesCalque().apply(filter); } + else { // Only selected geometries + filter.setTreatmentOnlySelectedGeometries(true); + getPanel().getDonneesCalque().apply(filter); + } - if (filter.isEmpty()) { + if (filter.isEmpty()) return; - } final File f=pn.getFile(); final FSigLayerExporter exporter=pn.getSelectedExporter(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java 2009-01-22 10:07:02 UTC (rev 4391) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java 2009-01-22 13:43:18 UTC (rev 4392) @@ -8,75 +8,33 @@ package org.fudaa.fudaa.modeleur; import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.io.File; -import java.io.IOException; -import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; -import java.util.List; import java.util.Map; -import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JFileChooser; -import javax.swing.JLabel; import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTree; -import javax.swing.UIManager; -import javax.swing.border.Border; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import javax.swing.filechooser.FileFilter; -import javax.swing.tree.TreeCellRenderer; -import javax.swing.tree.TreePath; -import com.memoire.bu.BuButton; -import com.memoire.bu.BuCheckBox; -import com.memoire.bu.BuFileFilter; -import com.memoire.bu.BuHorizontalLayout; -import com.memoire.bu.BuLabel; -import com.memoire.bu.BuRadioButton; -import com.memoire.bu.BuResource; -import com.memoire.bu.BuVerticalLayout; -import com.memoire.fu.FuLog; - -import org.fudaa.ctulu.CtuluArkLoader; import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluLibFile; -import org.fudaa.ctulu.CtuluLibString; import org.fudaa.ctulu.CtuluUI; -import org.fudaa.ctulu.gis.factory.GISExportDataStoreFactory; -import org.fudaa.ctulu.gui.CtuluCellRenderer; import org.fudaa.ctulu.gui.CtuluDialogPanel; -import org.fudaa.ctulu.gui.CtuluFileChooser; import org.fudaa.ctulu.gui.CtuluFileChooserPanel; import org.fudaa.dodico.dunes.io.DunesGEOFileFormat; import org.fudaa.dodico.rubar.io.RubarStCnFileFormat; import org.fudaa.dodico.telemac.io.SinusxFileFormat; - -import org.fudaa.ebli.calque.BCalquePersistenceGroupe; - import org.fudaa.fudaa.commun.FudaaLib; -import org.fudaa.fudaa.commun.impl.FudaaGuiLib; -import org.fudaa.fudaa.commun.save.FudaaSaveLib; -import org.fudaa.fudaa.commun.save.FudaaSaveZipLoader; -import org.fudaa.fudaa.modeleur.MdlImplementation.MdlFileFilter; -import org.fudaa.fudaa.modeleur.MdlProjectImportTreeModel.LayerNode; import org.fudaa.fudaa.sig.FSigLib; import org.fudaa.fudaa.sig.layer.FSigLayerExporter; -import org.fudaa.fudaa.tr.common.TrProjectPersistence; -import org.fudaa.fudaa.tr.common.TrResource; -import org.geotools.data.FileDataStoreFactorySpi; +import com.memoire.bu.BuFileFilter; +import com.memoire.bu.BuLabel; +import com.memoire.bu.BuRadioButton; +import com.memoire.bu.BuVerticalLayout; + /** * Un panneau pour exporter les donn\xE9es 2D. * @author Bertrand Marchand @@ -84,69 +42,19 @@ */ public class MdlProjectExportPanel extends CtuluDialogPanel implements DocumentListener { - -/* 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); - - public CellRenderer() { - this.setOpaque(true); -// setPreferredSize(new Dimension(120, 25)); - } - - protected boolean isSelectable(final Object _value, final boolean _leaf) { - 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(BuResource.BU.getIcon("calque")); - 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; - } - } -*/ CtuluFileChooserPanel pn_; String filename_=""; BuRadioButton rbAllLayers_; BuRadioButton rbSelectedLayers_; BuRadioButton rbVisibleLayers_; + protected BuRadioButton rbSelectedGeometries_; BuFileFilter[] filters_; CtuluUI ui_; BuFileFilter selectedFilter_=null; - Map filter2Exporter_; - -// JTree trLayers_; -// FudaaSaveZipLoader loader_=null; + Map<BuFileFilter, FSigLayerExporter> filter2Exporter_; public MdlProjectExportPanel(CtuluUI _ui) { ui_=_ui; -// ActionListener rbListener=new ActionListener() { -// public void actionPerformed(ActionEvent _evt) { -// if (rbSelectedLayers_.isSelected()) { -// if (isFileOK()) loadFile(); -// } -// trLayers_.setEnabled(rbSelectedLayers_.isSelected()); -// trLayers_.setModel(new MdlProjectImportTreeModel(loader_)); -// } -// }; filters_=buildFilter2Export(); @@ -165,50 +73,32 @@ pnFile.add(pn_, BorderLayout.CENTER); add(pnFile); - rbAllLayers_=new BuRadioButton("Exporter tous les calques"); -// rbAllLayers_.addActionListener(rbListener); + rbAllLayers_=new BuRadioButton(FudaaLib.getS("Exporter tous les calques")); + rbSelectedLayers_=new BuRadioButton(FudaaLib.getS("Exporter les calques s\xE9lectionn\xE9s (et leurs sous-calques)")); + rbVisibleLayers_=new BuRadioButton(FudaaLib.getS("Exporter les seuls calques visibles")); + rbSelectedGeometries_=new BuRadioButton(FudaaLib.getS("Exporter les g\xE9om\xE9tries selectionn\xE9es.")); add(rbAllLayers_); - - rbSelectedLayers_=new BuRadioButton("Exporter les calques s\xE9lectionn\xE9s (et leurs sous-calques)"); -// rbSelectedLayers_.addActionListener(rbListener); add(rbSelectedLayers_); - - rbVisibleLayers_=new BuRadioButton("Exporter les seuls calques visibles"); -// rbSelectedLayers_.addActionListener(rbListener); add(rbVisibleLayers_); -// + add(rbSelectedGeometries_); ButtonGroup bgLayers=new ButtonGroup(); bgLayers.add(rbAllLayers_); bgLayers.add(rbSelectedLayers_); bgLayers.add(rbVisibleLayers_); -// -// trLayers_=new JTree(); -// trLayers_.setShowsRootHandles(true); -// trLayers_.setRootVisible(false); -// trLayers_.setCellRenderer(new CellRenderer()); -// JScrollPane sp=new JScrollPane(trLayers_); -// sp.setPreferredSize(new Dimension(300,200)); -// add(sp); -// + bgLayers.add(rbSelectedGeometries_); + rbAllLayers_.doClick(); -// pn_.getTf().getDocument().addDocumentListener(this); -// } private BuFileFilter[] buildFilter2Export() { final BuFileFilter sx = SinusxFileFormat.getInstance().createFileFilter(); final BuFileFilter st = RubarStCnFileFormat.createStFilter(); final BuFileFilter dunes= DunesGEOFileFormat.getInstance().createFileFilter(); - filter2Exporter_ = new HashMap(5);// pour l'instant ..... + filter2Exporter_ = new HashMap<BuFileFilter, FSigLayerExporter>(5);// pour l'instant ..... filter2Exporter_.put(sx, new FSigLayerExporter.ToSinusX()); filter2Exporter_.put(st, new FSigLayerExporter.ToRubar()); filter2Exporter_.put(dunes, new FSigLayerExporter.ToDunes()); -// final Map dataStores = GISExportDataStoreFactory.buildFileFilterMap(false); -// for (final Iterator it = dataStores.entrySet().iterator(); it.hasNext();) { -// final Map.Entry e = (Map.Entry) it.next(); -// filter2Exporter_.put(e.getKey(), new FSigLayerExporter.DataStore((FileDataStoreFactorySpi) e.getValue())); -// } filters_ = new BuFileFilter[filter2Exporter_.size()]; filter2Exporter_.keySet().toArray(filters_); @@ -217,41 +107,9 @@ public boolean valide() { if (!isFileOK()) return false; -// -// // Mise a jour des \xE9tats des calques. Par defaut, les calques sopnt r\xE9cup\xE9r\xE9s. -// if (rbSelectedLayers_.isSelected()) { -// List<LayerNode> nds=getChildrenLeafs((LayerNode)trLayers_.getModel().getRoot()); -// -// TreePath[] paths=trLayers_.getSelectionPaths(); -// if (paths!=null) { -// for (TreePath path : paths) { -// nds.remove((LayerNode)path.getLastPathComponent()); -// } -// } -// -// for (LayerNode nd : nds) { -// loader_.setOption(CtuluArkLoader.OPTION_LAYER_IGNORE+nd.name_,CtuluLibString.toString(true)); -// } -// } return true; } -// private List<LayerNode> getChildrenLeafs(LayerNode _nd) { -// List<LayerNode> r=new ArrayList<LayerNode>(); -// int nb=_nd.getChildCount(); -// for (int i=0; i<nb; i++) { -// LayerNode nd=(LayerNode)_nd.getChildAt(i); -// if (nd.isLeaf()) { -// r.add(nd); -// } -// else { -// List<LayerNode> ls=getChildrenLeafs(nd); -// r.addAll(ls); -// } -// } -// return r; -// } - private boolean isFileOK() { final File f = pn_.getFile(); if (f == null) { @@ -319,31 +177,17 @@ public boolean isVisibleLayers() { return rbVisibleLayers_.isSelected(); } -// private FudaaSaveZipLoader loadFile() { -// if (loader_!=null) return loader_; -// -// try { -// loader_=new FudaaSaveZipLoader(pn_.getFile()); -// } -// catch (IOException _exc) { -// setErrorText(TrResource.getS("Le fichier n'est pas accessible")); -// } -// return loader_; -// } + + public boolean isSelectedGeometries() { + return rbSelectedGeometries_.isSelected(); + } public void changedUpdate(final DocumentEvent _e) { -// valide(); } public void insertUpdate(final DocumentEvent _e) { -// valide(); } public void removeUpdate(final DocumentEvent _e) { -// valide(); } - -// public FudaaSaveZipLoader getLoader() throws IOException { -// return loader_; -// } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java 2009-01-22 10:07:02 UTC (rev 4391) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java 2009-01-22 13:43:18 UTC (rev 4392) @@ -13,20 +13,26 @@ import java.util.List; import java.util.Set; -import com.vividsolutions.jts.geom.LineString; -import com.vividsolutions.jts.geom.MultiPoint; -import com.vividsolutions.jts.geom.Point; - import org.fudaa.ctulu.CtuluIOOperationSynthese; import org.fudaa.ctulu.CtuluUI; import org.fudaa.ctulu.ProgressionInterface; +import org.fudaa.ctulu.gis.GISAttributeModel; import org.fudaa.ctulu.gis.GISZoneCollection; - +import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; +import org.fudaa.ctulu.gis.GISZoneCollectionMultiPoint; +import org.fudaa.ctulu.gis.GISZoneCollectionPoint; import org.fudaa.ebli.calque.BCalque; import org.fudaa.ebli.calque.BCalqueVisitor; import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; +import org.fudaa.ebli.calque.ZCalqueGeometry; import org.fudaa.ebli.calque.ZModeleGeometry; +import org.fudaa.ebli.calque.edition.ZModeleGeometryDefault; +import org.fudaa.ebli.calque.edition.ZModelePointEditable; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.MultiPoint; +import com.vividsolutions.jts.geom.Point; + /** * Un filtre sur les calques a exporter. Les calques a exporter peuvent \xEAtre uniquement les calques visibles. * @author Fred Deniger @@ -34,11 +40,12 @@ */ public class FSigLayerFilter implements BCalqueVisitor { - final Set cqs_ = new HashSet(); - List pointCq_ = new ArrayList(); - List polyCq_ = new ArrayList(); - List mlptsCq_=new ArrayList(); + final Set<BCalque> cqs_ = new HashSet<BCalque>(); + List<BCalque> pointCq_ = new ArrayList<BCalque>(); + List<BCalque> polyCq_ = new ArrayList<BCalque>(); + List<BCalque> mlptsCq_=new ArrayList<BCalque>(); boolean bonlyVisible_=false; + protected boolean onlySelectedGeometries_=false; /** * @@ -85,22 +92,85 @@ bonlyVisible_=_b; } + /** + * Le traitement s'applique uniquement aux g\xE9om\xE9tries selectionn\xE9es. + */ + public void setTreatmentOnlySelectedGeometries(boolean _b) { + onlySelectedGeometries_=_b; + } + + /** + * Retourne les donn\xE9es de la g\xE9om\xE9tries de _zone. + * retourne null si _idxGeom est invalide. + */ + private Object[] getData(int _idxGeom, GISZoneCollection _zone) { + Object[] data=null; + if (_idxGeom>=0&&_idxGeom<_zone.getNbGeometries()) { + GISAttributeModel[] models=_zone.getModels(); + data=new Object[models.length]; + for (int i=0; i<data.length; i++) + data[i]=models[i].getObjectValueAt(_idxGeom); + } + return data; + } + + /** + * Ajout les attributs n\xE9c\xE9ssaires \xE0 _destination puis ajout les g\xE9om\xE9tries de + * la _source \xE0 la _destination. + */ + private void addGeoms(int[] _idx, GISZoneCollection _source, GISZoneCollection _destination) { + _destination.setAttributes(_source.getAttributes(), null); + for(int i=0;i<_idx.length;i++) + _destination.addGeometry(_source.getGeometry(_idx[i]), getData(_idx[i], _source), null); + } + + /** + * Cr\xE9e un nouveau calque dupliquant les g\xE9om\xE9ries selectionn\xE9es dans celui pass\xE9 en param\xE8tre. + */ + private BCalque duplicateCalque(ZCalqueAffichageDonneesInterface _calque) { + ZModeleGeometryDefault model=new ZModeleGeometryDefault(null); + addGeoms(_calque.getSelectedObjectInTable(), ((ZModeleGeometry)_calque.modeleDonnees()).getGeomData(), model.getGeomData()); + return new ZCalqueGeometry(model); + } + public boolean visit(final BCalque _cq) { // Calque non trait\xE9 si invisible. - if (bonlyVisible_ && !_cq.isVisible()) return true; - - if (!cqs_.contains(_cq) && _cq instanceof ZCalqueAffichageDonneesInterface - && ((ZCalqueAffichageDonneesInterface) _cq).modeleDonnees() instanceof ZModeleGeometry) { + if (bonlyVisible_&&!_cq.isVisible()) + return true; + + if (!cqs_.contains(_cq)&&_cq instanceof ZCalqueAffichageDonneesInterface + &&((ZCalqueAffichageDonneesInterface)_cq).modeleDonnees() instanceof ZModeleGeometry) { cqs_.add(_cq); - final ZModeleGeometry geom = (ZModeleGeometry) ((ZCalqueAffichageDonneesInterface) _cq).modeleDonnees(); - if (geom.getGeomData().getDataStoreClass().equals(Point.class)) { - pointCq_.add(_cq); - } else if (LineString.class.isAssignableFrom(geom.getGeomData().getDataStoreClass())) { - polyCq_.add(_cq); - } else if (MultiPoint.class.isAssignableFrom(geom.getGeomData().getDataStoreClass())) { - mlptsCq_.add(_cq); + ZCalqueAffichageDonneesInterface calque=(ZCalqueAffichageDonneesInterface)_cq; + final ZModeleGeometry geom=(ZModeleGeometry)calque.modeleDonnees(); + + if (onlySelectedGeometries_) { + if (!calque.isSelectionEmpty()) { + if (geom.getGeomData().getDataStoreClass().equals(Point.class)) { + ZModelePointEditable model=new ZModelePointEditable(new GISZoneCollectionPoint()); + addGeoms(calque.getSelectedObjectInTable(), geom.getGeomData(), model.getGeomData()); + pointCq_.add(new ZCalqueGeometry(model)); + } + else if (LineString.class.isAssignableFrom(geom.getGeomData().getDataStoreClass())) { + ZModeleGeometryDefault model=new ZModeleGeometryDefault(new GISZoneCollectionLigneBrisee()); + addGeoms(calque.getSelectedObjectInTable(), geom.getGeomData(), model.getGeomData()); + polyCq_.add(new ZCalqueGeometry(model)); + } + else if (MultiPoint.class.isAssignableFrom(geom.getGeomData().getDataStoreClass())) { + ZModeleGeometryDefault model=new ZModeleGeometryDefault(new GISZoneCollectionMultiPoint()); + addGeoms(calque.getSelectedObjectInTable(), geom.getGeomData(), model.getGeomData()); + mlptsCq_.add(new ZCalqueGeometry(model)); + } + } } - + else { + if (geom.getGeomData().getDataStoreClass().equals(Point.class)) + pointCq_.add(_cq); + else if (LineString.class.isAssignableFrom(geom.getGeomData().getDataStoreClass())) + polyCq_.add(_cq); + else if (MultiPoint.class.isAssignableFrom(geom.getGeomData().getDataStoreClass())) + mlptsCq_.add(_cq); + } } return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |