]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/modelBrowser2/image/ChangedResourceImageDecorationRule.java
Maintain info about changed resources in virtual graph
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / modelBrowser2 / image / ChangedResourceImageDecorationRule.java
diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/modelBrowser2/image/ChangedResourceImageDecorationRule.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/modelBrowser2/image/ChangedResourceImageDecorationRule.java
new file mode 100644 (file)
index 0000000..586387b
--- /dev/null
@@ -0,0 +1,43 @@
+package org.simantics.modeling.ui.modelBrowser2.image;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.IDecoration;
+import org.simantics.browsing.ui.content.ImageDecorator;
+import org.simantics.browsing.ui.model.imagedecorators.ImageDecorationRule;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.modeling.ModelingResources;
+import org.simantics.modeling.ui.Activator;
+import org.simantics.utils.ui.gfx.DecorationOverlayIcon;
+
+public class ChangedResourceImageDecorationRule implements ImageDecorationRule {
+
+    private ImageDecorator CHANGED_DECORATOR = new ImageDecorator() {
+        @Override
+        public <Image> Image decorateImage(Image image, String column, int itemIndex) {
+            ImageDescriptor original = (ImageDescriptor)image;
+            ImageDescriptor decorated = (original == null || original.getImageData() == null) ? Activator.CHANGED_DECORATOR_ICON
+                    : new DecorationOverlayIcon(original, Activator.CHANGED_DECORATOR_ICON, IDecoration.BOTTOM_RIGHT);
+            return (Image)decorated;
+        }
+    };
+
+    @Override
+    public boolean isCompatible(Class<?> contentType) {
+        return Resource.class.isAssignableFrom(contentType);
+    }
+
+    @Override
+    public ImageDecorator getImageDecorator(ReadGraph graph, Object content)
+            throws DatabaseException
+    {
+        Resource resource = (Resource) content;
+        ModelingResources MOD = ModelingResources.getInstance(graph);
+        if (!graph.hasStatement(resource, MOD.changed))
+            return null;
+
+        return CHANGED_DECORATOR;
+    }
+
+}