From d26039455e46a9687b4d4ddacdd4ef21ac77644d Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Wed, 28 Dec 2011 18:20:38 +0400 Subject: [PATCH] added scroll from source action to titlebar --- platform/icons/src/general/divider.png | Bin 0 -> 1004 bytes platform/icons/src/general/locate.png | Bin 0 -> 1418 bytes .../ide/projectView/impl/ProjectViewImpl.java | 26 ++++++++++- .../openapi/wm/impl/InternalDecorator.java | 4 ++ .../openapi/wm/impl/ToolWindowHeader.java | 42 ++++++++++++++---- 5 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 platform/icons/src/general/divider.png create mode 100644 platform/icons/src/general/locate.png diff --git a/platform/icons/src/general/divider.png b/platform/icons/src/general/divider.png new file mode 100644 index 0000000000000000000000000000000000000000..ea797b974d888d7e1823e2cf1383e34b800517c6 GIT binary patch literal 1004 zcmaJ=J8aWH7FqDc)s6vb^hyg|lnclYc6zW?>z{bJ$LK>uJr zMNtF!8LdS217w{%a)|t2W#Q=QN1H} zrHZTiW!XdyV?;ho=y(K8QJKlmGt7C2!7QA!U4`C#wMhfpQs^t9&gotj*6o>PAC{L3 z6?1vslq`Dk0?33iA#flzK4N7KdM~M}UIba>Lm)C-+~g*B zFp*^VBqt@MaUgI!$MOQprQ$p%iz%7oLF=PQG~cSpC2hJDi`*2tjTHucGUI%yE;zCJHRElpYK13gUXTz*%A!UqHmJH)rO-`o}BfefstQ9XrbN3 zVjW==)R70WWs%{5ZkVg1Wv>)*}} xg|TBBV~LH}>gaHKY^U(>=QaOD&yz<~FZJf|Q0&CjU%S!!%jXK()2SPG{{Wj{JnaAg literal 0 HcmV?d00001 diff --git a/platform/icons/src/general/locate.png b/platform/icons/src/general/locate.png new file mode 100644 index 0000000000000000000000000000000000000000..82ba59505afe2de43c1719fb20cc58d8825c230c GIT binary patch literal 1418 zcmeAS@N?(olHy`uVBq!ia0vp^d_XL~!3HGNrubO_DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49qH-ArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XP}#GU}mUbW};_k zVqj@vsiRh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*q`*i_F@!8b8E zGY=#J*5T`G<(XGpl9-pA>gi&u1T;f0Gc(1?#LUIf(Z$rj$kN=>(9qS;(#hP=)zQ_& z!o|YC(bUl#rq?AuximL5uLPzy1)eUB2MjsTlNKp+F0;V4j6P|E^9C*@C%>$d+yv?S$+NWT`N|+2wae4J;CC_1n2ef`?vl3 z^YioE`S$f}Z*OdTEOlq4gKv(FjZOB_rAvPvI(*ps*YDrljb;W71|7UY%qJVKG+b%= zvY~;)%xs&KprBxCef|HC^78M!4h#7mmLG~KJ$L>3ce#MGzrVh|e*WLr*WtVYYx)?U zTv@VY$#GLtQ})IjIRW{uy$d9cJ!f3WxRUjw2)qqDQ|&zXY%|7y#`{Qb}WFMogU@9~o-PqOgHtZ~%W*5+Oo85!yL?;ram z<|3wKSJ$I|j~zSK95JW;QO*RZ2~iW|0yzGNi-_FeD_Q32;BY`%pjfd(dPL_GT z+<(5#blqsNvghYyy%QW>G_uqKec~A!`n95<;Db~`j65q>?QxIQ7pADNADQH!!y#JD mf8>1Q55p5`Gn^V2m>E{?;V6)oHl7G79X(zBT-G@yGywpd0}Gb` literal 0 HcmV?d00001 diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java index d7b3b7dfea22..a8fc864f69c3 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java @@ -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 diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/InternalDecorator.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/InternalDecorator.java index 24bb21a9c8fa..3f09393c3616 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/InternalDecorator.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/InternalDecorator.java @@ -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; diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowHeader.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowHeader.java index 73b627a60a5c..141317e87c2c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowHeader.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowHeader.java @@ -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 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) {