001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Dec 4, 2002 005 * Time: 8:51:17 PM 006 */ 007 008 package EVolve.visualization.XYViz.ValValViz; 009 010 import java.awt.FlowLayout; 011 import java.awt.GridLayout; 012 import java.awt.event.KeyEvent; 013 014 import javax.swing.JCheckBox; 015 import javax.swing.JLabel; 016 import javax.swing.JPanel; 017 import javax.swing.JTextField; 018 019 import EVolve.Scene; 020 import EVolve.data.Element; 021 import EVolve.util.painters.PriorityRandomPainter; 022 import EVolve.util.xmlutils.datastructures.SerializedVisualization; 023 import EVolve.visualization.AutoImage; 024 import EVolve.visualization.Dimension; 025 import EVolve.visualization.ReferenceDimension; 026 import EVolve.visualization.ValueDimension; 027 028 public class HardwareCounterViz extends ValueValueVisualization{ 029 private JCheckBox chkSelectTimeFrame, selectionOptions[]; 030 private JTextField textIntervalX, textIntervalY; 031 private int intervalY; 032 033 public HardwareCounterViz() { 034 super(); 035 interval = 1; 036 intervalY = 1000000; 037 } 038 039 public Dimension[] createDimension() { 040 Dimension[] returnVal = new Dimension[3]; 041 xAxis = new ValueDimension(); 042 yAxis = new ValueDimension(); 043 entityIdFilter = new ReferenceDimension(); 044 045 returnVal[0] = xAxis; 046 returnVal[1] = yAxis; 047 returnVal[2] = entityIdFilter; 048 049 return returnVal; 050 } 051 052 public JCheckBox[] createSelectionOptions() { 053 if (selectionOptions != null) return selectionOptions; 054 055 chkSelectTimeFrame = new JCheckBox("Time Frame"); 056 chkSelectTimeFrame.setMnemonic(KeyEvent.VK_T); 057 chkSelectTimeFrame.setSelected(true); 058 chkSelectTimeFrame.setEnabled(false); 059 060 061 selectionOptions = new JCheckBox[1]; 062 selectionOptions[0] = chkSelectTimeFrame; 063 064 return selectionOptions; 065 } 066 067 protected JPanel createConfigurationPanel() { 068 JPanel configurationPanel = new JPanel(new GridLayout(2, 1, 5, 5)); 069 070 JPanel panelIntervalX = new JPanel(new FlowLayout()); 071 panelIntervalX.add(new JLabel("Interval X: ")); 072 073 textIntervalX = new JTextField(String.valueOf(interval), 10); 074 panelIntervalX.add(textIntervalX); 075 076 JPanel panelIntervalY = new JPanel(new FlowLayout()); 077 panelIntervalY.add(new JLabel("Interval Y: ")); 078 079 textIntervalY = new JTextField(String.valueOf(intervalY), 10); 080 panelIntervalY.add(textIntervalY); 081 082 configurationPanel.add(panelIntervalX); 083 configurationPanel.add(panelIntervalY); 084 085 return configurationPanel; 086 } 087 088 public void restoreConfiguration(SerializedVisualization config) { 089 090 intervalY = Integer.parseInt(config.BeginEvent); 091 textIntervalY.setText(config.BeginEvent); 092 super.restoreConfiguration(config); 093 textIntervalX.setText(config.Interval); 094 } 095 096 public SerializedVisualization getCurrentConfiguration() { 097 SerializedVisualization data = super.getCurrentConfiguration(); 098 099 data.BeginEvent = String.valueOf(intervalY); 100 data.EndEvent = String.valueOf(intervalY); 101 data.xAxis = xAxis.getName(); 102 data.yAxis = yAxis.getName(); 103 data.zAxis = entityIdFilter.getName(); 104 105 return data; 106 } 107 108 protected void updateConfiguration() { 109 try { 110 if (autoInterval != -1) { 111 interval = autoInterval; 112 autoInterval = -1; 113 } else { 114 interval = Integer.parseInt(textIntervalX.getText()); 115 intervalY = Integer.parseInt(textIntervalY.getText()); 116 } 117 118 super.updateConfiguration(); 119 canvas.setName("Bytecode", "Counter Value"); 120 } catch (NumberFormatException e) { 121 Scene.showErrorMessage("Interval must be an integer"); 122 configure(); 123 } 124 } 125 126 public void preVisualize() { 127 super.preVisualize(); 128 image = new AutoImage(); 129 xOffset = -1; 130 installPainter(); 131 } 132 133 public void receiveElement(Element element) { 134 if (element.isOptional()) return; 135 136 long x = xAxis.getField(element); 137 long y = yAxis.getField(element); 138 long z = entityIdFilter.getField(element); 139 140 if (xOffset == -1) xOffset = x; 141 142 143 painter.paint(image,(x-xOffset)/interval,y/intervalY,z); 144 } 145 146 public void visualize() { 147 sort(); 148 } 149 150 public String mouseMove(int x, int y) { 151 return null; 152 } 153 154 public void makeSelection() { // nothing to be selected in this viz 155 } 156 157 public void installPainter() { 158 painter = new PriorityRandomPainter(); 159 } 160 161 public Object clone() { 162 HardwareCounterViz o = (HardwareCounterViz)super.clone(); 163 o.dimension[0] = o.xAxis; 164 o.dimension[1] = o.yAxis; 165 o.dimension[2] = o.entityIdFilter; 166 167 return o; 168 } 169 }