1 package org.simantics.ui.toolbar;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collections;
\r
5 import java.util.List;
\r
7 import org.eclipse.core.runtime.IConfigurationElement;
\r
8 import org.eclipse.core.runtime.IExtension;
\r
9 import org.eclipse.core.runtime.IExtensionPoint;
\r
10 import org.eclipse.core.runtime.Platform;
\r
11 import org.eclipse.core.runtime.dynamichelpers.ExtensionTracker;
\r
12 import org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler;
\r
13 import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker;
\r
14 import org.eclipse.core.runtime.dynamichelpers.IFilter;
\r
15 import org.simantics.ui.internal.Activator;
\r
21 public class ToolBarCommandRegistry implements IExtensionChangeHandler {
\r
22 private final static String NAMESPACE = Activator.PLUGIN_ID;
\r
24 private final static String EP_NAME = "toolbarCommand";
\r
26 private ExtensionTracker tracker;
\r
28 private List<ToolbarCommandExtension> extensions = new ArrayList<ToolbarCommandExtension>();
\r
31 private static ToolBarCommandRegistry INSTANCE;
\r
33 public static synchronized ToolBarCommandRegistry getInstance() {
\r
34 if (INSTANCE == null)
\r
35 INSTANCE = new ToolBarCommandRegistry();
\r
39 public static synchronized void dispose() {
\r
40 if (INSTANCE != null) {
\r
46 public ToolBarCommandRegistry() {
\r
47 tracker = new ExtensionTracker();
\r
49 IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(NAMESPACE,EP_NAME);
\r
50 loadExtensions(ep.getConfigurationElements());
\r
52 IFilter filter = ExtensionTracker.createExtensionPointFilter(ep);
\r
53 tracker.registerHandler(this, filter);
\r
56 private void close() {
\r
62 public synchronized List<ToolbarCommandExtension> getExtensions() {
\r
63 return Collections.unmodifiableList(extensions);
\r
66 private synchronized void loadExtensions(IConfigurationElement[] elements) {
\r
67 for (IConfigurationElement el : elements) {
\r
68 String commandId = el.getAttribute("commandId");
\r
70 ToolbarCommandExtension ext = new ToolbarCommandExtension(commandId);
\r
71 ext.toolbarId = el.getAttribute("toolbarId");
\r
72 ext.image = el.getAttribute("image");
\r
73 ext.name = el.getAttribute("name");
\r
74 ext.type = el.getAttribute("type");
\r
75 ext.value = el.getAttribute("value");
\r
76 ext.contributorId = el.getContributor().getName();
\r
77 for (IConfigurationElement param : el.getChildren("parameter")) {
\r
78 Parameter parameter = new Parameter();
\r
79 parameter.name = param.getAttribute("name");
\r
80 parameter.value = param.getAttribute("value");
\r
81 ext.parameters.add(parameter);
\r
83 tracker.registerObject(el.getDeclaringExtension(), ext, IExtensionTracker.REF_STRONG);
\r
84 extensions.add(ext);
\r
90 public void addExtension(IExtensionTracker tracker, IExtension extension) {
\r
91 loadExtensions(extension.getConfigurationElements());
\r
95 public synchronized void removeExtension(IExtension extension, Object[] objects) {
\r
96 for (Object o : objects) {
\r
97 ToolbarCommandExtension ext = (ToolbarCommandExtension) o;
\r
98 tracker.unregisterObject(extension, ext);
\r
99 extensions.remove(ext);
\r
103 public synchronized List<ToolbarCommandExtension> getExtensions(String toolbarId) {
\r
104 List<ToolbarCommandExtension> list = new ArrayList<ToolbarCommandExtension>();
\r
105 for (ToolbarCommandExtension ext : extensions)
\r
106 if (ext.toolbarId.equals(toolbarId))
\r
112 public class ToolbarCommandExtension {
\r
113 public String commandId;
\r
114 public String toolbarId;
\r
115 public String name;
\r
116 public String type;
\r
117 public String value;
\r
118 public String image;
\r
119 public String contributorId;
\r
120 public List<Parameter> parameters = new ArrayList<>();
\r
121 public ToolbarCommandExtension(String commandId) {
\r
123 this.commandId = commandId;
\r
127 public String toString() {
\r
128 return "ToolbarCommandExtension, commandId= " + commandId + " toolbarId= " + toolbarId + " type= " + type + " value= " + value + " contributor= " + contributorId;
\r
132 public class Parameter {
\r
133 public String name;
\r
134 public String value;
\r