1 package org.simantics.g3d.toolbar;
\r
3 import java.util.HashMap;
\r
4 import java.util.Map;
\r
6 import org.eclipse.core.commands.Command;
\r
7 import org.eclipse.core.commands.State;
\r
8 import org.eclipse.ui.IWorkbenchPart;
\r
9 import org.eclipse.ui.PlatformUI;
\r
10 import org.eclipse.ui.commands.ICommandService;
\r
11 import org.eclipse.ui.handlers.IHandlerService;
\r
12 import org.eclipse.ui.handlers.RadioState;
\r
13 import org.eclipse.ui.handlers.RegistryToggleState;
\r
16 * Registry for storing command states separately for each IEditorPart
\r
18 * TODO : how to change toggle/radios state from editor?
\r
19 * TODO : how to update visible buttons (ToolbarContributor)
\r
21 * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
\r
24 public class CommandStateRegistry {
\r
27 private static CommandStateRegistry instance;
\r
30 public static CommandStateRegistry getInstance() {
\r
31 if (instance == null)
\r
32 instance = new CommandStateRegistry();
\r
38 private Map<IWorkbenchPart,Map<String,Boolean>> toggleStates = new HashMap<IWorkbenchPart, Map<String,Boolean>>();
\r
39 private Map<String,Boolean> defaultToggleStates = new HashMap<String, Boolean>();
\r
41 private Map<String,String> defaultRadioStates = new HashMap<String, String>();
\r
42 private Map<IWorkbenchPart,Map<String,String>> radioStates = new HashMap<IWorkbenchPart, Map<String,String>>();
\r
44 private ICommandService service;
\r
45 private IHandlerService handlerService;
\r
47 private CommandStateRegistry() {
\r
48 service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
\r
49 handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
\r
53 * Stores default state for a command.
\r
55 * Note: uses current state as default.
\r
59 public void storeDefaultState(String commandId) {
\r
60 Command command = service.getCommand(commandId);
\r
61 State toggleState = command.getState(RegistryToggleState.STATE_ID);
\r
62 State radioState = command.getState(RadioState.STATE_ID);
\r
63 if (toggleState != null) {
\r
64 if (!defaultToggleStates.containsKey(commandId))
\r
65 defaultToggleStates.put(commandId, getToggleState(command));
\r
66 } else if (radioState != null) {
\r
67 String value = (String) radioState.getValue();
\r
68 if (!defaultRadioStates.containsKey(commandId))
\r
69 defaultRadioStates.put(commandId, value);
\r
71 throw new IllegalArgumentException("Command " + commandId + " does not have a state");
\r
75 * Stores toggle state of a command.
\r
80 public void setEditorState(IWorkbenchPart part, String commandId, boolean checked) {
\r
81 Map<String,Boolean> editorStates = toggleStates.get(part);
\r
82 if (editorStates == null) {
\r
83 editorStates = new HashMap<String, Boolean>();
\r
84 toggleStates.put(part, editorStates);
\r
86 editorStates.put(commandId, checked);
\r
90 * Stores radio state of a command.
\r
95 public void setEditorState(IWorkbenchPart part, String commandId, String value) {
\r
96 Map<String,String> editorStates = radioStates.get(part);
\r
97 if (editorStates == null) {
\r
98 editorStates = new HashMap<String, String>();
\r
99 radioStates.put(part, editorStates);
\r
101 editorStates.put(commandId, value);
\r
104 public Map<String, Boolean> getDefaultToggleStates() {
\r
105 return defaultToggleStates;
\r
108 public Map<String, String> getDefaultRadioStates() {
\r
109 return defaultRadioStates;
\r
112 public Map<String, Boolean> getEditorToggleStates(IWorkbenchPart part) {
\r
113 return toggleStates.get(part);
\r
116 public Map<String, String> getEditorRadioStates(IWorkbenchPart part) {
\r
117 return radioStates.get(part);
\r
120 public Boolean getToggleState(IWorkbenchPart part, String commandId) {
\r
122 return defaultToggleStates.get(commandId);
\r
123 Map<String,Boolean> editorStates = toggleStates.get(part);
\r
124 if (editorStates == null) {
\r
125 return defaultToggleStates.get(commandId);
\r
127 return editorStates.get(commandId);
\r
130 public String getRadioState(IWorkbenchPart part, String commandId) {
\r
132 return defaultRadioStates.get(commandId);
\r
133 Map<String,String> editorStates = radioStates.get(part);
\r
134 if (editorStates == null) {
\r
135 return defaultRadioStates.get(commandId);
\r
137 return editorStates.get(commandId);
\r
140 public void clearStates(IWorkbenchPart part) {
\r
141 toggleStates.remove(part);
\r
142 radioStates.remove(part);
\r
145 private boolean getToggleState(Command command) {
\r
146 State toggleState = command.getState(RegistryToggleState.STATE_ID);
\r
147 return (Boolean)toggleState.getValue();
\r