blob: b4d610481661794dce9cfbf109c3c9b96d887da1 [file] [log] [blame]
/*
* Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
package sun.jvm.hotspot.ui.classbrowser;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import sun.jvm.hotspot.oops.*;
import sun.jvm.hotspot.ui.*;
import sun.jvm.hotspot.ui.action.*;
import sun.jvm.hotspot.utilities.*;
import com.sun.java.swing.ui.StatusBar;
import com.sun.java.swing.ui.CommonToolBar;
import com.sun.java.swing.action.ActionManager;
import com.sun.java.swing.action.DelegateAction;
public class ClassBrowserPanel extends JPanel implements ActionListener {
private StatusBar statusBar;
private ClassBrowserToolBar toolBar;
private JSplitPane splitPane;
private SAEditorPane classesEditor;
private SAEditorPane contentEditor;
private HTMLGenerator htmlGen;
public ClassBrowserPanel() {
htmlGen = new HTMLGenerator();
HyperlinkListener hyperListener = new HyperlinkListener() {
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
contentEditor.setText(htmlGen.genHTMLForHyperlink(e.getDescription()));
}
}
};
classesEditor = new SAEditorPane();
classesEditor.addHyperlinkListener(hyperListener);
contentEditor = new SAEditorPane();
contentEditor.addHyperlinkListener(hyperListener);
JPanel topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
topPanel.add(new JScrollPane(classesEditor), BorderLayout.CENTER);
JPanel bottomPanel = new JPanel();
bottomPanel.setLayout(new BorderLayout());
bottomPanel.add(new JScrollPane(contentEditor), BorderLayout.CENTER);
splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, topPanel, bottomPanel);
splitPane.setDividerLocation(0);
setLayout(new BorderLayout());
add(splitPane, BorderLayout.CENTER);
statusBar = new StatusBar();
add(statusBar, BorderLayout.SOUTH);
toolBar = new ClassBrowserToolBar(statusBar);
add(toolBar, BorderLayout.NORTH);
registerActions();
}
public void setClassesText(String text) {
classesEditor.setText(text);
splitPane.setDividerLocation(0.5);
}
public void setContentText(String text) {
contentEditor.setText(text);
splitPane.setDividerLocation(0.5);
}
private class ClassBrowserToolBar extends CommonToolBar {
private JTextField searchTF;
public ClassBrowserToolBar(StatusBar status) {
super(HSDBActionManager.getInstance(), status);
}
protected void addComponents() {
searchTF = new JTextField();
searchTF.setToolTipText("Find classes");
// Pressing Enter on the text field will search
InputMap im = searchTF.getInputMap();
im.put(KeyStroke.getKeyStroke("ENTER"), "enterPressed");
ActionMap am = searchTF.getActionMap();
am.put("enterPressed", manager.getAction(FindClassesAction.VALUE_COMMAND));
add(searchTF);
addButton(manager.getAction(FindClassesAction.VALUE_COMMAND));
}
public String getFindText() {
return searchTF.getText();
}
}
//
// ActionListener implementation and actions support
//
public void actionPerformed(ActionEvent evt) {
String command = evt.getActionCommand();
if (command.equals(FindClassesAction.VALUE_COMMAND)) {
findClasses();
}
}
protected void registerActions() {
registerAction(FindClassesAction.VALUE_COMMAND);
}
private void registerAction(String actionName) {
ActionManager manager = ActionManager.getInstance();
DelegateAction action = manager.getDelegateAction(actionName);
action.addActionListener(this);
}
private void findClasses() {
String findText = toolBar.getFindText();
if (findText == null || findText.equals("")) {
return;
}
setContentText(htmlGen.genHTMLForWait("Finding classes ..."));
InstanceKlass[] klasses = SystemDictionaryHelper.findInstanceKlasses(findText);
if (klasses.length == 0) {
setContentText(htmlGen.genHTMLForMessage("No class found with name containing '" + findText + "'"));
} else {
setContentText(htmlGen.genHTMLForKlassNames(klasses));
}
}
}