blob: a11b0993499ce7037d6911d575b3f7ce82f5423f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.core.output2;
import java.awt.event.ActionEvent;
import org.openide.DialogDescriptor;
import org.openide.util.NbBundle;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.lang.ref.Reference;
import java.lang.ref.SoftReference;
import java.util.Vector;
import org.openide.DialogDisplayer;
import org.openide.awt.Mnemonics;
import org.openide.util.NbPreferences;
class FindDialogPanel extends javax.swing.JPanel {
static final long serialVersionUID =5048678953767663114L;
private static final String KEY_REGEXP = "regExp"; // NOI18N
private static final String KEY_MATCHCASE = "matchCase"; // NOI18N
private static Reference<FindDialogPanel> panel = null;
private JButton acceptButton;
private static Vector<String> history = new Vector<>();
/** Initializes the Form */
FindDialogPanel() {
regExp = NbPreferences.forModule(Controller.class).getBoolean(KEY_REGEXP, false);
matchCase = NbPreferences.forModule(Controller.class).getBoolean(KEY_MATCHCASE, false);
initComponents();
acceptButton = new JButton();
Mnemonics.setLocalizedText(chbRegExp, NbBundle.getMessage(FindDialogPanel.class, "LBL_Use_RegExp"));
Mnemonics.setLocalizedText(chbMatchCase, NbBundle.getMessage(FindDialogPanel.class, "LBL_Match_Case"));
getAccessibleContext().setAccessibleName(NbBundle.getMessage(FindDialogPanel.class, "ACSN_Find"));
getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(FindDialogPanel.class, "ACSD_Find"));
findWhat.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(FindDialogPanel.class, "ACSD_Find_What"));
acceptButton.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(FindDialogPanel.class, "ACSD_FindBTN"));
findWhat.setModel(new DefaultComboBoxModel<>(history));
findWhat.getEditor().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
acceptButton.doClick();
}
});
findWhatLabel.setFocusable(false);
}
public static FindDialogPanel getPanel() {
FindDialogPanel result = null;
if (panel != null) {
result = panel.get();
}
if (result == null) {
result = new FindDialogPanel();
panel = new SoftReference<FindDialogPanel> (result);
}
return result;
}
void setFindText(String text) {
int end = text.indexOf("\n");
String txt = text;
if (end > -1) {
txt = text.substring(0, end);
}
if (!txt.equals(findWhat.getSelectedItem())) {
findWhat.insertItemAt(txt, 0);
findWhat.setSelectedIndex(0);
}
selectText();
}
private void selectText() {
Component comp = findWhat.getEditor().getEditorComponent();
if (comp instanceof JTextField) {
JTextField fld = (JTextField)comp;
fld.setSelectionStart(0);
fld.setSelectionEnd(fld.getText().length());
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the FormEditor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
findWhatLabel = new javax.swing.JLabel();
findWhat = new javax.swing.JComboBox<>();
chbRegExp = new javax.swing.JCheckBox();
chbMatchCase = new javax.swing.JCheckBox();
setLayout(new java.awt.GridBagLayout());
findWhatLabel.setLabelFor(findWhat);
findWhatLabel.setText(org.openide.util.NbBundle.getMessage(FindDialogPanel.class, "LBL_Find_What")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 12, 5, 5);
add(findWhatLabel, gridBagConstraints);
findWhat.setEditable(true);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.ipadx = 50;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 12, 5, 5);
add(findWhat, gridBagConstraints);
chbRegExp.setSelected(regExp());
chbRegExp.setText(org.openide.util.NbBundle.getMessage(FindDialogPanel.class, "LBL_Use_RegExp")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 12, 5, 5);
add(chbRegExp, gridBagConstraints);
chbMatchCase.setSelected(matchCase());
chbMatchCase.setText(org.openide.util.NbBundle.getMessage(FindDialogPanel.class, "LBL_Match_Case")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 12, 5, 5);
add(chbMatchCase, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JCheckBox chbMatchCase;
private javax.swing.JCheckBox chbRegExp;
protected javax.swing.JComboBox<String> findWhat;
protected javax.swing.JLabel findWhatLabel;
// End of variables declaration//GEN-END:variables
private String getPattern() {
return (String) findWhat.getSelectedItem();
}
private void updateHistory() {
String pattern = (String) findWhat.getEditor().getItem();
history.add( 0, pattern );
for ( int i = history.size() - 1; i > 0; i-- ) {
if ( history.get( i ).equals( pattern ) ) {
history.remove( i );
break;
}
}
}
private static String result;
private static boolean regExp;
private static boolean matchCase;
static String getResult(String selection, String dlgTitle, String comboLabel, String buttonText) {
final FindDialogPanel findPanel = getPanel();
Mnemonics.setLocalizedText(findPanel.acceptButton, NbBundle.getMessage(FindDialogPanel.class, buttonText));
Mnemonics.setLocalizedText(findPanel.findWhatLabel, NbBundle.getMessage(FindDialogPanel.class, comboLabel));
if (selection != null) {
findPanel.setFindText(selection);
}
findPanel.selectText();
DialogDescriptor dd = new DialogDescriptor(findPanel, NbBundle.getMessage(FindDialogPanel.class, dlgTitle),
true, new Object[] {findPanel.acceptButton, DialogDescriptor.CANCEL_OPTION}, findPanel.acceptButton,
DialogDescriptor.RIGHT_ALIGN, null, null);
Object res = DialogDisplayer.getDefault().notify(dd);
if (res.equals(findPanel.acceptButton)) {
findPanel.updateHistory();
regExp = findPanel.chbRegExp.getModel().isSelected();
matchCase = findPanel.chbMatchCase.getModel().isSelected();
NbPreferences.forModule(FindDialogPanel.class).putBoolean(KEY_REGEXP, regExp);
NbPreferences.forModule(FindDialogPanel.class).putBoolean(KEY_MATCHCASE, matchCase);
result = findPanel.getPattern();
return result;
} else {
result = null;
return null;
}
}
static String result() {
return result;
}
static boolean regExp() {
return regExp;
}
static boolean matchCase() {
return matchCase;
}
}