Package com.valhalla.jbother.preferences

Source Code of com.valhalla.jbother.preferences.PreferencesTree$DoubleClickListener

/*
*  Copyright (C) 2003 Adam Olsen
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 1, or (at your option)
*  any later version.
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package com.valhalla.jbother.preferences;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Iterator;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.TreeMap;

import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

/**
* Displays the different preference panels available in a JTree
*
* @author Adam Olsen
* @created March 3, 2005
* @version 1.0
*/
public class PreferencesTree extends JPanel {
    private ResourceBundle resources = ResourceBundle.getBundle(
            "JBotherBundle", Locale.getDefault());

    private PreferencesDialog prefsDialog;

    private JTree tree;

    private DefaultMutableTreeNode root, topNode, pluginsNode;

    private JScrollPane scroll = new JScrollPane();

    /**
     * Sets up the preferences tree
     *
     * @param prefsDialog
     *            the enclosing preferences dialog
     */
    public PreferencesTree(PreferencesDialog prefsDialog) {
        this.prefsDialog = prefsDialog;

        setupTree();

        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        add(scroll);
        setPreferredSize(new Dimension(150, 350));
    }

    /**
     * Description of the Method
     */
    public void updateUI() {
        super.updateUI();

        if (resources != null)
            setupTree();
    }

    /**
     * Sets the tree up
     */
    private void setupTree() {
        root = new DefaultMutableTreeNode(resources.getString("preferences"));
        topNode = new DefaultMutableTreeNode(resources.getString("preferences"));
        root.add(topNode);

        DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer() {
            public Component getTreeCellRendererComponent(JTree tree,
                    Object value, boolean sel, boolean expanded, boolean leaf,
                    int row, boolean hasFocus) {
                super.getTreeCellRendererComponent(tree, value, sel, expanded,
                        leaf, row, hasFocus);

                DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
                setText(((String) node.getUserObject()).replaceAll("^a\\d+ ",
                        ""));

                return this;
            }
        };
        renderer.setLeafIcon(null);

        Iterator i = prefsDialog.getPanels().keySet().iterator();

        while (i.hasNext()) {
            topNode.add(new DefaultMutableTreeNode((String) i.next()));
        }

        TreeMap plugins = PreferencesDialog.getPluginPanels();
        if (plugins.size() > 0) {
            pluginsNode = new DefaultMutableTreeNode(resources
                    .getString("pluginPreferences"));
            i = plugins.keySet().iterator();
            while (i.hasNext()) {
                pluginsNode.add(new DefaultMutableTreeNode((String) i.next()));
            }
            root.add(pluginsNode);
        }

        tree = new JTree(root);
        tree.setRootVisible(false);
        tree.setShowsRootHandles(true);

        for (int a = 0; a < tree.getRowCount(); a++) {
            tree.expandRow(a);
        }

        tree.setSelectionRow(1);
        tree.setCellRenderer(renderer);
        tree.addMouseListener(new DoubleClickListener());
        scroll.setViewportView(tree);
        validate();
    }

    /**
     * Gets the index of the selected item
     *
     * @return the selected index
     */
    public int getSelectedIndex() {
        TreePath path = tree.getSelectionPath();
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
                .getLastPathComponent();
        DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
        return model.getIndexOfChild(root, node);
    }

    /**
     * Gets the number of rows
     *
     * @return the row count
     */
    public int getRowCount() {
        DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
        return model.getChildCount(root);
    }

    /**
     * Listens for a click on one of the tree items
     *
     * @author synic
     * @created March 3, 2005
     */
    class DoubleClickListener extends MouseAdapter {
        /**
         * Description of the Method
         *
         * @param e
         *            Description of the Parameter
         */
        public void mouseClicked(MouseEvent e) {
            JTree tree = (JTree) e.getComponent();
            TreePath path = tree.getSelectionPath();
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
                    .getLastPathComponent();
            String string = (String) node.getUserObject();
            if (string != null) {
                prefsDialog.switchPanel(string);
            }
        }
    }
}
TOP

Related Classes of com.valhalla.jbother.preferences.PreferencesTree$DoubleClickListener

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.