View Javadoc

1   // Copyright 2005, FreeHEP.
2   package hep.wired.heprep.interaction;
3   
4   import java.awt.*;
5   import java.awt.event.*;
6   import java.beans.*;
7   import java.util.*;
8   import java.util.List;
9   import javax.swing.*;
10  import javax.swing.border.*;
11  import javax.swing.event.*;
12  import javax.swing.tree.*;
13  
14  import org.freehep.application.mdi.PageContext;
15  import org.freehep.swing.layout.TableLayout;
16  
17  import hep.graphics.heprep.HepRep;
18  import hep.graphics.heprep.HepRepType;
19  import hep.graphics.heprep.HepRepTypeTree;
20  
21  import hep.wired.image.WiredBaseImage;
22  import hep.wired.plot.WiredPlot;
23  import hep.wired.plugin.WiredPage;
24  import hep.wired.services.GraphicsPanel;
25  import hep.wired.services.InteractionHandler;
26  import hep.wired.services.RecordPlot;
27  
28  import hep.wired.heprep.plugin.WiredPlugin;
29  import hep.wired.heprep.graphicspanel.ControlPanel;
30  import hep.wired.heprep.graphicspanel.HepRepPanel;
31  import hep.wired.heprep.util.WiredHepRepUtil;
32  
33  /***
34   * Interaction Panel.
35   *
36   * @author Mark Donszelmann
37   * @version $Id: InteractionPanel.java 2093 2005-07-22 21:40:49Z duns $
38   */
39  public class InteractionPanel extends ControlPanel {
40  
41      private JPanel interaction;
42      // FIXME, we could move this state in commandprocessor...
43      private ButtonGroup group;
44      private Map/*<InteractionHandlerName, JToggleButton>*/ buttonsByName;
45      private Map/*<InteractionHandler, JToggleButton>*/ buttonsByHandler;
46      private JToggleButton deselect = new JToggleButton("deselect");
47  
48      public InteractionPanel() {
49          super("Interaction", "Select Interaction and Visibility", WiredBaseImage.getIcon("Scale%w", 16), null);
50          
51          setLayout(new TableLayout());
52          
53          interaction = new JPanel();
54          interaction.setLayout(new TableLayout());
55          interaction.setBorder(new TitledBorder(new EtchedBorder(), "Interaction"));      
56          add(interaction, "0 * wlt");
57          add(WiredPlugin.getPlugin().getTreePanel(), "0 * whlt");
58                  
59          group = new ButtonGroup();
60          group.add(deselect);
61          buttonsByName = new HashMap();
62          buttonsByHandler = new HashMap();
63      }
64      
65      private JToggleButton getButton(final InteractionHandler h, boolean selected) {
66          final JToggleButton b = new JToggleButton(h.getIcon(16), selected);
67          b.setToolTipText(h.getDescription());
68          b.addActionListener(new ActionListener() {
69              public void actionPerformed(ActionEvent event) {
70                  WiredPlugin.getPlugin().setInteractionHandler(h);
71              }
72          });
73          group.add(b);
74          buttonsByName.put(h.getName(), b);        
75          buttonsByHandler.put(h, b);        
76          return b;
77      }
78      
79      public void addInteraction(InteractionHandler h, boolean selected) {
80          if (h != null) {
81              interaction.add(getButton(h, selected), "* * lt");
82          } else {
83              interaction.add(new JLabel(), "* * ltW");
84          }        
85      }
86          
87      public void setInteractionHandler(InteractionHandler h) {
88          super.setInteractionHandler(h);
89          if (h != null) {
90              JToggleButton b = (JToggleButton)buttonsByName.get(h.getName());
91              if (b != null) b.setSelected(true);
92          }
93      }
94      
95      public void update() {            
96          PageContext context = WiredPlugin.getPlugin().getCurrentPageContext();
97          if (context == null) return;
98          
99          WiredPage page = (WiredPage)context.getPage();
100         RecordPlot plot = page.getRecordPlot();
101                 
102         for (Iterator i=buttonsByHandler.keySet().iterator(); i.hasNext(); ) {
103             InteractionHandler handler = (InteractionHandler)i.next();
104             JToggleButton button = (JToggleButton)buttonsByHandler.get(handler);
105             button.setEnabled(plot.supports(handler));
106         }
107         
108         // deselect if currently selected button is disabled
109         if (!group.getSelection().isEnabled()) deselect.setSelected(true);
110    }
111 }