From 3d8130382bfd427118e23fce7422ddbed5fe5530 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Mon, 10 Mar 2014 15:03:26 +0400 Subject: [PATCH] [log] Expose the VcsLogFilterUi to the API, let set filter value + Since VcsLogFilterUi gets into API, remove getFilters from VcsLogUi, substituting it with getFilterUi(). --- .../intellij/vcs/log/VcsLogBranchFilter.java | 1 + .../com/intellij/vcs/log/VcsLogFilterUi.java | 22 +++++++++++++ .../src/com/intellij/vcs/log/VcsLogUi.java | 2 +- .../com/intellij/vcs/log/ui/VcsLogUiImpl.java | 7 +++- .../MultipleValueFilterPopupComponent.java | 6 ++-- .../log/ui/filter/VcsLogClassicFilterUi.java | 20 ++++++++--- .../vcs/log/ui/filter/VcsLogFilterUi.java | 33 ------------------- .../intellij/vcs/log/ui/frame/MainFrame.java | 4 +-- 8 files changed, 50 insertions(+), 45 deletions(-) create mode 100644 platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogFilterUi.java delete mode 100644 platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogFilterUi.java diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogBranchFilter.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogBranchFilter.java index dfa78da2fab3..60e588ded1cc 100644 --- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogBranchFilter.java +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogBranchFilter.java @@ -27,6 +27,7 @@ public interface VcsLogBranchFilter extends VcsLogFilter { @NotNull Collection getBranchNames(); + // TODO remove from the API @NotNull Collection getMatchingHeads(); diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogFilterUi.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogFilterUi.java new file mode 100644 index 000000000000..a4cf4b903d2e --- /dev/null +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogFilterUi.java @@ -0,0 +1,22 @@ +package com.intellij.vcs.log; + +import org.jetbrains.annotations.NotNull; + +/** + * Graphical UI for filtering commits in the log. + */ +public interface VcsLogFilterUi { + + /** + * Returns the filters currently active, i.e. switched on by user. + */ + @NotNull + VcsLogFilterCollection getFilters(); + + /** + * Sets the given filter to the given value and updates the log view.
+ * Note: only VcsLogBranchFilter is currently supported. + */ + void setFilter(@NotNull VcsLogFilter filter); + +} diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogUi.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogUi.java index c86ee12e087d..18a355816e1f 100644 --- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogUi.java +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogUi.java @@ -20,7 +20,7 @@ import org.jetbrains.annotations.NotNull; public interface VcsLogUi { @NotNull - VcsLogFilterCollection getFilters(); + VcsLogFilterUi getFilterUi(); @NotNull VcsLogDataPack getDataPack(); diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java index 0197ec363a65..60fe23d15a86 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java @@ -300,7 +300,6 @@ public class VcsLogUiImpl implements VcsLogUi, Disposable { applyFiltersAndUpdateUi(myDataPack); } - @Override @NotNull public VcsLogFilterCollection getFilters() { return myMainFrame.getFilterUi().getFilters(); @@ -337,6 +336,12 @@ public class VcsLogUiImpl implements VcsLogUi, Disposable { return myLog; } + @NotNull + @Override + public VcsLogFilterUi getFilterUi() { + return myMainFrame.getFilterUi(); + } + @Override @NotNull public DataPack getDataPack() { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultipleValueFilterPopupComponent.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultipleValueFilterPopupComponent.java index 47872d4ed5dc..3a48f8e1d0e1 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultipleValueFilterPopupComponent.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultipleValueFilterPopupComponent.java @@ -69,7 +69,7 @@ abstract class MultipleValueFilterPopupComponent ex return group; } - private void apply(@Nullable Collection values, String text, String tooltip) { + void apply(@Nullable Collection values, @NotNull String text, @NotNull String tooltip) { mySelectedValues = values; applyFilters(); setValue(text, tooltip); @@ -79,7 +79,7 @@ abstract class MultipleValueFilterPopupComponent ex } @NotNull - private static String displayableText(@NotNull Collection values) { + static String displayableText(@NotNull Collection values) { if (values.size() == 1) { return values.iterator().next(); } @@ -87,7 +87,7 @@ abstract class MultipleValueFilterPopupComponent ex } @NotNull - private static String tooltip(@NotNull Collection values) { + static String tooltip(@NotNull Collection values) { return StringUtil.join(values, ", "); } 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 41449aac101a..88e27fab1aa4 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 @@ -24,8 +24,7 @@ import com.intellij.openapi.project.DumbAwareAction; import com.intellij.ui.SearchTextField; import com.intellij.ui.SearchTextFieldWithStoredHistory; import com.intellij.util.ui.UIUtil; -import com.intellij.vcs.log.VcsLogFilterCollection; -import com.intellij.vcs.log.VcsLogTextFilter; +import com.intellij.vcs.log.*; import com.intellij.vcs.log.data.DataPack; import com.intellij.vcs.log.data.VcsLogDataHolder; import com.intellij.vcs.log.data.VcsLogUiProperties; @@ -36,6 +35,7 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.Collection; /** */ @@ -76,12 +76,14 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi { myActionGroup.add(new FilterActionComponent(myStructureFilterComponent)); } - @Override public void updateDataPack(@NotNull DataPack dataPack) { myBranchFilterComponent.updateRefsModel(dataPack.getRefsModel()); } - @Override + /** + * Returns filter components which will be added to the Log toolbar. + */ + @NotNull public ActionGroup getFilterActionComponents() { return myActionGroup; } @@ -94,11 +96,19 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi { myDateFilterComponent.getFilter(), textFilter, myStructureFilterComponent.getFilter()); } + @Override + public void setFilter(@NotNull VcsLogFilter filter) { + if (filter instanceof VcsLogBranchFilter) { + Collection values = ((VcsLogBranchFilter)filter).getBranchNames(); + myBranchFilterComponent.apply(values, MultipleValueFilterPopupComponent.displayableText(values), + MultipleValueFilterPopupComponent.tooltip(values)); + } + } + void applyFilters() { myUi.applyFiltersAndUpdateUi(); } - private static class TextFilterComponent extends DumbAwareAction implements CustomComponentAction { private final SearchTextField mySearchField; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogFilterUi.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogFilterUi.java deleted file mode 100644 index a9e2e648343c..000000000000 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogFilterUi.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.intellij.vcs.log.ui.filter; - -import com.intellij.openapi.actionSystem.ActionGroup; -import com.intellij.vcs.log.VcsLogFilterCollection; -import com.intellij.vcs.log.data.DataPack; -import org.jetbrains.annotations.NotNull; - -/** - * Graphical UI for filtering commits in the log. - * - * @author Kirill Likhodedov - */ -public interface VcsLogFilterUi { - - /** - * Returns filter components which will be added to the Log toolbar. - */ - ActionGroup getFilterActionComponents(); - - /** - * Returns the filters currently active, i.e. switched on by user. - */ - @NotNull - VcsLogFilterCollection getFilters(); - - /** - * Informs components that the actual DataPack has been updated (e.g. due to a log refresh).
- * Components may want to update their fields and/or rebuild. - * @param dataPack new data pack. - */ - void updateDataPack(@NotNull DataPack dataPack); - -} diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java index 655c99ef575d..4282f39884fc 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java @@ -24,7 +24,7 @@ import com.intellij.vcs.log.data.VcsLogDataHolder; import com.intellij.vcs.log.data.VcsLogUiProperties; import com.intellij.vcs.log.ui.VcsLogUiImpl; import com.intellij.vcs.log.ui.filter.VcsLogClassicFilterUi; -import com.intellij.vcs.log.ui.filter.VcsLogFilterUi; +import com.intellij.vcs.log.VcsLogFilterUi; import com.intellij.vcs.log.ui.tables.GraphTableModel; import icons.VcsLogIcons; import org.jetbrains.annotations.NotNull; @@ -44,7 +44,7 @@ public class MainFrame extends JPanel implements TypeSafeDataProvider { @NotNull private final Project myProject; @NotNull private final VcsLogUiProperties myUiProperties; @NotNull private final VcsLog myLog; - @NotNull private final VcsLogFilterUi myFilterUi; + @NotNull private final VcsLogClassicFilterUi myFilterUi; @NotNull private final JBLoadingPanel myChangesLoadingPane; @NotNull private final VcsLogGraphTable myGraphTable;