/* * Copyright 2003-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 jetbrains.mps.nodeEditor.cells.contextAssistant; import com.intellij.openapi.ui.popup.ListPopupStep; import com.intellij.openapi.ui.popup.ListSeparator; import com.intellij.openapi.ui.popup.MnemonicNavigationFilter; import com.intellij.openapi.ui.popup.PopupStep; import com.intellij.openapi.ui.popup.SpeedSearchFilter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.Icon; import java.util.List; class SubListStep<T> implements ListPopupStep<T> { private final ListPopupStep<T> mySource; private final List<T> myValues; private final int myFromIndex; public static <T> ListPopupStep<T> subList(ListPopupStep<T> step, int fromIndex) { if (fromIndex == 0) return step; return new SubListStep<>(step, fromIndex, step.getValues().size()); } private SubListStep(ListPopupStep<T> source, int fromIndex, int toIndex) { mySource = source; myFromIndex = fromIndex; myValues = source.getValues().subList(fromIndex, toIndex); } @NotNull @Override public List<T> getValues() { return myValues; } @Override public boolean isSelectable(T t) { return mySource.isSelectable(t); } @Nullable @Override public Icon getIconFor(T t) { return mySource.getIconFor(t); } @NotNull @Override public String getTextFor(T t) { return mySource.getTextFor(t); } @Nullable @Override public ListSeparator getSeparatorAbove(T t) { return mySource.getSeparatorAbove(t); } @Override public int getDefaultOptionIndex() { int sourceDefaultOptionIndex = mySource.getDefaultOptionIndex(); if (sourceDefaultOptionIndex >= myFromIndex) { return sourceDefaultOptionIndex - myFromIndex; } return -1; } @Nullable @Override public String getTitle() { return mySource.getTitle(); } @Nullable @Override public PopupStep onChosen(T t, boolean finalChoice) { return mySource.onChosen(t, finalChoice); } @Override public boolean hasSubstep(T t) { return mySource.hasSubstep(t); } @Override public void canceled() { mySource.canceled(); } @Override public boolean isMnemonicsNavigationEnabled() { return mySource.isMnemonicsNavigationEnabled(); } @Nullable @Override public MnemonicNavigationFilter<T> getMnemonicNavigationFilter() { return mySource.getMnemonicNavigationFilter(); } @Override public boolean isSpeedSearchEnabled() { return mySource.isSpeedSearchEnabled(); } @Nullable @Override public SpeedSearchFilter<T> getSpeedSearchFilter() { return mySource.getSpeedSearchFilter(); } @Override public boolean isAutoSelectionEnabled() { return mySource.isAutoSelectionEnabled(); } @Nullable @Override public Runnable getFinalRunnable() { return mySource.getFinalRunnable(); } }