added scroll from source action to titlebar

This commit is contained in:
Dennis Ushakov
2011-12-28 18:22:57 +04:00
parent 6af671355d
commit d26039455e
5 changed files with 62 additions and 10 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1004 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -21,6 +21,7 @@ import com.intellij.history.LocalHistory;
import com.intellij.history.LocalHistoryAction;
import com.intellij.ide.*;
import com.intellij.ide.FileEditorProvider;
import com.intellij.ide.actions.CollapseAllToolbarAction;
import com.intellij.ide.impl.ProjectViewSelectInTarget;
import com.intellij.ide.projectView.HelpID;
import com.intellij.ide.projectView.ProjectView;
@@ -69,6 +70,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.*;
import com.intellij.openapi.wm.ex.ToolWindowManagerAdapter;
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
import com.intellij.openapi.wm.impl.InternalDecorator;
import com.intellij.openapi.wm.impl.ToolWindowImpl;
import com.intellij.openapi.wm.impl.content.ToolWindowContentUi;
import com.intellij.psi.*;
@@ -471,6 +473,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo
myViewContentPanel.revalidate();
myViewContentPanel.repaint();
createToolbarActions();
updateTitleActions();
newPane.setTreeChangeListener(myTreeChangeListener);
myAutoScrollToSourceHandler.install(newPane.myTree);
@@ -506,6 +509,25 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo
myAutoScrollToSourceHandler.onMouseClicked(newPane.myTree);
}
private void updateTitleActions() {
final ToolWindow window = ToolWindowManager.getInstance(myProject).getToolWindow("Project");
if (window == null) return;
final InternalDecorator decorator = ((ToolWindowImpl)window).getDecorator();
ScrollFromSourceAction scrollAction = null;
CollapseAllToolbarAction collapseAction = null;
for (AnAction action : myActionGroup.getChildren(null)) {
if (action instanceof ScrollFromSourceAction) {
scrollAction = (ScrollFromSourceAction)action;
myActionGroup.remove(scrollAction);
}
if (action instanceof CollapseAllToolbarAction) {
collapseAction = (CollapseAllToolbarAction)action;
myActionGroup.remove(collapseAction);
}
}
decorator.setTitleActions(new AnAction[] {scrollAction, collapseAction});
}
// public for tests
public synchronized void setupImpl(final ToolWindow toolWindow) {
setupImpl(toolWindow, true);
@@ -670,7 +692,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo
return true;
}
}, getComponent());
myActionGroup.add(collapseAllAction);
//myActionGroup.add(collapseAllAction);
getCurrentProjectViewPane().addToolbarActions(myActionGroup);
}
@@ -1732,7 +1754,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo
private class ScrollFromSourceAction extends AnAction implements DumbAware {
private ScrollFromSourceAction() {
super("Scroll from Source", "Select the file open in the active editor", IconLoader.getIcon("/general/autoscrollFromSource.png"));
super("Scroll from Source", "Select the file open in the active editor", IconLoader.getIcon("/general/locate.png"));
}
@Override
@@ -334,6 +334,10 @@ public final class InternalDecorator extends JPanel implements Queryable, TypeSa
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
}
public void setTitleActions(AnAction[] actions) {
myHeader.setAdditionalTitleActions(actions);
}
private static class InnerPanelBorder implements Border {
private final ToolWindow myWindow;
@@ -63,6 +63,7 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable {
private static final Icon ourHideDownIcon = IconLoader.getIcon("/general/hideDownPart.png");
private static final Icon ourSettingsIcon = IconLoader.getIcon("/general/gear.png");
private static final Icon ourSeparatorIcon = IconLoader.getIcon("/general/divider.png");
private ToolWindow myToolWindow;
private WindowInfoImpl myInfo;
@@ -70,6 +71,8 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable {
private BufferedImage myImage;
private BufferedImage myActiveImage;
private ToolWindowType myImageType;
private JPanel myButtonPanel;
private final ToolWindowHeader.ActionButton myGearButton;
public ToolWindowHeader(final ToolWindowImpl toolWindow, WindowInfoImpl info, @NotNull final Producer<ActionGroup> gearProducer) {
setLayout(new BorderLayout());
@@ -106,12 +109,13 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable {
eastPanel.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
add(eastPanel, BorderLayout.EAST);
eastPanel.add(new ActionButton(new AnAction() {
myGearButton = new ActionButton(new AnAction() {
@Override
public void actionPerformed(AnActionEvent e) {
final InputEvent inputEvent = e.getInputEvent();
final ActionPopupMenu popupMenu =
((ActionManagerImpl)ActionManager.getInstance()).createActionPopupMenu(ToolWindowContentUi.POPUP_PLACE, gearProducer.produce(), new MenuItemPresentationFactory(true));
((ActionManagerImpl)ActionManager.getInstance())
.createActionPopupMenu(ToolWindowContentUi.POPUP_PLACE, gearProducer.produce(), new MenuItemPresentationFactory(true));
int x = 0;
int y = 0;
@@ -122,9 +126,7 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable {
popupMenu.getComponent().show(inputEvent.getComponent(), x, y);
}
}, ourSettingsIcon));
eastPanel.add(Box.createHorizontalStrut(3));
}, ourSettingsIcon);
myHideButton = new ActionButton(new HideAction() {
@Override
@@ -137,7 +139,7 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable {
sideHidden();
}
},
ourHideLeftSideIcon, null, null
ourHideLeftSideIcon, null, null
) {
@Override
protected Icon getActiveIcon() {
@@ -150,7 +152,8 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable {
}
};
eastPanel.add(myHideButton);
addDefaultActions(eastPanel);
myButtonPanel = eastPanel;
addMouseListener(new PopupHandler() {
public void invokePopup(final Component comp, final int x, final int y) {
@@ -180,6 +183,13 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable {
setBorder(BorderFactory.createEmptyBorder(TabsUtil.TABS_BORDER, 1, TabsUtil.TABS_BORDER, 1));
}
private void addDefaultActions(JPanel eastPanel) {
eastPanel.add(myGearButton);
eastPanel.add(Box.createHorizontalStrut(6));
eastPanel.add(myHideButton);
eastPanel.add(Box.createHorizontalStrut(1));
}
@Override
public void dispose() {
removeAll();
@@ -192,7 +202,23 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable {
myHideButton.updateTooltip();
}
}
public void setAdditionalTitleActions(AnAction[] actions) {
myButtonPanel.removeAll();
boolean actionAdded = false;
for (AnAction action : actions) {
if (action == null) continue;
myButtonPanel.add(new ActionButton(action, action.getTemplatePresentation().getIcon()));
myButtonPanel.add(Box.createHorizontalStrut(7));
actionAdded = true;
}
if (actionAdded) {
myButtonPanel.add(new JLabel(ourSeparatorIcon));
myButtonPanel.add(Box.createHorizontalStrut(6));
}
addDefaultActions(myButtonPanel);
}
private static Icon getHideToolWindowIcon(ToolWindow toolWindow) {
ToolWindowAnchor anchor = toolWindow.getAnchor();
if (anchor == ToolWindowAnchor.BOTTOM) {