Search in sources :

Example 1 with UpdateListener

use of org.eclipse.draw2d.UpdateListener in project yamcs-studio by yamcs.

the class OPIRuntimeDelegate method createGUI.

public void createGUI(Composite parent) {
    viewer = new PatchedScrollingGraphicalViewer();
    if (displayModel != null) {
        displayModel.setOpiRuntime(opiRuntime);
        displayModel.setViewer(viewer);
    }
    ScalableFreeformRootEditPart root = new PatchedScalableFreeformRootEditPart() {

        // In Run mode, clicking the Display or container should de-select
        // all widgets.
        @Override
        public DragTracker getDragTracker(Request req) {
            return new DragEditPartsTracker(this);
        }

        @Override
        public boolean isSelectable() {
            return false;
        }
    };
    // set clipping strategy for connection layer of connection can be hide
    // when its source or target is not showing.
    var connectionLayer = (ConnectionLayer) root.getLayer(LayerConstants.CONNECTION_LAYER);
    connectionLayer.setClippingStrategy(new PatchedConnectionLayerClippingStrategy(connectionLayer));
    viewer.createControl(parent);
    viewer.setRootEditPart(root);
    viewer.setEditPartFactory(new WidgetEditPartFactory(ExecutionMode.RUN_MODE, site));
    // viewer.addDropTargetListener(new
    // ProcessVariableNameTransferDropPVTargetListener(viewer));
    // viewer.addDropTargetListener(new
    // TextTransferDropPVTargetListener(viewer));
    // Add drag listener will make click feel stagnant.
    // viewer.addDragSourceListener(new DragPVSourceListener(viewer));
    // this will make viewer as a selection provider
    EditDomain editDomain = new EditDomain() {

        @Override
        public void loadDefaultTool() {
            setActiveTool(new RuntimePatchedSelectionTool());
        }
    };
    editDomain.addViewer(viewer);
    // connect the CSS menu
    ContextMenuProvider cmProvider = new OPIRunnerContextMenuProvider(viewer, opiRuntime);
    viewer.setContextMenu(cmProvider);
    opiRuntime.getSite().registerContextMenu(cmProvider, viewer);
    if (displayModelFilled) {
        viewer.setContents(displayModel);
        displayModel.setViewer(viewer);
        displayModel.setOpiRuntime(opiRuntime);
        updateEditorTitle();
    }
    zoomManager = root.getZoomManager();
    if (zoomManager != null) {
        List<String> zoomLevels = new ArrayList<>(3);
        zoomLevels.add(Draw2dSingletonUtil.ZoomManager_FIT_ALL);
        zoomLevels.add(Draw2dSingletonUtil.ZoomManager_FIT_WIDTH);
        zoomLevels.add(Draw2dSingletonUtil.ZoomManager_FIT_HEIGHT);
        zoomManager.setZoomLevelContributions(zoomLevels);
        zoomManager.setZoomLevels(createZoomLevels());
    // IAction zoomIn = new ZoomInAction(zoomManager);
    // IAction zoomOut = new ZoomOutAction(zoomManager);
    // getActionRegistry().registerAction(zoomIn);
    // getActionRegistry().registerAction(zoomOut);
    }
    /* scroll-wheel zoom */
    viewer.setProperty(MouseWheelHandler.KeyGenerator.getKey(SWT.MOD1), MouseWheelZoomHandler.SINGLETON);
    /*
         * When Figure instance which corresponds to RootEditPart is updated, calculate the frame rate and set the
         * measured rate to "frame_rate" property of the corresponding DisplayModel instance.
         *
         * By default, org.eclipse.draw2d.DeferredUpdateManager is used. This update manager queues update requests from
         * figures and others, and it repaints requested figures at once when GUI thread is ready to repaint.
         * notifyPainting() method of UpdateLister is called when it repaints. The frame rate is calculated based on the
         * timing of notifyPainting().
         *
         * Note that the update manager repaints only requested figures. It does not repaint all figures at once. For
         * example, if there are only two widgets in one display, these widgets might be repainted alternately. In that
         * case, the frame rate indicates the inverse of the time between the repainting of one widget and the
         * repainting of the other widget, which is different from our intuition. Thus, you have to be careful about the
         * meaning of "frame rate" calculated by the following code.
         */
    if (displayModelFilled && displayModel.isFreshRateEnabled()) {
        var updateManager = root.getFigure().getUpdateManager();
        updateManager.addUpdateListener(new UpdateListener() {

            // in milliseconds
            private long updateCycle = -1;

            private Date previousDate = null;

            @Override
            public void notifyPainting(Rectangle damage, @SuppressWarnings("rawtypes") Map dirtyRegions) {
                var currentDate = new Date();
                if (previousDate == null) {
                    previousDate = currentDate;
                    return;
                }
                synchronized (previousDate) {
                    updateCycle = currentDate.getTime() - previousDate.getTime();
                    displayModel.setFrameRate(1000.0 / updateCycle);
                    previousDate = currentDate;
                }
            }

            @Override
            public void notifyValidating() {
            // Do nothing
            }
        });
    }
}
Also used : EditDomain(org.eclipse.gef.EditDomain) WidgetEditPartFactory(org.csstudio.opibuilder.editparts.WidgetEditPartFactory) Request(org.eclipse.gef.Request) ArrayList(java.util.ArrayList) Rectangle(org.eclipse.draw2d.geometry.Rectangle) DragEditPartsTracker(org.eclipse.gef.tools.DragEditPartsTracker) ConnectionLayer(org.eclipse.draw2d.ConnectionLayer) ContextMenuProvider(org.eclipse.gef.ContextMenuProvider) Date(java.util.Date) ScalableFreeformRootEditPart(org.eclipse.gef.editparts.ScalableFreeformRootEditPart) UpdateListener(org.eclipse.draw2d.UpdateListener) Map(java.util.Map)

