mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Pin tab action now available in Tool Window toolbar for run, debug, find usages and hierarchy toolwindows
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
+4
-2
@@ -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()));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user