001 package hep.aida.ref.sql.JAS3Plugin; 002 003 // JAS 004 import org.freehep.jas.plugin.tree.DefaultFTreeNodeAdapter; 005 import org.freehep.jas.plugin.tree.FTreeNode; 006 007 // FreeHEP 008 import org.freehep.util.commanddispatcher.CommandSourceAdapter; 009 import org.freehep.application.studio.Studio; 010 import org.freehep.application.PropertyUtilities; 011 012 // Swing 013 import javax.swing.JMenu; 014 import javax.swing.JMenuItem; 015 import javax.swing.JPopupMenu; 016 017 /** <code>SQLTupleColumnAdapter</code> handles {@link hep.aida.ref.sql.SQLTuple} 018 * columns. 019 * <p><font color="#880088"> 020 * $Id: SQLTupleColumnAdapter.java,v 1.6 2007/05/23 16:38:44 hrivnac Exp $ 021 * <pre> 022 * $Log: SQLTupleColumnAdapter.java,v $ 023 * Revision 1.6 2007/05/23 16:38:44 hrivnac 024 * logical connections for Plotter; better UML 025 * 026 * Revision 1.5 2005/10/10 10:05:33 hrivnac 027 * prepared for 1.0.2 028 * 029 * Revision 1.4 2005/09/29 14:31:32 hrivnac 030 * clouds and profiles added 031 * 032 * Revision 1.3 2005/09/29 13:02:39 hrivnac 033 * histograms can be plotted in a different way in JAS3 034 * 035 * Revision 1.2 2005/09/29 09:22:59 hrivnac 036 * jas3 plugin improved 037 * 038 * Revision 1.1 2005/09/28 22:49:55 hrivnac 039 * added SQLTuple-aware projections 040 * 041 * </pre> 042 * </font></p> 043 * @opt attributes 044 * @opt operations 045 * @opt types 046 * @opt visibility 047 * @version $Id: SQLTupleColumnAdapter.java,v 1.6 2007/05/23 16:38:44 hrivnac Exp $ 048 * @author <a href="mailto:Julius.Hrivnac@cern.ch">J.Hrivnac</a> */ 049 public class SQLTupleColumnAdapter extends DefaultFTreeNodeAdapter { 050 051 /** Create and attach {@link Studio} with hight pripority = 300. 052 * @param app The attached {@link Studio}. 053 * @param commands The associated {@link SQLTupleCommands}. */ 054 SQLTupleColumnAdapter(Studio app, SQLTupleCommands commands) { 055 super(300); 056 _app = app; 057 _commands = commands; 058 } 059 060 /** Add <em>Projector</em> action into popup menu. 061 * @param nodes The selected {@link FTreeNode}s. 062 * @param menu The current {@link JPopupMenu}. 063 * @return The updated {@link JPopupMenu}. */ 064 public JPopupMenu modifyPopupMenu(FTreeNode[] nodes, JPopupMenu menu) { 065 // Separator 066 if (menu.getSubElements().length != 0) { 067 menu.addSeparator(); 068 } 069 // Histograms 070 JMenu histMenu = new JMenu("Histogram Projector"); 071 menu.add(histMenu); 072 JMenuItem itemH0 = new JMenuItem("Project Histogram In Current Region"); 073 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemH0)); 074 histMenu.add(itemH0); 075 JMenuItem itemH1 = new JMenuItem("Project Histogram In New Region"); 076 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemH1)); 077 histMenu.add(itemH1); 078 JMenuItem itemH2 = new JMenuItem("Project Histogram In New Page"); 079 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemH2)); 080 histMenu.add(itemH2); 081 JMenuItem itemH3 = new JMenuItem("Project Histogram Overlay"); 082 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemH3)); 083 histMenu.add(itemH3); 084 // Clouds 085 JMenu cloudMenu = new JMenu("Cloud Projector"); 086 menu.add(cloudMenu); 087 JMenuItem itemC0 = new JMenuItem("Project Cloud In Current Region"); 088 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemC0)); 089 cloudMenu.add(itemC0); 090 JMenuItem itemC1 = new JMenuItem("Project Cloud In New Region"); 091 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemC1)); 092 cloudMenu.add(itemC1); 093 JMenuItem itemC2 = new JMenuItem("Project Cloud In New Page"); 094 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemC2)); 095 cloudMenu.add(itemC2); 096 JMenuItem itemC3 = new JMenuItem("Project Cloud Overlay"); 097 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemC3)); 098 cloudMenu.add(itemC3); 099 // Profiles 100 JMenu profMenu = new JMenu("Profile Projector"); 101 menu.add(profMenu); 102 JMenuItem itemP0 = new JMenuItem("Project Profile In Current Region"); 103 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemP0)); 104 profMenu.add(itemP0); 105 JMenuItem itemP1 = new JMenuItem("Project Profile In New Region"); 106 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemP1)); 107 profMenu.add(itemP1); 108 JMenuItem itemP2 = new JMenuItem("Project Profile In New Page"); 109 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemP2)); 110 profMenu.add(itemP2); 111 JMenuItem itemP3 = new JMenuItem("Project Profile Overlay"); 112 _app.getCommandTargetManager().add(new CommandSourceAdapter(itemP3)); 113 profMenu.add(itemP3); 114 // Return 115 return menu; 116 } 117 118 /** Activate <em>Projector</em> command on double click. 119 * @param node The selected {@link FTreeNode}. 120 * @return <code>true</code>. 121 * @throws IllegalArgumentException if selected double click is not defined. */ 122 public boolean doubleClick(FTreeNode node) throws IllegalArgumentException { 123 int dclick = PropertyUtilities.getInteger(_app.getUserProperties(), 124 "org.freehep.jas.extension.tupleexplorer.doubleClick", 125 0); 126 switch (dclick) { 127 case 0: 128 _commands.onProjectHistogramInCurrentRegion(); 129 break; 130 case 1: 131 _commands.onProjectHistogramInNewRegion(); 132 break; 133 case 2: 134 _commands.onProjectHistogramInNewPage(); 135 break; 136 case 3: 137 _commands.onProjectHistogramOverlay(); 138 break; 139 default: 140 throw new IllegalArgumentException("Illegal selection on double click " + dclick); 141 } 142 return true; 143 } 144 145 private Studio _app; 146 147 private SQLTupleCommands _commands; 148 149 } 150