]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.modeling.ui.modelBrowser2.image;
2
3 import org.eclipse.jface.resource.ImageDescriptor;
4 import org.eclipse.jface.viewers.IDecoration;
5 import org.simantics.browsing.ui.content.ImageDecorator;
6 import org.simantics.browsing.ui.model.imagedecorators.ImageDecorationRule;
7 import org.simantics.db.ReadGraph;
8 import org.simantics.db.Resource;
9 import org.simantics.db.exception.DatabaseException;
10 import org.simantics.modeling.ModelingResources;
11 import org.simantics.modeling.ui.Activator;
12 import org.simantics.utils.ui.gfx.DecorationOverlayIcon;
13
14 public class ChangedResourceImageDecorationRule implements ImageDecorationRule {
15
16     private ImageDecorator CHANGED_DECORATOR = new ImageDecorator() {
17         @Override
18         public <Image> Image decorateImage(Image image, String column, int itemIndex) {
19             ImageDescriptor original = (ImageDescriptor)image;
20             ImageDescriptor decorated = (original == null || original.getImageData() == null) ? Activator.CHANGED_DECORATOR_ICON
21                     : new DecorationOverlayIcon(original, Activator.CHANGED_DECORATOR_ICON, IDecoration.BOTTOM_RIGHT);
22             return (Image)decorated;
23         }
24     };
25
26     @Override
27     public boolean isCompatible(Class<?> contentType) {
28         return Resource.class.isAssignableFrom(contentType);
29     }
30
31     @Override
32     public ImageDecorator getImageDecorator(ReadGraph graph, Object content)
33             throws DatabaseException
34     {
35         Resource resource = (Resource) content;
36         ModelingResources MOD = ModelingResources.getInstance(graph);
37         if (!graph.hasStatement(resource, MOD.changed))
38             return null;
39
40         return CHANGED_DECORATOR;
41     }
42
43 }