/* * Model.java * * Created on July 17, 2002, 4:00 PM */ package org.reldb.dbrowser.ui.content.rev; import java.util.Collection; import java.util.HashSet; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseMoveListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.reldb.dbrowser.ui.RevDatabase; /** * Defines a layered pane in which visualised classes may be manipulated. * * @author Dave Voorhis */ public class Model extends Composite { private int lastMouseX; private int lastMouseY; private Rev rev; private String modelName; /** Ctor */ public Model(Rev rev, String modelName, Composite parent) { super(parent, SWT.NONE); this.rev = rev; this.modelName = modelName; addMouseMoveListener(new MouseMoveListener() { @Override public void mouseMove(MouseEvent e) { lastMouseX = e.x; lastMouseY = e.y; enablePopupMenu(); } }); } private Menu preservedPopupMenu; void disablePopupMenu() { if (getMenu() == null) return; preservedPopupMenu = getMenu(); setMenu(null); } void enablePopupMenu() { if (getMenu() != null) return; if (preservedPopupMenu == null) return; setMenu(preservedPopupMenu); preservedPopupMenu = null; } public Point getLastMousePosition() { return new Point(lastMouseX, lastMouseY); } public void removeEverything() { Collection<Visualiser> visualisers = new HashSet<Visualiser>(); for (Control child: getChildren()) if (child instanceof Visualiser) visualisers.add((Visualiser)child); for (Visualiser visualiser: visualisers) visualiser.delete(); rev.fireModelChangeEvent(); } void clear() { for (Control control: getChildren()) control.dispose(); } public int getVisualiserCount() { int count = 0; for (Control child: getChildren()) if (child instanceof Visualiser) count++; return count; } public Visualiser getVisualiser(String visualiserName) { for (Control child: getChildren()) { if (!(child instanceof Visualiser)) continue; Visualiser childVisualiser = (Visualiser)child; if (childVisualiser.getID().compareTo(visualiserName) == 0) return childVisualiser; } return null; } public Visualiser getPossibleDropTarget(int i, int j, Visualiser visualiser) { for (Control child: getChildren()) { if (!(child instanceof Visualiser)) continue; Visualiser childVisualiser = (Visualiser)child; if (visualiser.getBounds().intersects(childVisualiser.getBounds()) && childVisualiser.canReceiveDropOf(visualiser)) return childVisualiser; } return null; } public RevDatabase getDatabase() { return rev.getDatabase(); } public String getModelName() { return modelName; } public void setModelName(String name) { modelName = name; } public Rev getRev() { return rev; } }