Pin tab action now available in Tool Window toolbar for run, debug, find usages and hierarchy toolwindows

This commit is contained in:
Alexey Pegov
2009-09-15 20:00:50 +04:00
parent 7b49b8cf6f
commit f8d097897e
12 changed files with 95 additions and 32 deletions
@@ -42,6 +42,7 @@ import com.intellij.ui.content.AlertIcon;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentManagerAdapter;
import com.intellij.ui.content.ContentManagerEvent;
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
import com.intellij.unscramble.ThreadDumpPanel;
import com.intellij.unscramble.ThreadState;
import com.intellij.xdebugger.XDebuggerBundle;
@@ -333,6 +334,7 @@ public class DebuggerSessionTab extends DebuggerLogConsoleManagerBase implements
group.addSeparator();
addActionToGroup(group, PinToolwindowTabAction.ACTION_NAME);
group.add(new CloseAction(executor, myRunContentDescriptor, getProject()));
group.add(new ContextHelpAction(executor.getHelpId()));
Binary file not shown.

After

Width:  |  Height:  |  Size: 849 B

@@ -28,6 +28,7 @@ import com.intellij.openapi.util.IconLoader;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentManagerAdapter;
import com.intellij.ui.content.ContentManagerEvent;
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -215,6 +216,7 @@ public class RunContentBuilder implements LogConsoleManager, Disposable {
actionGroup.addSeparator();
actionGroup.add(myUi.getOptions().getLayoutActions());
actionGroup.addSeparator();
actionGroup.add(PinToolwindowTabAction.getPinAction());
actionGroup.add(new CloseAction(myExecutor, contentDescriptor, myProject));
actionGroup.add(new ContextHelpAction(myExecutor.getHelpId()));
return actionGroup;
@@ -10,6 +10,7 @@ import com.intellij.pom.Navigatable;
import com.intellij.psi.NavigatablePsiElement;
import com.intellij.psi.PsiElement;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
import com.intellij.ui.AutoScrollToSourceHandler;
import com.intellij.ui.TreeSpeedSearch;
import com.intellij.ui.TreeToolTipHandler;
@@ -75,6 +76,7 @@ public abstract class HierarchyBrowserBase extends SimpleToolWindowPanel impleme
protected void appendActions(@NotNull DefaultActionGroup actionGroup, @Nullable String helpID) {
actionGroup.add(myAutoScrollToSourceHandler.createToggleAction());
actionGroup.add(PinToolwindowTabAction.getPinAction());
actionGroup.add(new CloseAction());
if (helpID != null) {
actionGroup.add(new ContextHelpAction(helpID));
@@ -40,7 +40,7 @@ import java.util.Map;
* @author Eugene Belyaev
* @author Vladimir Kondratyev
*/
public final class InternalDecorator extends JPanel implements TestableUi {
public final class InternalDecorator extends JPanel implements TestableUi, TypeSafeDataProvider {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.wm.impl.InternalDecorator");
private static final int DIVIDER_WIDTH = 5;
@@ -268,6 +268,12 @@ public final class InternalDecorator extends JPanel implements TestableUi {
}
}
public void calcData(DataKey key, DataSink sink) {
if (PlatformDataKeys.TOOL_WINDOW.equals(key)) {
sink.put(PlatformDataKeys.TOOL_WINDOW, myToolWindow);
}
}
final void addInternalDecoratorListener(final InternalDecoratorListener l) {
myListenerList.add(InternalDecoratorListener.class, l);
}
@@ -8,6 +8,7 @@ import com.intellij.openapi.wm.impl.ToolWindowImpl;
import com.intellij.ui.PopupHandler;
import com.intellij.ui.content.*;
import com.intellij.ui.content.tabs.TabbedContentAction;
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
import com.intellij.ui.tabs.impl.singleRow.MoreIcon;
import com.intellij.util.ui.BaseButtonBehavior;
import com.intellij.util.ui.UIUtil;
@@ -28,6 +29,7 @@ import java.util.HashMap;
import java.util.Map;
public class ToolWindowContentUi extends JPanel implements ContentUI, PropertyChangeListener, DataProvider {
public static final String POPUP_PLACE = "ToolwindowPopup";
private ContentManager myManager;
@@ -499,7 +501,7 @@ public class ToolWindowContentUi extends JPanel implements ContentUI, PropertyCh
contentGroup.add(new TabbedContentAction.CloseAllButThisAction(content));
contentGroup.addSeparator();
if (content.isPinnable()) {
contentGroup.add(new TabbedContentAction.MyPinTabAction(content));
contentGroup.add(PinToolwindowTabAction.getPinAction());
contentGroup.addSeparator();
}
@@ -518,7 +520,7 @@ public class ToolWindowContentUi extends JPanel implements ContentUI, PropertyCh
group.addAll(windowPopup);
}
final ActionPopupMenu popupMenu = ActionManager.getInstance().createActionPopupMenu(ActionPlaces.UNKNOWN, group);
final ActionPopupMenu popupMenu = ActionManager.getInstance().createActionPopupMenu(POPUP_PLACE, group);
popupMenu.getComponent().show(comp, x, y);
}
});
@@ -8,6 +8,7 @@ import com.intellij.ui.TabbedPaneWrapper;
import com.intellij.ui.TabbedPaneImpl;
import com.intellij.ui.TabbedPane;
import com.intellij.ui.content.tabs.TabbedContentAction;
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
import com.intellij.util.IJSwingUtilities;
import javax.swing.*;
@@ -26,6 +27,8 @@ import java.util.List;
* @author Vladimir Kondratyev
*/
public class TabbedPaneContentUI implements ContentUI, PropertyChangeListener {
public static final String POPUP_PLACE = "TabbedPanePopup";
private ContentManager myManager;
private TabbedPaneWrapper myTabbedPaneWrapper;
@@ -118,6 +121,7 @@ public class TabbedPaneContentUI implements ContentUI, PropertyChangeListener {
}
private class MyTabbedPane extends TabbedPaneImpl {
public MyTabbedPane(int tabPlacement) {
super(tabPlacement);
addMouseListener(new MyPopupHandler());
@@ -230,7 +234,7 @@ public class TabbedPaneContentUI implements ContentUI, PropertyChangeListener {
group.add(new TabbedContentAction.CloseAllButThisAction(content));
}
group.addSeparator();
group.add(new TabbedContentAction.MyPinTabAction(content));
group.add(PinToolwindowTabAction.getPinAction());
group.addSeparator();
group.add(new TabbedContentAction.MyNextTabAction(myManager));
group.add(new TabbedContentAction.MyPreviousTabAction(myManager));
@@ -241,7 +245,7 @@ public class TabbedPaneContentUI implements ContentUI, PropertyChangeListener {
group.add(anAction);
}
}
ActionPopupMenu menu = ActionManager.getInstance().createActionPopupMenu(ActionPlaces.UNKNOWN, group);
ActionPopupMenu menu = ActionManager.getInstance().createActionPopupMenu(POPUP_PLACE, group);
menu.getComponent().show(myTabbedPaneWrapper.getComponent(), x, y);
}
}
@@ -0,0 +1,67 @@
package com.intellij.ui.content.tabs;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.impl.content.ToolWindowContentUi;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentManager;
import com.intellij.ui.content.TabbedPaneContentUI;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
/**
* @author spleaner
*/
public class PinToolwindowTabAction extends ToggleAction {
public static final String ACTION_NAME = "PinToolwindowTab";
private static final Icon ICON = IconLoader.getIcon("/general/pin_tab.png");
public static AnAction getPinAction() {
return ActionManager.getInstance().getAction(ACTION_NAME);
}
public PinToolwindowTabAction() {
super("Pin Tab", "Pin tool window tab", ICON);
}
@Nullable
private static Content getContextContent(AnActionEvent event) {
final ToolWindow window = PlatformDataKeys.TOOL_WINDOW.getData(event.getDataContext());
if (window != null) {
final ContentManager contentManager = window.getContentManager();
if (contentManager != null) {
return contentManager.getSelectedContent();
}
}
return null;
}
public boolean isSelected(AnActionEvent event) {
final Content content = getContextContent(event);
return content != null && content.isPinned();
}
public void setSelected(AnActionEvent event, boolean flag) {
final Content content = getContextContent(event);
if (content != null) content.setPinned(flag);
}
public void update(AnActionEvent event) {
super.update(event);
Presentation presentation = event.getPresentation();
final Content content = getContextContent(event);
boolean enabled = content != null && content.isPinnable();
if (enabled) {
presentation.setIcon(
TabbedPaneContentUI.POPUP_PLACE.equals(event.getPlace()) || ToolWindowContentUi.POPUP_PLACE.equals(event.getPlace()) ? null : ICON);
}
presentation.setEnabled(enabled);
presentation.setVisible(enabled);
}
}
@@ -101,33 +101,6 @@ public abstract class TabbedContentAction extends AnAction implements DumbAware
}
}
public static class MyPinTabAction extends ToggleAction {
private final Content myContent;
public MyPinTabAction(Content content) {
myContent = content;
Presentation presentation = getTemplatePresentation();
presentation.setText(UIBundle.message("tabbed.pane.pin.tab.action.name"));
presentation.setDescription(UIBundle.message("tabbed.pane.pin.tab.action.description"));
}
public boolean isSelected(AnActionEvent event) {
return myContent != null && myContent.isPinned();
}
public void setSelected(AnActionEvent event, boolean flag) {
myContent.setPinned(flag);
}
public void update(AnActionEvent event) {
super.update(event);
Presentation presentation = event.getPresentation();
boolean enabled = myContent != null && myContent.isPinnable();
presentation.setEnabled(enabled);
presentation.setVisible(enabled);
}
}
public static class CloseAllAction extends TabbedContentAction {
public CloseAllAction(ContentManager manager) {
super(manager, ActionManager.getInstance().getAction(IdeActions.ACTION_CLOSE_ALL_EDITORS), UIBundle.message("tabbed.pane.close.all.action.name"));
@@ -92,6 +92,8 @@
<action id="ScrollTreeToCenter" class="com.intellij.ide.actions.ScrollTreeToCenterAction" use-shortcut-of="EditorScrollToCenter"/>
<action id="PinToolwindowTab" class="com.intellij.ui.content.tabs.PinToolwindowTabAction"/>
<group id="MainMenu">
<group id="FileMenu" popup="true">
<group id="FileOpenGroup">
@@ -423,6 +423,7 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra
return new AnAction[]{
canPerformReRun() ? new ReRunAction() : null,
new CloseAction(),
ActionManager.getInstance().getAction("PinToolwindowTab"),
createRecentFindUsagesAction(),
expandAllAction,
collapseAllAction,
@@ -23,6 +23,7 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ex.WindowManagerEx;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.tabs.PinToolwindowTabAction;
import com.intellij.xdebugger.XDebugProcess;
import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.XDebuggerBundle;
@@ -207,6 +208,7 @@ public class XDebugSessionTab extends DebuggerLogConsoleManagerBase {
group.addSeparator();
group.add(PinToolwindowTabAction.getPinAction());
group.add(new CloseAction(executor, myRunContentDescriptor, getProject()));
group.add(new ContextHelpAction(executor.getHelpId()));