]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d/src/org/simantics/g3d/toolbar/CommandStateRegistry.java
3D framework (Simca 2012)
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / toolbar / CommandStateRegistry.java
1 package org.simantics.g3d.toolbar;\r
2 \r
3 import java.util.HashMap;\r
4 import java.util.Map;\r
5 \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
14 \r
15 /**\r
16  * Registry for storing command states separately for each IEditorPart\r
17  * \r
18  * TODO : how to change toggle/radios state from editor?\r
19  *   TODO : how to update visible buttons (ToolbarContributor)\r
20  * \r
21  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
22  *\r
23  */\r
24 public class CommandStateRegistry {\r
25 \r
26         \r
27         private static CommandStateRegistry instance;\r
28         \r
29         \r
30         public static CommandStateRegistry getInstance() {\r
31                 if (instance == null)\r
32                         instance = new CommandStateRegistry();\r
33                 return instance;\r
34         }\r
35         \r
36         \r
37         \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
40         \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
43 \r
44         private ICommandService service;\r
45         private IHandlerService handlerService;\r
46         \r
47         private CommandStateRegistry() {\r
48                 service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);\r
49                 handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);\r
50         }\r
51         \r
52         /**\r
53          * Stores default state for a command.\r
54          * \r
55          * Note: uses current state as default. \r
56          * \r
57          * @param commandId\r
58          */\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
70                 } else {\r
71                         throw new IllegalArgumentException("Command " + commandId + " does not have a state");\r
72                 }\r
73         }\r
74         /**\r
75          * Stores toggle state of a command.\r
76          * @param part\r
77          * @param commandId\r
78          * @param checked\r
79          */\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
85                 }\r
86                 editorStates.put(commandId, checked);\r
87         }\r
88         \r
89         /**\r
90          * Stores radio state of a command.\r
91          * @param part\r
92          * @param commandId\r
93          * @param value\r
94          */\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
100                 }\r
101                 editorStates.put(commandId, value);\r
102         }\r
103         \r
104         public Map<String, Boolean> getDefaultToggleStates() {\r
105                 return defaultToggleStates;\r
106         }\r
107         \r
108         public Map<String, String> getDefaultRadioStates() {\r
109                 return defaultRadioStates;\r
110         }\r
111         \r
112         public Map<String, Boolean> getEditorToggleStates(IWorkbenchPart part) {\r
113                 return toggleStates.get(part);\r
114         }\r
115         \r
116         public Map<String, String> getEditorRadioStates(IWorkbenchPart part) {\r
117                 return radioStates.get(part);\r
118         }\r
119         \r
120         public Boolean getToggleState(IWorkbenchPart part, String commandId) {\r
121                 if (part == null)\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
126                 }\r
127                 return editorStates.get(commandId);\r
128         }\r
129         \r
130         public String getRadioState(IWorkbenchPart part, String commandId) {\r
131                 if (part == null)\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
136                 }\r
137                 return editorStates.get(commandId);\r
138         }\r
139         \r
140         public void clearStates(IWorkbenchPart part) {\r
141                 toggleStates.remove(part);\r
142                 radioStates.remove(part);\r
143         }\r
144         \r
145         private boolean getToggleState(Command command) {\r
146                 State toggleState = command.getState(RegistryToggleState.STATE_ID);\r
147                 return (Boolean)toggleState.getValue();\r
148         }\r
149         \r
150         \r
151 }\r