From b416d4c8d4c1ae6a76771d304fc29c15519242eb Mon Sep 17 00:00:00 2001 From: bancika Date: Tue, 14 Apr 2020 10:49:20 +0200 Subject: [PATCH] enhance search --- .../src/org/diylc/presenter/Presenter.java | 5 ++- .../diylc/swing/plugins/edit/FindDialog.java | 44 +++++++++++++++++-- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index c2c3de5c..7ded5670 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -1004,12 +1004,15 @@ public class Presenter implements IPlugInPort { drawingManager.clearContinuityArea(); } + @SuppressWarnings("unchecked") @Override public void selectMatching(String criteria) { Set> matching = new HashSet>(); for (IDIYComponent c : currentProject.getComponents()) { + ComponentType type = ComponentProcessor.getInstance().extractComponentTypeFrom((Class>) c.getClass()); if ((c.getName() != null && c.getName().toLowerCase().matches(criteria.toLowerCase())) || - (c.getValueForDisplay() != null && c.getValueForDisplay().toLowerCase().matches(criteria.toLowerCase()))) + (c.getValueForDisplay() != null && c.getValueForDisplay().toLowerCase().matches(criteria.toLowerCase())) || + type.getName().toLowerCase().matches(criteria.toLowerCase())) matching.add(c); } updateSelection(matching); diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/FindDialog.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/FindDialog.java index e18929fb..25b5a8c6 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/FindDialog.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/edit/FindDialog.java @@ -33,6 +33,7 @@ import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; +import javax.swing.UIManager; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; @@ -40,17 +41,35 @@ import org.diylc.swingframework.ButtonDialog; public class FindDialog extends ButtonDialog { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + private static final String TOOLTIP_HTML = "Use RegEx to search for component names, types and values.
" + + "
Character classes:
" + + ". - matches any character
" + + "\\s - whitespace
" + + "\\S - non-whitespace
" + + "\\d - digit
" + + "\\D - non-digit
" + + "
Quantifiers:
" + + "* - zero or more times
" + + "? - zero or one time
" + + "+ - one or more times
" + + "
Examples:
" + + "'R27' - matches a component named R27
" + + "'Resistor' - matches all resistors
" + + "'R\\d+' - matches components starting with R, followed by at least one digit" + + ""; private JPanel mainPanel; - private JTextField criteriaField; + private JTextField criteriaField; + private JLabel tooltipLabel; private String criteria; public FindDialog(JFrame owner) { super(owner, "Find", new String[] {OK, CANCEL}); - setMinimumSize(new Dimension(240, 32)); + setMinimumSize(new Dimension(400, 32)); layoutGui(); refreshState(); } @@ -80,9 +99,26 @@ public class FindDialog extends ButtonDialog { gbc.weightx = 1; gbc.gridy = 0; - mainPanel.add(getCriteriaField(), gbc); + mainPanel.add(getCriteriaField(), gbc); + + gbc.gridx = 0; + gbc.gridy = 1; + gbc.gridwidth = 2; + mainPanel.add(getTooltipLabel(), gbc); } return mainPanel; + } + + private JLabel getTooltipLabel() { + if (tooltipLabel == null) { + tooltipLabel = new JLabel(); + tooltipLabel.setOpaque(true); + tooltipLabel.setBackground(UIManager.getColor("ToolTip.background")); + tooltipLabel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), + BorderFactory.createEmptyBorder(2, 2, 2, 2))); + tooltipLabel.setText(TOOLTIP_HTML); + } + return tooltipLabel; } private void refreshState() {