/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
*
* ident "%Z%%M% %I% %E% SMI"
*
* Copyright(c) 1999 by Sun Microsystems, Inc.
* All rights reserved.
*
* pmHelpIndexPanel.java
* Search help titles
*/
package com.sun.admin.pm.client;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.JPanel;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.*;
import com.sun.admin.pm.server.*;
public class pmHelpIndexPanel extends JPanel {
pmHelpController controller;
pmHelpIndexQueryPanel queryPanel;
pmHelpIndexResultPanel resultPanel;
JLabel textPanels[];
public pmHelpIndexPanel(pmHelpController ctrl) {
controller = ctrl;
// build subpanels
queryPanel = new pmHelpIndexQueryPanel(this);
resultPanel = new pmHelpIndexResultPanel(this);
textPanels = new JLabel[4];
textPanels[0] = new JLabel(
pmUtility.getResource("To.search.the.index..."));
textPanels[1] = new JLabel(
pmUtility.getResource("type.your.query.below..."));
// lay out top panel
this.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(5, 5, 5, 5);
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridx = 0;
c.gridy = 0;
c.gridheight = 1; // GridBagConstraints.REMAINDER;
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.weighty = 0.0;
JPanel p = new JPanel();
p.setLayout(new GridBagLayout());
GridBagConstraints pc = new GridBagConstraints();
pc.insets = new Insets(5, 5, 0, 5);
// pc.fill = GridBagConstraints.HORIZONTAL;
pc.weightx = 1.0;
pc.anchor = GridBagConstraints.WEST;
pc.gridx = 0;
pc.gridy = GridBagConstraints.RELATIVE;
p.add(textPanels[0], pc);
pc.insets = new Insets(0, 5, 5, 5);
p.add(textPanels[1], pc);
// p.add(textPanels[2]);
this.add(p, c);
p = new JPanel();
p.setLayout(new BorderLayout());
p.add(queryPanel, "North");
p.add(resultPanel, "Center");
p.setBorder(BorderFactory.createEtchedBorder());
c.gridy = GridBagConstraints.RELATIVE;
c.gridheight = 0;
c.weighty = 1.0;
c.weightx = 0.0;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.EAST;
this.add(p, c);
this.setBorder(BorderFactory.createEtchedBorder());
// figure out when we are un-tabbed
controller.outerPanel.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JTabbedPane tp = (JTabbedPane) e.getSource();
Debug.info("HELP: Tab event!");
if (!(tp.getSelectedComponent() instanceof
com.sun.admin.pm.client.pmHelpIndexPanel)) {
Debug.info("HELP: Tab event: resetting default");
/*
* controller.frame.getRootPane().
* setDefaultButton(
* controller.frame.dismiss);
*/
} else {
// allow tab to retain focus
// queryPanel.query.requestFocus();
}
}
});
}
// place item titles in search result panel
public void setSearchResults(Vector items) {
Vector v = new Vector();
if (items.size() == 0) {
resultPanel.setListEmpty(true);
v.addElement(pmUtility.getResource("Nothing.matched."));
} else {
Enumeration e = items.elements();
while (e.hasMoreElements()) {
pmHelpItem i = (pmHelpItem) e.nextElement();
v.addElement(i);
}
resultPanel.setListEmpty(false);
}
resultPanel.setResultList(v);
}
}
class pmHelpIndexResultPanel extends JPanel {
JList resultList = null;
pmButton selectButton = null;
pmHelpIndexPanel parentPanel = null;
protected boolean listEmpty = true;
public pmHelpIndexResultPanel(pmHelpIndexPanel p) {
parentPanel = p;
this.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(10, 10, 10, 10);
c.fill = GridBagConstraints.NONE;
c.weightx = c.weighty = 0.0;
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.NORTHWEST;
JLabel promptLabel = new JLabel(
pmUtility.getResource("Matching.entries:"));
/*
* MNEMONIC
* promptLabel.setDisplayedMnemonic(
* pmUtility.getIntResource("Matching.entries:.mnemonic"));
*/
this.add(promptLabel, c);
c.gridy = 1;
c.anchor = GridBagConstraints.WEST;
selectButton = new pmButton(
pmUtility.getResource("Show"));
selectButton.setMnemonic(
pmUtility.getIntResource("Show.mnemonic"));
selectButton.setEnabled(false);
this.add(selectButton, c);
selectButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
pmHelpItem selectedItem = (pmHelpItem)
resultList.getSelectedValue();
Debug.message("Selected " + selectedItem);
parentPanel.controller.showHelpItem(selectedItem);
}
});
Vector resultItems = null;
try {
// resultItems = pmHelpIndexQueryPanel.helpDB.getPartialMatch("");
resultItems = pmHelpRepository.helpItemsForString("");
} catch (pmHelpException x) {
Debug.message("pmHelpIndexResultpanel init: " + x);
resultItems = new Vector();
resultItems.addElement(
pmUtility.getResource("Nothing.matched."));
}
resultList = new JList(resultItems);
JScrollPane scrollPane = new JScrollPane();
scrollPane.getViewport().setView(resultList);
resultList.setVisibleRowCount(8);
promptLabel.setLabelFor(resultList);
resultList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (!listEmpty) {
selectButton.setEnabled(true);
/*
* parentPanel.controller.frame.
* getRootPane().setDefaultButton(selectButton);
*/
selectButton.setAsDefaultButton();
}
}});
resultList.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
JList l = (JList) e.getSource();
int i = l.locationToIndex(e.getPoint());
Debug.message("doubleclick index: " + i);
if (!listEmpty && i >= 0) {
pmHelpItem item =
(pmHelpItem) l.getModel().getElementAt(i);
Debug.message("doubleclick: " + item.tag);
parentPanel.controller.showHelpItem(item);
}
}
}
});
c.gridwidth = 1; // 2;
c.gridx = 1;
c.gridy = 0;
c.weightx = c.weighty = 1.0;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.EAST;
this.add(scrollPane, c);
}
void setResultList(Vector v) {
resultList.setListData(v);
resultList.setSelectedValue(v.elementAt(0), true);
}
void setListEmpty(boolean e) {
listEmpty = e;
selectButton.setEnabled(false);
/*
* parentPanel.controller.frame.getRootPane().
* setDefaultButton(parentPanel.controller.frame.dismiss);
*/
if (parentPanel.controller.frame.dismiss != null)
parentPanel.controller.frame.dismiss.
setAsDefaultButton();
}
}
class pmHelpIndexQueryPanel extends JPanel {
JTextField query;
pmHelpIndexPanel parentPanel;
public pmHelpIndexQueryPanel(pmHelpIndexPanel p) {
parentPanel = p;
this.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(10, 10, 10, 10);
c.fill = GridBagConstraints.NONE;
c.weightx = c.weighty = 0.0;
c.anchor = GridBagConstraints.WEST;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 1;
c.insets = new Insets(10, 10, 10, 10);
JLabel promptLabel =
new JLabel(pmUtility.getResource("Search.help.index.for:"));
/*
* MNEMONIC
* promptLabel.setDisplayedMnemonic(
* pmUtility.getIntResource("Search.help.index.for:.mnemonic"));
*/
this.add(promptLabel, c);
query = new JTextField();
query.setEditable(true);
query.setText("");
promptLabel.setLabelFor(query);
query.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.info("HELP: Action!");
parentPanel.resultPanel.selectButton.doClick();
}
});
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridx = 1;
c.weightx = 1.0;
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.EAST;
this.add(query, c);
DocumentListener d = new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
// ignore
}
public void insertUpdate(DocumentEvent e) {
handleText(query.getText());
}
public void removeUpdate(DocumentEvent e) {
handleText(query.getText());
}
};
query.getDocument().addDocumentListener(d);
}
public void handleText(String txt) {
Debug.message("Got text " + txt);
Vector v = null;
try {
// v = helpDB.getPartialMatch(txt);
v = pmHelpRepository.helpItemsForString(txt);
} catch (pmHelpException x) {
Debug.warning("handleText: " + x);
}
parentPanel.setSearchResults(v);
}
// belongs in controller?
// static pmHelpRepository helpDB = new pmHelpRepository();
}