package de.FeatureModellingTool.GraphicalEditor;
import research.tool.Tool;
import research.FigureEnumeration;
import research.Figure;
import de.reuse.GroupMap;
import de.FeatureModellingTool.FeatureModel.FeatureModel;
import java.beans.PropertyChangeEvent;
import java.awt.event.MouseEvent;
import java.awt.*;
/**
* Created by IntelliJ IDEA.
* User: saturn
* Date: 2003-9-8
* Time: 22:22:19
* To change this template use Options | File Templates.
*/
class FeatureModelTraceTool extends Tool implements ConstantDefinition {
private FeatureModel featureModel = null;
private GroupMap idToFigureMap = null;
protected void contextChange(PropertyChangeEvent e) {
super.contextChange(e);
String propertyName = e.getPropertyName();
if (FEATURE_MODEL.equals(propertyName)) {
end();
featureModel = (FeatureModel) e.getNewValue();
} else if (ID_TO_FIGURE_MAP.equals(propertyName)) {
idToFigureMap = (GroupMap) e.getNewValue();
}
}
public void mouseEntered(MouseEvent e, int x, int y) {
drawingView.setCursor(Cursor.getDefaultCursor());
}
public void mouseExited(MouseEvent e, int x, int y) {
drawingView.setCursor(Cursor.getDefaultCursor());
}
public void mouseMove(MouseEvent evt, int x, int y) {
double scale = drawingView.getScale();
int realX = (int) (x / scale + 0.5);
int realY = (int) (y / scale + 0.5);
Figure figure = drawingView.getDrawing().findFigure(realX, realY);
boolean flag = false;
if (figure != null) {
drawingView.setCursor(new Cursor(Cursor.HAND_CURSOR));
flag = true;
}
if(!flag)
drawingView.setCursor(Cursor.getDefaultCursor());
}
public void mouseDown(MouseEvent e, int x, int y) {
double scale = drawingView.getScale();
int realX = (int) (e.getX() / scale + 0.5);
int realY = (int) (e.getY() / scale + 0.5);
FigureEnumeration fe = drawingView.getDrawing().getFiguresReverse();
Figure figure = null;
while (fe.hasMoreElements()) {
figure = fe.nextFigure();
if (!figure.containsPoint(realX, realY)) {
figure = null;
continue;
}
Boolean selectivity = (Boolean) figure.getAttribute("selectivity");
if (selectivity.booleanValue() == false) {
figure = null;
continue;
}
break;
}
if(figure != null){
drawingView.setSelection(figure);
}else{
drawingView.clearSelection();
}
}
public void mouseClicked(MouseEvent e, int x, int y) {
if(e.getClickCount() < 2) return;
double scale = drawingView.getScale();
int realX = (int) (x / scale + 0.5);
int realY = (int) (y / scale + 0.5);
Figure figure = drawingView.getDrawing().findFigure(realX, realY);
if((figure != null)&&(figure instanceof FeatureFigure)){
FeatureFigure ff = (FeatureFigure)figure;
Boolean value = (Boolean)ff.getAttribute(FeatureFigure.IS_A_LINK);
if((value != null)&&(value.booleanValue())){
//trace to its origin
System.out.println("trace to its origin");
}
}
}
}