@Override public ImmutableSet<ModelBuilder<?, ?>> getChildren() { return ImmutableSet.<ModelBuilder<?, ?>>builder() .add(SimulationViewer.builder(this)) .addAll(renderers()) .build(); }
void panelsLayout(Multimap<Integer, PanelRenderer> panels) { if (panels.isEmpty()) { createContent(this); } else { final int topHeight = configurePanels(vertical, panels.removeAll(SWT.TOP)); final int leftWidth = configurePanels(horizontal, panels.removeAll(SWT.LEFT)); createContent(horizontal); final int rightWidth = configurePanels(horizontal, panels.removeAll(SWT.RIGHT)); final int bottomHeight = configurePanels(vertical, panels.removeAll(SWT.BOTTOM)); vertical.setWeights(varargs(topHeight, canvasHeight, bottomHeight)); } else if (topHeight > 0) { vertical.setWeights(varargs(topHeight, canvasHeight)); } else if (bottomHeight > 0) { vertical.setWeights(varargs(canvasHeight, bottomHeight)); horizontal.setWeights(varargs(leftWidth, canvasWidth, rightWidth)); } else if (leftWidth > 0) { horizontal.setWeights(varargs(leftWidth, canvasWidth)); } else if (rightWidth > 0) { horizontal.setWeights(varargs(canvasWidth, rightWidth));
SimulationViewer(Shell shell, ClockController cc, SimulatorAPI simapi, View.Builder vb) { super(shell, SWT.NONE); clock = cc; isRealtime = clock instanceof RealtimeClockController; simulator = simapi; accelerators = vb.accelerators(); autoPlay = vb.viewOptions().contains(ViewOption.AUTO_PLAY); canvasRenderers = new ArrayList<>(); panelRenderers = new ArrayList<>(); speedUp = vb.speedUp(); shell.setLayout(new FillLayout()); display = shell.getDisplay(); setLayout(new FillLayout()); createMenu(shell); }
calculateSizes(); firstTime = false; image = renderStatic(); updateScrollbars(false); requestStaticRenderUpdate = false; final org.eclipse.swt.graphics.Point center = getCenteredOrigin(); onToglePlay(playPauseMenuItem);
void scrollVertical() { final org.eclipse.swt.graphics.Point center = getCenteredOrigin(); final Rectangle content = image.getBounds(); final Rectangle client = canvas.getClientArea(); if (client.height > content.height) { origin.y = 0; } else { final int vSelection = vBar.getSelection(); final int destY = -vSelection - center.y; canvas.scroll(center.x, destY, center.x, center.y, content.width, content.height, false); origin.y = -vSelection + origin.y - center.y; } }
@Override public void handleEvent(@Nullable Event e) { assert e != null; onSpeedChange((MenuItem) e.widget); } };
Image renderStatic() { size = new org.eclipse.swt.graphics.Point((int) (m * viewRect.width), (int) (m * viewRect.height)); final Image img = new Image(getDisplay(), size.x, size.y); final GC gc = new GC(img); for (final CanvasRenderer r : canvasRenderers) { r.renderStatic(gc, new ViewPort(new Point(0, 0), viewRect, m)); } gc.dispose(); return img; }
@Override public SimulationViewer build(DependencyProvider dependencyProvider) { final Shell shell = dependencyProvider.get(Shell.class); final ClockController cc = dependencyProvider.get(ClockController.class); final SimulatorAPI sim = dependencyProvider.get(SimulatorAPI.class); final MainView mv = dependencyProvider.get(MainView.class); final SimulationViewer sv = new SimulationViewer(shell, cc, sim, viewBuilder()); mv.addListener(new com.github.rinde.rinsim.event.Listener() { @Override public void handleEvent(com.github.rinde.rinsim.event.Event e) { sv.show(); } }); return sv; } }
/** * Configure shell. */ void createContent(Composite parent) { canvas = new Canvas(parent, SWT.DOUBLE_BUFFERED | SWT.NONE | SWT.NO_REDRAW_RESIZE | SWT.V_SCROLL | SWT.H_SCROLL); canvas.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); origin = new org.eclipse.swt.graphics.Point(0, 0); size = START_SCREEN_SIZE; canvas.addPaintListener(this); canvas.addControlListener(this); this.layout(); timeLabel = new Label(canvas, SWT.NONE); timeLabel.setText("hello world"); timeLabel.pack(); timeLabel.setLocation(TIME_LABEL_LOC); timeLabel .setBackground(canvas.getDisplay().getSystemColor(SWT.COLOR_WHITE)); hBar = canvas.getHorizontalBar(); hBar.addSelectionListener(this); vBar = canvas.getVerticalBar(); vBar.addSelectionListener(this); }
void scrollHorizontal() { final org.eclipse.swt.graphics.Point center = getCenteredOrigin(); final Rectangle content = image.getBounds(); final Rectangle client = canvas.getClientArea(); if (client.width > content.width) { origin.x = 0; } else { final int hSelection = hBar.getSelection(); final int destX = -hSelection - center.x; canvas.scroll(destX, center.y, center.x, center.y, content.width, content.height, false); origin.x = -hSelection + origin.x - center.x; } }
void updateScrollbars(boolean adaptToScrollbar) { final Rectangle rect = image.getBounds(); final Rectangle client = canvas.getClientArea(); hBar.setMaximum(rect.width); vBar.setMaximum(rect.height); hBar.setThumb(Math.min(rect.width, client.width)); vBar.setThumb(Math.min(rect.height, client.height)); if (!adaptToScrollbar) { final org.eclipse.swt.graphics.Point center = getCenteredOrigin(); hBar.setSelection(-center.x); vBar.setSelection(-center.y); } }