Package jreepad

Source Code of jreepad.SearchDialog

package jreepad;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.Box;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;

/**
* The search dialog.
*
* @version $Id: SearchDialog.java,v 1.1 2007-02-05 11:06:44 pewu Exp $
*/
public class SearchDialog extends JDialog
{
    private JTextField nodeSearchField;
    private JComboBox searchWhereSelector;
    private JSpinner searchMaxNumSpinner;
    private JCheckBox searchCaseCheckBox;
    private AbstractTableModel searchResultsTableModel;
    private JTable searchResultsTable;
    private JScrollPane searchResultsTableScrollPane;
    private JLabel searchResultsLabel;
    private JreepadView theJreepad;

    public SearchDialog(Frame owner, JreepadView theJreepad)
    {
        super(owner, JreepadViewer.lang.getString("SEARCH_WINDOWTITLE"), false);
        this.theJreepad = theJreepad;
        setVisible(false);
        Box vBox = Box.createVerticalBox();
        //
        Box hBox = Box.createHorizontalBox();
        nodeSearchField = new JTextField("");
        vBox.add(new JLabel(JreepadViewer.lang.getString("SEARCH_SEARCHFOR")));
        hBox.add(nodeSearchField);
        nodeSearchField.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    doTheSearch();
                }
            });
        nodeSearchField.addCaretListener(new CaretListener()
            {
                public void caretUpdate(CaretEvent e)
                {
                    doTheSearch();
                }
            });
        vBox.add(hBox);
        //
        searchWhereSelector = new JComboBox(new String[] {
                        JreepadViewer.lang.getString("SEARCH_SELECTEDNODE"),
                        JreepadViewer.lang.getString("SEARCH_WHOLETREE") });
        searchWhereSelector.setSelectedIndex(1);
        searchWhereSelector.setEditable(false);
        searchWhereSelector.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    doTheSearch();
                }
            });
        hBox = Box.createHorizontalBox();
        hBox.add(Box.createGlue());
        hBox.add(new JLabel(JreepadViewer.lang.getString("SEARCH_SEARCHWHERE")));
        hBox.add(searchWhereSelector);
        hBox.add(Box.createGlue());
        hBox.add(searchCaseCheckBox = new JCheckBox(JreepadViewer.lang
            .getString("SEARCH_CASESENSITIVE"), false));
        searchCaseCheckBox.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    doTheSearch();
                }
            });
        hBox.add(Box.createGlue());
        vBox.add(hBox);
        //
        // searchMaxNumSpinner = new DSpinner(1,1000,getPrefs().searchMaxNum);
        searchMaxNumSpinner = new JSpinner(new SpinnerNumberModel(getPrefs().searchMaxNum, 1, 1000,
            1));
        /*
         * searchMaxNumSpinner.addCaretListener(new CaretListener(){ public void
         * caretUpdate(CaretEvent e){ doTheSearch();}}); searchMaxNumSpinner.addActionListener(new
         * ActionListener(){ public void actionPerformed(ActionEvent e){ doTheSearch();}});
         */
        searchMaxNumSpinner.getModel().addChangeListener(new ChangeListener()
            {
                public void stateChanged(ChangeEvent e)
                {
                    doTheSearch();
                }
            });
        hBox = Box.createHorizontalBox();
        hBox.add(Box.createGlue());
        hBox.add(new JLabel(JreepadViewer.lang.getString("SEARCH_MAXRESULTS")));
        hBox.add(searchMaxNumSpinner);
        hBox.add(Box.createGlue());
        vBox.add(hBox);
        //
        // NOW FOR THE SEARCH RESULTS TABLE - COULD BE TRICKY!
        searchResultsTableModel = new AbstractTableModel()
            {
                private final String[] columns = new String[] {
                                JreepadViewer.lang.getString("SEARCH_TBL_COL_NODE"),
                                JreepadViewer.lang.getString("SEARCH_TBL_COL_ARTICLETEXT"),
                                JreepadViewer.lang.getString("SEARCH_TBL_COL_FULLPATH") };

                public int getColumnCount()
                {
                    return columns.length;
                }

                public String getColumnName(int index)
                {
                    return columns[index];
                }

                public int getRowCount()
                {
                    JreepadSearcher.JreepadSearchResult[] results = SearchDialog.this.theJreepad
                        .getSearchResults();
                    if (results == null || results.length == 0)
                        return 1;
                    else
                        return results.length;
                }

                public Object getValueAt(int row, int col)
                {
                    JreepadSearcher.JreepadSearchResult[] results = SearchDialog.this.theJreepad
                        .getSearchResults();
                    if (results == null || results.length == 0)
                        switch (col)
                        {
                        case 2:
                            return "";
                        case 1:
                            return (nodeSearchField.getText() == "" ? JreepadViewer.lang
                                .getString("SEARCH_TBL_BEFORERESULTS") : JreepadViewer.lang
                                .getString("SEARCH_TBL_NORESULTS"));
                        default:
                            return "";
                        }
                    else
                        switch (col)
                        {
                        case 2:
                            return results[row].getTreePath();
                        case 1:
                            return results[row].getArticleQuote();
                        default:
                            return results[row].getNode().getTitle();
                        }
                }
            };
        searchResultsTable = new JTable(searchResultsTableModel);
        searchResultsTable.setCellSelectionEnabled(false);
        searchResultsTable.setColumnSelectionAllowed(false);
        searchResultsTable.setRowSelectionAllowed(true);
        searchResultsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        searchResultsTableScrollPane = new JScrollPane(searchResultsTable);
        vBox.add(searchResultsLabel = new JLabel(JreepadViewer.lang.getString("SEARCH_RESULTS")));
        vBox.add(searchResultsTableScrollPane);
        //
        // Add mouse listener
        MouseListener sml = new MouseAdapter()
            {
                public void mouseClicked(MouseEvent e)
                {
                    mouseClickedOnSearchResultsTable(e);
                }
            };
        searchResultsTable.addMouseListener(sml);
        //
        getContentPane().add(vBox);

        // Now we'll add some keyboard shortcuts
        KeyAdapter searchKeyListener = new KeyAdapter()
            {
                public void keyPressed(KeyEvent eek)
                {
                    switch (eek.getKeyCode())
                    {
                    case KeyEvent.VK_ESCAPE:
                        setVisible(false);
                        break;
                    case KeyEvent.VK_W:
                        if (eek.isControlDown() || eek.isMetaDown())
                            setVisible(false);
                        break;
                    }
                }
            };
        addKeyListener(searchKeyListener);
        nodeSearchField.addKeyListener(searchKeyListener);
        searchCaseCheckBox.addKeyListener(searchKeyListener);
        searchWhereSelector.addKeyListener(searchKeyListener);
        searchResultsTable.addKeyListener(searchKeyListener);
        searchMaxNumSpinner.addKeyListener(searchKeyListener);
        searchResultsTable.addKeyListener(new KeyAdapter()
            {
                public void keyPressed(KeyEvent eek)
                {
                    switch (eek.getKeyCode())
                    {
                    case KeyEvent.VK_SPACE:
                    case KeyEvent.VK_ENTER:
                        mouseClickedOnSearchResultsTable(null);
                        break;
                    }
                }
            });

        // Finished establishing the search dialogue box
    }

    private void doTheSearch()
    {
        getPrefs().searchMaxNum = ((Integer)searchMaxNumSpinner.getValue()).intValue();
        // DSpinner version getPrefs().searchMaxNum = searchMaxNumSpinner.getValue();

        performSearch(nodeSearchField.getText(),
            nodeSearchField.getText(), // articleSearchField.getText(),
            searchWhereSelector.getSelectedIndex(),
            true /* searchCombinatorSelector.getSelectedIndex()==0 */, searchCaseCheckBox
                .isSelected(), getPrefs().searchMaxNum);
    }

    private boolean performSearch(String inNodes, String inArticles,
        int searchWhat /* 0=selected, 1=all */, boolean orNotAnd, boolean caseSensitive,
        int maxResults)
    {
        // setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
        boolean ret = theJreepad.performSearch(inNodes, inArticles, searchWhat, orNotAnd,
            caseSensitive, maxResults);
        // setCursor(Cursor.getDefaultCursor());
        if (!ret)
        {
            // JOptionPane.showMessageDialog(searchDialog, "Found nothing.", "Search result..." ,
            // JOptionPane.INFORMATION_MESSAGE);
            searchResultsLabel.setText(JreepadViewer.lang.getString("SEARCH_RESULTS"));
        }
        else
            searchResultsLabel.setText(JreepadViewer.lang.getString("SEARCH_RESULTS")
                + theJreepad.getSearchResults().length
                + JreepadViewer.lang.getString("SEARCH_NODES_MATCHED"));
        searchResultsTableModel.fireTableStructureChanged();
        // searchResultsTable.repaint();
        return ret;
    }

    private void mouseClickedOnSearchResultsTable(MouseEvent e)
    {
        JreepadSearcher.JreepadSearchResult[] results = theJreepad.getSearchResults();
        int selectedRow = searchResultsTable.getSelectedRow();
        if (results == null || results.length == 0 || selectedRow == -1)
            return;

        // Select the node in the tree
        theJreepad.getTree().setSelectionPath(results[selectedRow].getTreePath());
        theJreepad.getTree().scrollPathToVisible(results[selectedRow].getTreePath());
    }

    private static JreepadPrefs getPrefs()
    {
        return JreepadView.getPrefs();
    }

    public void setJreepad(JreepadView theJreepad)
    {
        this.theJreepad = theJreepad;
    }

    public void open()
    {
        setVisible(true);
        nodeSearchField.requestFocus();
        nodeSearchField.setSelectionStart(0);
    }
}
TOP

Related Classes of jreepad.SearchDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.