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

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

/*
* 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.ApplicationScoped;
import javax.inject.Inject;

import com.allen_sauer.gwt.dnd.client.DragContext;
import com.allen_sauer.gwt.dnd.client.PickupDragController;
import com.allen_sauer.gwt.dnd.client.util.DOMUtil;
import com.allen_sauer.gwt.dnd.client.util.DragClientBundle;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import org.uberfire.client.resources.WorkbenchResources;
import org.uberfire.client.workbench.part.WorkbenchPartPresenter;
import org.uberfire.mvp.PlaceRequest;
import org.uberfire.workbench.model.PanelDefinition;
import org.uberfire.workbench.model.PartDefinition;

/**
* A Drag Controller for the Workbench.
*/
@ApplicationScoped
public class WorkbenchPickupDragController extends PickupDragController {

    private final Image dragProxy = new Image( WorkbenchResources.INSTANCE.images().workbenchPanelDragProxy() );

    @Inject
    private WorkbenchDragAndDropManager dndManager;

    public WorkbenchPickupDragController() {
        super( new AbsolutePanel(),
               false );
        setBehaviorDragProxy( true );
        setBehaviorDragStartSensitivity( 1 );
    }

    @Override
    public void dragStart() {
        final WorkbenchPartPresenter.View sourceView = (WorkbenchPartPresenter.View) super.context.selectedWidgets.get( 0 );
        final PartDefinition sourcePart = sourceView.getPresenter().getDefinition();
        final PanelDefinition sourcePanel = sourceView.getPresenter().getDefinition().getParentPanel();
        final PlaceRequest place = sourcePart.getPlace();
        final String title = sourceView.getPresenter().getTitle();
        final IsWidget titleDecoration = sourceView.getPresenter().getTitleDecoration();
        final String contextId = sourceView.getPresenter().getContextId();
        final IsWidget widget = sourceView.getPresenter().getPartView().getWrappedWidget();
        final Integer height = sourcePanel.getHeight();
        final Integer width = sourcePanel.getWidth();
        final Integer minHeight = sourcePanel.getMinHeight();
        final Integer minWidth = sourcePanel.getMinWidth();
        final WorkbenchDragContext context = new WorkbenchDragContext( place,
                                                                       sourcePart,
                                                                       sourcePanel,
                                                                       sourceView.getPresenter().getMenus(),
                                                                       title,
                                                                       titleDecoration,
                                                                       widget,
                                                                       contextId,
                                                                       height,
                                                                       width,
                                                                       minHeight,
                                                                       minWidth );
        dndManager.setWorkbenchContext( context );
        super.dragStart();
        final Widget movablePanel = getMoveablePanel();
        if ( movablePanel != null ) {
            DOMUtil.fastSetElementPosition( movablePanel.getElement(),
                                            super.context.mouseX,
                                            super.context.mouseY );
        }
    }

    @Override
    public void dragMove() {
        super.dragMove();
        final Widget movablePanel = getMoveablePanel();
        if ( movablePanel != null ) {
            DOMUtil.fastSetElementPosition( movablePanel.getElement(),
                                            super.context.mouseX,
                                            super.context.mouseY );
        }
    }

    @Override
    protected Widget newDragProxy( DragContext context ) {
        AbsolutePanel container = new AbsolutePanel();
        container.getElement().getStyle().setProperty( "overflow",
                                                       "visible" );
        container.getElement().getStyle().setOpacity( 0.75 );
        container.getElement().getStyle().setZIndex( Integer.MAX_VALUE );

        //Offset to centre of dragProxy
        int offsetX = 0 - ( (int) ( dragProxy.getWidth() * 0.5 ) );
        int offsetY = 0 - ( (int) ( dragProxy.getHeight() * 1.5 ) );
        container.add( dragProxy,
                       offsetX,
                       offsetY );
        return container;
    }

    private Widget getMoveablePanel() {
        for ( int index = 0; index < context.boundaryPanel.getWidgetCount(); index++ ) {
            final Widget w = context.boundaryPanel.getWidget( index );
            if ( w.getStyleName().equals( DragClientBundle.INSTANCE.css().movablePanel() ) ) {
                return w;
            }
        }
        return null;
    }

}
TOP

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

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.