Package jsx.editors

Source Code of jsx.editors.JSXOutlinePage

package jsx.editors;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

import jsx.JSXEditorPlugin;
import jsx.editors.ast.IJSXNode;
import jsx.editors.ast.JSXClassNode;
import jsx.preferences.PreferenceConstants;

import net.arnx.jsonic.JSON;

import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import org.eclipse.swt.graphics.Image;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;

public class JSXOutlinePage extends ContentOutlinePage {
 
  private RootModel root = new RootModel();
  private JSXEditor editor = null;
 
  public JSXOutlinePage( JSXEditor editor ) {
    this.editor = editor;
  }
 
  public void createControl( Composite parent ) {
    super.createControl(parent);
   
    TreeViewer viewer = getTreeViewer();
    viewer.setContentProvider( new JSXContentProvider());
    viewer.setLabelProvider( new JSXLabelProvider());
   
    viewer.addSelectionChangedListener( new ISelectionChangedListener(){
      public void selectionChanged(SelectionChangedEvent event) {

        IStructuredSelection sel = (IStructuredSelection)event.getSelection();
        IJSXNode element = (IJSXNode) sel.getFirstElement();
        if( element != null )
        {
          IDocumentProvider provider = editor.getDocumentProvider();
          IDocument document = provider.getDocument(editor.getEditorInput());
          editor.selectAndReveal(element.getOffset(document.get()), element.getWordLength());
        }
      }
    });
   
    viewer.setInput( root );
    refresh();
  }
 
  public void refresh() {
    IFileEditorInput input = (IFileEditorInput) editor.getEditorInput();
    IFile file = input.getFile();
    IPath loc = file.getLocation();
    ArrayList elements = null;
    Runtime rt = Runtime.getRuntime();
    IPreferenceStore store = JSXEditorPlugin.getDefault().getPreferenceStore();
    try {
      String cmd = store.getString(PreferenceConstants.NODE_PATH) + " " + store.getString(PreferenceConstants.JSX_PATH) + " --mode parse " + loc.toString();
      Process p = rt.exec(cmd);
       InputStream in = p.getInputStream();
      elements = JSON.decode(in);
     
      System.out.println(cmd);
      System.out.println(elements);
    } catch( Exception ex ) {
      ex.printStackTrace();
    }
    ArrayList documentElement = new ArrayList();
    if( elements != null ) {
      for( int i = 0; i < elements.size() ; i++ ){
        JSXClassNode node = new JSXClassNode((LinkedHashMap)elements.get(i));
        documentElement.add( node );
      }
    }
    root.documentElement = documentElement;
    getTreeViewer().refresh();
  }
 
  private class RootModel {
    private ArrayList documentElement;
  }
 
  private class JSXContentProvider implements ITreeContentProvider {
   
    public Object[] getChildren( Object parentElement ) {
      if( parentElement instanceof ArrayList ) {
        return ((ArrayList) parentElement).toArray();
      }
      if( parentElement instanceof JSXClassNode ) {
        return ((JSXClassNode) parentElement).members.toArray();
      }
      return new Object[0];
    }
   
    public Object getParent( Object element ) {
      return null;
    }
   
    public boolean hasChildren( Object element ) {
      return ( getChildren( element ).length > 0 );
    }
   
    public Object[] getElements( Object inputElement ) {
      return getChildren( root.documentElement );
    }
   
    public void dispose() {
    }
   
    public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) {
    }
  }
 
  private class JSXLabelProvider extends LabelProvider {
   
    private Image elementImage = JSXEditorPlugin.getImageDescriptor("icons/element.gif").createImage();
   
    public Image getImage( Object element ) {
      return null;
    }
   
    public String getText( Object element )   {
      return super.getText( element );
    }
   
    public void dispose() {
      elementImage.dispose();
      super.dispose();
    }
  }

}
TOP

Related Classes of jsx.editors.JSXOutlinePage

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.