/*
* 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.
*
* pmLogDisplay.java
* Command Log implementation
*/
package com.sun.admin.pm.client;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import com.sun.admin.pm.server.*;
public class pmLogDisplay extends pmFrame {
pmButton helpButton = null;
pmButton okButton = null;
pmButton clearButton = null;
pmTop theTop = null;
String helpTag = null;
JTextArea theList = null;
String theContents = null;
public pmLogDisplay() {
this(null, null);
}
public pmLogDisplay(pmTop t, String h) {
super(pmUtility.getResource("SPM:Command-Line.Console"));
theTop = t;
helpTag = h;
setLocation(150, 200); // relative to parent frame
// top panel
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
theContents = new String();
theList = new JTextArea(12, 36);
theList.setLineWrap(false);
theList.setEditable(false);
theList.registerKeyboardAction(new ActionListener() {
public void actionPerformed(ActionEvent e) {
copyPressed();
}},
KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, Event.CTRL_MASK),
JComponent.WHEN_IN_FOCUSED_WINDOW);
theList.registerKeyboardAction(new ActionListener() {
public void actionPerformed(ActionEvent e) {
copyPressed();
}},
KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK),
JComponent.WHEN_IN_FOCUSED_WINDOW);
JScrollPane scroll = new JScrollPane();
scroll.getViewport().setView(theList);
p.add(scroll, "Center");
this.getContentPane().add(p, "Center");
p = new JPanel();
okButton = new pmButton(
pmUtility.getResource("Dismiss"));
okButton.setMnemonic(
pmUtility.getIntResource("Dismiss.mnemonic"));
p.add(okButton);
clearButton = new pmButton(
pmUtility.getResource("Clear"));
clearButton.setMnemonic(
pmUtility.getIntResource("Clear.mnemonic"));
p.add(clearButton);
if (theTop != null && helpTag != null) {
helpButton = new pmButton(
pmUtility.getResource("Help"));
helpButton.setMnemonic(
pmUtility.getIntResource("Help.mnemonic"));
p.add(helpButton);
helpButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Debug.message("Help button event");
theTop.showHelpItem(helpTag);
}
});
}
this.getContentPane().add(p, "South");
this.pack();
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
returnValue = JOptionPane.CLOSED_OPTION;
pmLogDisplay.this.setVisible(false);
if (pmLogDisplay.this.theTop != null)
pmLogDisplay.this.theTop.setLogOption(false);
}
});
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
okPressed();
}
});
clearButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
pmLogDisplay.this.clear();
}
});
// handle Esc as dismiss in any case
getRootPane().registerKeyboardAction(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.message("CLNT: default cancel action");
okPressed();
}},
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false),
JComponent.WHEN_IN_FOCUSED_WINDOW);
// getRootPane().setDefaultButton(okButton);
okButton.setAsDefaultButton();
theList.requestFocus();
}
protected void copyPressed() {
theList.copy();
}
protected void okPressed() {
returnValue = JOptionPane.OK_OPTION;
pmLogDisplay.this.setVisible(false);
if (pmLogDisplay.this.theTop != null)
pmLogDisplay.this.theTop.setLogOption(false);
}
public int getValue() {
// Debug.message("getValue");
return returnValue;
}
// i.e. a solid line, or spaces, or...
public void addSeparator() {
theContents = theContents + "\n\r";
theList.setText(theContents);
}
// tricky: s may have embedded newlines...
public void addText(String s) {
theContents = theContents + s;
/*
* StringTokenizer st = new StringTokenizer(s, "\n\r", false);
* try {
* while(st.hasMoreTokens()) {
* String ss = st.nextToken();
* theContents.addElement(ss);
* }
* } catch(Exception x) {
* Debug.warning("CLNT: Log addText caught: " + x);
* }
*/
/*
* Debug.message("Log contents len = " + theContents.size());
* for (int i = 0; i < theContents.size(); ++i)
* Debug.message("\t" + i + ": " + theContents.elementAt(i));
*/
// conveniently, this forces the last line to be scrolled to.
theList.setText(theContents);
}
public void clear() {
theContents = null;
theContents = new String();
theList.setText(theContents);
}
public void disableText(boolean d) {
// theText.setEnabled(!d);
}
public static void main(String[] args) {
JFrame f = new JFrame("Test Dialog");
f.setSize(300, 100);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
f.setVisible(true);
pmLogDisplay d = new pmLogDisplay();
d.addText("A\nB\nC\nD\nE\nF\nG\nH\nI\nJ");
d.setVisible(true);
}
protected int returnValue = JOptionPane.CLOSED_OPTION;
}