switcher - auto selection + fixes
authorKirill Kalishev <kirill.kalishev@jetbrains.com>
Tue, 27 Apr 2010 13:10:16 +0000 (17:10 +0400)
committerKirill Kalishev <kirill.kalishev@jetbrains.com>
Tue, 27 Apr 2010 13:10:16 +0000 (17:10 +0400)
platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java
platform/platform-api/src/com/intellij/ui/switcher/SwitchAction.java
platform/platform-api/src/com/intellij/ui/switcher/SwitchManager.java
platform/platform-api/src/com/intellij/ui/switcher/SwitchingSession.java
platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java
platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionButton.java
platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/content/ToolWindowContentUi.java
platform/platform-resources-en/src/misc/registry.properties

index 47e7735431d806d201a791e51751c051e546985d..f479bc7860e9b6b40932c5a8d1cc539298ee2157 100644 (file)
@@ -47,6 +47,7 @@ import javax.swing.border.EmptyBorder;
 import java.awt.*;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.util.ArrayList;
 import java.util.Set;
 
 public class GridCellImpl implements GridCell, Disposable {
@@ -248,6 +249,8 @@ public class GridCellImpl implements GridCell, Disposable {
   }
 
   public java.util.List<SwitchTarget> getTargets(boolean onlyVisible) {
+    if (myTabs.getPresentation().isHideTabs()) return new ArrayList<SwitchTarget>();
+
     return myTabs.getTargets(onlyVisible, false);
   }
 
index afc0de825c6bc61100cff0b392581027d707d71c..5078a234a71c898485a2fe358d94fc4f5d81867d 100644 (file)
@@ -40,7 +40,7 @@ public abstract class SwitchAction extends AnAction implements DumbAware {
     SwitchingSession session = getSession(e);
     if (session == null || session.isFinished()) {
       SwitchProvider provider = getProvider(e);
-      session = new SwitchingSession(provider, (KeyEvent)e.getInputEvent(), null);
+      session = new SwitchingSession(getManager(e), provider, (KeyEvent)e.getInputEvent(), null);
       initSession(e, session);
     }
 
index 92ff218cee46befeda9058e618d17d3b2ae94cbb..f4a504530e0772430b27bdb10d5d5ec2cac3ed6b 100644 (file)
@@ -26,6 +26,7 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.ActionCallback;
 import com.intellij.openapi.util.AsyncResult;
 import com.intellij.openapi.util.Disposer;
+import com.intellij.openapi.util.registry.Registry;
 import com.intellij.openapi.wm.IdeFocusManager;
 import com.intellij.openapi.wm.IdeFrame;
 import com.intellij.util.Alarm;
@@ -89,7 +90,7 @@ public class SwitchManager implements ProjectComponent, KeyEventDispatcher, Keym
               }
             });
           }
