diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java index 2efb02278f1d..34a7a0ce9ba1 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java @@ -131,6 +131,7 @@ public class VcsLogGraphTable extends TableWithProgress implements DataProvider, PopupHandler.installPopupHandler(this, VcsLogActionPlaces.POPUP_ACTION_GROUP, VcsLogActionPlaces.VCS_LOG_TABLE_PLACE); ScrollingUtil.installActions(this, false); + new VcsLogSpeedSearch(this); initColumnSize(); addComponentListener(new ComponentAdapter() { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogSpeedSearch.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogSpeedSearch.java new file mode 100644 index 000000000000..0e01c399f80c --- /dev/null +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogSpeedSearch.java @@ -0,0 +1,74 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.vcs.log.ui.frame; + +import com.intellij.ui.SpeedSearchBase; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.AbstractList; +import java.util.ListIterator; + +public class VcsLogSpeedSearch extends SpeedSearchBase { + public VcsLogSpeedSearch(@NotNull VcsLogGraphTable component) { + super(component); + } + + @Override + protected int getElementCount() { + return myComponent.getRowCount(); + } + + @NotNull + @Override + protected ListIterator getElementIterator(int startingIndex) { + return new MyRowsList().listIterator(startingIndex); + } + + @Override + protected int getSelectedIndex() { + return myComponent.getSelectedRow(); + } + + @NotNull + @Override + protected Object[] getAllElements() { + return new MyRowsList().toArray(); + } + + @Nullable + @Override + protected String getElementText(@NotNull Object row) { + return myComponent.getModel().getShortDetails((Integer)row).getSubject(); + } + + @Override + protected void selectElement(@NotNull Object row, @NotNull String selectedText) { + myComponent.jumpToRow((Integer)row); + } + + private class MyRowsList extends AbstractList { + @Override + public int size() { + return myComponent.getRowCount(); + } + + @Override + public Object get(int index) { + return index; + } + } +}