Example 2 with UpdateListener

use of org.eclipse.draw2d.UpdateListener in project tdi-studio-se by Talend.

the class TalendFigureCanvas method setupNewLayoutHook.

/**
     * Layout Viewport is not overridable in the FigureCanvas so we use a work around to setup our own layout viewport
     */
private void setupNewLayoutHook() {
    try {
        // reset the listener of the update manager using reflection
        Object emptyArray = Array.newInstance(UpdateListener.class, 0);
        listenersField.set(getLightweightSystem().getUpdateManager(), emptyArray);
        // setup our own layout
        getLightweightSystem().getUpdateManager().addUpdateListener(new UpdateListener() {

            @Override
            public void notifyPainting(Rectangle damage, java.util.Map dirtyRegions) {
                if (toolControl != null) {
                    toolControl.setBounds(0, 0, toolControl.getBounds().width, cashedToolHeight);
                }
            }

            @Override
            public void notifyValidating() {
                if (!isDisposed()) {
                    layoutViewport2();
                }
            }
        });
    } catch (IllegalAccessException iae) {
        handleReflectionFailure(iae);
    }
}
Also used : Rectangle(org.eclipse.draw2d.geometry.Rectangle) UpdateListener(org.eclipse.draw2d.UpdateListener)

Example 3 with UpdateListener

use of org.eclipse.draw2d.UpdateListener in project yamcs-studio by yamcs.

the class AbstractSWTWidgetFigure method repaintWidget.

protected void repaintWidget() {
    updateWidgetVisibility();
    // the first time.
    if (!updateFlag) {
        updateFlag = true;
        if (!isDirectlyOnDisplay()) {
            updateManagerListener = new UpdateListener() {

                @Override
                public void notifyPainting(Rectangle damage, @SuppressWarnings("rawtypes") Map dirtyRegions) {
                    updateWidgetVisibility();
                }

                @Override
                public void notifyValidating() {
                }
            };
            getUpdateManager().addUpdateListener(updateManagerListener);
        }
    }
}
Also used : Rectangle(org.eclipse.draw2d.geometry.Rectangle) UpdateListener(org.eclipse.draw2d.UpdateListener) Map(java.util.Map)

Aggregations

UpdateListener (org.eclipse.draw2d.UpdateListener)3 Rectangle (org.eclipse.draw2d.geometry.Rectangle)3 Map (java.util.Map)2 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 WidgetEditPartFactory (org.csstudio.opibuilder.editparts.WidgetEditPartFactory)1 ConnectionLayer (org.eclipse.draw2d.ConnectionLayer)1 ContextMenuProvider (org.eclipse.gef.ContextMenuProvider)1 EditDomain (org.eclipse.gef.EditDomain)1 Request (org.eclipse.gef.Request)1 ScalableFreeformRootEditPart (org.eclipse.gef.editparts.ScalableFreeformRootEditPart)1 DragEditPartsTracker (org.eclipse.gef.tools.DragEditPartsTracker)1