00001
00002
00003
00004
00005
00006
00007
00008 package com.declarativa.interprolog.gui;
00009 import javax.swing.*;
00010 import javax.swing.tree.*;
00011 import javax.swing.event.*;
00012 import java.awt.*;
00013 import java.awt.event.*;
00014 import java.util.*;
00015 import java.io.Serializable;
00016 import com.declarativa.interprolog.*;
00017
00020 public class TermModelWindow extends JFrame{
00021 TermModel model; PrologEngine engine;
00022 public TermModelWindow(TermModel tm){
00023 this(tm,null);
00024 }
00025 public TermModelWindow(TermModel tm,PrologEngine e){
00026 super("A term");
00027 this.model=tm; this.engine=e;
00028 JTree termTree = new JTree(tm);
00029 termTree.setCellRenderer(new TermTreeCellRenderer());
00030 getContentPane().add("Center",new JScrollPane(termTree));
00031 setSize(200,200);
00032 JMenuBar mb;
00033 mb = new JMenuBar(); setJMenuBar(mb);
00034 JMenu testMenu = new JMenu("Tests"); mb.add(testMenu);
00035 JMenuItem test = new JMenuItem("Assert foobar(T)..."); testMenu.add(test);
00036 test.addActionListener(new ActionListener(){
00037 Object[] objects = {model};
00038 public void actionPerformed(ActionEvent e){
00039 System.out.println("Trying to recover and assert...");
00040 Object[] bindings = engine.deterministicGoal("assert(foobar(TM))", "TM", objects, null);
00041 System.out.println("success=" + (bindings!=null));
00042 }
00043 });
00044
00045 setVisible(true);
00046 }
00047 }
00048
00052 class TermTreeCellRenderer extends JLabel implements TreeCellRenderer {
00053
00054
00055 private boolean selected;
00056
00057 public Component getTreeCellRendererComponent(JTree tree,
00058 Object value, boolean selected, boolean expanded,boolean leaf, int row, boolean hasFocus) {
00059
00060 if (!(value instanceof TermModel))
00061 throw new RuntimeException("getTreeCellRendererComponent demands a TermModel");
00062
00063 TermModel term = (TermModel)value;
00064
00065 this.selected = selected;
00066 if (expanded) {
00067 setText(term.node.toString());
00068 } else {
00069 setText(term.toString());
00070 }
00071 doLayout();
00072 return this;
00073 }
00074
00075 public void paint (Graphics g) {
00076
00077
00078 Color background = (selected ? Color.lightGray : Color.white);
00079 g.setColor(background);
00080
00081 g.fillRect (getX(), getY(), getWidth(), getHeight());
00082 super.paint (g);
00083 }
00084
00085 }