TermModelWindow.java

00001 /* 
00002 ** Author(s): Miguel Calejo
00003 ** Contact:   interprolog@declarativa.com, http://www.declarativa.com
00004 ** Copyright (C) Declarativa, Portugal, 2000-2002
00005 ** Use and distribution, without any warranties, under the terms of the 
00006 ** GNU Library General Public License, readable in http://www.fsf.org/copyleft/lgpl.html
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     // Create instance variable to save selected state
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         // Save selected state
00065         this.selected = selected;               
00066         if (expanded) {
00067                 setText(term.node.toString());
00068         } else {
00069                 setText(term.toString());
00070         }
00071         doLayout(); // Make sure our size accomodates current text ??
00072         return this;
00073         }
00074 
00075     public void paint (Graphics g) {
00076 
00077         // Change background color based on selected state
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 }

Generated on Wed Jul 26 13:30:44 2006 for XSB by  doxygen 1.4.5