Commit in lcsim/src/org/lcsim/plugin on MAIN
LCSimDriverTree.java+185added 1.1
Missing file

lcsim/src/org/lcsim/plugin
LCSimDriverTree.java added at 1.1
diff -N LCSimDriverTree.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ LCSimDriverTree.java	11 Sep 2007 00:22:47 -0000	1.1
@@ -0,0 +1,185 @@
+package org.lcsim.plugin;
+
+import java.awt.BorderLayout;
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.tree.TreePath;
+import org.freehep.record.loop.SequentialRecordLoop;
+import org.freehep.record.loop.event.LoopEvent;
+import org.freehep.record.loop.event.LoopProgressEvent;
+import org.freehep.record.loop.event.RecordLoopListener;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import org.freehep.application.studio.Studio;
+import org.freehep.swing.treetable.AbstractTreeTableModel;
+import org.freehep.swing.treetable.JTreeTable;
+import org.freehep.swing.treetable.TreeTableModel;
+import org.lcsim.util.Driver;
+import org.lcsim.util.DriverAdapter;
+import org.openide.util.Lookup.Result;
+import org.openide.util.Lookup.Template;
+import org.openide.util.LookupEvent;
+import org.openide.util.LookupListener;
+
+
+
+/**
+ * A browser for viewing driver statistics
+ * @author tonyj
+ * @author gaede
+ */
+public class LCSimDriverTree extends JPanel implements RecordLoopListener, LookupListener
+{
+   private Studio app;
+   private SequentialRecordLoop loop;
+   private Result result;
+   private List<Driver> drivers = new ArrayList<Driver>();
+   private DriverTreeModel model;
+   
+   public LCSimDriverTree(Studio app, SequentialRecordLoop loop)
+   {
+      super(new BorderLayout());
+      this.app = app;
+      this.loop = loop;
+      JTreeTable table = new JTreeTable();
+      model = new DriverTreeModel(drivers);
+      table.setModel(model);
+      add(new JScrollPane(table),BorderLayout.CENTER);
+   }
+   public void addNotify()
+   {
+      loop.addRecordLoopListener(this);
+      
+      // Listen for record sources
+      // TODO: We use a "wild-card" template to work around a bug in Lookup.
+      //Lookup.Template template = new Lookup.Template(SequentialRecord.class);
+      Template template = new Template();
+      result = app.getLookup().lookup(template);
+      drivers.clear();
+      resultChanged(null);
+      result.addLookupListener(this);
+      
+      super.addNotify();
+   }
+   public void removeNotify()
+   {
+      super.removeNotify();
+      loop.removeRecordLoopListener(this);
+      result.removeLookupListener(this);
+   }
+   
+   public void loopBeginning(LoopEvent loopEvent)
+   {
+   }
+   
+   public void loopEnded(LoopEvent loopEvent)
+   {
+      
+   }
+   
+   public void loopReset(LoopEvent loopEvent)
+   {
+      
+   }
+   
+   public void progress(LoopProgressEvent loopProgressEvent)
+   {
+   }
+   public class DriverTreeModel extends AbstractTreeTableModel
+   {
+      private String[] columns = { "Driver", "Events", "Time", "% of parent" };
+      DriverTreeModel(List<Driver> drivers)
+      {
+         super(drivers);
+      }
+
+      public Class getColumnClass(int i)
+      {
+         return i == 0 ? TreeTableModel.class : Number.class;
+      }
+
+      public int getColumnCount()
+      {
+         return columns.length;
+      }
+
+      public String getColumnName(int i)
+      {
+         return columns[i];
+      }
+
+      public Object getChild(Object parent, int index)
+      {
+         if (parent instanceof List)
+         {
+            return ((List) parent).get(index);
+         }
+         else 
+         {
+            return ((Driver) parent).drivers().get(index);
+         }
+      }
+
+      public int getChildCount(Object parent)
+      {
+         if (parent instanceof List)
+         {
+            return ((List) parent).size();
+         }
+         else 
+         {
+            return ((Driver) parent).drivers().size();
+         }
+      }
+
+      public Object getValueAt(Object object, int i)
+      {
+
+         if (i == 0)
+         {
+            if (object instanceof Driver) return ((Driver) object).getName();
+            else return object.toString();
+         }
+         else return "list";
+
+      }
+
+      protected void fireTreeStructureChanged(Object source, TreePath path, int[] childIndices, Object[] children)
+      {
+         super.fireTreeStructureChanged(source, path, childIndices, children);
+      }
+
+      protected void fireTreeNodesRemoved(Object source, TreePath path, int[] childIndices, Object[] children)
+      {
+         super.fireTreeNodesRemoved(source, path, childIndices, children);
+      }
+
+      protected void fireTreeNodesInserted(Object source, TreePath path, int[] childIndices, Object[] children)
+      {
+         super.fireTreeNodesInserted(source, path, childIndices, children);
+      }
+
+      protected void fireTreeNodesChanged(Object source, TreePath path, int[] childIndices, Object[] children)
+      {
+         super.fireTreeNodesChanged(source, path, childIndices, children);
+      }
+    
+   }
+   public void resultChanged(LookupEvent lookupEvent)
+   {
+      for (Object item : result.allInstances())
+      {
+         if (item instanceof DriverAdapter)
+         {
+            Driver driver = ((DriverAdapter) item).getDriver();
+            if (!drivers.contains(driver))
+            {
+               int i[] = { drivers.size() };
+               drivers.add(driver);
+               model.fireTreeNodesInserted(this,new TreePath(drivers),i,null);
+               
+            }
+         }
+      }
+   }
+}
\ No newline at end of file
CVSspam 0.2.8