Quantcast
Channel: Oracle Bloggers
Viewing all articles
Browse latest Browse all 19780

Adding & Removing Connection Widgets

$
0
0

Let's extend the example referred to yesterday. We'll let the user connect widgets with each other, after the Ctrl key is pressed and the mouse is moved from one widget to another.

Add the below to the AccountBuchWidget class:

private class AccountBuchConnectProvider implements ConnectProvider {
    @Override
    public boolean isSourceWidget(Widget source) {
        return source instanceof AccountBuchWidget
                && source != null ? true : false;
    }
    @Override
    public ConnectorState isTargetWidget(Widget src, Widget trg) {
        return src != trg && trg instanceof AccountBuchWidget
                ? ConnectorState.ACCEPT : ConnectorState.REJECT;
    }
    @Override
    public boolean hasCustomTargetWidgetResolver(Scene arg0) {
        return false;
    }
    @Override
    public Widget resolveTargetWidget(Scene arg0, Point arg1) {
        return null;
    }
    @Override
    public void createConnection(Widget source, Widget target) {
        ConnectionWidget conn = new ConnectionWidget(scene);
        conn.setTargetAnchorShape(AnchorShape.TRIANGLE_FILLED);
        conn.setTargetAnchor(AnchorFactory.createRectangularAnchor(target));
        conn.setSourceAnchor(AnchorFactory.createRectangularAnchor(source));
        connectionLayerWidget.addChild(conn);
    }
}

Next, in the TopComponent constructor, create a new LayerWidget, add it to the Scene, and change the initialization of the AccountBuchWidget so that the new LayerWidget is passed to the AccountBuchWidget constructor:

        final LayerWidget connectionLayerWidget = new LayerWidget(scene);

        layerWidget.addChild(new AccountBuchWidget(scene, ab, point, connectionLayerWidget));

        scene.addChild(connectionLayerWidget);

Then you can add the AccountBuchConnectionProvider to the list of Actions in the constructor of the AccountBuchWidget:

        getActions().addAction(ActionFactory.createExtendedConnectAction(
           connectionLayerWidget,
           new AccountBuchConnectProvider())
        );

Finally, if you incorporated the Delete key, mentioned by Mike in the comments yesterday, make sure to also remove the related ConnectionWidgets when deleting an AccountBuchWidget:

} else if (event.getKeyCode() == KeyEvent.VK_DELETE) {
    widget.removeFromParent();
    List<Widget> connectionsToRemove = new ArrayList<Widget>();
    for (Widget clwKid : connectionLayerWidget.getChildren()) {
        ConnectionWidget connectionWidget = (ConnectionWidget) clwKid;
        if (connectionWidget.getSourceAnchor().getRelatedWidget().equals(widget)) {
            connectionsToRemove.add(connectionWidget);
        }
        if (connectionWidget.getTargetAnchor().getRelatedWidget().equals(widget)) {
            connectionsToRemove.add(connectionWidget);
        }
    }
    connectionLayerWidget.removeChildren(connectionsToRemove);
}

Tip: Make sure to hold down the Ctrl key when using the mouse to connect two widgets.


Viewing all articles
Browse latest Browse all 19780

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>