001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Nov 27, 2002 005 * Time: 5:00:08 PM 006 */ 007 008 package EVolve.visualization.XYViz.ValRefViz.HotSpotViz; 009 010 import EVolve.visualization.XYViz.ValRefViz.ValueReferenceVisualization; 011 import EVolve.visualization.*; 012 import EVolve.Scene; 013 import EVolve.data.Element; 014 import javax.swing.*; 015 import java.util.*; 016 import java.awt.*; 017 import java.awt.event.*; 018 019 public class HotSpotVisualization extends ValueReferenceVisualization { 020 protected JTextField textInterval; // input for interval 021 protected JPanel configurationPanel; 022 private JMenuItem itemSelectTimeFrame, itemSelectOccurredEntities, itemSelectAllEntities; 023 protected static JMenuItem selectionMenu[] = null; 024 protected static int SELECT_OPTION = 0x0101; 025 026 public HotSpotVisualization() { 027 interval = 1000; 028 } 029 030 protected JPanel createConfigurationPanel() { 031 JPanel panelBottom = new JPanel(new FlowLayout()); 032 panelBottom.add(new JLabel("Interval: ")); 033 034 textInterval = new JTextField(String.valueOf(interval), 10); 035 panelBottom.add(textInterval); 036 if (configurationPanel == null) 037 configurationPanel = new JPanel(new FlowLayout()); 038 configurationPanel.add(panelBottom); 039 040 return configurationPanel; 041 } 042 043 public void preVisualize() { 044 xMax = 0; 045 eventCounter = new ArrayList(); 046 imageMap.clear(); 047 threadFilter.preVisualize(); 048 currentThread = -1; 049 image = new AutoImage(); 050 xOffset = -1; 051 installPainter(); 052 } 053 054 public void receiveElement(Element element) { 055 if (element.getField()[element.getField().length-1] == Integer.MAX_VALUE) 056 return; 057 int x = xAxis.getField(element); 058 int y = yAxis.getField(element); 059 int z = 0; 060 paint(x,y,z); 061 } 062 063 public void visualize() { 064 sort(); 065 } 066 067 public void makeSelection() { 068 if (SELECT_OPTION == 0) { 069 Scene.showErrorMessage("No data is to be selected."); 070 return; 071 } 072 073 int x1 = ((AxesPanel)panel).getStartX(); 074 int x2 = ((AxesPanel)panel).getEndX(); 075 int y1 = ((AxesPanel)panel).getEndY(); 076 int y2 = ((AxesPanel)panel).getStartY(); 077 078 if (!normalOrientation) { 079 int temp; 080 temp = x1; 081 x1 = y1; 082 y1 = temp; 083 temp = x2; 084 x2 = y2; 085 y2 = temp; 086 } 087 088 if (x1 < 0) { 089 x1 = 0; 090 } 091 092 if (x2 > (eventCounter.size() - 1)) { 093 x2 = eventCounter.size() - 1; 094 } 095 096 if (y1 < 0) { 097 y1 = 0; 098 } 099 100 if (y2 > (yAxis.getEntityNumber() - 1)) { 101 y2 = yAxis.getEntityNumber() - 1; 102 } 103 104 int start = ((Integer)eventCounter.get(x1)).intValue(); 105 int end = ((Integer)eventCounter.get(x2)).intValue(); 106 if ((SELECT_OPTION & 0x000f) == 0) { // do not select time frame 107 start = 0; 108 end = Integer.MAX_VALUE; 109 } 110 111 int[] selection = null; 112 switch (SELECT_OPTION & 0x0ff0) { 113 case 0x0100: // select all entities in the draw box 114 selection = new int[y2 - y1 + 1]; 115 for (int i = y1; i <= y2; i++) { 116 selection[i - y1] = i; 117 } 118 break; 119 case 0x0010: // select occurred entities 120 ArrayList idList = new ArrayList(); 121 for (int i=y1; i<=y2; i++) { 122 for (int j=x1; j<=x2; j++) { 123 Color color; 124 if (normalOrientation) 125 color = image.getSortedColor(null,yAxis,j,i); 126 else 127 color = image.getSortedColor(yAxis,null,i,j); 128 if (color != null) { 129 idList.add(new Integer(i)); 130 break; 131 } 132 } 133 } 134 135 selection = new int[idList.size()]; 136 for (int i=0; i<idList.size(); i++) { 137 selection[i] = ((Integer)idList.get(i)).intValue(); 138 } 139 break; 140 case 0x0000: // no selection on entities 141 y1 = 0; 142 y2 = yAxis.getEntityNumber() - 1; 143 selection = new int[y2 - y1 + 1]; 144 for (int i = y1; i <= y2; i++) { 145 selection[i - y1] = i; 146 } 147 break; 148 } 149 150 151 yAxis.makeSelection(selection, start, end); 152 } 153 154 public void paint(int x, int y, int z) { 155 if (x > xMax) { 156 xMax = x; 157 } 158 159 if (xOffset == -1) xOffset = x/interval; 160 161 x = x/interval; 162 163 painter.paint(image,x-xOffset,y,z); 164 165 while (x >= eventCounter.size()) { 166 eventCounter.add(new Integer(Scene.getEventCounter())); 167 } 168 } 169 170 protected void updateConfiguration() { 171 try { 172 if (autoInterval == -1) 173 interval = Integer.parseInt(textInterval.getText()); 174 else { 175 interval = autoInterval; 176 autoInterval = -1; 177 textInterval.setText(String.valueOf(interval)); 178 } 179 super.updateConfiguration(); 180 181 } catch (Exception e) { 182 Scene.showErrorMessage("Interval must be an integer"); 183 configure(); 184 } 185 } 186 187 public JMenuItem[] createSelectionMenuItem() { 188 if (selectionMenu != null) return selectionMenu; 189 190 itemSelectTimeFrame = new JCheckBoxMenuItem("Time Frame"); 191 itemSelectTimeFrame.setMnemonic(KeyEvent.VK_T); 192 itemSelectTimeFrame.addActionListener(new ActionListener() { 193 public void actionPerformed(ActionEvent e) { 194 boolean selected = itemSelectTimeFrame.isSelected(); 195 SELECT_OPTION = switchOption(selected, SELECT_OPTION, SELECT_TIME_FRAME); 196 } 197 }); 198 itemSelectTimeFrame.setSelected(true); 199 200 itemSelectOccurredEntities = new JCheckBoxMenuItem("Occurred Entities"); 201 itemSelectOccurredEntities.setMnemonic(KeyEvent.VK_O); 202 itemSelectOccurredEntities.addActionListener(new ActionListener() { 203 public void actionPerformed(ActionEvent e) { 204 boolean selected = itemSelectOccurredEntities.isSelected(); 205 SELECT_OPTION = switchOption(selected,SELECT_OPTION, SELECT_OCCURRED_ENTITIES); 206 207 if (itemSelectAllEntities.isSelected() && selected) { 208 SELECT_OPTION = switchOption(false,SELECT_OPTION, SELECT_ALL_ENTITIES); 209 itemSelectAllEntities.setSelected(false); 210 } 211 } 212 }); 213 itemSelectOccurredEntities.setSelected(false); 214 215 itemSelectAllEntities = new JCheckBoxMenuItem("All Entities"); 216 itemSelectAllEntities.setMnemonic(KeyEvent.VK_A); 217 itemSelectAllEntities.addActionListener(new ActionListener() { 218 public void actionPerformed(ActionEvent e) { 219 boolean selected = itemSelectAllEntities.isSelected(); 220 SELECT_OPTION = switchOption(selected, SELECT_OPTION, SELECT_ALL_ENTITIES); 221 222 if (itemSelectOccurredEntities.isSelected() && selected) { 223 SELECT_OPTION = switchOption(false,SELECT_OPTION, SELECT_OCCURRED_ENTITIES); 224 itemSelectOccurredEntities.setSelected(false); 225 } 226 } 227 }); 228 itemSelectAllEntities.setSelected(true); 229 230 selectionMenu = new JMenuItem[3]; 231 selectionMenu[0] = itemSelectTimeFrame; 232 selectionMenu[1] = itemSelectOccurredEntities; 233 selectionMenu[2] = itemSelectAllEntities; 234 235 return selectionMenu; 236 } 237 }