Package org.objectstyle.wolips.componenteditor.part

Source Code of org.objectstyle.wolips.componenteditor.part.ComponentDropTargetAdaptor

package org.objectstyle.wolips.componenteditor.part;

import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.IRewriteTarget;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.graphics.Point;
import org.objectstyle.wolips.bindings.api.Wo;
import org.objectstyle.wolips.componenteditor.actions.ComponentInserter;
import org.objectstyle.wolips.templateeditor.TemplateEditor;

public class ComponentDropTargetAdaptor extends DropTargetAdapter {
  private ComponentEditor _componentEditor;

  private IRegion _selection;

  public ComponentDropTargetAdaptor(ComponentEditor componentEditor) {
    _componentEditor = componentEditor;
  }

  public StyledText getStyledText() {
    return _componentEditor.getTemplateEditor().getSourceEditor().getViewer().getTextWidget();
  }

  public TemplateEditor getTemplateEditor() {
    return _componentEditor.getTemplateEditor();
  }

  @Override
  public void dragEnter(DropTargetEvent event) {
    try {
      getTemplateEditor().getSourceEditor().getParserCache().getHtmlEntry().clear();
    } catch (Exception e) {
      e.printStackTrace();
    }
    Point selectionRange = getStyledText().getSelectionRange();
    if (selectionRange == null) {
      _selection = null;
    } else {
      _selection = new Region(selectionRange.x, selectionRange.y);
    }

    if (event.detail == DND.DROP_DEFAULT) {
      event.detail = DND.DROP_MOVE;
    }
  }

  @Override
  public void dragOperationChanged(DropTargetEvent event) {
    if (event.detail == DND.DROP_DEFAULT) {
      event.detail = DND.DROP_MOVE;
    }
  }

  @Override
  public void dragOver(DropTargetEvent event) {
    try {
      event.feedback |= DND.FEEDBACK_SCROLL;

      Point controlPoint = getTemplateEditor().getSourceEditor().getViewer().getTextWidget().toControl(event.x, event.y);
      _selection = getTemplateEditor().getSourceEditor().getSelectionRegionAtPoint(controlPoint, true, true);
      if (_selection != null) {
        getTemplateEditor().getSourceEditor().getViewer().setSelectedRange(_selection.getOffset(), _selection.getLength());
      }
    } catch (Exception e) {
      // e.printStackTrace();
    }
  }

  @Override
  public void drop(DropTargetEvent event) {
    ComponentInserter inserter = null;
    boolean selectRange = false;

    IStructuredSelection structuredSelection = (IStructuredSelection) event.data;
    if (structuredSelection != null && !structuredSelection.isEmpty()) {
      IResource resource = (IResource) structuredSelection.getFirstElement();
      if (resource instanceof IFolder) {
        IFolder folder = (IFolder) resource;
        String name = folder.getName();
        if (name.endsWith(".wo")) {
          String componentName = name.substring(0, name.lastIndexOf('.'));
          boolean inline = true;
          inserter = new ComponentInserter(_componentEditor, componentName, inline);
          Wo wo = inserter.getWo();
          if (wo != null) {
            selectRange = wo.isComponentContent();
          }
        }
      }
    }

    if (inserter == null) {
      event.detail = DND.DROP_NONE;
      return;
    }

    IRewriteTarget target = (IRewriteTarget) _componentEditor.getAdapter(IRewriteTarget.class);
    if (target != null) {
      target.beginCompoundChange();
    }

    if (!getTemplateEditor().getSourceEditor().validateEditorInputState()) {
      event.detail = DND.DROP_NONE;
      return;
    }

    if (selectRange) {
      getTemplateEditor().getSelectionProvider().setSelection(new TextSelection(_selection.getOffset(), _selection.getLength()));
    } else {
      getTemplateEditor().getSelectionProvider().setSelection(new TextSelection(_selection.getOffset(), 0));
    }

    inserter.insert();
  }
}
TOP

Related Classes of org.objectstyle.wolips.componenteditor.part.ComponentDropTargetAdaptor

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.