From ba28fa884b4fe8e9cb73db2d42f906800a959a99 Mon Sep 17 00:00:00 2001 From: Olesya Smirnova Date: Thu, 17 Mar 2005 23:23:57 +0300 Subject: [PATCH] SVN changes browser --- .../versionBrowser/ChangeBrowserSettings.java | 12 +- .../StandardVersionFilterComponent.form | 119 ++++++++++ .../StandardVersionFilterComponent.java | 223 ++++++++++++++++++ resources/src/componentSets/VCS.xml | 1 + 4 files changed, 354 insertions(+), 1 deletion(-) create mode 100644 openapi/src/com/intellij/openapi/vcs/versionBrowser/StandardVersionFilterComponent.form create mode 100644 openapi/src/com/intellij/openapi/vcs/versionBrowser/StandardVersionFilterComponent.java 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 createFilters() { + final ArrayList result = new ArrayList(); + addDateFilter(myUseDateBeforeFilter, myDateBefore, result, true); + addDateFilter(myUseDateAfterFilter, myDateAfter, result, false); + + if (myUseNumBeforeFilter.isSelected()) { + try { + final long numBefore = Long.parseLong(myNumBefore.getText()); + result.add(new Filter() { + public boolean accepts(RepositoryVersion change) { + return change.getNumber() <= numBefore; + } + }); + } + catch (NumberFormatException e) { + //ignore + } + } + + if (myUseNumAfterFilter.isSelected()) { + try { + final long numBefore = Long.parseLong(myNumAfter.getText()); + result.add(new Filter() { + public boolean accepts(RepositoryVersion change) { + return change.getNumber() >= numBefore; + } + }); + } + catch (NumberFormatException e) { + //ignore + } + } + + return result; + } + + private void addDateFilter(final JCheckBox filter, + final TextFieldWithBrowseButton text, + final ArrayList result, + final boolean before) { + if (filter.isSelected()) { + + final String dateBefore = text.getText(); + try { + final Date date = myDateFormat.parse(dateBefore); + result.add(new Filter() { + public boolean accepts(RepositoryVersion change) { + final Date changeDate = change.getDate(); + if (changeDate == null) return false; + + return before ? changeDate.before(date) : changeDate.after(date); + } + }); + } + catch (ParseException e) { + //ignore + } + } + } + + private Filter createFilter() { + final List filters = createFilters(); + return new Filter() { + public boolean accepts(RepositoryVersion change) { + for (Iterator iterator = filters.iterator(); iterator.hasNext();) { + Filter filter = iterator.next(); + if (!filter.accepts(change)) return false; + } + return true; + } + }; + } + + public void filterChanges(final List changeListInfos) { + Filter filter = createFilter(); + for (Iterator iterator = changeListInfos.iterator(); iterator.hasNext();) { + RepositoryVersion changeListInfo = iterator.next(); + if (!filter.accepts(changeListInfo)) { + iterator.remove(); + } + } + } + + +} + diff --git a/resources/src/componentSets/VCS.xml b/resources/src/componentSets/VCS.xml index 88b8ddd0e040..1886111b0be3 100644 --- a/resources/src/componentSets/VCS.xml +++ b/resources/src/componentSets/VCS.xml @@ -53,6 +53,7 @@ com.intellij.openapi.vcs.versionBrowser.ChangeBrowserSettings +