Проблема с разъемом GWT в прямолинейном соединении - PullRequest
0 голосов
/ 16 февраля 2011

Я пытаюсь установить прямое соединение между виджетами. Но когда я это делаю, ориентация моего разъема меняется неправильно. Он всегда идет параллельно требуемому. Также он не зависит от подключаемых виджетов, т.е.когда я перемещаю свой виджет, мой соединитель не перемещается. Текст моего кода выглядит так: Ссылка на снимок проблемы: http://goo.gl/JUEmJ

открытый класс DragNDropPage {

SyncCurrentUser cu = SyncCurrentUser.getUser();
private AbsolutePanel area = new AbsolutePanel();
HorizontalPanel toolsPanel = new HorizontalPanel();
AbsolutePanel canvas = new AbsolutePanel();
DragController toolboxDragController;
Label startLabel = new Label("START");
Label stopLabel = new Label("STOP");
Label activityLabel = new Label("ACTIVITY");
Label processLabel = new Label("PROCESS");
Button stopDrag = new Button("Done Dragging");
Button saveButton = new Button("Save");
PickupDragController dragController = new PickupDragController(area, true);
AbsolutePositionDropController dropController = new AbsolutePositionDropController(area);
private List<Widget> selected = new ArrayList<Widget>();
private List<Widget> onCanvas = new ArrayList<Widget>();
private List<Connection> connections = new ArrayList<Connection>();
private CActivity[] aItems;
private CProcess[] pItems;
MyHandler handler = new MyHandler();
int mouseX,mouseY;


String style;

public DragNDropPage() {
    toolboxDragController = new ToolboxDragController(dropController, dragController);
    RootPanel.get("rightbar").add(area);
    area.setSize("575px", "461px");


    area.add(toolsPanel);
    toolsPanel.setSize("575px", "37px");

    toolsPanel.add(startLabel);
    startLabel.setSize("76px", "37px");
    toolboxDragController.makeDraggable(startLabel);

    toolsPanel.add(stopLabel);
    stopLabel.setSize("66px", "37px");
    toolboxDragController.makeDraggable(stopLabel);

    toolsPanel.add(activityLabel);
    activityLabel.setSize("82px", "36px");
    toolboxDragController.makeDraggable(activityLabel);

    toolsPanel.add(processLabel);
    processLabel.setSize("85px", "36px");
    toolboxDragController.makeDraggable(processLabel);

    stopDrag.addClickHandler(handler);
    toolsPanel.add(stopDrag);
    stopDrag.setWidth("114px");

    saveButton.addClickHandler(handler);
    toolsPanel.add(saveButton);

    area.add(canvas, 0, 36);
    canvas.setSize("575px", "425px");

    Event.addNativePreviewHandler(new Event.NativePreviewHandler() {    
    @Override
    public void onPreviewNativeEvent(NativePreviewEvent event) {
        //46 is the key code for Delete Button
        if(event.getNativeEvent().getKeyCode() == 46 && !selected.isEmpty()) {
                for (Iterator<Widget> i = selected.listIterator(); i.hasNext();) {
                    Widget w = (Widget) i.next();
                    UIObjectConnector.unwrap(w);
                    i.remove();
                    w.removeFromParent();
                    onCanvas.remove(i);
                }
            }
        }
    });

aItems = cu.currentUser.getcActivity();
pItems = cu.currentUser.getcProcess();
}

private class ToolboxDragController extends PickupDragController {

    public ToolboxDragController(final DropController dropController, final DragController nodesDragController) {
        super(area ,false);
        setBehaviorDragProxy(true);
        registerDropController(dropController);

        addDragHandler(new DragHandlerAdapter(){

            public void onPreviewDragEnd(DragEndEvent event) throws VetoDragException {

                Widget node = (Widget) event.getSource();
                int left = event.getContext().desiredDraggableX;
                int top = event.getContext().desiredDraggableY;
                AbsolutePanel panel = (AbsolutePanel) dropController.getDropTarget();

                createConnector((Label) node, panel, left, top);
                throw new VetoDragException();
            }

        });

    }
}

protected UIObjectConnector createConnector(Label proxy, AbsolutePanel panel, int left, int top) {
    Widget w;
    String str = proxy.getText();
    if(str.equals("START") || str.equals("STOP")){
        w = new Label(proxy.getText()){
            public void onBrowserEvent(Event event) {
                if( DOM.eventGetType(event) == 4 
                    && DOM.eventGetCtrlKey(event)){
                    select(this);
                }
                super.onBrowserEvent(event);
            }
        };
        w.getElement().setClassName("dnd-start-stop");
    }
    else{
        w = new ListBox(){
            public void onBrowserEvent(Event event) {
                if( DOM.eventGetType(event) == 4 
                    && DOM.eventGetCtrlKey(event)){
                    select(this);
                }
                super.onBrowserEvent(event);
            }
        };
        if(str.equals("ACTIVITY")){
            getAItems((ListBox)w);
            //w.getElement().addClassName("dnd-activity");
        }
        else if(str.equals("PROCESS")){
            getPItems((ListBox)w);
            //w.getElement().addClassName("dnd-process");
        }
    }
    onCanvas.add(w);
    left -= panel.getAbsoluteLeft();
    top -= panel.getAbsoluteTop();
    //panel.add(w,10,10);
    panel.add(w, left, top);
    dragController.makeDraggable(w);
    return UIObjectConnector.wrap(w);

}

private void getAItems(ListBox w) {
    for(int i=0;i<aItems.length;i++)
        w.addItem(aItems[i].getActivityName());
}

private void getPItems(ListBox w) {
    /*for(int i=0;i<pItems.length;i++)
        w.addItem(pItems[i].getProcessName());*/
    w.addItem("Process1");
}

protected void select(Widget w){
    if(selected.isEmpty()) {
        selected.add(w);
        w.getElement().addClassName("color-green");
    } else if(selected.contains(w)){
        selected.remove(w);
        w.getElement().removeClassName("color-green");
    } else if(selected.size() == 1) {
        Widget w2 = (Widget) selected.get(0);
        connect(UIObjectConnector.getWrapper(w2), UIObjectConnector.getWrapper(w));
        selected.clear();
    }
}

protected void connect(Connector a, Connector b) {
    //System.out.println(a.getLeft());
    //System.out.println(b.getLeft());
    add(new StraightTwoEndedConnection(a,b));
}


private void add(StraightTwoEndedConnection c) {
    canvas.add(c);
    connections.add(c);
    c.update();
}

protected void remove(Connection c) {
    connections.remove(c);
}

class MyHandler implements ClickHandler{

    @Override
    public void onClick(ClickEvent event) {
        Button name = (Button) event.getSource();
        if(name.equals(stopDrag)){
            if(name.getText().equals("Done Dragging")){
                for(Iterator<Widget> i = onCanvas.listIterator();i.hasNext();){
                    Widget w = (Widget) i.next();
                    dragController.makeNotDraggable(w);
                    }
                name.setText("Continue");
                }
            else {
                for(Iterator<Widget> i = onCanvas.listIterator();i.hasNext();){
                    Widget w = (Widget) i.next();
                    dragController.makeDraggable(w);
                    }
                name.setText("Done Dragging");
                }
            }
        else{

            }
    }
}

}

1 Ответ

0 голосов
/ 26 декабря 2011

Я знаю, что это довольно старая версия, но у меня были похожие проблемы с библиотекой gwt-connector.

Разъемы не будут отображаться в правильном положении, если вы используете стандартный режим . Вместо этого используйте режим причуд .

Кроме того, вам нужно вручную выполнить функцию connector.update (), пока компоненты dnd перетаскиваются (в прослушивателе перетаскивания), чтобы соединение перемещалось с конечной точкой во время перетаскивания.

...