Hi Peppe, Seel also my answer on 2016-10-29.
TreeLayerNamePanel has a listener, but to avoid a featureCollection scan after each change you probably need to keep a cache in the Layer as suggested by Ede, and use the Layer's listener to update the cache every time a feature is added, removed or changed Michaël Le 13/11/2016 à 19:51, edgar.sol...@web.de a écrit : > thanks.. how about implementing the caching/listener approach if you like to > have icon? ..ede > > On 13.11.2016 18:57, Giuseppe Aruta wrote: >> Ok Ede, I didn't know it. I will revert the change. >> Thanks again >> Peppe >> >> Il 13/Nov/2016 18:48, <edgar.sol...@web.de> ha scritto: >> >>> Peppe, >>> >>> NACK.. this is going to get very slow for huge datasets containing empty >>> geoms only, as it is run on every redraw of the layer tree. please cache >>> the state and use a layer change listener or else users will complain about >>> a frozen OJ some time in the future and we will have a hard time to >>> pinpoint the reason, again ;) >>> >>> ..ede >>> >>> On 13.11.2016 18:41, jump-pilot-...@lists.sourceforge.net wrote: >>>> Revision: 5185 >>>> http://sourceforge.net/p/jump-pilot/code/5185 >>>> Author: ma15569 >>>> Date: 2016-11-13 17:41:37 +0000 (Sun, 13 Nov 2016) >>>> Log Message: >>>> ----------- >>>> The layer tree shows a table icon for layers that have features with >>> empty geometries >>>> Modified Paths: >>>> -------------- >>>> core/trunk/src/com/vividsolutions/jump/workbench/ >>> ui/LayerNameRenderer.java >>>> Modified: core/trunk/src/com/vividsolutions/jump/workbench/ >>> ui/LayerNameRenderer.java >>>> =================================================================== >>>> --- >>>> core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerNameRenderer.java >>> 2016-11-13 17:21:20 UTC (rev 5184) >>>> +++ >>>> core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerNameRenderer.java >>> 2016-11-13 17:41:37 UTC (rev 5185) >>>> @@ -36,6 +36,7 @@ >>>> import java.awt.Rectangle; >>>> import java.io.File; >>>> import java.util.Iterator; >>>> +import java.util.List; >>>> >>>> import javax.swing.DefaultListCellRenderer; >>>> import javax.swing.Icon; >>>> @@ -54,9 +55,11 @@ >>>> import org.openjump.core.rasterimage.RasterImageLayer; >>>> >>>> import com.vividsolutions.jts.geom.Envelope; >>>> +import com.vividsolutions.jts.geom.Geometry; >>>> import com.vividsolutions.jump.I18N; >>>> import com.vividsolutions.jump.feature.Feature; >>>> import com.vividsolutions.jump.feature.FeatureCollection; >>>> +import com.vividsolutions.jump.feature.FeatureCollectionWrapper; >>>> import com.vividsolutions.jump.io.datasource.DataSourceQuery; >>>> import com.vividsolutions.jump.util.StringUtil; >>>> import com.vividsolutions.jump.workbench.JUMPWorkbench; >>>> @@ -118,6 +121,7 @@ >>>> private ImageIcon rasterIcon = IconLoader.icon("map_13.png"); >>>> private ImageIcon sextante_rasterIcon = IconLoader.icon("mapSv2_13. >>> png"); >>>> private ImageIcon sextante_rasterIcon2 = >>> IconLoader.icon("mapSv2_13bw.png"); >>>> + private ImageIcon table_Icon = IconLoader.icon("Table.gif"); >>>> private final static String LAYER_NAME = I18N >>>> .get("org.openjump.core.ui.plugin.layer. >>> LayerPropertiesPlugIn.Layer-Name"); >>>> private final static String FILE_NAME = >>> I18N.get("ui.MenuNames.FILE"); >>>> @@ -379,6 +383,12 @@ >>>> .getFeatureCollectionWrapper().size() > 1 ? >>> multiRasterIcon >>>> : rasterIcon); >>>> imageLabel.setVisible(true); >>>> + } else if (showColorPanel && layerable instanceof Layer >>>> + && isTable((Layer) layerable)) { >>>> + //Show a table icon if the Layer has features with empty >>> geometries >>>> + imageLabel.setIcon(table_Icon); >>>> + imageLabel.setVisible(true); >>>> + >>>> } else if (showColorPanel && layerable instanceof Layer) { >>>> colorPanel.init((Layer) layerable, isSelected, >>>> list.getBackground(), list.getSelectionBackground()) >>> ; >>>> @@ -1022,4 +1032,27 @@ >>>> && bgc.equals(p.getBackground()) && p.isOpaque(); >>>> return !colorMatchOrOpaque && super.isOpaque(); >>>> } >>>> + >>>> + /* >>>> + * [Giuseppe Aruta 11.2016] . True if all the layer geometries are >>> empty >>>> + * (Geometrycollection empty). Workaround to decode table files >>> (like .csv or .dbf) >>>> + * so that they are loaded in Sextante as table >>>> + */ >>>> + public static boolean isTable(Layer layer) { >>>> + FeatureCollectionWrapper featureCollection = layer >>>> + .getFeatureCollectionWrapper(); >>>> + List featureList = featureCollection.getFeatures(); >>>> + Geometry nextGeo = null; >>>> + for (@SuppressWarnings("unchecked") >>>> + Iterator<FeatureCollectionWrapper> i = featureList.iterator(); >>> i >>>> + .hasNext();) { >>>> + Feature feature = (Feature) i.next(); >>>> + nextGeo = feature.getGeometry(); >>>> + } >>>> + if (!featureCollection.isEmpty() && nextGeo.isEmpty()) { >>>> + return true; >>>> + } else { >>>> + return false; >>>> + } >>>> + } >>>> } >>>> \ No newline at end of file >>>> >>>> >>>> ------------------------------------------------------------ >>> ------------------ >>>> Developer Access Program for Intel Xeon Phi Processors >>>> Access to Intel Xeon Phi processor-based developer platforms. >>>> With one year of Intel Parallel Studio XE. >>>> Training and support from Colfax. >>>> Order your platform today. http://sdm.link/xeonphi >>>> _______________________________________________ >>>> Jump-pilot-devel mailing list >>>> Jump-pilot-devel@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >>>> >>> ------------------------------------------------------------ >>> ------------------ >>> Developer Access Program for Intel Xeon Phi Processors >>> Access to Intel Xeon Phi processor-based developer platforms. >>> With one year of Intel Parallel Studio XE. >>> Training and support from Colfax. >>> Order your platform today. http://sdm.link/xeonphi >>> _______________________________________________ >>> Jump-pilot-devel mailing list >>> Jump-pilot-devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >>> >> >> >> ------------------------------------------------------------------------------ >> Developer Access Program for Intel Xeon Phi Processors >> Access to Intel Xeon Phi processor-based developer platforms. >> With one year of Intel Parallel Studio XE. >> Training and support from Colfax. >> Order your platform today. http://sdm.link/xeonphi >> >> >> >> _______________________________________________ >> Jump-pilot-devel mailing list >> Jump-pilot-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >> > ------------------------------------------------------------------------------ > Developer Access Program for Intel Xeon Phi Processors > Access to Intel Xeon Phi processor-based developer platforms. > With one year of Intel Parallel Studio XE. > Training and support from Colfax. > Order your platform today. http://sdm.link/xeonphi > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today. http://sdm.link/xeonphi _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel