+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;
+ }
+
+}