mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[log] implement CustomActionComponents to correctly add filters to the toolbar
Otherwise components are aligned incorrectly with real actions on the toolbar.
This commit is contained in:
+52
-12
@@ -15,6 +15,9 @@
|
||||
*/
|
||||
package com.intellij.vcs.log.ui.filter;
|
||||
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.ex.CustomComponentAction;
|
||||
import com.intellij.openapi.project.DumbAwareAction;
|
||||
import com.intellij.ui.SearchTextField;
|
||||
import com.intellij.ui.SearchTextFieldWithStoredHistory;
|
||||
import com.intellij.util.Function;
|
||||
@@ -35,17 +38,14 @@ import java.util.List;
|
||||
*/
|
||||
public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
|
||||
@NotNull private final JComponent myRootPanel;
|
||||
@NotNull private final List<FilterPopupComponent> myFilterPopupComponents;
|
||||
@NotNull private final SearchTextField myTextFilter;
|
||||
@NotNull private final VcsLogUI myUi;
|
||||
@NotNull private final DefaultActionGroup myActionGroup;
|
||||
|
||||
public VcsLogClassicFilterUi(@NotNull VcsLogUI ui) {
|
||||
myUi = ui;
|
||||
|
||||
JLabel filterCaption = new JLabel("Filter:");
|
||||
filterCaption.setForeground(UIUtil.isUnderDarcula() ? UIUtil.getLabelForeground() : UIUtil.getInactiveTextColor());
|
||||
|
||||
myTextFilter = new SearchTextFieldWithStoredHistory("Vcs.Log.Text.Filter.History");
|
||||
myTextFilter.getTextEditor().addActionListener(new ActionListener() {
|
||||
@Override
|
||||
@@ -54,6 +54,7 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
myTextFilter.addCurrentTextToHistory();
|
||||
}
|
||||
});
|
||||
|
||||
FilterPopupComponent branchFilter = new BranchFilterPopupComponent(this, ui);
|
||||
FilterPopupComponent userFilter = new UserFilterPopupComponent(this, ui.getLogDataHolder(), ui.getUiProperties());
|
||||
|
||||
@@ -61,17 +62,15 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
myFilterPopupComponents.add(branchFilter);
|
||||
myFilterPopupComponents.add(userFilter);
|
||||
|
||||
myRootPanel = new JPanel();
|
||||
myRootPanel.add(filterCaption);
|
||||
myRootPanel.add(myTextFilter);
|
||||
myRootPanel.add(branchFilter);
|
||||
myRootPanel.add(userFilter);
|
||||
myActionGroup = new DefaultActionGroup();
|
||||
myActionGroup.add(new TextFilterComponent(myTextFilter));
|
||||
myActionGroup.add(new FilterActionComponent(branchFilter));
|
||||
myActionGroup.add(new FilterActionComponent(userFilter));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JComponent getRootComponent() {
|
||||
return myRootPanel;
|
||||
public ActionGroup getFilterActionComponents() {
|
||||
return myActionGroup;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -99,4 +98,45 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
myUi.applyFiltersAndUpdateUi();
|
||||
}
|
||||
|
||||
|
||||
private static class TextFilterComponent extends DumbAwareAction implements CustomComponentAction {
|
||||
|
||||
private final SearchTextField mySearchField;
|
||||
|
||||
TextFilterComponent(SearchTextField searchField) {
|
||||
mySearchField = searchField;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent createCustomComponent(Presentation presentation) {
|
||||
JPanel panel = new JPanel();
|
||||
JLabel filterCaption = new JLabel("Filter:");
|
||||
filterCaption.setForeground(UIUtil.isUnderDarcula() ? UIUtil.getLabelForeground() : UIUtil.getInactiveTextColor());
|
||||
panel.add(filterCaption);
|
||||
panel.add(mySearchField);
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
}
|
||||
}
|
||||
|
||||
private static class FilterActionComponent extends DumbAwareAction implements CustomComponentAction {
|
||||
private final FilterPopupComponent myComponent;
|
||||
|
||||
public FilterActionComponent(FilterPopupComponent component) {
|
||||
myComponent = component;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent createCustomComponent(Presentation presentation) {
|
||||
return myComponent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.intellij.vcs.log.ui.filter;
|
||||
|
||||
import com.intellij.openapi.actionSystem.ActionGroup;
|
||||
import com.intellij.vcs.log.VcsLogFilter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
@@ -14,10 +14,9 @@ import java.util.Collection;
|
||||
public interface VcsLogFilterUi {
|
||||
|
||||
/**
|
||||
* Returns the component which will be added to the Log toolbar.
|
||||
* Returns filter components which will be added to the Log toolbar.
|
||||
*/
|
||||
@NotNull
|
||||
JComponent getRootComponent();
|
||||
ActionGroup getFilterActionComponents();
|
||||
|
||||
/**
|
||||
* Returns the filters currently active, i.e. switched on by user.
|
||||
|
||||
@@ -10,10 +10,7 @@ import com.intellij.openapi.vcs.VcsDataKeys;
|
||||
import com.intellij.openapi.vcs.changes.Change;
|
||||
import com.intellij.openapi.vcs.changes.committed.RepositoryChangesBrowser;
|
||||
import com.intellij.openapi.vcs.changes.ui.ChangesBrowser;
|
||||
import com.intellij.ui.JBColor;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.ui.SeparatorComponent;
|
||||
import com.intellij.ui.SeparatorOrientation;
|
||||
import com.intellij.ui.components.JBLoadingPanel;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.vcs.log.VcsLog;
|
||||
@@ -81,7 +78,7 @@ public class MainFrame extends JPanel implements TypeSafeDataProvider {
|
||||
updateWhenDetailsAreLoaded(selectionChangeListener);
|
||||
|
||||
// layout
|
||||
JComponent toolbar = createToolbar();
|
||||
JComponent toolbar = createActionsToolbar();
|
||||
|
||||
myDetailsSplitter = new Splitter(true, 0.7f);
|
||||
myDetailsSplitter.setFirstComponent(ScrollPaneFactory.createScrollPane(myGraphTable));
|
||||
@@ -102,14 +99,6 @@ public class MainFrame extends JPanel implements TypeSafeDataProvider {
|
||||
add(changesBrowserSplitter);
|
||||
}
|
||||
|
||||
private JComponent createToolbar() {
|
||||
JComponent toolbar = Box.createHorizontalBox();
|
||||
toolbar.add(myFilterUi.getRootComponent());
|
||||
toolbar.add(new SeparatorComponent(JBColor.LIGHT_GRAY, SeparatorOrientation.VERTICAL));
|
||||
toolbar.add(createActionsToolbar());
|
||||
return toolbar;
|
||||
}
|
||||
|
||||
private void updateWhenDetailsAreLoaded(final CommitSelectionListener selectionChangeListener) {
|
||||
myLogDataHolder.getMiniDetailsGetter().addDetailsLoadedListener(new Runnable() {
|
||||
@Override
|
||||
@@ -205,7 +194,12 @@ public class MainFrame extends JPanel implements TypeSafeDataProvider {
|
||||
DefaultActionGroup toolbarGroup = new DefaultActionGroup(hideBranchesAction, showBranchesAction, showFullPatchAction, refreshAction,
|
||||
showDetailsAction);
|
||||
toolbarGroup.add(ActionManager.getInstance().getAction(VcsLogUI.TOOLBAR_ACTION_GROUP));
|
||||
return ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, toolbarGroup, true).getComponent();
|
||||
|
||||
DefaultActionGroup mainGroup = new DefaultActionGroup();
|
||||
mainGroup.add(myFilterUi.getFilterActionComponents());
|
||||
mainGroup.addSeparator();
|
||||
mainGroup.add(toolbarGroup);
|
||||
return ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, mainGroup, true).getComponent();
|
||||
}
|
||||
|
||||
public JComponent getMainComponent() {
|
||||
|
||||
Reference in New Issue
Block a user