00001
00010 package VisuBDD;
00011
00012 import java.awt.*;
00013 import java.awt.event.*;
00014
00015 import java.util.*;
00016
00017
00018 public class VisualizeFrame extends Frame {
00019
00020 private Panel mainPanel;
00021 private Frame myFrame;
00022 private ScrollPane scrPane;
00023 private MyCanvas canvas;
00024 private java.util.List visualizeList;
00025 private int lineDistance = 2;
00026 private double maxBddWidth;
00027 private int[] fileSequence;
00028 private boolean xorMode = false;
00029 double[][] maxVals;
00030
00031
00032
00033
00034
00035
00036 private class MyCanvas extends Canvas {
00037
00042 private int maxBDDdepht(java.util.List localList) {
00043 int maxLength = 0;
00044
00045 for (int i = 0; i < localList.size(); i++) {
00046 if (((java.util.List) localList.get(i)).size() > maxLength) {
00047 maxLength = ((java.util.List) localList.get(i)).size();
00048 }
00049 }
00050
00051 return maxLength;
00052 }
00053
00054
00055
00056
00057
00058
00059
00060 public void paint(Graphics area) {
00061 int xStart, xEnd,
00062 lineWidth,hSize, vSize;
00063 double tmpVal, tmpVal2;
00064
00065 java.util.List numberList;
00066
00067 if (xorMode) {
00068 area.setXORMode(Color.white);
00069 } else {
00070 area.setPaintMode();
00071 }
00072
00073 for (int i = 0; i < visualizeList.size(); i++) {
00074 maxVals[i][0] = max((java.util.List) visualizeList.get(i));
00075 maxVals[i][1] = (double) i;
00076 }
00077
00078
00079 for (int i = 0; i < maxVals.length - 1; i++) {
00080 for (int j = i + 1; j < maxVals.length; j++) {
00081 if (maxVals[i][0] < maxVals[j][0]) {
00082 tmpVal = maxVals[i][0];
00083 tmpVal2 = maxVals[i][1];
00084 maxVals[i][0] = maxVals[j][0];
00085 maxVals[i][1] = maxVals[j][1];
00086 maxVals[j][0] = tmpVal;
00087 maxVals[j][1] = tmpVal2;
00088 }
00089 }
00090 }
00091
00092 fileSequence = new int[maxVals.length];
00093 for (int i = 0; i < maxVals.length; i++) {
00094 fileSequence[i] = (int) maxVals[i][1];
00095 }
00096
00097
00098
00099 area.drawString("Maximum BDD Width: " + maxBddWidth, 0, 12);
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 hSize = myFrame.getSize().width - 35;
00113 vSize = maxBDDdepht(visualizeList) * lineDistance + 30;
00114 this.setSize(hSize, vSize);
00115
00116
00117
00118 for (int i = 0; (i < visualizeList.size()); i++) {
00119 area.setColor(ColorAssignment.getColor(i));
00120 numberList = ((java.util.List) visualizeList.get((int) maxVals[i][1]));
00121
00122 for (int j = 0; (j < numberList.size()) && (j < hSize); j++) {
00123 lineWidth = (int) (( ((double) (hSize - 20)) / maxBddWidth)
00124 * ((Double) numberList.get(j)).doubleValue());
00125 xStart = (hSize - lineWidth) / 2;
00126 xEnd = xStart + lineWidth;
00127
00128 for (int k = 0; k < lineDistance; k++) {
00129 area.drawLine(xStart,(lineDistance * j + 20 + k),
00130 xEnd, (lineDistance * j + 20 + k));
00131 }
00132 }
00133 }
00134 }
00135
00136
00137 public Dimension getPreferedSize() {
00138 return new Dimension(myFrame.getSize().width - 50,
00139 myFrame.getSize().height - 50);
00140 }
00141
00142 }
00143
00144
00152 public VisualizeFrame(java.util.List visualizeList) {
00153 double tmpVal, tmpVal2;
00154
00155
00156 this.myFrame = this;
00157 this.setTitle("Visualization of BDD Shape");
00158 this.setLocation(295, 100);
00159 this.setSize(600,500);
00160
00161 this.visualizeList = visualizeList;
00162 this.maxVals = new double[visualizeList.size()][2];
00163
00164 for (int i = 0; i < visualizeList.size(); i++) {
00165 this.maxVals[i][0] = max((java.util.List) this.visualizeList.get(i));
00166 this.maxVals[i][1] = (double) i;
00167 }
00168
00169
00170 for (int i = 0; i < maxVals.length - 1; i++) {
00171 for (int j = i + 1; j < maxVals.length; j++) {
00172 if (maxVals[i][0] < maxVals[j][0]) {
00173 tmpVal = maxVals[i][0];
00174 tmpVal2 = maxVals[i][1];
00175 maxVals[i][0] = maxVals[j][0];
00176 maxVals[i][1] = maxVals[j][1];
00177 maxVals[j][0] = tmpVal;
00178 maxVals[j][1] = tmpVal2;
00179 }
00180 }
00181 }
00182
00183 this.fileSequence = new int[maxVals.length];
00184 for (int i = 0; i < maxVals.length; i++) {
00185 fileSequence[i] = (int) maxVals[i][1];
00186 }
00187
00188
00189
00190 addWindowListener(
00191 new WindowAdapter() {
00192 public void windowClosing(WindowEvent evt) {
00193 dispose();
00194 System.exit(0);
00195 }
00196 }
00197 );
00198
00199 prepareWindow();
00200 canvas.repaint();
00201
00202
00203 }
00204
00205
00210 public double max(java.util.List numberList) {
00211 double maxVal = 0.0;
00212
00213 for (int i = 0; i < numberList.size(); i++) {
00214 if ( ((Double) numberList.get(i)).doubleValue() > maxVal) {
00215 maxVal = ((Double) numberList.get(i)).doubleValue();
00216 }
00217 }
00218
00219 return maxVal;
00220 }
00221
00226 public void setMaxBddWidth(double value) {
00227 this.maxBddWidth = value;
00228 }
00229
00230 public void setDistance(int value) {
00231 this.lineDistance = value;
00232 }
00233
00234 public void setXorMode(boolean xorMode) {
00235 this.xorMode = xorMode;
00236 }
00237
00238 public int[] getFileSequence() {
00239
00240 return this.fileSequence;
00241 }
00242
00247 public void repaint() {
00248 this.canvas.repaint();
00249 }
00250
00256 private void prepareWindow() {
00257 this.canvas = new MyCanvas();
00258 this.canvas.setBackground(Color.white);
00259
00260 this.scrPane = new ScrollPane();
00261
00262 this.scrPane.add(this.canvas);
00263
00264
00265
00266
00267
00268
00269
00270 this.add(scrPane);
00271
00272 }
00273
00274 public Dimension getPreferedSize(){
00275 return new Dimension(600, 400);
00276 }
00277
00278
00279 }