Package org.dyno.visual.swing.parser.listener

Source Code of org.dyno.visual.swing.parser.listener.SyncEditorListener

package org.dyno.visual.swing.parser.listener;

import java.awt.Component;

import javax.swing.SwingUtilities;

import org.dyno.visual.swing.base.JavaUtil;
import org.dyno.visual.swing.plugin.spi.IConstants;
import org.dyno.visual.swing.plugin.spi.ISelectionListener;
import org.dyno.visual.swing.plugin.spi.WidgetAdapter;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorPart;

public class SyncEditorListener implements ISelectionListener, IConstants {

  private void sync_widget(IStructuredSelection selection) {
    if (selection.size() == 1) {
      WidgetAdapter adapter = (WidgetAdapter) selection.getFirstElement();
      IEditorPart editor = adapter.getSourceEditor();
      if (editor != null && (adapter.isRoot() || adapter.getID() != null))
        revealInEditor(editor, adapter);
    } else if (!selection.isEmpty()) {
      WidgetAdapter parent = (WidgetAdapter) selection.getFirstElement();
      for (Object object : selection.toArray()) {
        WidgetAdapter adapter = (WidgetAdapter) object;
        parent = getCommonParent(parent, adapter);
      }
      if (parent != null && (parent.isRoot() || parent.getID() != null)) {
        IEditorPart editor = parent.getSourceEditor();
        if (editor != null)
          revealInEditor(editor, parent);
      }
    }
  }

  public void widgetSelected(final IStructuredSelection selection) {
    JavaUtil.getEclipseDisplay().asyncExec(new Runnable() {

      public void run() {
        sync_widget(selection);
      }
    });
  }

  private WidgetAdapter getCommonParent(WidgetAdapter a1, WidgetAdapter a2) {
    if (a1 == null)
      return a2;
    if (a2 == null)
      return a1;
    Component comp1 = a1.getWidget();
    Component comp2 = a2.getWidget();
    if (comp1 == comp2)
      return a1;
    if (SwingUtilities.isDescendingFrom(comp1, comp2)) {
      return a2;
    } else if (SwingUtilities.isDescendingFrom(comp2, comp1)) {
      return a1;
    } else if (a1.isRoot()) {
      return a1;
    } else if (a2.isRoot()) {
      return a2;
    } else {
      return getCommonParent(a1.getParentAdapter(), a2.getParentAdapter());
    }
  }

  private String getGetMethodName(WidgetAdapter adapter, String name) {
    String methodName = (String) adapter.getProperty("getMethodName");
    if (methodName != null)
      return methodName;
    return "get" + Character.toUpperCase(name.charAt(0)) + name.substring(1);
  }

  private void revealInEditor(final IEditorPart editor, WidgetAdapter adapter) {
    ICompilationUnit unit = adapter.getCompilationUnit();
    String methodName = adapter.isRoot() ? INIT_METHOD_NAME : getGetMethodName(adapter, adapter.getID());
    String unitname = unit.getElementName();
    int dot = unitname.indexOf('.');
    if (dot != -1)
      unitname = unitname.substring(0, dot);
    IType type = unit.getType(unitname);
    IMethod method = type.getMethod(methodName, new String[0]);
    JavaUI.revealInEditor(editor, (IJavaElement) method);
  }
}
TOP

Related Classes of org.dyno.visual.swing.parser.listener.SyncEditorListener

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.