-        }, 200);
+        }, Registry.intValue("actionSystem.keyGestureHoldTime"));
       }
     } else {
       if (myWaitingForAutoInitSession) {
@@ -106,7 +107,7 @@ public class SwitchManager implements ProjectComponent, KeyEventDispatcher, Keym
     Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
     SwitchProvider provider = SwitchProvider.KEY.getData(DataManager.getInstance().getDataContext(owner));
     if (provider != null) {
-      return initSession(new SwitchingSession(provider, myAutoInitSessionEvent, preselected));
+      return initSession(new SwitchingSession(this, provider, myAutoInitSessionEvent, preselected));
     }
 
     return new ActionCallback.Rejected();
index 37456b5f902bcf41998eface639d8e5b0214c8d6..0896cf7721bc95436ce55ebb704899d97ad0e0f4 100644 (file)
@@ -20,10 +20,12 @@ import com.intellij.openapi.ui.AbstractPainter;
 import com.intellij.openapi.util.ActionCallback;
 import com.intellij.openapi.util.AsyncResult;
 import com.intellij.openapi.util.Disposer;
+import com.intellij.openapi.util.registry.Registry;
 import com.intellij.openapi.wm.IdeGlassPane;
 import com.intellij.openapi.wm.IdeGlassPaneUtil;
 import com.intellij.openapi.wm.impl.content.GraphicsConfig;
 import com.intellij.ui.awt.RelativePoint;
+import com.intellij.util.Alarm;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
@@ -51,7 +53,18 @@ public class SwitchingSession implements KeyEventDispatcher, Disposable {
 
   private boolean mySelectionWasMoved;
 
-  public SwitchingSession(SwitchProvider provider, KeyEvent e, @Nullable SwitchTarget preselected) {
+  private Alarm myAutoApply = new Alarm();
+  private Runnable myAutoApplyRunnable = new Runnable() {
+    public void run() {
+      if (myManager.canApplySwitch()) {
+        myManager.applySwitch();
+      }
+    }
+  };
+  private SwitchManager myManager;
+
+  public SwitchingSession(SwitchManager mgr, SwitchProvider provider, KeyEvent e, @Nullable SwitchTarget preselected) {
+    myManager = mgr;
     myProvider = provider;
     myInitialEvent = e;
 
@@ -202,6 +215,9 @@ public class SwitchingSession implements KeyEventDispatcher, Disposable {
     for (TargetPainer each : myPainters.values()) {
       each.setNeedsRepaint(true);
     }
+
+    myAutoApply.cancelAllRequests();
+    myAutoApply.addRequest(myAutoApplyRunnable, Registry.intValue("actionSystem.autoSelectTimeout"));
   }
 
   private SwitchTarget getNextTarget(Direction direction) {
@@ -341,6 +357,8 @@ public class SwitchingSession implements KeyEventDispatcher, Disposable {
   }
 
   public AsyncResult<SwitchTarget> finish() {
+    myAutoApply.cancelAllRequests();
+
     final AsyncResult<SwitchTarget> result = new AsyncResult<SwitchTarget>();
     final SwitchTarget selection = getSelection();
     if (selection != null) {
index 093801d183d3df10f55879214b16f4e04882da54..1fe06006a32bb9b4525c504bc9057474e9c118e9 100644 (file)
@@ -2828,6 +2828,11 @@ public class JBTabsImpl extends JComponent
       return myInfo2Label.get(myInfo);
     }
 
+    @Override
+    public String toString() {
+      return myInfo.getText();
+    }
+
     @Override
     public Object[] getEqualityObjects() {
       return new Object[] {myInfo};
index d282bb74f70c33c77935cffd76e6f7590e6d5cee..1c9cd34c93508a3ec902d833840b73c23f84bd1e 100644 (file)
@@ -313,6 +313,10 @@ public class ActionButton extends JComponent implements ActionButtonComponent {
     }
   }
 
+  public AnAction getAction() {
+    return myAction;
+  }
+
   private class ActionButtonSynchronizer implements PropertyChangeListener {
     @NonNls protected static final String SELECTED_PROPERTY_NAME = "selected";
 
index e28a2cc22f862d6140d8a8a0ab8b670f5923ee72..1ffca22860ac2dab6079e6a426cb1a76cb2580b9 100644 (file)
@@ -1027,6 +1027,11 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
     public Component getComponent() {
       return myButton;
     }
+
+    @Override
+    public String toString() {
+      return myButton.getAction().toString();
+    }
   }
 
   public SwitchTarget getCurrentTarget() {
index 77ca8292b2cd1240360b33a31b8976a67b094443..5bd2b46b1cd92bea1616d824f6600fd4223107da 100644 (file)
@@ -482,6 +482,11 @@ public class ToolWindowContentUi extends JPanel implements ContentUI, PropertyCh
       return myManager.getComponent();
     }
 
+    @Override
+    public String toString() {
+      return myContent.getDisplayName();
+    }
+
     @Override
     public Object[] getEqualityObjects() {
       return new Object[] {myContent};
index 35d3b17a90d0c630f94b74d23bd11eac915a0d65..6c14019d43e622705b41db568f1ea97b431c8427 100644 (file)
@@ -20,6 +20,8 @@ actionSystem.keyGestures.enabled=false
 actionSystem.suspendFocusTransferIfApplicationInactive=true
 actionSystem.noContextComponentWhileFocusTransfer=true
 actionSystem.secondKeystrokeTimout=2000
+actionSystem.keyGestureHoldTime=200
+actionSystem.autoSelectTimeout=1000
 
 ide.debugMode=false
 ide.debugMode.description=Record additonal information to make bug reports more informative
@@ -61,4 +63,4 @@ vcs.showConsole=true
 psi.viewer.selection.color=0,153,153
 
 structureView.coalesceTime=500
-jar.build=false
\ No newline at end of file
+jar.build=false