mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] remember recent items for structure filter
This commit is contained in:
+15
-27
@@ -35,11 +35,12 @@ import com.intellij.vcs.log.VcsLogDataPack;
|
||||
import com.intellij.vcs.log.VcsLogRootFilter;
|
||||
import com.intellij.vcs.log.VcsLogStructureFilter;
|
||||
import com.intellij.vcs.log.data.VcsLogStructureFilterImpl;
|
||||
import com.intellij.vcs.log.impl.MainVcsLogUiProperties;
|
||||
import com.intellij.vcs.log.impl.VcsLogFileFilter;
|
||||
import com.intellij.vcs.log.impl.VcsLogRootFilterImpl;
|
||||
import com.intellij.vcs.log.util.VcsLogUtil;
|
||||
import com.intellij.vcs.log.ui.VcsLogColorManager;
|
||||
import com.intellij.vcs.log.ui.table.VcsLogGraphTable;
|
||||
import com.intellij.vcs.log.util.VcsLogUtil;
|
||||
import org.intellij.lang.annotations.JdkConstants;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -57,11 +58,14 @@ class StructureFilterPopupComponent extends FilterPopupComponent<VcsLogFileFilte
|
||||
private static final FileByNameComparator FILE_BY_NAME_COMPARATOR = new FileByNameComparator();
|
||||
private static final FilePathByPathComparator FILE_PATH_BY_PATH_COMPARATOR = new FilePathByPathComparator();
|
||||
|
||||
@NotNull private final MainVcsLogUiProperties myUiProperties;
|
||||
@NotNull private final VcsLogColorManager myColorManager;
|
||||
@NotNull private final FixedSizeQueue<VcsLogStructureFilter> myHistory = new FixedSizeQueue<>(5);
|
||||
|
||||
StructureFilterPopupComponent(@NotNull FilterModel<VcsLogFileFilter> filterModel, @NotNull VcsLogColorManager colorManager) {
|
||||
StructureFilterPopupComponent(@NotNull MainVcsLogUiProperties uiProperties,
|
||||
@NotNull FilterModel<VcsLogFileFilter> filterModel,
|
||||
@NotNull VcsLogColorManager colorManager) {
|
||||
super("Paths", filterModel);
|
||||
myUiProperties = uiProperties;
|
||||
myColorManager = colorManager;
|
||||
}
|
||||
|
||||
@@ -175,7 +179,7 @@ class StructureFilterPopupComponent extends FilterPopupComponent<VcsLogFileFilte
|
||||
}
|
||||
}
|
||||
List<AnAction> structureActions = new ArrayList<>();
|
||||
for (VcsLogStructureFilter filter : myHistory) {
|
||||
for (VcsLogStructureFilter filter : getRecentFilters()) {
|
||||
structureActions.add(new SelectFromHistoryAction(filter));
|
||||
}
|
||||
|
||||
@@ -189,6 +193,12 @@ class StructureFilterPopupComponent extends FilterPopupComponent<VcsLogFileFilte
|
||||
new Separator("Recent"), new DefaultActionGroup(structureActions));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<VcsLogStructureFilter> getRecentFilters() {
|
||||
List<List<String>> filterValues = myUiProperties.getRecentlyFilteredGroups(myName);
|
||||
return ContainerUtil.map2List(filterValues, values -> VcsLogClassicFilterUi.FileFilterModel.createStructureFilter(values));
|
||||
}
|
||||
|
||||
private Set<VirtualFile> getAllRoots() {
|
||||
return myFilterModel.getDataPack().getLogProviders().keySet();
|
||||
}
|
||||
@@ -357,7 +367,7 @@ class StructureFilterPopupComponent extends FilterPopupComponent<VcsLogFileFilte
|
||||
if (chooser.showAndGet()) {
|
||||
VcsLogStructureFilterImpl structureFilter = new VcsLogStructureFilterImpl(new HashSet<VirtualFile>(chooser.getSelectedFiles()));
|
||||
myFilterModel.setFilter(new VcsLogFileFilter(structureFilter, null));
|
||||
myHistory.add(structureFilter);
|
||||
myUiProperties.addRecentlyFilteredGroup(myName, VcsLogClassicFilterUi.FileFilterModel.getFilterValues(structureFilter));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -402,26 +412,4 @@ class StructureFilterPopupComponent extends FilterPopupComponent<VcsLogFileFilte
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class FixedSizeQueue<T> implements Iterable<T> {
|
||||
@NotNull private final LinkedList<T> myQueue = new LinkedList<>();
|
||||
private final int maxSize;
|
||||
|
||||
FixedSizeQueue(int maxSize) {
|
||||
this.maxSize = maxSize;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Iterator<T> iterator() {
|
||||
return ContainerUtil.reverse(myQueue).iterator();
|
||||
}
|
||||
|
||||
public void add(T t) {
|
||||
myQueue.add(t);
|
||||
if (myQueue.size() > maxSize) {
|
||||
myQueue.poll();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
actionGroup.add(new FilterActionComponent(() -> new UserFilterPopupComponent(myUiProperties, myLogData, myUserFilterModel).initUi()));
|
||||
actionGroup.add(new FilterActionComponent(() -> new DateFilterPopupComponent(myDateFilterModel).initUi()));
|
||||
actionGroup.add(new FilterActionComponent(
|
||||
() -> new StructureFilterPopupComponent(myStructureFilterModel, myUi.getColorManager()).initUi()));
|
||||
() -> new StructureFilterPopupComponent(myUiProperties, myStructureFilterModel, myUi.getColorManager()).initUi()));
|
||||
return actionGroup;
|
||||
}
|
||||
|
||||
@@ -311,7 +311,7 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
}
|
||||
}
|
||||
|
||||
private static class FileFilterModel extends FilterModel<VcsLogFileFilter> {
|
||||
static class FileFilterModel extends FilterModel<VcsLogFileFilter> {
|
||||
@NotNull private static final String ROOTS = "roots";
|
||||
@NotNull private static final String STRUCTURE = "structure";
|
||||
@NotNull private final Set<VirtualFile> myRoots;
|
||||
@@ -338,7 +338,7 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<String> getFilterValues(@NotNull VcsLogStructureFilter filter) {
|
||||
static List<String> getFilterValues(@NotNull VcsLogStructureFilter filter) {
|
||||
return ContainerUtil.map(filter.getFiles(), FilePath::getPath);
|
||||
}
|
||||
|
||||
@@ -347,6 +347,11 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
return ContainerUtil.map(filter.getRoots(), VirtualFile::getPath);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static VcsLogStructureFilter createStructureFilter(@NotNull List<String> values) {
|
||||
return new VcsLogStructureFilterImpl(ContainerUtil.map(values, VcsUtil::getFilePath));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected VcsLogFileFilter getLastFilter() {
|
||||
@@ -382,11 +387,6 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
return new VcsLogRootFilterImpl(selectedRoots);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static VcsLogStructureFilter createStructureFilter(@NotNull List<String> values) {
|
||||
return new VcsLogStructureFilterImpl(ContainerUtil.map(values, VcsUtil::getFilePath));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected VcsLogFileFilter createFilter(@NotNull List<String> values) {
|
||||
|
||||
Reference in New Issue
Block a user