Plan 9 from Bell Labs’s /usr/web/sources/contrib/fernan/nhc98/src/hoodui/HoodTopLevel.java

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


/*
 * Render choices of observations to the user.
 *
 * Copyright 2000 Andy Gill
 *
 * $Revision: 1.2 $
 * $Date: 2001/05/17 10:41:19 $
 */

import com.microstar.xml.XmlParser;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.util.*;
import java.net.URL;

/**
 * @version 0.1
 * @author Andy Gill
 */

/**
 *   This class is an observer of AllCDS,
 *   and typically displays the top level
 *   choices for the Hood user.
 */

public class HoodTopLevel implements ActionListener {
    private AllCDS cds;
    private java.awt.List list;
    private Hashtable listHt;
    private Panel reload;
    private TextField textfield;
    private HoodXmlThread xmlThread;
    private Button 
	reloadButton = new Button("Reload"),
	beforeEvalButton = new Button("Display Before Evaluation"),
	afterEvalButton = new Button("Display After Evaluation"),
	staticButton = new Button("Display Statically"),
	textButton = new Button("Dump To File");
    int nodeCount;
    Label nodeCountLabel = new Label("");

    private void setGBC(int gridx,
			int gridy,
			int gridwidth,
			int gridheight,
			GridBagConstraints c) {
	c.gridx = gridx;
	c.gridy = gridy;
	c.gridwidth = gridwidth;
	c.gridheight = gridheight;
	c.weightx = c.weighty = 0.0;
	c.fill = GridBagConstraints.BOTH;
    }

    public HoodTopLevel(String pathName,
			Container window,
			Image logo) {
	cds = new AllCDS(this);

	window.setBackground(Hood.bg);

	window.setLayout(new GridBagLayout());

	GridBagConstraints c = new GridBagConstraints();
	c.insets = new Insets(5,5,5,5);

	//---------------------------------------------------
	// First line: <reload/loading> [textbox] HOOD(right)

	setGBC(0,0,1,1,c);
	reload = new Panel();
	reload.add("Center",reloadButton);
	window.add(reload,c);

	setGBC(1,0,1,1,c);
	c.weightx = 1.0;
	c.fill = GridBagConstraints.HORIZONTAL;
	textfield = new TextField(pathName);
	window.add(textfield,c);

	setGBC(2,0,1,1,c);
	window.add(new CornerIcon(logo));

	//---------------------------------------------------
	// The main listbox

	list = new java.awt.List(10,true);

	setGBC(0,1,2,6,c);
	c.weightx = c.weighty = 1.0;
	window.add(list,c);

	//---------------------------------------------------
	// The Buttons

	setGBC(2,1,1,1,c);
	window.add(beforeEvalButton,c);

	setGBC(2,2,1,1,c);
	window.add(afterEvalButton,c);

	setGBC(2,3,1,1,c);
	window.add(staticButton,c);

	setGBC(2,4,1,1,c);
	window.add(textButton,c);

	setGBC(2,5,1,1,c);
	c.weighty = 1.0;	
	window.add(new Label(""),c);

	setGBC(2,6,1,1,c);
	c.weightx = c.weighty = 0.0;
	window.add(nodeCountLabel,c);

	reloadButton.addActionListener(this);
	beforeEvalButton.addActionListener(this);
	afterEvalButton.addActionListener(this);
	staticButton.addActionListener(this);	
	textButton.addActionListener(this);	

	doReload();
	Message.message("about to return..");
    }

    public void finishedLoading(boolean bool) {
	displayNodeCount();
	reloadButton.setEnabled(true);
	if (bool == false) {
	    // Opps, we've failed!
	    list.addItem("** failed to load xml file **");
	} else {
	    // Ok, we've loaded on up our xml file.
	    if (list.getRows() > 0) {
		beforeEvalButton.setEnabled(true);
		afterEvalButton.setEnabled(true);
		staticButton.setEnabled(true);
		textButton.setEnabled(true);
	    }
	}
    }

    private void doReload() {
	reloadButton.setEnabled(false);
	beforeEvalButton.setEnabled(false);
	afterEvalButton.setEnabled(false);
	staticButton.setEnabled(false);
	textButton.setEnabled(false);

	list.removeAll();
	resetNodeCount();
	xmlThread = new HoodXmlThread(textfield.getText(),this,cds);
	xmlThread.start();
   }

    //---------------------------------------------------------
    // The observer uses these

    // This is a ticky-ticky thing, used to track progress.

    public void newNode() {
	nodeCount++;
	if (nodeCount % 1000 == 0) {
	    displayNodeCount();
	}
    }

    boolean first = true;
    public void newRootSet(String name) {
	list.addItem(name);
	// Once we get at least one thing, 
	list.select(0);
    }

    //---------------------------------------------------------

    private void resetNodeCount() {
	nodeCount = 0;
	displayNodeCount();
    }
    
    private void displayNodeCount() {
	nodeCountLabel.setText("Loaded " + nodeCount + " events");
    }


    public void actionPerformed(ActionEvent e) {
	Button b = (Button) e.getSource();
	if (b == reloadButton) {
	    doReload();
	} else {
	    int start = HoodViewer.START;
	    String labels[] = list.getSelectedItems();
	    for(int i = 0;i < labels.length;i++) {

		CDS stuff = cds.getContents(labels[i]);
		
		if (b == beforeEvalButton) {
		    start = HoodViewer.START;
		    new HoodViewer(labels[i],stuff,start);
		}
		if (b == afterEvalButton) {
		    start = HoodViewer.END;
		    new HoodViewer(labels[i],stuff,start);
		}
		if (b == staticButton) {
		    start = HoodViewer.STATIC;
		    new HoodViewer(labels[i],stuff,start);
		}
		if (b == textButton) {
		    Message.message("Hello!");
		    Pretty pretty = stuff.render(null,0,false);
		    PrettyDisplayText pdt = new PrettyDisplayText();
		    pretty.best(80,pdt);
		    Message.message("PP:" + pdt.toString());
		}
	    }
	}
	Message.message("B:" + b.getLabel());
    }
}
/* We use this class to load the Xml trace log in the background.
 * 
 */
final class HoodXmlThread extends Thread {
    String filename;
    HoodTopLevel htl;
    AllCDS cds;

    HoodXmlThread(String name,HoodTopLevel htl,AllCDS cds) {
	filename = name;
	this.htl = htl;
	this.cds = cds;
	setPriority(MIN_PRIORITY);
    }

    public void run() {
	cds.resetNodes();
	XmlObsHandler handler = new XmlObsHandler(cds);
	XmlParser parser = new XmlParser();
	parser.setHandler(handler);
	try {
	    parser.parse(filename,null,(String) null);
	    htl.finishedLoading(true);
	} catch (Exception e) {
	    Message.message("Opps " + e.toString());
	    htl.finishedLoading(false);
	}

    }

}
final class CornerIcon extends Canvas {
    Image cornerIcon;

    CornerIcon(Image logo) {
	setSize(90,50);
	cornerIcon = logo;
    }

    public void paint(Graphics g) {    
	System.out.println("X" + (cornerIcon == null));
	g.drawImage(cornerIcon,5,5,this);
    }
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.