/**
* Copyright (c) 2005-2006 Aptana, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html. If redistributing this code,
* this entire header must remain intact.
*/
package org.eclipse.eclipsemonkey.lang.javascript.doms.editors;
import java.util.ArrayList;
import java.util.Hashtable;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
/**
* @author Kevin Lindsey, Paul Colton (Aptana, Inc.)
*/
public class Editors extends ScriptableObject
{
/*
* Fields
*/
private static final long serialVersionUID = -1034231442157154583L;
private Hashtable _editorsByType;
/*
* Properties
*/
/**
* @see org.mozilla.javascript.ScriptableObject#getClassName()
*/
public String getClassName()
{
return Messages.getString("Editors.0"); //$NON-NLS-1$
}
/*
* Constructors
*/
/**
* Editors (default contructor-should not be used directly)
*/
public Editors()
{
System.err.println(Messages.getString("Editors.1")); //$NON-NLS-1$
}
/**
* Create a new instance of Views
*
* @param scope
*/
public Editors(Scriptable scope)
{
this.setParentScope(scope);
String[] names = new String[] {
//"open",
Messages.getString("Editors.2") //$NON-NLS-1$
};
this.defineFunctionProperties(names, Editors.class, PERMANENT | READONLY);
this.defineProperty("all", Editors.class, PERMANENT | READONLY); //$NON-NLS-1$
this.defineProperty(Messages.getString("Editors.4"), Editors.class, PERMANENT | READONLY); //$NON-NLS-1$
return;
}
/*
* Methods
*/
/**
* getAll
*
* @param thisObj
* @return Scriptable
*/
public static Scriptable getAll(ScriptableObject thisObj)
{
final IWorkbench workbench = PlatformUI.getWorkbench();
final ArrayList editors = new ArrayList();
Display display = workbench.getDisplay();
final Scriptable scope = thisObj.getParentScope();
display.syncExec(new Runnable()
{
public void run()
{
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
IWorkbenchPage[] pages = window.getPages();
for (int i = 0; i < pages.length; i++)
{
IWorkbenchPage page = pages[i];
IEditorReference[] editorRefs = page.getEditorReferences();
for (int j = 0; j < editorRefs.length; j++)
{
IEditorPart editor = editorRefs[j].getEditor(false);
editors.add(new Editor(scope, editor));
}
}
}
});
Context cx = Context.getCurrentContext();
Object[] args = editors.toArray();
return cx.newArray(scope, args);
}
/**
* getActiveEditor
*
* @param thisObj
* @return Scriptable
*/
public static Object getActiveEditor(ScriptableObject thisObj)
{
IEditorPart editor = getActiveEditor();
Object result;
if (editor != null)
{
result = new Editor(thisObj.getParentScope(), editor);
}
else
{
result = Context.getUndefinedValue();
}
return result;
}
/**
* getActiveEditor
*
* @return IEditorPart
*/
private static IEditorPart getActiveEditor()
{
/**
* ActiveEditorRef
*/
class ActiveEditorRef
{
public IEditorPart activeEditor;
}
final IWorkbench workbench = PlatformUI.getWorkbench();
final ActiveEditorRef activeEditor = new ActiveEditorRef();
Display display = workbench.getDisplay();
IEditorPart result;
display.syncExec(new Runnable()
{
public void run()
{
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
// this can be null if you close all perspectives
if (window != null && window.getActivePage() != null)
{
activeEditor.activeEditor = window.getActivePage().getActiveEditor();
}
}
});
result = activeEditor.activeEditor;
return result;
}
/**
* getAllEventTargets
*
* @return EditorType[]
*/
public EditorType[] getAllEventTargets()
{
if (this._editorsByType != null)
{
return (EditorType[]) this._editorsByType.values().toArray(new EditorType[0]);
}
else
{
return new EditorType[0];
}
}
/**
* getEventTarget
*
* @param type
* @return EditorType
*/
public EditorType getEventTarget(String type)
{
if (this._editorsByType != null && this._editorsByType.containsKey(type))
{
return (EditorType) this._editorsByType.get(type);
}
else
{
return null;
}
}
// /**
// * open the specified file in a new editor
// *
// * @param cx
// * @param thisObj
// * @param args
// * @param funObj
// * @return Scriptable
// */
// public static Scriptable open(Context cx, Scriptable thisObj, Object[] args, Function funObj)
// {
// String filename = Context.toString(args[0]);
// File file = new File(filename);
// IEditorPart editor = WorkbenchHelper.openFile(file, PlatformUI.getWorkbench().getActiveWorkbenchWindow());
//
// if(editor == null)
// {
// return null;
// }
//
// return new Editor(thisObj.getParentScope(), editor);
// }
/**
* @see java.lang.Object#toString()
*/
public String toString()
{
return super.toString();
}
}