From 6690629036a8fdb2fbd7c668d4d88f6f3376f999 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 12 Jul 2010 19:21:23 +0100 Subject: [PATCH] 'fold lines like this' action --- .../SuspiciousNameCombinationInspection.java | 49 +++--------- .../console/ConsoleFoldingConfigurable.java | 38 +++++++--- .../console/ConsoleFoldingSettings.java | 5 ++ .../console/FoldLinesWithSubstring.java | 75 +++++++++++++++++++ .../execution/impl/ConsoleViewImpl.java | 2 + .../com/intellij/ui/AddDeleteListPanel.java | 21 ++++-- .../intellij/ui/AddEditDeleteListPanel.java | 54 +++++++++++++ 7 files changed, 185 insertions(+), 59 deletions(-) create mode 100644 platform/lang-impl/src/com/intellij/execution/console/FoldLinesWithSubstring.java create mode 100644 platform/platform-api/src/com/intellij/ui/AddEditDeleteListPanel.java diff --git a/java/java-impl/src/com/intellij/codeInspection/suspiciousNameCombination/SuspiciousNameCombinationInspection.java b/java/java-impl/src/com/intellij/codeInspection/suspiciousNameCombination/SuspiciousNameCombinationInspection.java index 77ce710a95e1..33e320c53982 100644 --- a/java/java-impl/src/com/intellij/codeInspection/suspiciousNameCombination/SuspiciousNameCombinationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/suspiciousNameCombination/SuspiciousNameCombinationInspection.java @@ -16,7 +16,6 @@ package com.intellij.codeInspection.suspiciousNameCombination; -import com.intellij.CommonBundle; import com.intellij.codeInsight.daemon.GroupNames; import com.intellij.codeInsight.daemon.JavaErrorMessages; import com.intellij.codeInspection.InspectionsBundle; @@ -29,7 +28,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.codeStyle.NameUtil; import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.ui.AddDeleteListPanel; +import com.intellij.ui.AddEditDeleteListPanel; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -38,10 +37,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -209,23 +204,10 @@ public class SuspiciousNameCombinationInspection extends BaseLocalInspectionTool } } - private class MyOptionsPanel extends AddDeleteListPanel { - private JButton myEditButton; + private class MyOptionsPanel extends AddEditDeleteListPanel { public MyOptionsPanel() { super(InspectionsBundle.message("suspicious.name.combination.options.title"), myNameGroups); - myEditButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - editSelectedItem(); - } - }); - myList.addMouseListener(new MouseAdapter() { - public void mouseClicked(MouseEvent e) { - if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) { - editSelectedItem(); - } - } - }); myListModel.addListDataListener(new ListDataListener() { public void intervalAdded(ListDataEvent e) { saveChanges(); @@ -241,31 +223,20 @@ public class SuspiciousNameCombinationInspection extends BaseLocalInspectionTool }); } - @Override protected JButton[] createButtons() { - myEditButton = new JButton(CommonBundle.message("button.edit")); - return new JButton[] { myAddButton, myEditButton, myDeleteButton }; - } - - protected Object findItemToAdd() { + protected String findItemToAdd() { return Messages.showInputDialog(this, InspectionsBundle.message("suspicious.name.combination.options.prompt"), InspectionsBundle.message("suspicious.name.combination.add.titile"), Messages.getQuestionIcon(), "", null); } - private void editSelectedItem() { - int index = myList.getSelectedIndex(); - if (index >= 0) { - String inputValue = (String) myListModel.get(index); - String newValue = Messages.showInputDialog(this, - InspectionsBundle.message("suspicious.name.combination.options.prompt"), - InspectionsBundle.message("suspicious.name.combination.edit.title"), - Messages.getQuestionIcon(), - inputValue, null); - if (newValue != null) { - myListModel.set(index, newValue); - } - } + @Override + protected String editSelectedItem(String inputValue) { + return Messages.showInputDialog(this, + InspectionsBundle.message("suspicious.name.combination.options.prompt"), + InspectionsBundle.message("suspicious.name.combination.edit.title"), + Messages.getQuestionIcon(), + inputValue, null); } private void saveChanges() { diff --git a/platform/lang-impl/src/com/intellij/execution/console/ConsoleFoldingConfigurable.java b/platform/lang-impl/src/com/intellij/execution/console/ConsoleFoldingConfigurable.java index 83900aa42e3a..826f64929ddd 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleFoldingConfigurable.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleFoldingConfigurable.java @@ -4,8 +4,9 @@ import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.VerticalFlowLayout; -import com.intellij.ui.AddDeleteListPanel; +import com.intellij.ui.AddEditDeleteListPanel; import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -20,11 +21,7 @@ public class ConsoleFoldingConfigurable implements SearchableConfigurable { private JPanel myMainComponent; private MyAddDeleteListPanel myPositivePanel; private MyAddDeleteListPanel myNegativePanel; - private final ConsoleFoldingSettings mySettings; - - public ConsoleFoldingConfigurable(ConsoleFoldingSettings settings) { - mySettings = settings; - } + private final ConsoleFoldingSettings mySettings = ConsoleFoldingSettings.getSettings(); public JComponent createComponent() { if (myMainComponent == null) { @@ -37,6 +34,10 @@ public class ConsoleFoldingConfigurable implements SearchableConfigurable { return myMainComponent; } + public void addRule(@NotNull String rule) { + myPositivePanel.addRule(rule); + } + public boolean isModified() { return !Arrays.asList(myNegativePanel.getListItems()).equals(mySettings.getNegativePatterns()) || !Arrays.asList(myPositivePanel.getListItems()).equals(mySettings.getPositivePatterns()); @@ -59,6 +60,7 @@ public class ConsoleFoldingConfigurable implements SearchableConfigurable { myPositivePanel = null; } + @NotNull public String getId() { return getDisplayName(); } @@ -80,20 +82,23 @@ public class ConsoleFoldingConfigurable implements SearchableConfigurable { return null; } - private static class MyAddDeleteListPanel extends AddDeleteListPanel { + private static class MyAddDeleteListPanel extends AddEditDeleteListPanel { private final String myQuery; public MyAddDeleteListPanel(String title, String query) { - super(title, new ArrayList()); + super(title, new ArrayList()); myQuery = query; } @Override @Nullable - protected Object findItemToAdd() { - return Messages.showInputDialog(this, myQuery, - "Folding pattern", - Messages.getQuestionIcon(), "", null); + protected String findItemToAdd() { + return showEditDialog(""); + } + + @Nullable + private String showEditDialog(final String initialValue) { + return Messages.showInputDialog(this, myQuery, "Folding pattern", Messages.getQuestionIcon(), initialValue, null); } void resetFrom(List patterns) { @@ -109,5 +114,14 @@ public class ConsoleFoldingConfigurable implements SearchableConfigurable { patterns.add((String)o); } } + + public void addRule(String rule) { + addElement(rule); + } + + @Override + protected String editSelectedItem(String item) { + return showEditDialog(item); + } } } diff --git a/platform/lang-impl/src/com/intellij/execution/console/ConsoleFoldingSettings.java b/platform/lang-impl/src/com/intellij/execution/console/ConsoleFoldingSettings.java index f912b09b93b3..cc91e1a703ff 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleFoldingSettings.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleFoldingSettings.java @@ -1,6 +1,7 @@ package com.intellij.execution.console; import com.intellij.openapi.components.PersistentStateComponent; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; import com.intellij.util.containers.CollectionFactory; @@ -24,6 +25,10 @@ public class ConsoleFoldingSettings implements PersistentStateComponent extends PanelWithButtons { private final String myTitle; protected JButton myAddButton = new JButton(CommonBundle.message("button.add")); protected JButton myDeleteButton = new JButton(CommonBundle.message("button.delete")); @@ -41,7 +42,7 @@ public abstract class AddDeleteListPanel extends PanelWithButtons { protected JList myList = new JBList(myListModel); public AddDeleteListPanel(final String title, - final List initialList) { + final List initialList) { myTitle = title; for (Object o : initialList) { if (o != null) { @@ -56,11 +57,7 @@ public abstract class AddDeleteListPanel extends PanelWithButtons { }); myAddButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { - final Object itemToAdd = findItemToAdd(); - if (itemToAdd != null){ - myListModel.addElement(itemToAdd); - myList.setSelectedValue(itemToAdd, true); - } + addElement(findItemToAdd()); } }); myDeleteButton.addActionListener(new ActionListener() { @@ -71,7 +68,15 @@ public abstract class AddDeleteListPanel extends PanelWithButtons { initPanel(); } - protected abstract Object findItemToAdd(); + protected void addElement(@Nullable T itemToAdd) { + if (itemToAdd != null){ + myListModel.addElement(itemToAdd); + myList.setSelectedValue(itemToAdd, true); + } + } + + @Nullable + protected abstract T findItemToAdd(); public Object [] getListItems(){ List items = new ArrayList(); diff --git a/platform/platform-api/src/com/intellij/ui/AddEditDeleteListPanel.java b/platform/platform-api/src/com/intellij/ui/AddEditDeleteListPanel.java new file mode 100644 index 000000000000..a7500f5c91ec --- /dev/null +++ b/platform/platform-api/src/com/intellij/ui/AddEditDeleteListPanel.java @@ -0,0 +1,54 @@ +package com.intellij.ui; + +import com.intellij.CommonBundle; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.List; + +/** + * @author peter + */ +public abstract class AddEditDeleteListPanel extends AddDeleteListPanel { + private JButton myEditButton; + + public AddEditDeleteListPanel(final String title, final List initialList) { + super(title, initialList); + myEditButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + editSelectedItem(); + } + }); + myList.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) { + editSelectedItem(); + } + } + }); + } + + @Override protected JButton[] createButtons() { + myEditButton = new JButton(CommonBundle.message("button.edit")); + return new JButton[] { myAddButton, myEditButton, myDeleteButton }; + } + + @Nullable + protected abstract T editSelectedItem(T item); + + private void editSelectedItem() { + int index = myList.getSelectedIndex(); + if (index >= 0) { + T newValue = editSelectedItem((T) myListModel.get(index)); + if (newValue != null) { + myListModel.set(index, newValue); + } + } + } + + +}