Package org.objectstyle.wolips.componenteditor.inspector

Source Code of org.objectstyle.wolips.componenteditor.inspector.BindingsTextDropHandler

package org.objectstyle.wolips.componenteditor.inspector;

import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.events.MenuListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Shell;
import org.objectstyle.wolips.bindings.wod.IWodElement;
import org.objectstyle.wolips.componenteditor.ComponenteditorPlugin;
import org.objectstyle.wolips.templateeditor.TemplateEditor;
import org.objectstyle.wolips.wodclipse.core.document.ITextWOEditor;

public class BindingsTextDropHandler extends AbstractBindingsDropHandler<IWodElement, IRegion, Annotation, StyledText> implements MenuListener {
  private ITextWOEditor _woEditor;

  private BindingsPopUpMenu _bindingsMenu;

  public BindingsTextDropHandler(ITextWOEditor woEditor) {
    super(woEditor.getWOEditorControl());

    _woEditor = woEditor;
   
    Shell shell = new Shell(woEditor.getWOEditorControl().getShell());
    try {
      _bindingsMenu = new BindingsPopUpMenu(shell, woEditor.getParserCache());
      _bindingsMenu.getMenu().addMenuListener(this);
    } catch (Exception e) {
      ComponenteditorPlugin.getDefault().log(e);
    }
  }

  public void menuHidden(MenuEvent event) {
    removeHoverAnnotation();
  }

  public void menuShown(MenuEvent event) {
    // DO NOTHING
  }

  public void dispose() {
    if (_bindingsMenu != null) {
      _bindingsMenu.dispose();
    }
    super.dispose();
  }

  @Override
  protected Annotation _addHoverAnnotation(IRegion selectedItem) {
    Annotation annotation = new Annotation(TemplateEditor.BINDING_HOVER_ANNOTATION, false, null);
    _woEditor.getWOSourceViewer().getAnnotationModel().addAnnotation(annotation, new Position(selectedItem.getOffset(), selectedItem.getLength()));
    return annotation;
  }

  @Override
  protected void _removeHoverAnnotation(Annotation annotation) {
    if (annotation != null) {
      _woEditor.getWOSourceViewer().getAnnotationModel().removeAnnotation(annotation);
    }
  }

  @Override
  protected IAutoscroller createAutoscroller(StyledText editorControl) {
    return new TextAutoscroller(editorControl);
  }

  @Override
  protected IWodElement getSelectedContainerAtPoint(Point point, boolean forDrop) throws Exception {
    IWodElement wodElement = _woEditor.getWodElementAtPoint(point, forDrop, true);
    return wodElement;
  }

  @Override
  protected IRegion getSelectedItemAtPoint(IWodElement container, Point point) {
    IRegion selectionRegion = new Region(container.getStartOffset(), container.getFullEndOffset() - container.getStartOffset());
    return selectionRegion;
  }

  @Override
  protected Rectangle getSelectionRectangle(IRegion item) {
    Rectangle selectionRect = getEditorControl().getTextBounds(item.getOffset(), item.getOffset() + item.getLength() - 1);
    return selectionRect;
  }

  @Override
  protected boolean isSelectedItemChanged(IRegion oldItem, IRegion newItem) {
    return oldItem == null || oldItem.getOffset() != newItem.getOffset();
  }

  @Override
  protected boolean dropFromColumnAtPoint(WOBrowserColumn column, Point dropPoint, BindingsDragHandler dragHandler) throws Exception {
    boolean dropFinished = true;
    Point controlDropPoint = getEditorControl().toControl(dropPoint);
    IWodElement wodElement = _woEditor.getWodElementAtPoint(controlDropPoint, true, true);
    if (wodElement == null) {
      removeHoverAnnotation();
    } else {
      String droppedKeyPath = column.getSelectedKeyPath();
      if (_bindingsMenu != null) {
        boolean menuShown = _bindingsMenu.showMenuAtLocation(wodElement, droppedKeyPath, dropPoint, dragHandler);
        if (!menuShown) {
          removeHoverAnnotation();
        }
        else {
          dropFinished = false;
        }
      }
    }
    return dropFinished;
  }
}
TOP

Related Classes of org.objectstyle.wolips.componenteditor.inspector.BindingsTextDropHandler

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.