/* Soot - a J*va Optimization Framework
* Copyright (C) 2004 Jennifer Lhotak
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
package ca.mcgill.sable.soot.cfg.figures;
import org.eclipse.draw2d.*;
import java.util.*;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import ca.mcgill.sable.soot.*;
import org.eclipse.draw2d.text.*;
import ca.mcgill.sable.soot.editors.*;
import org.eclipse.draw2d.geometry.*;
import org.eclipse.jface.resource.*;
public class CFGNodeDataFigure extends Figure {
private Panel nodeFigure;//RectangleFigure rect;
private RectangleFigure rect;
private ArrayList data;
Font f = new Font(null, "Arial", 8, SWT.NORMAL);
public CFGNodeDataFigure() {
super();
setRect(new RectangleFigure());
this.add(getRect());
getRect().setBackgroundColor(SootPlugin.getDefault().getColorManager().getColor(new RGB(255, 255 ,255)));
ToolbarLayout layout = new ToolbarLayout();
layout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER);
layout.setVertical(false);
this.setLayoutManager(layout);
getRect().setLayoutManager(layout);
}
private soot.Unit unit;
public void updateFigure(){
if (getData() == null) return;
int height = 0;
int width = 0;
Iterator it = getData().iterator();
while (it.hasNext()){
unit = (soot.Unit)it.next();
String next = unit.toString();
Label l = new Label(next);
l.setFont(f);
l.getInsets().top = 1;
l.getInsets().bottom = 1;
l.getInsets().right = 1;
l.getInsets().left = 1;
height = height + l.getSize().height/2;
int length = next.length()*7;
width = length > width ? length : width;
getRect().add(l);
}
getRect().setSize(width+10, height+10);
this.setSize(width+10, height+10);
}
/**
* @return
*/
public RectangleFigure getRect() {
return rect;
}
Image stopImage = null;
Image highlightImage = null;
public void addStopIcon(){
if (stopImage == null){
ImageDescriptor desc = SootPlugin.getImageDescriptor("stop_icon.gif");
stopImage = desc.createImage();
}
((Label)getRect().getChildren().get(0)).setIcon(stopImage);
}
Label indicatorLabel;
public void addIndicator(){
if (highlightImage == null){
ImageDescriptor desc = SootPlugin.getImageDescriptor("indicator.gif");
highlightImage = desc.createImage();
}
indicatorLabel = new Label(highlightImage);
this.add(indicatorLabel, 0);
}
public void removeIndicator(){
if (this.getChildren().get(0).equals(indicatorLabel)){
this.remove(indicatorLabel);
}
}
public void removeStopIcon(){
((Label)getRect().getChildren().get(0)).setIcon(null);
}
/**
* @return
*/
public ArrayList getData() {
return data;
}
/**
* @param list
*/
public void setData(ArrayList list) {
data = list;
}
/**
* @param figure
*/
public void setRect(RectangleFigure figure) {
rect = figure;
}
/**
* @return
*/
public soot.Unit getUnit() {
return unit;
}
/**
* @param unit
*/
public void setUnit(soot.Unit unit) {
this.unit = unit;
}
}