package org.archstudio.bna.logics.navigating;
import org.archstudio.bna.IBNAView;
import org.archstudio.bna.IBNAWorld;
import org.archstudio.bna.ICoordinate;
import org.archstudio.bna.IMutableCoordinateMapper;
import org.archstudio.bna.logics.AbstractThingLogic;
import org.archstudio.bna.logics.tracking.ModelBoundsTrackingLogic;
import org.archstudio.bna.ui.IBNAAllEventsListener2;
import org.archstudio.bna.ui.IBNAMenuListener2;
import org.archstudio.bna.utils.BNAAction;
import org.archstudio.bna.utils.BNAUtils;
import org.archstudio.bna.utils.BNAUtils2.ThingsAtLocation;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
public class ViewAllLogic extends AbstractThingLogic implements IBNAMenuListener2, IBNAAllEventsListener2 {
public static void viewAll(IBNAView view) {
ModelBoundsTrackingLogic mbtl =
view.getBNAWorld().getThingLogicManager().addThingLogic(ModelBoundsTrackingLogic.class);
IMutableCoordinateMapper cm = (IMutableCoordinateMapper) view.getCoordinateMapper();
Rectangle m = mbtl.getModelBounds();
org.eclipse.swt.graphics.Rectangle v = view.getBNAUI().getComposite().getClientArea();
v.x = v.y = 0;
Point mc = new Point(m.x + m.width / 2, m.y + m.height / 2);
Point vc = new Point(v.x + v.width / 2, v.y + v.height / 2);
double s = Math.min(1, Math.min((double) v.width / m.width, (double) v.height / m.height));
cm.setLocalScaleAndAlign(s, vc, mc);
}
public ViewAllLogic(IBNAWorld world) {
super(world);
}
@Override
public void fillMenu(final IBNAView view, ICoordinate location, ThingsAtLocation thingsAtLocation,
IMenuManager menu) {
BNAUtils.checkLock();
if (view.getParentView() == null) {
menu.add(new BNAAction("View All") {
@Override
public void runWithLock() {
viewAll(view);
}
});
}
}
}