diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/newui/ArrangementListRowDecorator.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/newui/ArrangementListRowDecorator.java index 4b6625fdb0be..3f2bc4edba7a 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/newui/ArrangementListRowDecorator.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/newui/ArrangementListRowDecorator.java @@ -119,7 +119,7 @@ public class ArrangementListRowDecorator extends JPanel implements ArrangementMa @Override public void setSelected(boolean selected) { - // TODO den implement + myDelegate.setSelected(selected); } @Nullable @@ -133,9 +133,10 @@ public class ArrangementListRowDecorator extends JPanel implements ArrangementMa myDelegate.onMouseClick(event); } + @Nullable @Override - public void onMouseExited() { - myDelegate.onMouseExited(); + public Rectangle onMouseExited() { + return myDelegate.onMouseExited(); } @Override diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/newui/ArrangementMatchingRulesList.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/newui/ArrangementMatchingRulesList.java index 375a08982afc..e46795b98f3e 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/newui/ArrangementMatchingRulesList.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/newui/ArrangementMatchingRulesList.java @@ -28,6 +28,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -61,10 +63,13 @@ public class ArrangementMatchingRulesList extends JBList { @Override public void mouseMoved(MouseEvent e) { onMouseMoved(e); } }); addMouseListener(new MouseAdapter() { - @Override public void mouseExited(MouseEvent e) { onMouseExited(); } + @Override public void mouseExited(MouseEvent e) { onMouseExited(e); } @Override public void mouseEntered(MouseEvent e) { onMouseEntered(e); } @Override public void mouseClicked(MouseEvent e) { onMouseClicked(e); } }); + addListSelectionListener(new ListSelectionListener() { + @Override public void valueChanged(ListSelectionEvent e) { onSelectionChange(e); } + }); } public void setRules(@Nullable List rules) { @@ -90,13 +95,17 @@ public class ArrangementMatchingRulesList extends JBList { private void onMouseMoved(@NotNull MouseEvent e) { int i = locationToIndex(e.getPoint()); if (i != myRowUnderMouse) { - onMouseExited(); + onMouseExited(e); } if (i < 0) { return; } + if (i != myRowUnderMouse) { + onMouseEntered(e); + } + ArrangementListRowDecorator decorator = myComponents.get(i); if (decorator == null) { return; @@ -128,19 +137,34 @@ public class ArrangementMatchingRulesList extends JBList { } } - private void onMouseExited() { + private void onMouseExited(@NotNull MouseEvent e) { if (myRowUnderMouse < 0) { return; } ArrangementListRowDecorator decorator = myComponents.get(myRowUnderMouse); - if (decorator != null) { - decorator.onMouseExited(); + if (decorator == null) { + return; + } + + Rectangle rectangle = decorator.onMouseExited(); + if (rectangle != null) { + repaintScreenBounds(rectangle); } } private void onMouseEntered(@NotNull MouseEvent e) { - // TODO den implement + myRowUnderMouse = locationToIndex(e.getPoint()); + } + + private void onSelectionChange(@NotNull ListSelectionEvent e) { + ListSelectionModel model = getSelectionModel(); + for (int i = e.getFirstIndex(); i <= e.getLastIndex(); i++) { + ArrangementListRowDecorator decorator = myComponents.get(i); + if (decorator != null) { + decorator.setSelected(model.isSelectedIndex(i)); + } + } } @NotNull diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementAndMatchConditionComponent.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementAndMatchConditionComponent.java index b80e0ccc425f..3e4db73f6bd3 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementAndMatchConditionComponent.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementAndMatchConditionComponent.java @@ -184,11 +184,16 @@ public class ArrangementAndMatchConditionComponent extends JPanel implements Arr } } + @Nullable @Override - public void onMouseExited() { + public Rectangle onMouseExited() { for (ArrangementMatchConditionComponent component : myComponents) { - component.onMouseExited(); + Rectangle bounds = component.onMouseExited(); + if (bounds != null) { + return bounds; + } } + return null; } @Override diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementAtomMatchConditionComponent.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementAtomMatchConditionComponent.java index af52d86ec3b3..a00e1daa40bc 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementAtomMatchConditionComponent.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementAtomMatchConditionComponent.java @@ -224,9 +224,12 @@ public class ArrangementAtomMatchConditionComponent implements ArrangementMatchC } } + @Nullable @Override - public void onMouseExited() { + public Rectangle onMouseExited() { + Rectangle result = myCloseButtonHovered ? getCloseButtonScreenLocation() : null; myCloseButtonHovered = false; + return result; } @Nullable diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementEditIconMatchConditionComponent.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementEditIconMatchConditionComponent.java index 22da585ff115..c24e7b0d5e6b 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementEditIconMatchConditionComponent.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementEditIconMatchConditionComponent.java @@ -184,7 +184,9 @@ public class ArrangementEditIconMatchConditionComponent extends JPanel implement return "'edit' decorator for " + myDelegate.toString(); } + @Nullable @Override - public void onMouseExited() { + public Rectangle onMouseExited() { + return null; } } diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementGroupingMatchConditionComponent.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementGroupingMatchConditionComponent.java index cd06c5028360..ac589b5c3867 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementGroupingMatchConditionComponent.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementGroupingMatchConditionComponent.java @@ -121,7 +121,9 @@ public class ArrangementGroupingMatchConditionComponent extends JPanel implement } } + @Nullable @Override - public void onMouseExited() { + public Rectangle onMouseExited() { + return null; } } diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementMatchConditionComponent.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementMatchConditionComponent.java index bd6f926a4b8c..fea8693f1c5c 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementMatchConditionComponent.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/node/match/ArrangementMatchConditionComponent.java @@ -81,5 +81,6 @@ public interface ArrangementMatchConditionComponent { void onMouseClick(@NotNull MouseEvent event); - void onMouseExited(); + @Nullable + Rectangle onMouseExited(); }