skip over invisible/disable radiobuttons (IDEA-71572)
authoranna <anna.kozlova@jetbrains.com>
Fri, 8 Jul 2011 18:39:51 +0000 (22:39 +0400)
committeranna <anna.kozlova@jetbrains.com>
Mon, 11 Jul 2011 05:40:45 +0000 (09:40 +0400)
platform/lang-impl/src/com/intellij/refactoring/util/RadioUpDownListener.java

index 4d9560b1dccb1015f6f0e5d5c60a74322e0b62cb..d5130a0a9af83b8e84f01378dcce730d1c12e7e6 100644 (file)
@@ -37,18 +37,30 @@ public class RadioUpDownListener extends KeyAdapter {
     final int selected = getSelected();
     if (selected != -1) {
       if (e.getKeyCode() == KeyEvent.VK_UP) {
-        int newIdx = selected - 1;
-        if (newIdx < 0) newIdx = myRadioButtons.length - 1;
-        click(myRadioButtons[newIdx]);
+        up(selected, selected);
       }
       else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
-        int newIdx = selected + 1;
-        if (newIdx > myRadioButtons.length - 1) newIdx = 0;
-        click(myRadioButtons[newIdx]);
+        down(selected, selected);
       }
     }
   }
 
+  private void down(int selected, int stop) {
+    int newIdx = selected + 1;
+    if (newIdx > myRadioButtons.length - 1) newIdx = 0;
+    if (!click(myRadioButtons[newIdx]) && stop != newIdx) {
+      down(newIdx, selected);
+    }
+  }
+
+  private void up(int selected, int stop) {
+    int newIdx = selected - 1;
+    if (newIdx < 0) newIdx = myRadioButtons.length - 1;
+    if (!click(myRadioButtons[newIdx]) && stop != newIdx) {
+      up(newIdx, selected);
+    }
+  }
+
   private int getSelected() {
     for (int i = 0; i < myRadioButtons.length; i++) {
       if (myRadioButtons[i].isSelected()) {
@@ -58,10 +70,12 @@ public class RadioUpDownListener extends KeyAdapter {
     return -1;
   }
 
-  private static void click(final JRadioButton button) {
-    if (button.isEnabled()) {
+  private static boolean click(final JRadioButton button) {
+    if (button.isEnabled() && button.isVisible()) {
       button.requestFocus();
       button.doClick();
+      return true;
     }
+    return false;
   }
 }