61c75d358b7d84873498b2516e8085f941c58be5
[idea/community.git] / platform / platform-impl / src / com / intellij / ide / actions / BaseToolWindowToggleAction.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.ide.actions;
17
18 import com.intellij.openapi.actionSystem.AnActionEvent;
19 import com.intellij.openapi.actionSystem.CommonDataKeys;
20 import com.intellij.openapi.actionSystem.PlatformDataKeys;
21 import com.intellij.openapi.actionSystem.Presentation;
22 import com.intellij.openapi.actionSystem.ToggleAction;
23 import com.intellij.openapi.project.DumbAware;
24 import com.intellij.openapi.project.Project;
25 import com.intellij.openapi.wm.ToolWindow;
26 import com.intellij.openapi.wm.ToolWindowManager;
27 import com.intellij.openapi.wm.ex.ToolWindowEx;
28 import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
29
30 public abstract class BaseToolWindowToggleAction extends ToggleAction implements DumbAware {
31
32   @Override
33   public final boolean isSelected(AnActionEvent e) {
34     Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
35     if (project == null || project.isDisposed()) {
36       return false;
37     }
38     ToolWindowManager mgr=ToolWindowManager.getInstance(project);
39     String id=mgr.getActiveToolWindowId();
40     if(id==null){
41       return false;
42     }
43     return isSelected(mgr.getToolWindow(id));
44   }
45
46   protected abstract boolean isSelected(ToolWindow window);
47
48   @Override
49   public final void setSelected(AnActionEvent e, boolean state) {
50     Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
51     if (project == null) {
52       return;
53     }
54     String id=ToolWindowManager.getInstance(project).getActiveToolWindowId();
55     if(id==null){
56       return;
57     }
58
59     ToolWindowManagerEx mgr=ToolWindowManagerEx.getInstanceEx(project);
60     ToolWindowEx toolWindow=(ToolWindowEx)mgr.getToolWindow(id);
61
62     setSelected(toolWindow, state);
63   }
64
65   protected abstract void setSelected(ToolWindow window, boolean state);
66
67   @Override
68   public final void update(AnActionEvent e) {
69     super.update(e);
70     Presentation presentation = e.getPresentation();
71     Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
72     if (project == null) {
73       presentation.setEnabled(false);
74       return;
75     }
76     ToolWindowManager mgr=ToolWindowManager.getInstance(project);
77     String id=mgr.getActiveToolWindowId();
78
79     if (id == null) {
80       presentation.setEnabled(false);
81       return;
82     }
83
84     ToolWindow window = mgr.getToolWindow(id);
85
86     if (window == null) {
87       presentation.setEnabled(false);
88       return;
89     }
90
91     update(window, presentation);
92   }
93
94   protected abstract void update(ToolWindow window, Presentation presentation);
95 }