From 11512e4e67a20a2733e64d316b1b76436ff4198e Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Mon, 2 Jul 2018 01:06:26 +0300 Subject: [PATCH] [vcs-log] remember recent items for structure filter --- .../filter/StructureFilterPopupComponent.java | 42 +++++++------------ .../log/ui/filter/VcsLogClassicFilterUi.java | 16 +++---- 2 files changed, 23 insertions(+), 35 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/StructureFilterPopupComponent.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/StructureFilterPopupComponent.java index c4c6132c6727..eff94e5e4d68 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/StructureFilterPopupComponent.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/StructureFilterPopupComponent.java @@ -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 myHistory = new FixedSizeQueue<>(5); - StructureFilterPopupComponent(@NotNull FilterModel filterModel, @NotNull VcsLogColorManager colorManager) { + StructureFilterPopupComponent(@NotNull MainVcsLogUiProperties uiProperties, + @NotNull FilterModel filterModel, + @NotNull VcsLogColorManager colorManager) { super("Paths", filterModel); + myUiProperties = uiProperties; myColorManager = colorManager; } @@ -175,7 +179,7 @@ class StructureFilterPopupComponent extends FilterPopupComponent structureActions = new ArrayList<>(); - for (VcsLogStructureFilter filter : myHistory) { + for (VcsLogStructureFilter filter : getRecentFilters()) { structureActions.add(new SelectFromHistoryAction(filter)); } @@ -189,6 +193,12 @@ class StructureFilterPopupComponent extends FilterPopupComponent getRecentFilters() { + List> filterValues = myUiProperties.getRecentlyFilteredGroups(myName); + return ContainerUtil.map2List(filterValues, values -> VcsLogClassicFilterUi.FileFilterModel.createStructureFilter(values)); + } + private Set getAllRoots() { return myFilterModel.getDataPack().getLogProviders().keySet(); } @@ -357,7 +367,7 @@ class StructureFilterPopupComponent extends FilterPopupComponent(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 implements Iterable { - @NotNull private final LinkedList myQueue = new LinkedList<>(); - private final int maxSize; - - FixedSizeQueue(int maxSize) { - this.maxSize = maxSize; - } - - @NotNull - @Override - public Iterator iterator() { - return ContainerUtil.reverse(myQueue).iterator(); - } - - public void add(T t) { - myQueue.add(t); - if (myQueue.size() > maxSize) { - myQueue.poll(); - } - } - } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java index 1038e50e1138..b14a0b0ccfe4 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogClassicFilterUi.java @@ -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 { + static class FileFilterModel extends FilterModel { @NotNull private static final String ROOTS = "roots"; @NotNull private static final String STRUCTURE = "structure"; @NotNull private final Set myRoots; @@ -338,7 +338,7 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi { } @NotNull - private static List getFilterValues(@NotNull VcsLogStructureFilter filter) { + static List 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 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 values) { - return new VcsLogStructureFilterImpl(ContainerUtil.map(values, VcsUtil::getFilePath)); - } - @NotNull @Override protected VcsLogFileFilter createFilter(@NotNull List values) {