mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
UX-1 new SearchEverywhere popup
* dumb mode listening
This commit is contained in:
+4
@@ -11,6 +11,10 @@ public class ContributorSearchResult<T> {
|
||||
return new Builder<>();
|
||||
}
|
||||
|
||||
public static <E> ContributorSearchResult<E> empty() {
|
||||
return new ContributorSearchResult<>(Collections.emptyList(), false);
|
||||
}
|
||||
|
||||
public ContributorSearchResult(List<T> items, boolean hasMoreItems) {
|
||||
this.items = items;
|
||||
this.hasMoreItems = hasMoreItems;
|
||||
|
||||
+9
@@ -8,6 +8,7 @@ import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -27,6 +28,10 @@ public abstract class AbstractGotoSEContributor implements SearchEverywhereContr
|
||||
|
||||
@Override
|
||||
public ContributorSearchResult<Object> search(Project project, String pattern, boolean everywhere, ProgressIndicator progressIndicator, int elementsLimit) {
|
||||
if (!isDumbModeSupported() && DumbService.getInstance(project).isDumb()) {
|
||||
return ContributorSearchResult.empty();
|
||||
}
|
||||
|
||||
ChooseByNameModel model = createModel(project);
|
||||
ChooseByNamePopup popup = ChooseByNamePopup.createPopup(project, model, (PsiElement)null);
|
||||
ContributorSearchResult.Builder<Object> builder = ContributorSearchResult.builder();
|
||||
@@ -84,4 +89,8 @@ public abstract class AbstractGotoSEContributor implements SearchEverywhereContr
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected boolean isDumbModeSupported() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -68,4 +68,9 @@ public class FileSearchEverywhereContributor extends AbstractGotoSEContributor {
|
||||
|
||||
return super.getItemData(dataId, element);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isDumbModeSupported() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
+30
-25
@@ -488,6 +488,13 @@ public class SearchEverywhereUI extends BorderLayoutPanel implements Disposable,
|
||||
updateHint(selectedValue);
|
||||
}
|
||||
});
|
||||
|
||||
myProject.getMessageBus().connect(this).subscribe(DumbService.DUMB_MODE, new DumbService.DumbModeListener() {
|
||||
@Override
|
||||
public void exitDumbMode() {
|
||||
ApplicationManager.getApplication().invokeLater(() -> rebuildList());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void elementSelected(int i, int modifiers) {
|
||||
@@ -603,34 +610,32 @@ public class SearchEverywhereUI extends BorderLayoutPanel implements Disposable,
|
||||
}
|
||||
|
||||
private void addContributorItems(SearchEverywhereContributor contributor, int count, boolean clearBefore) {
|
||||
if (!DumbService.getInstance(project).isDumb()) {
|
||||
ApplicationManager.getApplication().runReadAction(() -> {
|
||||
ContributorSearchResult<Object> results = contributor.search(project, pattern, isUseNonProjectItems(), myProgressIndicator, count);
|
||||
ApplicationManager.getApplication().runReadAction(() -> {
|
||||
ContributorSearchResult<Object> results = contributor.search(project, pattern, isUseNonProjectItems(), myProgressIndicator, count);
|
||||
|
||||
if (clearBefore) {
|
||||
listOperationsAlarm.cancelAllRequests();
|
||||
if (clearBefore) {
|
||||
listOperationsAlarm.cancelAllRequests();
|
||||
}
|
||||
|
||||
listOperationsAlarm.addRequest(() -> {
|
||||
if (isCanceled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
listOperationsAlarm.addRequest(() -> {
|
||||
if (isCanceled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Dimension oldSize = getPreferredSize();
|
||||
if (clearBefore) {
|
||||
myListModel.clear();
|
||||
}
|
||||
List<Object> itemsToAdd = results.getItems().stream()
|
||||
.filter(o -> !myListModel.contains(o))
|
||||
.collect(Collectors.toList());
|
||||
if (!itemsToAdd.isEmpty()) {
|
||||
myListModel.addElements(itemsToAdd, contributor, results.hasMoreItems());
|
||||
ScrollingUtil.ensureSelectionExists(myResultsList);
|
||||
}
|
||||
firePropertyChange("preferredSize", oldSize, getPreferredSize());
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
Dimension oldSize = getPreferredSize();
|
||||
if (clearBefore) {
|
||||
myListModel.clear();
|
||||
}
|
||||
List<Object> itemsToAdd = results.getItems().stream()
|
||||
.filter(o -> !myListModel.contains(o))
|
||||
.collect(Collectors.toList());
|
||||
if (!itemsToAdd.isEmpty()) {
|
||||
myListModel.addElements(itemsToAdd, contributor, results.hasMoreItems());
|
||||
ScrollingUtil.ensureSelectionExists(myResultsList);
|
||||
}
|
||||
firePropertyChange("preferredSize", oldSize, getPreferredSize());
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
|
||||
protected void check() {
|
||||
|
||||
Reference in New Issue
Block a user