diff --git a/openapi/src/com/intellij/openapi/vcs/versionBrowser/ChangeBrowserSettings.java b/openapi/src/com/intellij/openapi/vcs/versionBrowser/ChangeBrowserSettings.java index 17efd850b123..40057f8bfe2b 100644 --- a/openapi/src/com/intellij/openapi/vcs/versionBrowser/ChangeBrowserSettings.java +++ b/openapi/src/com/intellij/openapi/vcs/versionBrowser/ChangeBrowserSettings.java @@ -10,7 +10,17 @@ import org.jdom.Element; public class ChangeBrowserSettings implements ProjectComponent, JDOMExternalizable{ public float MAIN_SPLITTER_PROPORTION = 0.3f; - public float MESSAGES_SPLITTER_PROPORTION = 0.8f; + public float MESSAGES_SPLITTER_PROPORTION = 0.8f; + public boolean USE_DATE_BEFORE_FILTER = false; + public boolean USE_DATE_AFTER_FILTER = false; + public boolean USE_CHANGE_BEFORE_FILTER = false; + public boolean USE_CHANGE_AFTER_FILTER = false; + + public String DATE_BEFORE = ""; + public String DATE_AFTER = ""; + public String CHANGE_BEFORE = ""; + public String CHANGE_AFTER = ""; + public static final ChangeBrowserSettings getSettings(Project project){ return project.getComponent(ChangeBrowserSettings.class); diff --git a/openapi/src/com/intellij/openapi/vcs/versionBrowser/StandardVersionFilterComponent.form b/openapi/src/com/intellij/openapi/vcs/versionBrowser/StandardVersionFilterComponent.form new file mode 100644 index 000000000000..1f188db80985 --- /dev/null +++ b/openapi/src/com/intellij/openapi/vcs/versionBrowser/StandardVersionFilterComponent.form @@ -0,0 +1,119 @@ + +
diff --git a/openapi/src/com/intellij/openapi/vcs/versionBrowser/StandardVersionFilterComponent.java b/openapi/src/com/intellij/openapi/vcs/versionBrowser/StandardVersionFilterComponent.java new file mode 100644 index 000000000000..556a96b107cb --- /dev/null +++ b/openapi/src/com/intellij/openapi/vcs/versionBrowser/StandardVersionFilterComponent.java @@ -0,0 +1,223 @@ +package com.intellij.openapi.vcs.versionBrowser; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.TextFieldWithBrowseButton; +import com.intellij.util.ui.SelectDateDialog; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.DateFormat; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; + +public class StandardVersionFilterComponent { + private JPanel myPanel; + + public Component getStandardPanel() { + return myPanel; + } + + public interface Filter { + boolean accepts(RepositoryVersion change); + } + + private TextFieldWithBrowseButton myDateBefore; + private TextFieldWithBrowseButton myDateAfter; + private JCheckBox myUseDateBeforeFilter; + private JTextField myNumBefore; + private JCheckBox myUseDateAfterFilter; + private JCheckBox myUseNumBeforeFilter; + private JCheckBox myUseNumAfterFilter; + private JTextField myNumAfter; + + private final Project myProject; + private final DateFormat myDateFormat; + + public StandardVersionFilterComponent(Project project, DateFormat dateformat) { + myProject = project; + myDateFormat = dateformat; + } + + protected void init(){ + installBrowseDateActions(); + installCheckBoxesListeners(); + initValues(); + updateAllEnabled(null); + } + + private void installBrowseDateActions() { + myDateBefore.getButton().addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + final SelectDateDialog selectDateDialog = new SelectDateDialog(myProject); + selectDateDialog.show(); + if (selectDateDialog.isOK()) { + myDateBefore.setText(myDateFormat.format(selectDateDialog.getDate())); + } + } + }); + + myDateAfter.getButton().addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + final SelectDateDialog selectDateDialog = new SelectDateDialog(myProject); + selectDateDialog.show(); + if (selectDateDialog.isOK()) { + myDateAfter.setText(myDateFormat.format(selectDateDialog.getDate())); + } + } + }); + } + + private void installCheckBoxesListeners() { + final ActionListener filterListener = new ActionListener() { + public void actionPerformed(ActionEvent e) { + updateAllEnabled(e); + } + }; + + + installCheckBoxListener(filterListener); + } + + protected static void updatePair(JCheckBox checkBox, JComponent textField, ActionEvent e) { + textField.setEnabled(checkBox.isSelected()); + if (e != null && e.getSource() instanceof JCheckBox && ((JCheckBox)e.getSource()).isSelected()) { + final Object source = e.getSource(); + if (source == checkBox && checkBox.isSelected()) { + textField.requestFocus(); + } + } + + } + + protected void updateAllEnabled(final ActionEvent e) { + updatePair(myUseDateBeforeFilter,myDateBefore, e); + updatePair(myUseDateAfterFilter,myDateAfter, e); + updatePair(myUseNumBeforeFilter,myNumBefore, e); + updatePair(myUseNumAfterFilter,myNumAfter, e); + } + + protected void initValues() { + final ChangeBrowserSettings settings = ChangeBrowserSettings.getSettings(myProject); + myUseDateBeforeFilter.setSelected(settings.USE_DATE_BEFORE_FILTER); + myUseDateAfterFilter.setSelected(settings.USE_DATE_AFTER_FILTER); + myUseNumBeforeFilter.setSelected(settings.USE_CHANGE_BEFORE_FILTER); + myUseNumAfterFilter.setSelected(settings.USE_CHANGE_AFTER_FILTER); + + myDateBefore.setText(settings.DATE_BEFORE); + myDateAfter.setText(settings.DATE_AFTER); + myNumBefore.setText(settings.CHANGE_BEFORE); + myNumAfter.setText(settings.CHANGE_AFTER); + } + + public void saveValues() { + final ChangeBrowserSettings settings = ChangeBrowserSettings.getSettings(myProject); + settings.USE_DATE_BEFORE_FILTER = myUseDateBeforeFilter.isSelected(); + settings.USE_DATE_AFTER_FILTER = myUseDateAfterFilter.isSelected(); + settings.USE_CHANGE_BEFORE_FILTER = myUseNumBeforeFilter.isSelected(); + settings.USE_CHANGE_AFTER_FILTER = myUseNumAfterFilter.isSelected(); + + settings.DATE_BEFORE = myDateBefore.getText(); + settings.DATE_AFTER = myDateAfter.getText(); + settings.CHANGE_BEFORE = myNumBefore.getText(); + settings.CHANGE_AFTER = myNumAfter.getText(); + } + + + protected void installCheckBoxListener(final ActionListener filterListener) { + myUseDateBeforeFilter.addActionListener(filterListener); + myUseDateAfterFilter.addActionListener(filterListener); + myUseNumBeforeFilter.addActionListener(filterListener); + myUseNumAfterFilter.addActionListener(filterListener); + } + + protected List