]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/SetFocusabilityContribution.java
Bringing layers back to life
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagram / SetFocusabilityContribution.java
1 package org.simantics.modeling.ui.diagram;
2
3 import java.util.Map;
4
5 import org.eclipse.core.runtime.CoreException;
6 import org.eclipse.core.runtime.IConfigurationElement;
7 import org.eclipse.core.runtime.IExecutableExtension;
8 import org.eclipse.jface.action.Action;
9 import org.eclipse.jface.action.ActionContributionItem;
10 import org.eclipse.jface.action.IContributionItem;
11 import org.eclipse.jface.resource.ImageDescriptor;
12 import org.eclipse.ui.IEditorPart;
13 import org.simantics.db.ReadGraph;
14 import org.simantics.db.exception.DatabaseException;
15 import org.simantics.g2d.diagram.DiagramHints;
16 import org.simantics.g2d.diagram.IDiagram;
17 import org.simantics.g2d.layers.ILayers;
18 import org.simantics.g2d.layers.ILayersEditor;
19 import org.simantics.modeling.ui.Activator;
20 import org.simantics.modeling.ui.diagramEditor.DiagramEditor;
21 import org.simantics.ui.contribution.DynamicMenuContribution;
22 import org.simantics.utils.threads.AWTThread;
23 import org.simantics.utils.threads.ThreadUtils;
24 import org.simantics.utils.ui.workbench.WorkbenchUtils;
25
26 /**
27  * @author Tuukka Lehtonen
28  */
29 public class SetFocusabilityContribution extends DynamicMenuContribution implements IExecutableExtension {
30
31     String          name    = ""; //$NON-NLS-1$
32     ImageDescriptor image   = null;
33     boolean         allow = true;
34
35     @Override
36     public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
37             throws CoreException {
38         if (data instanceof Map<?,?>) {
39             @SuppressWarnings("unchecked")
40             Map<String, String> args = (Map<String, String>) data;
41             name = args.get("name"); //$NON-NLS-1$
42             String imageId = args.get("image"); //$NON-NLS-1$
43             image = Activator.getDefault().getImageRegistry().getDescriptor(imageId);
44             allow = Boolean.parseBoolean(args.get("allow")); //$NON-NLS-1$
45         }
46     }
47
48     @Override
49     protected Object[] getSelectedObjects() {
50         IEditorPart editorPart = WorkbenchUtils.getActiveEditor();
51         if (editorPart == null)
52             return NO_OBJECTS;
53         if(editorPart instanceof DiagramEditor) {
54             DiagramEditor editor = (DiagramEditor) editorPart;
55             IDiagram diagram = (IDiagram) editor.getAdapter(IDiagram.class);
56             if (diagram == null)
57                 return NO_OBJECTS;
58             ILayers le = diagram.getHint(DiagramHints.KEY_LAYERS);
59             if (le == null)
60                 return NO_OBJECTS;
61             return new Object[] { le, le.getIgnoreFocusSettings() };
62         }
63         return NO_OBJECTS;
64     }
65
66     @Override
67     protected IContributionItem[] getContributionItems(ReadGraph graph, Object[] elements) throws DatabaseException {
68         if (elements == NO_OBJECTS)
69             return NONE;
70
71         final ILayersEditor le = (ILayersEditor) elements[0];
72         final Boolean value = (Boolean) elements[1];
73
74         if (allow == value)
75             return NONE;
76
77         return new IContributionItem[] {
78                 new ActionContributionItem(new Action(name, image) {
79                     @Override
80                     public void run() {
81                         ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() {
82                             @Override
83                             public void run() {
84                                 le.setIgnoreFocusSettings(!value);
85                             }
86                         });
87                     }
88                 })
89         };
90     }
91
92 }