зеркало из https://github.com/mozilla/gecko-dev.git
251 строка
6.6 KiB
Java
251 строка
6.6 KiB
Java
/*
|
|
* The contents of this file are subject to the Mozilla Public License
|
|
* Version 1.0 (the "License"); you may not use this file except in
|
|
* compliance with the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS"
|
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
|
* the License for the specific language governing rights and limitations
|
|
* under the License.
|
|
*
|
|
* The Initial Developer of the Original Code is Sun Microsystems,
|
|
* Inc. Portions created by Sun are Copyright (C) 1999 Sun Microsystems,
|
|
* Inc. All Rights Reserved.
|
|
*
|
|
* Contributor(s): Igor Kushnirskiy <idk@eng.sun.com>
|
|
*/
|
|
|
|
import org.mozilla.pluglet.*;
|
|
import org.mozilla.pluglet.mozilla.*;
|
|
|
|
import org.mozilla.dom.*;
|
|
|
|
import java.awt.print.*;
|
|
import java.awt.*;
|
|
|
|
import javax.swing.tree.*;
|
|
import javax.swing.event.*;
|
|
import javax.swing.*;
|
|
import java.util.*;
|
|
|
|
import org.w3c.dom.*;
|
|
|
|
public class DOMViewerFactory implements PlugletFactory {
|
|
public DOMViewerFactory() {
|
|
}
|
|
|
|
public Pluglet createPluglet(String mimeType) {
|
|
return new DOMViewer();
|
|
}
|
|
|
|
public void initialize(PlugletManager manager) {
|
|
}
|
|
|
|
public void shutdown() {
|
|
}
|
|
|
|
}
|
|
|
|
interface DOMTreeNotifier {
|
|
/*
|
|
* Invoked after a node (or a set of siblings) has changed in some way.
|
|
*/
|
|
public void treeNodesChanged(TreeModelEvent e);
|
|
|
|
/*
|
|
* Invoked after nodes have been inserted into the tree.
|
|
*/
|
|
public void treeNodesInserted(TreeModelEvent e);
|
|
|
|
/*
|
|
* Invoked after nodes have been removed from the tree.
|
|
*/
|
|
public void treeNodesRemoved(TreeModelEvent e);
|
|
/*
|
|
* Invoked after the tree has drastically changed structure from a given node down.
|
|
*/
|
|
public void treeStructureChanged(TreeModelEvent e);
|
|
};
|
|
|
|
class DOMTreeModel implements TreeModel, DOMTreeNotifier {
|
|
private Node rootNode;
|
|
private Vector treeModelListeners = new Vector();
|
|
public DOMTreeModel(Node node) {
|
|
rootNode = node;
|
|
}
|
|
public void addTreeModelListener(TreeModelListener l) {
|
|
treeModelListeners.add(l);
|
|
}
|
|
public void removeTreeModelListener(TreeModelListener l) {
|
|
treeModelListeners.removeElement(l);
|
|
}
|
|
public Object getChild(Object parent, int index) {
|
|
return ((Node)parent).getChildNodes().item(index);
|
|
}
|
|
public int getChildCount(Object parent) {
|
|
return ((Node)parent).getChildNodes().getLength();
|
|
}
|
|
public int getIndexOfChild(Object parent, Object child) {
|
|
NodeList childNodes = ((Node)parent).getChildNodes();
|
|
int res = -1;
|
|
int length = childNodes.getLength();
|
|
for (int i = 0; i < length; i++) {
|
|
if (childNodes.item(i) == child) {
|
|
res = i;
|
|
break;
|
|
}
|
|
}
|
|
return res;
|
|
|
|
}
|
|
public Object getRoot() {
|
|
return rootNode;
|
|
}
|
|
public boolean isLeaf(Object node) {
|
|
return getChildCount(node) == 0;
|
|
}
|
|
|
|
public void valueForPathChanged(TreePath path, Object newValue) {
|
|
return;
|
|
}
|
|
|
|
|
|
/*
|
|
* Invoked after a node (or a set of siblings) has changed in some way.
|
|
*/
|
|
public void treeNodesChanged(TreeModelEvent e) {
|
|
for (int i = 0; i < treeModelListeners.size() ; i++) {
|
|
((TreeModelListener)treeModelListeners.elementAt(i)).
|
|
treeNodesChanged(e);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Invoked after nodes have been inserted into the tree.
|
|
*/
|
|
public void treeNodesInserted(TreeModelEvent e) {
|
|
for (int i = 0; i < treeModelListeners.size(); i++) {
|
|
((TreeModelListener)treeModelListeners.elementAt(i)).
|
|
treeNodesInserted(e);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Invoked after nodes have been removed from the tree.
|
|
*/
|
|
public void treeNodesRemoved(TreeModelEvent e) {
|
|
for (int i = 0; i < treeModelListeners.size(); i++) {
|
|
((TreeModelListener)treeModelListeners.elementAt(i)).
|
|
treeNodesRemoved(e);
|
|
}
|
|
}
|
|
/*
|
|
* Invoked after the tree has drastically changed structure from a given node down.
|
|
*/
|
|
public void treeStructureChanged(TreeModelEvent e) {
|
|
for (int i = 0; i < treeModelListeners.size(); i++) {
|
|
((TreeModelListener)treeModelListeners.elementAt(i)).
|
|
treeStructureChanged(e);
|
|
}
|
|
}
|
|
};
|
|
|
|
class DOMCellRenderer implements TreeCellRenderer {
|
|
private TreeCellRenderer cellRenderer;
|
|
public DOMCellRenderer(TreeCellRenderer cellRenderer) {
|
|
this.cellRenderer = cellRenderer;
|
|
}
|
|
|
|
public Component getTreeCellRendererComponent(JTree tree, Object value,
|
|
boolean selected,
|
|
boolean expanded,
|
|
boolean leaf, int row,
|
|
boolean hasFocus) {
|
|
return cellRenderer.getTreeCellRendererComponent(tree,
|
|
((Node)value).getNodeName(),
|
|
selected,
|
|
expanded,
|
|
leaf, row,
|
|
hasFocus);
|
|
}
|
|
|
|
}
|
|
|
|
class DOMViewer implements Pluglet {
|
|
private PlugletPeer peer;
|
|
private Node rootNode;
|
|
private JFrame frame;
|
|
private JScrollPane treePane;
|
|
private JPanel panel;
|
|
private JTree tree;
|
|
private DOMAccessPanel elementPanel;
|
|
|
|
public DOMViewer() {
|
|
|
|
}
|
|
|
|
public void initialize(PlugletPeer peer) {
|
|
try {
|
|
this.peer = peer;
|
|
PlugletTagInfo info = peer.getTagInfo();
|
|
if (info instanceof PlugletTagInfo2) {
|
|
PlugletTagInfo2 info2 = (PlugletTagInfo2)info;
|
|
Element e = (Element) info2.getDOMElement();
|
|
Document doc = e.getOwnerDocument();
|
|
e = doc.getDocumentElement();
|
|
e.normalize();
|
|
rootNode = e;
|
|
}
|
|
DOMTreeModel treeModel = new DOMTreeModel(rootNode);
|
|
elementPanel = new DOMAccessPanel(treeModel);
|
|
tree = new JTree(treeModel );
|
|
tree.addTreeSelectionListener(elementPanel);
|
|
tree.setCellRenderer(new DOMCellRenderer(tree.getCellRenderer()));
|
|
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
|
|
treePane = new JScrollPane(tree);
|
|
panel = new JPanel();
|
|
panel.setLayout(new BorderLayout());
|
|
panel.add("Center", treePane);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void start() {
|
|
}
|
|
|
|
public void stop() {
|
|
}
|
|
|
|
public void destroy() {
|
|
}
|
|
|
|
public PlugletStreamListener newStream() {
|
|
return null;
|
|
}
|
|
|
|
public void setWindow(Frame fr) {
|
|
if(fr == null) {
|
|
if (frame != null) {
|
|
frame.hide();
|
|
frame = null;
|
|
}
|
|
return;
|
|
}
|
|
if (frame == null) {
|
|
frame = new JFrame("DOM Viewer");
|
|
frame.getContentPane().setLayout(new BorderLayout());
|
|
JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, panel, elementPanel);
|
|
frame.getContentPane().add(sp);
|
|
frame.pack();
|
|
sp.setDividerLocation(0.35);
|
|
frame.show();
|
|
}
|
|
}
|
|
|
|
public void print(PrinterJob printerJob) {
|
|
}
|
|
|
|
}
|