]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.g2d/src/org/simantics/g2d/layers/SimpleLayers.java
Render elements using custom color filters
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / layers / SimpleLayers.java
index f250449a41e5ea352198c5a097565ce35cb8a94d..43c52099cc86251b800298c9a4a4369bb52bff07 100644 (file)
@@ -17,6 +17,8 @@ import java.util.Set;
 import java.util.TreeSet;
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import org.simantics.utils.strings.AlphanumComparator;
+
 /**
  * @author Antti Villberg
  */
@@ -25,7 +27,7 @@ public class SimpleLayers implements ILayersEditor {
     private static final Comparator<ILayer> LAYER_COMPARATOR = new Comparator<ILayer>() {
         @Override
         public int compare(ILayer o1, ILayer o2) {
-            return o1.getName().compareTo(o2.getName());
+            return AlphanumComparator.COMPARATOR.compare(o1.getName(), o2.getName());
         }
     };
 
@@ -35,7 +37,8 @@ public class SimpleLayers implements ILayersEditor {
     private Set<ILayer>                                 visible                  = new TreeSet<ILayer>(LAYER_COMPARATOR);
     private volatile Set<ILayer>                        visibleSnapshot;
 
-    private CopyOnWriteArrayList<ILayersEditorListener> listeners                = new CopyOnWriteArrayList<ILayersEditorListener>();
+    private CopyOnWriteArrayList<ILayersEditorListener> layerEditorListeners     = new CopyOnWriteArrayList<ILayersEditorListener>();
+    private CopyOnWriteArrayList<ILayersListener>       layersListeners          = new CopyOnWriteArrayList<ILayersListener>();
 
     private boolean                                     ignoreFocusSettings      = false;
 
@@ -50,8 +53,21 @@ public class SimpleLayers implements ILayersEditor {
             all.add(layer);
             visible.add(layer);
         }
-        allSnapshot = null;
-        visibleSnapshot = null;
+    }
+    
+    @Override
+    public void update(Set<ILayer> allLayers, Set<ILayer> visibleLayers) {
+        synchronized (this) {
+            all.clear();
+            all.addAll(allLayers);
+            visible.clear();
+            visible.addAll(visibleLayers);
+            allSnapshot = null;
+            visibleSnapshot = null;
+        }
+        for (ILayersListener listener : layersListeners) {
+            listener.changed();
+        }
     }
 
     @Override
@@ -105,7 +121,10 @@ public class SimpleLayers implements ILayersEditor {
             synchronized (this) {
                 visibleSnapshot = null;
             }
-            for (ILayersEditorListener listener : listeners) {
+            for (ILayersListener listener : layersListeners) {
+                listener.changed();
+            }
+            for (ILayersEditorListener listener : layerEditorListeners) {
                 listener.layerDeactivated(layer);
             }
         }
@@ -121,7 +140,10 @@ public class SimpleLayers implements ILayersEditor {
             synchronized (this) {
                 visibleSnapshot = null;
             }
-            for (ILayersEditorListener listener : listeners) {
+            for (ILayersListener listener : layersListeners) {
+                listener.changed();
+            }
+            for (ILayersEditorListener listener : layerEditorListeners) {
                 listener.layerActivated(layer);
             }
         }
@@ -137,7 +159,10 @@ public class SimpleLayers implements ILayersEditor {
             synchronized (this) {
                 allSnapshot = null;
             }
-            for (ILayersEditorListener listener : listeners) {
+            for (ILayersListener listener : layersListeners) {
+                listener.changed();
+            }
+            for (ILayersEditorListener listener : layerEditorListeners) {
                 listener.layerAdded(layer);
             }
         }
@@ -155,20 +180,33 @@ public class SimpleLayers implements ILayersEditor {
                 allSnapshot = null;
                 visibleSnapshot = null;
             }
-            for (ILayersEditorListener listener : listeners) {
+            for (ILayersListener listener : layersListeners) {
+                listener.changed();
+            }
+            for (ILayersEditorListener listener : layerEditorListeners) {
                 listener.layerRemoved(layer);
             }
         }
     }
 
     @Override
-    public void addListener(ILayersEditorListener listener) {
-        listeners.add(listener);
+    public void addLayerEditorListener(ILayersEditorListener listener) {
+        layerEditorListeners.add(listener);
     }
 
     @Override
-    public void removeListener(ILayersEditorListener listener) {
-        listeners.remove(listener);
+    public void removeLayerEditorListener(ILayersEditorListener listener) {
+        layerEditorListeners.remove(listener);
+    }
+
+    @Override
+    public void addLayersListener(ILayersListener listener) {
+        layersListeners.add(listener);
+    }
+
+    @Override
+    public void removeLayersListener(ILayersListener listener) {
+        layersListeners.remove(listener);
     }
 
     @Override
@@ -181,7 +219,10 @@ public class SimpleLayers implements ILayersEditor {
         boolean changed = ignoreFocusSettings != value;
         ignoreFocusSettings = value;
         if (changed) {
-            for (ILayersEditorListener listener : listeners) {
+            for (ILayersListener listener : layersListeners) {
+                listener.changed();
+            }
+            for (ILayersEditorListener listener : layerEditorListeners) {
                 listener.ignoreFocusChanged(value);
             }
         }
@@ -197,7 +238,10 @@ public class SimpleLayers implements ILayersEditor {
         boolean changed = ignoreVisibilitySettings != value;
         ignoreVisibilitySettings = value;
         if (changed) {
-            for (ILayersEditorListener listener : listeners) {
+            for (ILayersListener listener : layersListeners) {
+                listener.changed();
+            }
+            for (ILayersEditorListener listener : layerEditorListeners) {
                 listener.ignoreVisibilityChanged(value);
             }
         }