Search in sources :

Example 1 with DragEditPartsTracker

use of org.eclipse.gef.tools.DragEditPartsTracker 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.
    ConnectionLayer 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()) {
        UpdateManager 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) {
                Date 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) UpdateManager(org.eclipse.draw2d.UpdateManager) UpdateListener(org.eclipse.draw2d.UpdateListener) Map(java.util.Map)

Example 2 with DragEditPartsTracker

use of org.eclipse.gef.tools.DragEditPartsTracker in project yamcs-studio by yamcs.

the class PVWidgetSelectionHandle method createDragTracker.

@Override
protected DragTracker createDragTracker() {
    DragEditPartsTracker tracker = new DragEditPartsTracker(getOwner()) {

        @Override
        protected boolean handleButtonDown(int button) {
            if ((button == 1 || button == 3) && widgetModel instanceof IPVWidgetModel) {
                DirectEditManager directEditManager = new PVNameDirectEditManager(getOwner(), new CellEditorLocator() {

                    @Override
                    public void relocate(CellEditor celleditor) {
                        Rectangle rect;
                        int width = 120;
                        if (!pvName.isEmpty() && getTextExtent().width > 120)
                            width = getTextExtent().width + 4;
                        rect = new Rectangle(PVWidgetSelectionHandle.this.getLocation(), new Dimension(width, getTextExtent().height));
                        translateToAbsolute(rect);
                        Text control = (Text) celleditor.getControl();
                        org.eclipse.swt.graphics.Rectangle trim = control.computeTrim(0, 0, 0, 0);
                        rect.translate(trim.x, trim.y);
                        rect.width += trim.width;
                        rect.height += trim.height;
                        control.setBounds(rect.x, rect.y, rect.width, rect.height);
                    }
                });
                directEditManager.show();
            }
            return true;
        }
    };
    tracker.setDefaultCursor(getCursor());
    return tracker;
}
Also used : CellEditorLocator(org.eclipse.gef.tools.CellEditorLocator) IPVWidgetModel(org.csstudio.opibuilder.model.IPVWidgetModel) CellEditor(org.eclipse.jface.viewers.CellEditor) PVNameTextCellEditor(org.csstudio.opibuilder.visualparts.PVNameTextCellEditor) Rectangle(org.eclipse.draw2d.geometry.Rectangle) DirectEditManager(org.eclipse.gef.tools.DirectEditManager) Text(org.eclipse.swt.widgets.Text) Dimension(org.eclipse.draw2d.geometry.Dimension) DragEditPartsTracker(org.eclipse.gef.tools.DragEditPartsTracker)

Example 3 with DragEditPartsTracker

use of org.eclipse.gef.tools.DragEditPartsTracker in project dbeaver by serge-rider.

the class AttributePart method getDragTracker.

@Override
public DragTracker getDragTracker(Request request) {
    DragEditPartsTracker dragTracker = new DragEditPartsTracker(this);
    dragTracker.setDefaultCursor(SharedCursors.CURSOR_TREE_MOVE);
    return dragTracker;
}
Also used : DragEditPartsTracker(org.eclipse.gef.tools.DragEditPartsTracker)

Aggregations

DragEditPartsTracker (org.eclipse.gef.tools.DragEditPartsTracker)3 Rectangle (org.eclipse.draw2d.geometry.Rectangle)2 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 Map (java.util.Map)1 WidgetEditPartFactory (org.csstudio.opibuilder.editparts.WidgetEditPartFactory)1 IPVWidgetModel (org.csstudio.opibuilder.model.IPVWidgetModel)1 PVNameTextCellEditor (org.csstudio.opibuilder.visualparts.PVNameTextCellEditor)1 ConnectionLayer (org.eclipse.draw2d.ConnectionLayer)1 UpdateListener (org.eclipse.draw2d.UpdateListener)1 UpdateManager (org.eclipse.draw2d.UpdateManager)1 Dimension (org.eclipse.draw2d.geometry.Dimension)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 CellEditorLocator (org.eclipse.gef.tools.CellEditorLocator)1 DirectEditManager (org.eclipse.gef.tools.DirectEditManager)1 CellEditor (org.eclipse.jface.viewers.CellEditor)1 Text (org.eclipse.swt.widgets.Text)1