* der Controller dieses DrawComposite
*/
public DrawComposite(Composite pParent, int pStyle, AntController pController) {
super(pParent, pStyle, pController);
AntProject project = getController().getProject();
project.addPropertyChangeListener(this);
project.getParameter().addPropertyChangeListener(this);
project.getTSPData().addPropertyChangeListener(this);
Preferences.getInstance().addPropertyChangeListener(this);
_scrolledComposite = new ScrolledComposite(this, SWT.H_SCROLL | SWT.V_SCROLL);
_scrolledComposite.setLayoutData("hmin 0, wmin 0, grow, push");
_scrolledComposite.setExpandHorizontal(true);
_scrolledComposite.setExpandVertical(true);
_canvas = new Canvas(_scrolledComposite, SWT.DOUBLE_BUFFERED);
_zoomFactor = new AntScale(new Scale(this, SWT.VERTICAL), getController().getProject());
_zoomFactor.getScale().setLayoutData("hmin 0, wmin pref, growy");
_zoomFactor.getScale().setMinimum(5);
_zoomFactor.getScale().setMaximum(300);
_zoomFactor.setTooltipText("Hier k�nnen Sie den Zoom-Faktor einstellen, mit dem die Knoten und Kanten dargestellt werden.");
_canvas.addPaintListener(new AntPaintListener());
_canvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent pE) {
if (pE.button == 1) {
if (_selectedNode != null) {
_selectedNode.removePropertyChangeListener(DrawComposite.this);
}
double zoomFactor = getController().getProject().getParameter().getZoomFactor();
double x = (pE.x - BORDER_WIDTH) / zoomFactor;
double y = (pE.y - BORDER_WIDTH) / zoomFactor;
_selectedNode = getController().getProject().getNodeForCoordinates((int) x, (int) y);
if (_selectedNode != null) {
_selectedNode.addPropertyChangeListener(DrawComposite.this);
_drag = true;
}
_canvas.redraw();
}
}
@Override
public void mouseUp(MouseEvent pE) {
if (pE.button == 1) {
_drag = false;
}
}
@Override
public void mouseDoubleClick(MouseEvent pE) {
if (pE.button == 1) {
if (pE.x - BORDER_WIDTH >= 0 && pE.y - BORDER_WIDTH >= 0 && !getController().isRunning()) {
if (_selectedNode != null) {
_selectedNode.removePropertyChangeListener(DrawComposite.this);
_drag = false;
_selectedNode = null;
}
AntProject project = getController().getProject();
double zoomFactor = project.getParameter().getZoomFactor();
NewNodeDialog newNodeDialog = new NewNodeDialog(getShell(), project, (pE.x - BORDER_WIDTH) / zoomFactor,
(pE.y - BORDER_WIDTH) / zoomFactor);
Node newNode = newNodeDialog.open();
if (newNode != null) {
project.getTSPData().addNode(newNode);
}
}
}
}
});