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    }