Package org.uberfire.client.workbench.widgets.dnd

Source Code of org.uberfire.client.workbench.widgets.dnd.CompassDropController

/*
* Copyright 2012 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.uberfire.client.workbench.widgets.dnd;

import javax.enterprise.context.Dependent;
import javax.enterprise.event.Event;
import javax.inject.Inject;

import com.allen_sauer.gwt.dnd.client.DragContext;
import com.allen_sauer.gwt.dnd.client.VetoDragException;
import com.allen_sauer.gwt.dnd.client.drop.DropController;
import com.google.gwt.user.client.ui.Widget;
import org.uberfire.client.mvp.UIPart;
import org.uberfire.client.workbench.PanelManager;
import org.uberfire.client.workbench.events.DropPlaceEvent;
import org.uberfire.client.workbench.panels.WorkbenchPanelView;
import org.uberfire.mvp.PlaceRequest;
import org.uberfire.workbench.model.PanelDefinition;
import org.uberfire.workbench.model.PartDefinition;
import org.uberfire.workbench.model.Position;
import org.uberfire.workbench.model.menu.Menus;

/**
* A Drop Controller covering the entire DecoratedWorkbenchPanel that renders a Compass
* with which to select the target position of the drag operation.
*/
@Dependent
public class CompassDropController
        implements
        DropController {

    private final CompassWidget compass = getCompassWidgetInstance();

    CompassWidget getCompassWidgetInstance() {
        return CompassWidget.getInstance();
    }

    WorkbenchPanelView dropTarget;

    @Inject
    PanelManager panelManager;

    @Inject
    WorkbenchDragAndDropManager dndManager;

    @Inject
    private Event<DropPlaceEvent> workbenchPartDroppedEvent;

    public void setup( final WorkbenchPanelView view ) {
        dropTarget = view;
    }

    @Override
    //When entering a DecoratedWorkbenchPanel show the Compass
    public void onEnter( DragContext context ) {
        compass.onEnter( context );
    }

    @Override
    //Hide the DecoratedWorkbenchPanel's Compass
    public void onLeave( DragContext context ) {
        compass.onLeave( context );
    }

    @Override
    public void onMove( DragContext context ) {
        compass.onMove( context );
    }

    @Override
    public void onDrop( DragContext context ) {

        //If not dropTarget has been identified do nothing
        Position p = compass.getDropPosition();
        if ( p == Position.NONE ) {
            return;
        }

        compass.onDrop( context );

        //Move Part from source to target
        final WorkbenchDragContext workbenchContext = dndManager.getWorkbenchContext();
        final Menus menus = workbenchContext.getMenus();



        final PanelDefinition sourcePanel = workbenchContext.getSourcePanel();
        final PanelDefinition dropPanel = dropTarget.getPresenter().getDefinition();

        //If the Target Panel is the same as the Source we're trying to reposition the
        //Source's tab within itself. If the Source Panel has only one Tab there is no
        //net effect. If we're trying to drop as a new tab there is no net effect.
        if ( sourcePanel.equals( dropPanel ) ) {
            if ( sourcePanel.getParts().size() == 1 ) {
                return;
            }
            if ( p == Position.SELF ) {
                return;
            }
        }

        final PlaceRequest place = workbenchContext.getPlace();

        firePartDroppedEvent( place );


        final Integer height = null;
        final Integer width = null;
        final Integer minHeight = workbenchContext.getMinHeight();
        final Integer minWidth = workbenchContext.getMinWidth();

        final PanelDefinition targetPanel = panelManager.addWorkbenchPanel( dropPanel,
                                                                            p,
                                                                            height,
                                                                            width,
                                                                            minHeight,
                                                                            minWidth );
        final UIPart uiPart = workbenchContext.getUiPart();
        final PartDefinition sourcePart = workbenchContext.getSourcePart();

        panelManager.addWorkbenchPart( place,
                                       sourcePart,
                                       targetPanel,
                                       menus,
                                       uiPart,
                                       workbenchContext.getContextId() );
    }

    void firePartDroppedEvent( PlaceRequest place ) {
        workbenchPartDroppedEvent.fire( new DropPlaceEvent( place ) );
    }

    @Override
    public Widget getDropTarget() {
        return this.dropTarget.asWidget();
    }

    @Override
    public void onPreviewDrop( DragContext context ) throws VetoDragException {
    }

}
TOP

Related Classes of org.uberfire.client.workbench.widgets.dnd.CompassDropController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.