diff --git a/platform/icons/src/general/collapseAllHover.png b/platform/icons/src/general/collapseAllHover.png new file mode 100755 index 000000000000..c06145527144 Binary files /dev/null and b/platform/icons/src/general/collapseAllHover.png differ diff --git a/platform/icons/src/general/gearHover.png b/platform/icons/src/general/gearHover.png new file mode 100755 index 000000000000..4d4518ab2b76 Binary files /dev/null and b/platform/icons/src/general/gearHover.png differ diff --git a/platform/icons/src/general/hideDownHover.png b/platform/icons/src/general/hideDownHover.png new file mode 100755 index 000000000000..66dd0339f008 Binary files /dev/null and b/platform/icons/src/general/hideDownHover.png differ diff --git a/platform/icons/src/general/hideDownPartHover.png b/platform/icons/src/general/hideDownPartHover.png new file mode 100755 index 000000000000..97d7fda24393 Binary files /dev/null and b/platform/icons/src/general/hideDownPartHover.png differ diff --git a/platform/icons/src/general/hideLeftHover.png b/platform/icons/src/general/hideLeftHover.png new file mode 100755 index 000000000000..37e59950136e Binary files /dev/null and b/platform/icons/src/general/hideLeftHover.png differ diff --git a/platform/icons/src/general/hideLeftPartHover.png b/platform/icons/src/general/hideLeftPartHover.png new file mode 100755 index 000000000000..220e5f025d04 Binary files /dev/null and b/platform/icons/src/general/hideLeftPartHover.png differ diff --git a/platform/icons/src/general/hideRightHover.png b/platform/icons/src/general/hideRightHover.png new file mode 100755 index 000000000000..f971f5cdab81 Binary files /dev/null and b/platform/icons/src/general/hideRightHover.png differ diff --git a/platform/icons/src/general/hideRightPartHover.png b/platform/icons/src/general/hideRightPartHover.png new file mode 100755 index 000000000000..e4daccb90838 Binary files /dev/null and b/platform/icons/src/general/hideRightPartHover.png differ diff --git a/platform/icons/src/general/locateHover.png b/platform/icons/src/general/locateHover.png new file mode 100755 index 000000000000..670999a7e8f8 Binary files /dev/null and b/platform/icons/src/general/locateHover.png differ 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 c75b4662f6f5..08d9c320118f 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 @@ -512,6 +512,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo if (action instanceof CollapseAllToolbarAction) { collapseAction = (CollapseAllToolbarAction)action; collapseAction.getTemplatePresentation().setIcon(IconLoader.getIcon("/general/collapseAll.png")); + collapseAction.getTemplatePresentation().setHoveredIcon(IconLoader.getIcon("/general/collapseAllHover.png")); myActionGroup.remove(collapseAction); } } @@ -1710,6 +1711,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/locate.png")); + getTemplatePresentation().setHoveredIcon(IconLoader.getIcon("/general/locateHover.png")); } @Override 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 5abc327da393..cc38413cf978 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 @@ -65,6 +65,16 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable { private static final Icon ourSettingsIcon = IconLoader.getIcon("/general/gear.png"); private static final Icon ourSeparatorIcon = IconLoader.getIcon("/general/divider.png"); + private static final Icon ourHideLeftSideHoveredIcon = IconLoader.getIcon("/general/hideLeftHover.png"); + private static final Icon ourHideRightSideHoveredIcon = IconLoader.getIcon("/general/hideRightHover.png"); + private static final Icon ourHideDownSideHoveredIcon = IconLoader.getIcon("/general/hideDownHover.png"); + + private static final Icon ourHideLeftHoveredIcon = IconLoader.getIcon("/general/hideLeftPartHover.png"); + private static final Icon ourHideRightHoveredIcon = IconLoader.getIcon("/general/hideRightPartHover.png"); + private static final Icon ourHideDownHoveredIcon = IconLoader.getIcon("/general/hideDownPartHover.png"); + + private static final Icon ourSettingsHoveredIcon = IconLoader.getIcon("/general/gearHover.png"); + private ToolWindow myToolWindow; private WindowInfoImpl myInfo; private final ToolWindowHeader.ActionButton myHideButton; @@ -126,7 +136,12 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable { popupMenu.getComponent().show(inputEvent.getComponent(), x, y); } - }, ourSettingsIcon); + }, ourSettingsIcon) { + @Override + protected Icon getActiveHoveredIcon() { + return ourSettingsHoveredIcon; + } + }; myHideButton = new ActionButton(new HideAction() { @Override @@ -150,6 +165,16 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable { protected Icon getAlternativeIcon() { return getHideIcon(myToolWindow); } + + @Override + protected Icon getActiveHoveredIcon() { + return getHideToolWindowHoveredIcon(myToolWindow); + } + + @Override + protected Icon getAlternativeHoveredIcon() { + return getHideHoveredIcon(myToolWindow); + } }; addDefaultActions(eastPanel); @@ -206,9 +231,15 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable { public void setAdditionalTitleActions(AnAction[] actions) { myButtonPanel.removeAll(); boolean actionAdded = false; - for (AnAction action : actions) { + for (final AnAction action : actions) { if (action == null) continue; - myButtonPanel.add(new ActionButton(action, action.getTemplatePresentation().getIcon())); + myButtonPanel.add(new ActionButton(action, action.getTemplatePresentation().getIcon()) { + @Override + protected Icon getActiveHoveredIcon() { + final Icon icon = action.getTemplatePresentation().getHoveredIcon(); + return icon != null ? icon : super.getActiveHoveredIcon(); + } + }); myButtonPanel.add(Box.createHorizontalStrut(7)); actionAdded = true; } @@ -243,6 +274,30 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable { return ourHideLeftSideIcon; } + private static Icon getHideToolWindowHoveredIcon(ToolWindow toolWindow) { + ToolWindowAnchor anchor = toolWindow.getAnchor(); + if (anchor == ToolWindowAnchor.BOTTOM) { + return ourHideDownHoveredIcon; + } + else if (anchor == ToolWindowAnchor.RIGHT) { + return ourHideRightHoveredIcon; + } + + return ourHideLeftHoveredIcon; + } + + private static Icon getHideHoveredIcon(ToolWindow toolWindow) { + ToolWindowAnchor anchor = toolWindow.getAnchor(); + if (anchor == ToolWindowAnchor.BOTTOM) { + return ourHideDownSideHoveredIcon; + } + else if (anchor == ToolWindowAnchor.RIGHT) { + return ourHideRightSideHoveredIcon; + } + + return ourHideLeftSideHoveredIcon; + } + @Override protected void paintComponent(Graphics g) { Rectangle r = getBounds(); @@ -375,11 +430,11 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable { } }; - myButton.setHoveringEnabled(false); + myButton.setHoveringEnabled(true); setContent(myButton); setOpaque(false); - setIcon(getActiveIcon(), getInactiveIcon() == null ? getActiveIcon() : getInactiveIcon()); + setIcon(getActiveIcon(), getInactiveIcon() == null ? getActiveIcon() : getInactiveIcon(), getActiveHoveredIcon()); PropertyChangeListener listener = new PropertyChangeListener() { @Override @@ -408,6 +463,10 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable { return myActiveIcon; } + protected Icon getActiveHoveredIcon() { + return myActiveIcon; + } + protected Icon getInactiveIcon() { return myInactiveIcon; } @@ -416,12 +475,17 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable { return myAlternativeIcon; } + protected Icon getAlternativeHoveredIcon() { + return myAlternativeIcon; + } + private void switchAlternativeAction(boolean b) { if (b && myCurrentAction == myAlternativeAction) return; if (!b && myCurrentAction != myAlternativeAction) return; setIcon(b ? getAlternativeIcon() : getActiveIcon(), - b ? getAlternativeIcon() : getInactiveIcon() == null ? getActiveIcon() : getInactiveIcon()); + b ? getAlternativeIcon() : getInactiveIcon() == null ? getActiveIcon() : getInactiveIcon(), + b ? getAlternativeHoveredIcon() : getActiveHoveredIcon()); myCurrentAction = b ? myAlternativeAction : myAction; setToolTipText(getToolTipTextByAction(myCurrentAction)); @@ -460,8 +524,8 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable { return ToolWindowHeader.this.isActive(); } - public void setIcon(final Icon active, Icon inactive) { - myButton.setIcons(active, inactive, active); + public void setIcon(final Icon active, Icon inactive, Icon hovered) { + myButton.setIcons(active, inactive, hovered); } public void setToolTipText(final String text) {