]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.ui/src/org/simantics/ui/toolbar/CommandStateRegistry.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / toolbar / CommandStateRegistry.java
index 3e62c728fe442398fc96913e186b4825f7f1fd8e..5c60509be1cdcd75909313b884fa9e99b547de26 100644 (file)
-package org.simantics.ui.toolbar;\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.eclipse.core.commands.Command;\r
-import org.eclipse.core.commands.State;\r
-import org.eclipse.ui.IWorkbenchPart;\r
-import org.eclipse.ui.PlatformUI;\r
-import org.eclipse.ui.commands.ICommandService;\r
-import org.eclipse.ui.handlers.IHandlerService;\r
-import org.eclipse.ui.handlers.RadioState;\r
-import org.eclipse.ui.handlers.RegistryToggleState;\r
-import org.simantics.utils.datastructures.MapList;\r
-\r
-/**\r
- * Registry for storing command states separately for each IEditorPart\r
- * \r
- * TODO : cleaning editor states and listeners is now implemented through ToolBarContributor. Is this OK?\r
- * \r
- * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
- *\r
- */\r
-public class CommandStateRegistry {\r
-\r
-       \r
-       private static CommandStateRegistry instance;\r
-       \r
-       \r
-       public static CommandStateRegistry getInstance() {\r
-               if (instance == null)\r
-                       instance = new CommandStateRegistry();\r
-               return instance;\r
-       }\r
-       \r
-       \r
-       \r
-       private Map<IWorkbenchPart,Map<String,Boolean>> toggleStates = new HashMap<IWorkbenchPart, Map<String,Boolean>>();\r
-       private Map<String,Boolean> defaultToggleStates = new HashMap<String, Boolean>();\r
-       \r
-       private Map<String,String> defaultRadioStates = new HashMap<String, String>();\r
-       private Map<IWorkbenchPart,Map<String,String>> radioStates = new HashMap<IWorkbenchPart, Map<String,String>>();\r
-\r
-       private ICommandService service;\r
-       private IHandlerService handlerService;\r
-       \r
-       private CommandStateRegistry() {\r
-               service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);\r
-               handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);\r
-       }\r
-       \r
-       /**\r
-        * Stores default state for a command.\r
-        * \r
-        * Note: uses current state as default. \r
-        * \r
-        * @param commandId\r
-        */\r
-       public void storeDefaultState(String commandId) {\r
-               Command command = service.getCommand(commandId);\r
-               State toggleState = command.getState(RegistryToggleState.STATE_ID);\r
-               State radioState = command.getState(RadioState.STATE_ID);\r
-               if (toggleState != null) {\r
-                       if (!defaultToggleStates.containsKey(commandId))\r
-                               defaultToggleStates.put(commandId, getToggleState(command));\r
-               } else if (radioState != null) {\r
-                       String value = (String) radioState.getValue();\r
-                       if (!defaultRadioStates.containsKey(commandId))\r
-                               defaultRadioStates.put(commandId, value);\r
-               } else {\r
-                       throw new IllegalArgumentException("Command " + commandId + " does not have a state");\r
-               }\r
-       }\r
-       /**\r
-        * Stores toggle state of a command.\r
-        * @param part\r
-        * @param commandId\r
-        * @param checked\r
-        */\r
-       public void setEditorState(IWorkbenchPart part, String commandId, boolean checked) {\r
-               Map<String,Boolean> editorStates = toggleStates.get(part);\r
-               if (editorStates == null) {\r
-                       editorStates = new HashMap<String, Boolean>();\r
-                       toggleStates.put(part, editorStates);\r
-               }\r
-               editorStates.put(commandId, checked);\r
-               fireStateChange(part, commandId, Boolean.toString(checked));\r
-       }\r
-       \r
-       /**\r
-        * Stores radio state of a command.\r
-        * @param part\r
-        * @param commandId\r
-        * @param value\r
-        */\r
-       public void setEditorState(IWorkbenchPart part, String commandId, String value) {\r
-               Map<String,String> editorStates = radioStates.get(part);\r
-               if (editorStates == null) {\r
-                       editorStates = new HashMap<String, String>();\r
-                       radioStates.put(part, editorStates);\r
-               }\r
-               editorStates.put(commandId, value);\r
-               fireStateChange(part, commandId, value);\r
-       }\r
-       \r
-       \r
-       \r
-       public Map<String, Boolean> getDefaultToggleStates() {\r
-               return defaultToggleStates;\r
-       }\r
-       \r
-       public Map<String, String> getDefaultRadioStates() {\r
-               return defaultRadioStates;\r
-       }\r
-       \r
-       public Map<String, Boolean> getEditorToggleStates(IWorkbenchPart part) {\r
-               return toggleStates.get(part);\r
-       }\r
-       \r
-       public Map<String, String> getEditorRadioStates(IWorkbenchPart part) {\r
-               return radioStates.get(part);\r
-       }\r
-       \r
-       public Boolean getToggleState(IWorkbenchPart part, String commandId) {\r
-               if (part == null)\r
-                       return defaultToggleStates.get(commandId);\r
-               Map<String,Boolean> editorStates = toggleStates.get(part);\r
-               if (editorStates == null) {\r
-                       return defaultToggleStates.get(commandId);\r
-               }\r
-               return editorStates.get(commandId);\r
-       }\r
-       \r
-       public String getRadioState(IWorkbenchPart part, String commandId) {\r
-               if (part == null)\r
-                       return defaultRadioStates.get(commandId);\r
-               Map<String,String> editorStates = radioStates.get(part);\r
-               if (editorStates == null) {\r
-                       return defaultRadioStates.get(commandId);\r
-               }\r
-               return editorStates.get(commandId);\r
-       }\r
-       \r
-       public void clearStates(IWorkbenchPart part) {\r
-               toggleStates.remove(part);\r
-               radioStates.remove(part);\r
-               listenerWithPart.remove(part);\r
-       }\r
-       \r
-       private boolean getToggleState(Command command) {\r
-               State toggleState = command.getState(RegistryToggleState.STATE_ID);\r
-               return (Boolean)toggleState.getValue();\r
-       }\r
-       \r
-       \r
-       private List<CommandStateListener> listeners = new ArrayList<CommandStateListener>();\r
-       private MapList<String, CommandStateListener> listenerWithCommandId = new MapList<String, CommandStateListener>();\r
-       private MapList<IWorkbenchPart, CommandStateListener> listenerWithPart = new MapList<IWorkbenchPart, CommandStateListener>();\r
-       \r
-       /**\r
-        * Attaches a listener that receives all state changes of all commands and all workbench parts.\r
-        * @param listener\r
-        */\r
-       public void addListener(CommandStateListener listener) {\r
-               if (!listeners.contains(listener))\r
-                       listeners.add(listener);\r
-       }\r
-       \r
-       /**\r
-        * Attaches a listener to receive state changes of specific workbench part.\r
-        * @param part\r
-        * @param listener\r
-        */\r
-       public void addListener(IWorkbenchPart part, CommandStateListener listener) {\r
-               if (!listenerWithPart.contains(part,listener))\r
-                       listenerWithPart.add(part,listener);\r
-       }\r
-       \r
-       /**\r
-        * Attaches a listener to receive state changes of specific command.\r
-        * @param part\r
-        * @param listener\r
-        */\r
-       public void addListener(String commandId, CommandStateListener listener) {\r
-               if (!listenerWithCommandId.contains(commandId,listener))\r
-                       listenerWithCommandId.add(commandId, listener);\r
-       }\r
-       \r
-       /**\r
-        * Removes the listener from the registry.\r
-        * @param listener\r
-        */\r
-       public void removeListener(CommandStateListener listener) {\r
-               listeners.remove(listener);\r
-               Set<String> commandIds = new HashSet<String>();\r
-               commandIds.addAll(listenerWithCommandId.getKeys());\r
-               for (String commandId : commandIds) {\r
-                       listenerWithCommandId.remove(commandId, listener);\r
-               }\r
-               commandIds.clear();\r
-               Set<IWorkbenchPart> parts = new HashSet<IWorkbenchPart>();\r
-               parts.addAll(listenerWithPart.getKeys());\r
-               for (IWorkbenchPart part : parts) {\r
-                       listenerWithPart.remove(part, listener);\r
-               }\r
-               parts.clear();\r
-       }\r
-       \r
-       private List<CommandStateListener> fireList = new ArrayList<CommandStateListener>();\r
-       \r
-       private void fireStateChange(IWorkbenchPart part, String commandId, String state) {\r
-               fireList.clear();\r
-               fireList.addAll(listeners);\r
-               List<CommandStateListener> list = listenerWithCommandId.getValues(commandId);\r
-               if (list != null) {\r
-                       fireList.addAll(list);\r
-                       \r
-               }\r
-               list = listenerWithPart.getValues(part);\r
-               if (list != null) {\r
-                       fireList.addAll(list);\r
-                       \r
-               }       \r
-               for (CommandStateListener l : fireList) {\r
-                       l.stateChanged(part, commandId, state);\r
-               }\r
-\r
-       }\r
-       \r
-}\r
+package org.simantics.ui.toolbar;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.State;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.handlers.RadioState;
+import org.eclipse.ui.handlers.RegistryToggleState;
+import org.simantics.utils.datastructures.MapList;
+
+/**
+ * Registry for storing command states separately for each IEditorPart
+ * 
+ * TODO : cleaning editor states and listeners is now implemented through ToolBarContributor. Is this OK?
+ * 
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
+ *
+ */
+public class CommandStateRegistry {
+
+       
+       private static CommandStateRegistry instance;
+       
+       
+       public static CommandStateRegistry getInstance() {
+               if (instance == null)
+                       instance = new CommandStateRegistry();
+               return instance;
+       }
+       
+       
+       
+       private Map<IWorkbenchPart,Map<String,Boolean>> toggleStates = new HashMap<IWorkbenchPart, Map<String,Boolean>>();
+       private Map<String,Boolean> defaultToggleStates = new HashMap<String, Boolean>();
+       
+       private Map<String,String> defaultRadioStates = new HashMap<String, String>();
+       private Map<IWorkbenchPart,Map<String,String>> radioStates = new HashMap<IWorkbenchPart, Map<String,String>>();
+
+       private ICommandService service;
+       private IHandlerService handlerService;
+       
+       private CommandStateRegistry() {
+               service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
+               handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
+       }
+       
+       /**
+        * Stores default state for a command.
+        * 
+        * Note: uses current state as default. 
+        * 
+        * @param commandId
+        */
+       public void storeDefaultState(String commandId) {
+               Command command = service.getCommand(commandId);
+               State toggleState = command.getState(RegistryToggleState.STATE_ID);
+               State radioState = command.getState(RadioState.STATE_ID);
+               if (toggleState != null) {
+                       if (!defaultToggleStates.containsKey(commandId))
+                               defaultToggleStates.put(commandId, getToggleState(command));
+               } else if (radioState != null) {
+                       String value = (String) radioState.getValue();
+                       if (!defaultRadioStates.containsKey(commandId))
+                               defaultRadioStates.put(commandId, value);
+               } else {
+                       throw new IllegalArgumentException("Command " + commandId + " does not have a state");
+               }
+       }
+       /**
+        * Stores toggle state of a command.
+        * @param part
+        * @param commandId
+        * @param checked
+        */
+       public void setEditorState(IWorkbenchPart part, String commandId, boolean checked) {
+               Map<String,Boolean> editorStates = toggleStates.get(part);
+               if (editorStates == null) {
+                       editorStates = new HashMap<String, Boolean>();
+                       toggleStates.put(part, editorStates);
+               }
+               editorStates.put(commandId, checked);
+               fireStateChange(part, commandId, Boolean.toString(checked));
+       }
+       
+       /**
+        * Stores radio state of a command.
+        * @param part
+        * @param commandId
+        * @param value
+        */
+       public void setEditorState(IWorkbenchPart part, String commandId, String value) {
+               Map<String,String> editorStates = radioStates.get(part);
+               if (editorStates == null) {
+                       editorStates = new HashMap<String, String>();
+                       radioStates.put(part, editorStates);
+               }
+               editorStates.put(commandId, value);
+               fireStateChange(part, commandId, value);
+       }
+       
+       
+       
+       public Map<String, Boolean> getDefaultToggleStates() {
+               return defaultToggleStates;
+       }
+       
+       public Map<String, String> getDefaultRadioStates() {
+               return defaultRadioStates;
+       }
+       
+       public Map<String, Boolean> getEditorToggleStates(IWorkbenchPart part) {
+               return toggleStates.get(part);
+       }
+       
+       public Map<String, String> getEditorRadioStates(IWorkbenchPart part) {
+               return radioStates.get(part);
+       }
+       
+       public Boolean getToggleState(IWorkbenchPart part, String commandId) {
+               if (part == null)
+                       return defaultToggleStates.get(commandId);
+               Map<String,Boolean> editorStates = toggleStates.get(part);
+               if (editorStates == null) {
+                       return defaultToggleStates.get(commandId);
+               }
+               return editorStates.get(commandId);
+       }
+       
+       public String getRadioState(IWorkbenchPart part, String commandId) {
+               if (part == null)
+                       return defaultRadioStates.get(commandId);
+               Map<String,String> editorStates = radioStates.get(part);
+               if (editorStates == null) {
+                       return defaultRadioStates.get(commandId);
+               }
+               return editorStates.get(commandId);
+       }
+       
+       public void clearStates(IWorkbenchPart part) {
+               toggleStates.remove(part);
+               radioStates.remove(part);
+               listenerWithPart.remove(part);
+       }
+       
+       private boolean getToggleState(Command command) {
+               State toggleState = command.getState(RegistryToggleState.STATE_ID);
+               return (Boolean)toggleState.getValue();
+       }
+       
+       
+       private List<CommandStateListener> listeners = new ArrayList<CommandStateListener>();
+       private MapList<String, CommandStateListener> listenerWithCommandId = new MapList<String, CommandStateListener>();
+       private MapList<IWorkbenchPart, CommandStateListener> listenerWithPart = new MapList<IWorkbenchPart, CommandStateListener>();
+       
+       /**
+        * Attaches a listener that receives all state changes of all commands and all workbench parts.
+        * @param listener
+        */
+       public void addListener(CommandStateListener listener) {
+               if (!listeners.contains(listener))
+                       listeners.add(listener);
+       }
+       
+       /**
+        * Attaches a listener to receive state changes of specific workbench part.
+        * @param part
+        * @param listener
+        */
+       public void addListener(IWorkbenchPart part, CommandStateListener listener) {
+               if (!listenerWithPart.contains(part,listener))
+                       listenerWithPart.add(part,listener);
+       }
+       
+       /**
+        * Attaches a listener to receive state changes of specific command.
+        * @param part
+        * @param listener
+        */
+       public void addListener(String commandId, CommandStateListener listener) {
+               if (!listenerWithCommandId.contains(commandId,listener))
+                       listenerWithCommandId.add(commandId, listener);
+       }
+       
+       /**
+        * Removes the listener from the registry.
+        * @param listener
+        */
+       public void removeListener(CommandStateListener listener) {
+               listeners.remove(listener);
+               Set<String> commandIds = new HashSet<String>();
+               commandIds.addAll(listenerWithCommandId.getKeys());
+               for (String commandId : commandIds) {
+                       listenerWithCommandId.remove(commandId, listener);
+               }
+               commandIds.clear();
+               Set<IWorkbenchPart> parts = new HashSet<IWorkbenchPart>();
+               parts.addAll(listenerWithPart.getKeys());
+               for (IWorkbenchPart part : parts) {
+                       listenerWithPart.remove(part, listener);
+               }
+               parts.clear();
+       }
+       
+       private List<CommandStateListener> fireList = new ArrayList<CommandStateListener>();
+       
+       private void fireStateChange(IWorkbenchPart part, String commandId, String state) {
+               fireList.clear();
+               fireList.addAll(listeners);
+               List<CommandStateListener> list = listenerWithCommandId.getValues(commandId);
+               if (list != null) {
+                       fireList.addAll(list);
+                       
+               }
+               list = listenerWithPart.getValues(part);
+               if (list != null) {
+                       fireList.addAll(list);
+                       
+               }       
+               for (CommandStateListener l : fireList) {
+                       l.stateChanged(part, commandId, state);
+               }
+
+       }
+       
+}