--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>net.sourceforge.phpeclipse.js.ui</name>
+ <comment></comment>
+ <projects>
+ <project>net.sf.wdte.js.core</project>
+ <project>net.sf.wdte.ui</project>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+bin.includes = plugin.xml,\
+ *.jar,\
+ icons/,\
+ plugin.properties,\
+ net.sf.wdte.js.ui.jar
+src.includes = src/,\
+ plugin.xml,\
+ .template,\
+ .project,\
+ .classpath,\
+ icons/,\
+ plugin.properties,\
+ build.properties
+jars.compile.order = net.sf.wdte.js.ui.jar
+source.net.sf.wdte.js.ui.jar = src/
+output.net.sf.wdte.js.ui.jar = bin/
--- /dev/null
+#
+# Copyright (c) 2004 Christopher Lenz and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Common Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/cpl-v10.html
+#
+# Contributors:
+# Christopher Lenz - initial english resources
+#
+# $Id: plugin.properties,v 1.1 2004-09-02 18:23:56 jsurfer Exp $
+#
+
+pluginName = Web Development Tools JavaScript UI
+providerName= WDTE Project
+
+editorName = JavaScript Editor
+editorPreferencePageName = JavaScript
+
+classesViewName = JavaScript Classes
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin
+ id="net.sourceforge.phpeclipse.js.ui"
+ name="%pluginName"
+ version="0.0.9"
+ provider-name="%providerName"
+ class="net.sourceforge.phpeclipse.js.ui.JSUIPlugin">
+
+ <runtime>
+ <library name="net.sourceforge.phpeclipse.js.ui.jar">
+ <export name="*"/>
+ </library>
+ </runtime>
+ <requires>
+ <import plugin="org.eclipse.core.resources"/>
+ <import plugin="org.eclipse.core.runtime"/>
+ <import plugin="org.eclipse.jface.text"/>
+ <import plugin="org.eclipse.ui"/>
+ <import plugin="org.eclipse.ui.ide"/>
+ <import plugin="org.eclipse.ui.editors"/>
+ <import plugin="org.eclipse.ui.views"/>
+ <import plugin="org.eclipse.ui.workbench.texteditor"/>
+ <import plugin="net.sourceforge.phpeclipse.ui"/>
+ <import plugin="net.sourceforge.phpeclipse.js.core" version="0.0.9" match="greaterOrEqual" export="true"/>
+ </requires>
+
+
+ <extension
+ point="org.eclipse.ui.views">
+ <view
+ name="%classesViewName"
+ icon="icons/js.gif"
+ category="net.sourceforge.phpeclipse.ui.views"
+ class="net.sourceforge.phpeclipse.js.ui.views.JSClassesView"
+ id="net.sourceforge.phpeclipse.js.ui.views.JSClassesView">
+ </view>
+ </extension>
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ name="%editorPreferencePageName"
+ category="net.sourceforge.phpeclipse.ui.preferencePage"
+ class="net.sourceforge.phpeclipse.js.ui.preferences.JavaScriptPreferencePage"
+ id="net.sourceforge.phpeclipse.js.ui.preferences.JavaScriptPreferencePage">
+ </page>
+ </extension>
+ <extension
+ point="org.eclipse.ui.editors">
+ <editor
+ name="%editorName"
+ icon="icons/js.gif"
+ extensions="js"
+ contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor"
+ class="net.sourceforge.phpeclipse.js.ui.editors.JSEditor"
+ id="net.sourceforge.phpeclipse.js.ui.editors.JSEditor">
+ </editor>
+ </extension>
+ <extension
+ point="org.eclipse.ui.perspectiveExtensions">
+ <perspectiveExtension
+ targetID="org.eclipse.ui.resourcePerspective">
+ <view
+ ratio="0.5"
+ relative="org.eclipse.ui.views.TaskList"
+ relationship="right"
+ id="net.sourceforge.phpeclipse.js.ui.views.JSClassesView">
+ </view>
+ </perspectiveExtension>
+ </extension>
+
+</plugin>
--- /dev/null
+/*
+ * Copyright (c) 2002-2004 Adrian Dinu and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Adrian Dinu - initial implementation
+ *
+ * $Id: JSUIPlugin.java,v 1.1 2004-09-02 18:23:57 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.js.ui;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import net.sourceforge.phpeclipse.js.ui.editors.JSImages;
+import net.sourceforge.phpeclipse.js.ui.model.JSModelAdapterFactory;
+import net.sourceforge.phpeclipse.js.ui.preferences.PreferenceNames;
+
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class JSUIPlugin extends AbstractUIPlugin {
+
+ /** The shared instance. */
+ private static JSUIPlugin plugin;
+
+ /** Resource bundle. */
+ private ResourceBundle resourceBundle;
+
+ /** The current func list. */
+ private List currentFunctions = new LinkedList();
+
+ /**
+ * The constructor.
+ *
+ * @param descriptor the plugin descriptors
+ */
+ public JSUIPlugin() {
+ plugin = this;
+
+ try {
+ resourceBundle = ResourceBundle.getBundle(
+ "net.sourceforge.phpeclipse.js.ui.jseditorPluginResources"); //$NON-NLS-1$
+ } catch (MissingResourceException e) {
+ resourceBundle = null;
+ }
+ }
+
+ /**
+ * Returns the shared instance.
+ * @return
+ */
+ public static JSUIPlugin getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Returns the workspace instance.
+ * @return
+ */
+ public static IWorkspace getWorkspace() {
+ return ResourcesPlugin.getWorkspace();
+ }
+
+ /**
+ * Returns the string from the plugin's resource bundle, or 'key' if not
+ * found.
+ *
+ * @param key
+ *
+ * @return
+ */
+ public static String getResourceString(String key) {
+ ResourceBundle bundle = JSUIPlugin.getDefault().getResourceBundle();
+ try {
+ return bundle.getString(key);
+ } catch(MissingResourceException e) {
+ return key;
+ }
+ }
+
+ /**
+ * Returns the plugin's resource bundle,
+ * @return
+ */
+ public ResourceBundle getResourceBundle() {
+ return resourceBundle;
+ }
+
+ /**
+ * Returns the list of current functions.
+ *
+ * @return the current functions
+ */
+ public List getCurrentFunctions() {
+ return currentFunctions;
+ }
+
+ /**
+ * Sets the current list of functions.
+ *
+ * @param currentFunctions The functions to set
+ */
+ public void setCurrentFunctions(List currentFunctions) {
+ this.currentFunctions = currentFunctions;
+ }
+
+ /*
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ JSModelAdapterFactory.register(Platform.getAdapterManager());
+ }
+
+ /*
+ * @see AbstractUIPlugin#initializeDefaultPreferences(IPreferenceStore)
+ */
+ protected void initializeDefaultPreferences(IPreferenceStore store) {
+ store.setDefault(PreferenceNames.P_AUTO_OUTLINE, true);
+ // TODO Use PreferenceConverter for color/string conversion
+ store.setDefault(PreferenceNames.P_COMMENT_COLOR, "63,127,95");
+ store.setDefault(PreferenceNames.P_STRING_COLOR, "42,0,255");
+ store.setDefault(PreferenceNames.P_KEYWORD_COLOR, "127,0,85");
+ store.setDefault(PreferenceNames.P_DEFAULT_COLOR, "0,0,0");
+ }
+
+ /*
+ * @see AbstractUIPlugin#initializeImageRegistry(ImageRegistry)
+ */
+ protected void initializeImageRegistry(ImageRegistry reg) {
+ JSImages.initializeRegistry(reg);
+ }
+}
--- /dev/null
+/*
+ * $RCSfile: JSColorManager.java,v $
+ *
+ * Copyright 2002
+ * CH-1700 Fribourg, Switzerland
+ * All rights reserved.
+ *
+ *========================================================================
+ * Modifications history
+ *========================================================================
+ * $Log: not supported by cvs2svn $
+ * Revision 1.1 2004/02/05 03:13:28 agfitzp
+ * Initial submission, outline view is broken due to refactoring
+ *
+ * Revision 1.1 2003/05/28 15:17:12 agfitzp
+ * net.sourceforge.phpeclipse.js.ui 0.0.1 code base
+ *
+ *========================================================================
+*/
+
+package net.sourceforge.phpeclipse.js.ui.editors;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.widgets.Display;
+
+
+/**
+ *
+ *
+ * @author $Author: jsurfer $, $Date: 2004-09-02 18:23:49 $
+ *
+ * @version $Revision: 1.1 $
+ */
+public class JSColorManager
+{
+ protected Map fColorTable = new HashMap(10);
+
+ /**
+ *
+ */
+ public void dispose()
+ {
+ Iterator e = fColorTable.values().iterator();
+
+ while(e.hasNext())
+ {
+ ((Color)e.next()).dispose();
+ }
+ }
+
+ /**
+ *
+ *
+ * @param rgb
+ *
+ * @return
+ */
+ public Color getColor(RGB rgb)
+ {
+ Color color = (Color)fColorTable.get(rgb);
+
+ if(color == null)
+ {
+ color = new Color(Display.getCurrent(), rgb);
+ fColorTable.put(rgb, color);
+ }
+
+ return color;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * $RCSfile: JSConfiguration.java,v $
+ *
+ * Copyright 2002
+ * CH-1700 Fribourg, Switzerland
+ * All rights reserved.
+ *
+ *========================================================================
+ * Modifications history
+ *========================================================================
+ * $Log: not supported by cvs2svn $
+ * Revision 1.2 2004/02/26 02:25:57 agfitzp
+ * renamed packages to match xml & css
+ *
+ * Revision 1.1 2004/02/05 03:13:28 agfitzp
+ * Initial submission, outline view is broken due to refactoring
+ *
+ * Revision 1.3.2.1 2003/12/12 21:37:24 agfitzp
+ * Experimental work for Classes view
+ *
+ * Revision 1.3 2003/12/10 20:19:16 agfitzp
+ * 3.0 port
+ *
+ * Revision 1.2 2003/06/21 03:48:51 agfitzp
+ * fixed global variables as functions bug
+ * fixed length calculation of instance variables
+ * Automatic outlining is now a preference
+ *
+ * Revision 1.1 2003/05/28 15:17:12 agfitzp
+ * net.sourceforge.phpeclipse.js.ui 0.0.1 code base
+ *
+ *========================================================================
+*/
+
+package net.sourceforge.phpeclipse.js.ui.editors;
+
+import net.sourceforge.phpeclipse.js.core.parser.JSPartitionScanner;
+import net.sourceforge.phpeclipse.js.core.parser.JSScanner;
+import net.sourceforge.phpeclipse.js.core.parser.JSStringScanner;
+import net.sourceforge.phpeclipse.js.core.parser.NonRuleBasedDamagerRepairer;
+import net.sourceforge.phpeclipse.js.ui.JSUIPlugin;
+import net.sourceforge.phpeclipse.js.ui.internal.text.JSCompletionProcessor;
+import net.sourceforge.phpeclipse.js.ui.preferences.PreferenceNames;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextDoubleClickStrategy;
+import org.eclipse.jface.text.TextAttribute;
+import org.eclipse.jface.text.contentassist.ContentAssistant;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.text.contentassist.IContentAssistant;
+import org.eclipse.jface.text.presentation.IPresentationReconciler;
+import org.eclipse.jface.text.presentation.PresentationReconciler;
+import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
+import org.eclipse.jface.text.rules.Token;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+
+/**
+ *
+ *
+ * @author $Author: jsurfer $, $Date: 2004-09-02 18:23:49 $
+ *
+ * @version $Revision: 1.1 $
+ */
+public class JSConfiguration extends SourceViewerConfiguration
+{
+ private JSDoubleClickStrategy doubleClickStrategy;
+ private JSStringScanner stringScanner;
+ private JSScanner scanner;
+ private JSColorManager colorManager;
+ private IPreferenceStore preferences;
+
+ /**
+ * Creates a new JSConfiguration object.
+ *
+ * @param colorManager
+ */
+ public JSConfiguration(JSColorManager colorManager)
+ {
+ this.colorManager = colorManager;
+ this.preferences = JSUIPlugin.getDefault().getPreferenceStore();
+ }
+
+ public boolean getAutomaticOutliningPreference()
+ {
+ return preferences.getBoolean(PreferenceNames.P_AUTO_OUTLINE);
+ }
+
+ protected RGB getColorPreference(String categoryColor)
+ {
+ String rgbString = preferences.getString(categoryColor);
+
+ if (rgbString.length() <= 0)
+ {
+ rgbString = preferences.getDefaultString(categoryColor);
+ if(rgbString.length() <= 0)
+ {
+ rgbString = "0,0,0";
+ }
+ }
+ return StringConverter.asRGB(rgbString);
+ }
+
+ public Color getContentColor(String categoryColor)
+ {
+ return colorManager.getColor(getColorPreference(categoryColor));
+ }
+
+ /**
+ *
+ *
+ * @param sourceViewer
+ *
+ * @return
+ */
+ public String[] getConfiguredContentTypes(ISourceViewer sourceViewer)
+ {
+ return new String[] {
+ IDocument.DEFAULT_CONTENT_TYPE,
+ JSPartitionScanner.JS_COMMENT,
+ JSPartitionScanner.JS_KEYWORD,
+ JSPartitionScanner.JS_STRING };
+ }
+
+ /**
+ *
+ *
+ * @param sourceViewer
+ * @param contentType
+ *
+ * @return
+ */
+ public ITextDoubleClickStrategy getDoubleClickStrategy(ISourceViewer sourceViewer, String contentType)
+ {
+ if (doubleClickStrategy == null)
+ {
+ doubleClickStrategy = new JSDoubleClickStrategy();
+ }
+
+ return doubleClickStrategy;
+ }
+
+ /**
+ *
+ *
+ * @return
+ */
+ protected JSScanner getJSScanner()
+ {
+ if (scanner == null)
+ {
+ Color defaultColor = getContentColor(PreferenceNames.P_DEFAULT_COLOR);
+ scanner = new JSScanner(defaultColor);
+ scanner.setDefaultReturnToken(new Token(new TextAttribute(defaultColor)));
+ }
+
+ return scanner;
+ }
+
+ /**
+ *
+ *
+ * @return
+ */
+ protected JSStringScanner getJSStringScanner()
+ {
+ if (stringScanner == null)
+ {
+ Color stringColor = getContentColor(PreferenceNames.P_STRING_COLOR);
+ stringScanner = new JSStringScanner(stringColor);
+ stringScanner.setDefaultReturnToken(new Token(new TextAttribute(stringColor)));
+ }
+
+ return stringScanner;
+ }
+
+ /**
+ *
+ *
+ * @param sourceViewer
+ *
+ * @return
+ */
+ public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer)
+ {
+ PresentationReconciler reconciler = new PresentationReconciler();
+
+ DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getJSScanner());
+ reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
+ reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
+
+ NonRuleBasedDamagerRepairer commentRepairer =
+ new NonRuleBasedDamagerRepairer(new TextAttribute(getContentColor(PreferenceNames.P_COMMENT_COLOR)));
+ reconciler.setDamager(commentRepairer, JSPartitionScanner.JS_COMMENT);
+ reconciler.setRepairer(commentRepairer, JSPartitionScanner.JS_COMMENT);
+
+ NonRuleBasedDamagerRepairer stringRepairer =
+ new NonRuleBasedDamagerRepairer(new TextAttribute(getContentColor(PreferenceNames.P_STRING_COLOR)));
+ reconciler.setDamager(stringRepairer, JSPartitionScanner.JS_STRING);
+ reconciler.setRepairer(stringRepairer, JSPartitionScanner.JS_STRING);
+
+ NonRuleBasedDamagerRepairer keywordRepairer =
+ new NonRuleBasedDamagerRepairer(new TextAttribute(getContentColor(PreferenceNames.P_KEYWORD_COLOR), null, SWT.BOLD));
+ reconciler.setDamager(keywordRepairer, JSPartitionScanner.JS_KEYWORD);
+ reconciler.setRepairer(keywordRepairer, JSPartitionScanner.JS_KEYWORD);
+
+ return reconciler;
+ }
+ /**
+ * @return
+ */
+ public IPreferenceStore getPreferences() {
+ return preferences;
+ }
+
+ /**
+ * @param store
+ */
+ public void setPreferences(IPreferenceStore store) {
+ preferences = store;
+ }
+ public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
+ ContentAssistant assistant = new ContentAssistant();
+ assistant.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
+
+ IContentAssistProcessor processor = new JSCompletionProcessor();
+ assistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE);
+ assistant.setContentAssistProcessor(processor, JSPartitionScanner.JS_COMMENT);
+ assistant.setContentAssistProcessor(processor, JSPartitionScanner.JS_STRING);
+ assistant.setContentAssistProcessor(processor, JSPartitionScanner.JS_KEYWORD);
+ assistant.setContentAssistProcessor(processor, JSPartitionScanner.JS_DEFAULT);
+ assistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE);
+ assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));
+
+ return assistant;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * $RCSfile: JSDocumentProvider.java,v $
+ *
+ * Copyright 2002
+ * CH-1700 Fribourg, Switzerland
+ * All rights reserved.
+ *
+ *========================================================================
+ * Modifications history
+ *========================================================================
+ * $Log: not supported by cvs2svn $
+ * Revision 1.2 2004/02/26 02:25:57 agfitzp
+ * renamed packages to match xml & css
+ *
+ * Revision 1.1 2004/02/05 03:13:28 agfitzp
+ * Initial submission, outline view is broken due to refactoring
+ *
+ * Revision 1.1.2.1 2003/12/12 21:37:24 agfitzp
+ * Experimental work for Classes view
+ *
+ * Revision 1.1 2003/05/28 15:17:11 agfitzp
+ * net.sourceforge.phpeclipse.js.ui 0.0.1 code base
+ *
+ *========================================================================
+*/
+
+package net.sourceforge.phpeclipse.js.ui.editors;
+
+import net.sourceforge.phpeclipse.js.core.parser.JSPartitionScanner;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentPartitioner;
+import org.eclipse.jface.text.rules.DefaultPartitioner;
+import org.eclipse.ui.editors.text.FileDocumentProvider;
+
+/**
+ *
+ *
+ * @author $Author: jsurfer $, $Date: 2004-09-02 18:23:49 $
+ *
+ * @version $Revision: 1.1 $
+ */
+public class JSDocumentProvider extends FileDocumentProvider {
+
+ /**
+ * Array of constant token types that will be color hilighted.
+ */
+ private static String[] colorTokens= {
+ JSPartitionScanner.JS_COMMENT,
+ JSPartitionScanner.JS_STRING,
+ JSPartitionScanner.JS_KEYWORD
+ };
+
+ /**
+ * Constructor for JSDocumentProvider.
+ */
+ public JSDocumentProvider() {
+ super();
+ }
+
+ /**
+ * @param element
+ *
+ * @return
+ *
+ * @throws CoreException
+ */
+ protected IDocument createDocument(Object element) throws CoreException {
+ IDocument document = super.createDocument(element);
+
+ if (document != null) {
+ IDocumentPartitioner partitioner =
+ new DefaultPartitioner(new JSPartitionScanner(), colorTokens);
+ partitioner.connect(document);
+ document.setDocumentPartitioner(partitioner);
+ }
+
+ return document;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * $RCSfile: JSDoubleClickStrategy.java,v $
+ *
+ * Copyright 2002
+ * CH-1700 Fribourg, Switzerland
+ * All rights reserved.
+ *
+ *========================================================================
+ * Modifications history
+ *========================================================================
+ * $Log: not supported by cvs2svn $
+ * Revision 1.1 2004/02/05 03:13:28 agfitzp
+ * Initial submission, outline view is broken due to refactoring
+ *
+ * Revision 1.1 2003/05/28 15:17:12 agfitzp
+ * net.sourceforge.phpeclipse.js.ui 0.0.1 code base
+ *
+ *========================================================================
+*/
+
+package net.sourceforge.phpeclipse.js.ui.editors;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextDoubleClickStrategy;
+import org.eclipse.jface.text.ITextViewer;
+
+
+/**
+ *
+ *
+ * @author $Author: jsurfer $, $Date: 2004-09-02 18:23:49 $
+ *
+ * @version $Revision: 1.1 $
+ */
+public class JSDoubleClickStrategy implements ITextDoubleClickStrategy
+{
+ protected ITextViewer fText;
+
+ /**
+ * Creates a new JSDoubleClickStrategy object.
+ */
+ public JSDoubleClickStrategy()
+ {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @param part
+ */
+ public void doubleClicked(ITextViewer part)
+ {
+ int pos = part.getSelectedRange().x;
+
+ if(pos < 0)
+ {
+ return;
+ }
+
+ fText = part;
+
+ if(!selectComment(pos))
+ {
+ selectWord(pos);
+ }
+ }
+
+ /**
+ *
+ *
+ * @param caretPos
+ *
+ * @return
+ */
+ protected boolean selectComment(int caretPos)
+ {
+ IDocument doc = fText.getDocument();
+ int startPos;
+ int endPos;
+
+ try
+ {
+ int pos = caretPos;
+ char c = ' ';
+
+ while(pos >= 0)
+ {
+ c = doc.getChar(pos);
+
+ if(c == '\\')
+ {
+ pos -= 2;
+
+ continue;
+ }
+
+ if(c == Character.LINE_SEPARATOR || c == '\"')
+ {
+ break;
+ }
+
+ --pos;
+ }
+
+ if(c != '\"')
+ {
+ return false;
+ }
+
+ startPos = pos;
+
+ pos = caretPos;
+
+ int length = doc.getLength();
+ c = ' ';
+
+ while(pos < length)
+ {
+ c = doc.getChar(pos);
+
+ if(c == Character.LINE_SEPARATOR || c == '\"')
+ {
+ break;
+ }
+
+ ++pos;
+ }
+
+ if(c != '\"')
+ {
+ return false;
+ }
+
+ endPos = pos;
+
+ int offset = startPos + 1;
+ int len = endPos - offset;
+ fText.setSelectedRange(offset, len);
+
+ return true;
+ }
+ catch(BadLocationException x)
+ {
+ }
+
+ return false;
+ }
+
+ /**
+ *
+ *
+ * @param caretPos
+ *
+ * @return
+ */
+ protected boolean selectWord(int caretPos)
+ {
+ IDocument doc = fText.getDocument();
+ int startPos;
+ int endPos;
+
+ try
+ {
+ int pos = caretPos;
+ char c;
+
+ while(pos >= 0)
+ {
+ c = doc.getChar(pos);
+
+ if(!Character.isJavaIdentifierPart(c))
+ {
+ break;
+ }
+
+ --pos;
+ }
+
+ startPos = pos;
+
+ pos = caretPos;
+
+ int length = doc.getLength();
+
+ while(pos < length)
+ {
+ c = doc.getChar(pos);
+
+ if(!Character.isJavaIdentifierPart(c))
+ {
+ break;
+ }
+
+ ++pos;
+ }
+
+ endPos = pos;
+ selectRange(startPos, endPos);
+
+ return true;
+ }
+ catch(BadLocationException x)
+ {
+ }
+
+ return false;
+ }
+
+ private void selectRange(int startPos, int stopPos)
+ {
+ int offset = startPos + 1;
+ int length = stopPos - offset;
+ fText.setSelectedRange(offset, length);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * $RCSfile: JSEditor.java,v $
+ *
+ * Copyright 2002
+ * CH-1700 Fribourg, Switzerland
+ * All rights reserved.
+ *
+ *========================================================================
+ * Modifications history
+ *========================================================================
+ * $Log: not supported by cvs2svn $
+ * Revision 1.4 2004/02/27 17:12:48 cell
+ * Use the new outline page
+ *
+ * Revision 1.3 2004/02/26 02:25:57 agfitzp
+ * renamed packages to match xml & css
+ *
+ * Revision 1.2 2004/02/14 18:36:30 ayashi
+ * More UI-Core refactoring... still doesn't work though...
+ *
+ * Revision 1.1 2004/02/05 03:13:28 agfitzp
+ * Initial submission, outline view is broken due to refactoring
+ *
+ * Revision 1.5.2.1 2003/12/12 21:37:24 agfitzp
+ * Experimental work for Classes view
+ *
+ * Revision 1.5 2003/08/14 15:14:15 agfitzp
+ * Removed thread hack from automatic update
+ *
+ * Revision 1.4 2003/07/04 17:26:56 agfitzp
+ * New hack, update in a new thread only if we're not already in the middle of updating
+ *
+ * Revision 1.3 2003/06/21 03:48:51 agfitzp
+ * fixed global variables as functions bug
+ * fixed length calculation of instance variables
+ * Automatic outlining is now a preference
+ *
+ * Revision 1.2 2003/05/28 20:47:58 agfitzp
+ * Outline the document, not the file.
+ *
+ * Revision 1.1 2003/05/28 15:17:12 agfitzp
+ * net.sourceforge.phpeclipse.js.ui 0.0.1 code base
+ *
+ *========================================================================
+*/
+
+package net.sourceforge.phpeclipse.js.ui.editors;
+
+import net.sourceforge.phpeclipse.js.core.model.JSElement;
+import net.sourceforge.phpeclipse.js.ui.internal.outline.JSOutlinePage;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.ui.editors.text.TextEditor;
+import org.eclipse.ui.texteditor.ContentAssistAction;
+import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @version $Revision: 1.1 $
+ * @author $Author: jsurfer $, $Date: 2004-09-02 18:23:49 $
+ */
+public class JSEditor extends TextEditor implements ISelectionChangedListener
+{
+ protected JSColorManager colorManager = new JSColorManager();
+ protected JSOutlinePage outlinePage;
+ protected JSConfiguration configuration;
+
+ protected boolean updating = false;
+
+ /**
+ * Constructor for SampleEditor.
+ */
+ public JSEditor()
+ {
+ super();
+ configuration = new JSConfiguration(colorManager);
+
+ setSourceViewerConfiguration(configuration);
+ setDocumentProvider(new JSDocumentProvider());
+ }
+ protected void createActions() {
+ super.createActions();
+
+ IAction action = new ContentAssistAction(JSEditorMessages.getResourceBundle(),
+ "ContentAssistProposal.", this); //$NON-NLS-1$
+ action
+ .setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
+ setAction("ContentAssistProposal", action); //$NON-NLS-1$
+ markAsStateDependentAction("ContentAssistProposal", true); //$NON-NLS-1$
+
+// IAction action= new TextOperationAction(
+// TemplateMessages.getResourceBundle(),
+// "Editor." + TEMPLATE_PROPOSALS + ".", //$NON-NLS-1$ //$NON-NLS-2$
+// this,
+// ISourceViewer.CONTENTASSIST_PROPOSALS);
+// action.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
+// setAction(TEMPLATE_PROPOSALS, action);
+// markAsStateDependentAction(TEMPLATE_PROPOSALS, true);
+ }
+ /**
+ * Method declared on IEditorPart
+ * @param monitor
+ */
+ public void doSave(IProgressMonitor monitor)
+ {
+ super.doSave(monitor);
+
+ if (outlinePage != null)
+ {
+ outlinePage.update();
+ }
+ }
+
+ /**
+ *
+ */
+ public void dispose()
+ {
+ colorManager.dispose();
+ super.dispose();
+ }
+
+ /*
+ * @see org.eclipse.ui.texteditor.AbstractTextEditor#getAdapter(Class)
+ */
+ public Object getAdapter(Class key) {
+ if (key.equals(IContentOutlinePage.class)) {
+ outlinePage = new JSOutlinePage(this);
+ outlinePage.addSelectionChangedListener(this);
+ return outlinePage;
+ }
+ return super.getAdapter(key);
+ }
+
+ /**
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(SelectionChangedEvent)
+ */
+ public void selectionChanged(SelectionChangedEvent event)
+ {
+ if (null != event)
+ {
+ if (event.getSelection() instanceof IStructuredSelection)
+ {
+ IStructuredSelection sel = (IStructuredSelection) event.getSelection();
+ if (null != sel)
+ {
+ JSElement fe = (JSElement) sel.getFirstElement();
+ if (null != fe)
+ {
+ selectAndReveal(fe.getStart(), fe.getLength());
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Updates all content dependent actions.
+ *
+ * This might be a hack: We're trapping this update to ensure that the
+ * outline is always up to date.
+ */
+ protected void updateContentDependentActions()
+ {
+ super.updateContentDependentActions();
+
+ if(!updating)
+ {
+ if (configuration.getAutomaticOutliningPreference())
+ {
+ if (outlinePage != null)
+ {
+ updating = true;
+
+ outlinePage.update();
+ updating = false;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+/**********************************************************************
+Copyright (c) 2000, 2002 IBM Corp. and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Common Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/cpl-v10.html
+
+Contributors:
+ IBM Corporation - Initial implementation
+ Klaus Hartlage - www.eclipseproject.de
+**********************************************************************/
+package net.sourceforge.phpeclipse.js.ui.editors;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class JSEditorMessages {
+
+ private static final String RESOURCE_BUNDLE= "net.sourceforge.phpeclipse.js.ui.editors.JSEditorMessages";//$NON-NLS-1$
+
+ private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);
+
+ private JSEditorMessages() {
+ }
+
+ public static String getString(String key) {
+ try {
+ return fgResourceBundle.getString(key);
+ } catch (MissingResourceException e) {
+ return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * Gets a string from the resource bundle and formats it with arguments
+ */
+ public static String getFormattedString(String key, Object[] args) {
+ return MessageFormat.format(getString(key), args);
+ }
+
+ public static ResourceBundle getResourceBundle() {
+ return fgResourceBundle;
+ }
+}
--- /dev/null
+#############################################################
+#
+# (c) Copyright IBM Corp. 2000, 2001.
+# All Rights Reserved.
+#
+#############################################################
+ContentAssistProposal.label=Content Assist@Ctrl+SPACE
+ContentAssistProposal.tooltip=Content Assist
+ContentAssistProposal.image=
+ContentAssistProposal.description=Content Assist
--- /dev/null
+/*
+ * Copyright (c) 2002-2004 Adrian Dinu and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Adrian Dinu - initial implementation
+ * Alex Fitzpatrick - additional images
+ * Christopher Lenz - migration to use the plugin's image registry
+ *
+ * $Id: JSImages.java,v 1.1 2004-09-02 18:23:49 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.js.ui.editors;
+
+import java.net.URL;
+
+import net.sourceforge.phpeclipse.js.ui.JSUIPlugin;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Convenience class for storing references to image descriptors used by the JS
+ * editor.
+ */
+public class JSImages {
+
+ public static final String ICON_VAR =
+ "global_variable.gif"; //$NON-NLS-1$
+ public static final String ICON_FUNCTION =
+ "func.gif"; //$NON-NLS-1$
+ public static final String ICON_CLASS =
+ "class_obj.gif"; //$NON-NLS-1$
+ public static final String ICON_DYNAMIC_CLASS =
+ "dyn_class_obj.gif"; //$NON-NLS-1$
+ public static final String ICON_CLASS_METHOD =
+ "class_method.gif"; //$NON-NLS-1$
+ public static final String ICON_INSTANCE_METHOD =
+ "instance_method.gif"; //$NON-NLS-1$
+ public static final String ICON_CLASS_VAR =
+ "class_variable.gif"; //$NON-NLS-1$
+ public static final String ICON_INSTANCE_VAR =
+ "instance_variable.gif"; //$NON-NLS-1$
+
+ /**
+ * Returns the image for the specified key, or <tt>null</tt> if no image for
+ * that key is found.
+ *
+ * @param key the key under which the image was registered
+ * @return the image, or <tt>null</tt> if none
+ */
+ public static Image get(String key) {
+ return JSUIPlugin.getDefault().getImageRegistry().get(key);
+ }
+
+ /**
+ * Returns the image descriptor for the specified key, or <tt>null</tt> if
+ * no image for that key is found.
+ *
+ * @param key the key under which the image was registered
+ * @return the image descriptor, or <tt>null</tt> if none
+ */
+ public static ImageDescriptor getDescriptor(String key) {
+ return JSUIPlugin.getDefault().getImageRegistry().getDescriptor(key);
+ }
+
+ /**
+ * Initializes the given image registry with all images provided through
+ * this class.
+ *
+ * @param reg the registry to initialize
+ */
+ public static void initializeRegistry(ImageRegistry reg) {
+ reg.put(ICON_VAR, createImageDescriptor(ICON_VAR));
+ reg.put(ICON_FUNCTION, createImageDescriptor(ICON_FUNCTION));
+ reg.put(ICON_CLASS, createImageDescriptor(ICON_CLASS));
+ reg.put(ICON_DYNAMIC_CLASS, createImageDescriptor(ICON_DYNAMIC_CLASS));
+ reg.put(ICON_CLASS_METHOD, createImageDescriptor(ICON_CLASS_METHOD));
+ reg.put(ICON_INSTANCE_METHOD,
+ createImageDescriptor(ICON_INSTANCE_METHOD));
+ reg.put(ICON_CLASS_VAR, createImageDescriptor(ICON_CLASS_VAR));
+ reg.put(ICON_INSTANCE_VAR, createImageDescriptor(ICON_INSTANCE_VAR));
+ }
+
+ /**
+ * Utility method to create an <code>ImageDescriptor</code> from a path to a
+ * file.
+ *
+ * @param path the full path to the image file
+ * @return the image descriptor
+ */
+ private static ImageDescriptor createImageDescriptor(String path) {
+ try {
+ URL url = JSUIPlugin.getDefault().getBundle()
+ .getEntry("/icons/" + path); //$NON-NLS-1$
+ return ImageDescriptor.createFromURL(url);
+ } catch (IllegalStateException e) {
+ return ImageDescriptor.getMissingImageDescriptor();
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2002-2004 Adrian Dinu and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Adrian Dinu - initial implementation
+ * Alex Fitzpatrick - update outline while editing
+ * Christopher Lenz - use custom content and label providers
+ *
+ * $Id: JSOutlinePage.java,v 1.1 2004-09-02 18:23:49 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.js.ui.internal.outline;
+
+import net.sourceforge.phpeclipse.js.core.model.JSElementList;
+import net.sourceforge.phpeclipse.js.core.parser.JSSyntaxModelFactory;
+import net.sourceforge.phpeclipse.js.ui.model.JSNameSorter;
+
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+
+/**
+ * Implements an outline page for JavaScript files.
+ */
+public class JSOutlinePage extends ContentOutlinePage {
+
+ // Instance Variables ------------------------------------------------------
+
+ /** The associated text editor. **/
+ protected ITextEditor editor;
+
+ // Constructors ------------------------------------------------------------
+
+ /**
+ * Creates a new JSOutlinePage.
+ *
+ * @param editor the associated text editor
+ */
+ public JSOutlinePage(ITextEditor editor) {
+ this.editor = editor;
+ }
+
+ // ContentOutlinePage Implementation ---------------------------------------
+
+ /*
+ * @see org.eclipse.ui.part.IPage#createControl(Composite)
+ */
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ TreeViewer viewer = getTreeViewer();
+ viewer.setContentProvider(new WorkbenchContentProvider());
+ viewer.setLabelProvider(new WorkbenchLabelProvider());
+ // TODO Make sorting optional
+ viewer.setSorter(new JSNameSorter());
+ }
+
+ // Public Methods ----------------------------------------------------------
+
+ /**
+ * Forces the outline page to update its contents.
+ */
+ public void update() {
+ IDocument document = getDocument();
+ JSSyntaxModelFactory factory = JSSyntaxModelFactory.getInstance();
+ JSElementList model = factory.getContentOutline(document);
+ if (model != null) {
+ TreeViewer viewer = getTreeViewer();
+ if (viewer != null) {
+ Control control = viewer.getControl();
+ if ((control != null) && !control.isDisposed()) {
+ control.setRedraw(false);
+ viewer.setInput(model);
+ viewer.expandAll();
+ control.setRedraw(true);
+ }
+ }
+ }
+ }
+
+ // Private Methods ---------------------------------------------------------
+
+ /**
+ * Returns the document that is open in the associated text editor.
+ *
+ * @return the document being edited
+ */
+ private IDocument getDocument() {
+ IDocumentProvider provider = editor.getDocumentProvider();
+ return provider.getDocument(editor.getEditorInput());
+ }
+
+}
--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpeclipse.js.ui.internal.text;
+
+import net.sourceforge.phpeclipse.ui.WebUI;
+import net.sourceforge.phpeclipse.ui.templates.template.BasicCompletionProcessor;
+import net.sourceforge.phpeclipse.ui.templates.template.JSContextType;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.templates.TemplateContextType;
+
+
+/**
+ * A completion processor for XML templates.
+ */
+public class JSCompletionProcessor extends BasicCompletionProcessor {
+ /**
+ * We watch for angular brackets since those are often part of XML
+ * templates.
+ */
+ protected String extractPrefix(ITextViewer viewer, int offset) {
+ IDocument document= viewer.getDocument();
+ int i= offset;
+ if (i > document.getLength())
+ return ""; //$NON-NLS-1$
+
+ try {
+ while (i > 0) {
+ char ch= document.getChar(i - 1);
+ if (!Character.isJavaIdentifierPart(ch))
+ break;
+ i--;
+ }
+
+ return document.get(i, offset - i);
+ } catch (BadLocationException e) {
+ return ""; //$NON-NLS-1$
+ }
+ }
+ /**
+ * Return the XML context type that is supported by this plugin.
+ */
+ protected TemplateContextType getContextType(ITextViewer viewer, IRegion region) {
+ return WebUI.getDefault().getContextTypeRegistry().getContextType(JSContextType.JS_CONTEXT_TYPE);
+ }
+
+
+}
--- /dev/null
+/*
+ * Created on May 20, 2003
+ *========================================================================
+ * Modifications history
+ *========================================================================
+ * $Log: not supported by cvs2svn $
+ * Revision 1.1 2004/02/26 02:25:58 agfitzp
+ * renamed packages to match xml & css
+ *
+ * Revision 1.1 2004/02/14 18:36:30 ayashi
+ * More UI-Core refactoring... still doesn't work though...
+ *
+ * Revision 1.1 2004/02/05 03:13:29 agfitzp
+ * Initial submission, outline view is broken due to refactoring
+ *
+ * Revision 1.1.2.1 2003/12/12 21:37:24 agfitzp
+ * Experimental work for Classes view
+ *
+ * Revision 1.2 2003/05/30 20:53:09 agfitzp
+ * 0.0.2 : Outlining is now done as the user types. Some other bug fixes.
+ *
+ *========================================================================
+ */
+package net.sourceforge.phpeclipse.js.ui.model;
+
+/**
+ * @author fitzpata
+ *
+ */
+public interface JSElementCategories
+{
+ static final int CLASS = 1;
+ static final int FUNCTION = 2;
+ static final int VARIABLE = 3;
+ static final int CLASS_VARIABLE = 4;
+ static final int INSTANCE_VARIABLE = 5;
+ static final int CLASS_METHOD = 6;
+ static final int INSTANCE_METHOD = 7;
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Christopher Lenz and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Christopher Lenz - initial implementation
+ *
+ * $Id: JSModelAdapterFactory.java,v 1.1 2004-09-02 18:23:57 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.js.ui.model;
+
+import net.sourceforge.phpeclipse.js.core.model.JSElement;
+import net.sourceforge.phpeclipse.js.core.model.JSElementList;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.IAdapterManager;
+import org.eclipse.ui.model.IWorkbenchAdapter;
+
+/**
+ * Factory that creates adapters for JavaScript model objects.
+ */
+public class JSModelAdapterFactory implements IAdapterFactory {
+
+ // Static Methods ----------------------------------------------------------
+
+ /**
+ * Creates and registers this adapter factory with the given manager.
+ *
+ * @param manager the adapter manager to register with
+ */
+ public static void register(IAdapterManager manager) {
+ JSModelAdapterFactory factory = new JSModelAdapterFactory();
+ manager.registerAdapters(factory, JSElement.class);
+ manager.registerAdapters(factory, JSElementList.class);
+ }
+
+ // IAdapterFactory Implementation ------------------------------------------
+
+ /*
+ * @see IAdapterFactory#getAdapter(Object, Class)
+ */
+ public Object getAdapter(Object adaptableObject, Class adapterType) {
+ if (adapterType == IWorkbenchAdapter.class) {
+ if ((adaptableObject instanceof JSElement)
+ || (adaptableObject instanceof JSElementList)) {
+ return new JSWorkbenchAdapter();
+ }
+ }
+ return null;
+ }
+
+ /*
+ * @see IAdapterFactory#getAdapterList()
+ */
+ public Class[] getAdapterList() {
+ return new Class[] { IWorkbenchAdapter.class };
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2003-2004 Alex Fitzpatrick and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Alex Fitzpatrick - initial implementation
+ *
+ * $Id: JSNameSorter.java,v 1.1 2004-09-02 18:23:57 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.js.ui.model;
+
+import net.sourceforge.phpeclipse.js.core.model.JSClassElement;
+import net.sourceforge.phpeclipse.js.core.model.JSClassMethodElement;
+import net.sourceforge.phpeclipse.js.core.model.JSClassVariableElement;
+import net.sourceforge.phpeclipse.js.core.model.JSFunctionElement;
+import net.sourceforge.phpeclipse.js.core.model.JSGlobalVariableElement;
+import net.sourceforge.phpeclipse.js.core.model.JSInstanceMethodElement;
+import net.sourceforge.phpeclipse.js.core.model.JSInstanceVariableElement;
+
+import org.eclipse.jface.viewers.ViewerSorter;
+
+/**
+ * Name sorter.
+ */
+public class JSNameSorter extends ViewerSorter {
+
+ // ViewerSorter Implementation ---------------------------------------------
+
+ /*
+ * @see ViewerSorter#category(Object)
+ */
+ public int category(Object element) {
+ if (element instanceof JSClassElement) {
+ return JSElementCategories.CLASS;
+ } else if (element instanceof JSFunctionElement) {
+ return JSElementCategories.FUNCTION;
+ } else if (element instanceof JSGlobalVariableElement) {
+ return JSElementCategories.VARIABLE;
+ } else if (element instanceof JSClassVariableElement) {
+ return JSElementCategories.CLASS_VARIABLE;
+ } else if (element instanceof JSInstanceVariableElement) {
+ return JSElementCategories.INSTANCE_VARIABLE;
+ } else if (element instanceof JSClassMethodElement) {
+ return JSElementCategories.CLASS_METHOD;
+ } else if (element instanceof JSInstanceMethodElement) {
+ return JSElementCategories.INSTANCE_VARIABLE;
+ }
+ return super.category(element);
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2004 Christopher Lenz and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Christopher Lenz - initial implementation
+ *
+ * $Id: JSWorkbenchAdapter.java,v 1.1 2004-09-02 18:23:57 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.js.ui.model;
+
+import net.sourceforge.phpeclipse.js.core.model.JSClassElement;
+import net.sourceforge.phpeclipse.js.core.model.JSClassMethodElement;
+import net.sourceforge.phpeclipse.js.core.model.JSClassVariableElement;
+import net.sourceforge.phpeclipse.js.core.model.JSElement;
+import net.sourceforge.phpeclipse.js.core.model.JSElementList;
+import net.sourceforge.phpeclipse.js.core.model.JSFunctionElement;
+import net.sourceforge.phpeclipse.js.core.model.JSGlobalVariableElement;
+import net.sourceforge.phpeclipse.js.core.model.JSInstanceMethodElement;
+import net.sourceforge.phpeclipse.js.core.model.JSInstanceVariableElement;
+import net.sourceforge.phpeclipse.js.ui.editors.JSImages;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.model.WorkbenchAdapter;
+
+/**
+ * Adapter that provides a visual representation of JavaScript model elements.
+ */
+public class JSWorkbenchAdapter extends WorkbenchAdapter {
+
+ // IWorkbenchAdapter Implementation ----------------------------------------
+
+ /*
+ * @see IWorkbenchAdapter#getChildren(Object)
+ */
+ public Object[] getChildren(Object o) {
+ if (o instanceof JSElementList) {
+ return ((JSElementList) o).getChildren(null);
+ } else if (o instanceof JSElement) {
+ return ((JSElement) o).getChildren(null);
+ }
+ return super.getChildren(o);
+ }
+
+ /*
+ * @see IWorkbenchAdapter#getImageDescriptor(Object)
+ */
+ public ImageDescriptor getImageDescriptor(Object o) {
+ if (o instanceof JSClassElement) {
+ return JSImages.getDescriptor(JSImages.ICON_CLASS);
+ } else if (o instanceof JSGlobalVariableElement) {
+ return JSImages.getDescriptor(JSImages.ICON_VAR);
+ } else if (o instanceof JSFunctionElement) {
+ return JSImages.getDescriptor(JSImages.ICON_FUNCTION);
+ } else if (o instanceof JSClassMethodElement) {
+ return JSImages.getDescriptor(JSImages.ICON_CLASS_METHOD);
+ } else if (o instanceof JSClassVariableElement) {
+ return JSImages.getDescriptor(JSImages.ICON_CLASS_VAR);
+ } else if (o instanceof JSInstanceMethodElement) {
+ return JSImages.getDescriptor(JSImages.ICON_INSTANCE_METHOD);
+ } else if (o instanceof JSInstanceVariableElement) {
+ return JSImages.getDescriptor(JSImages.ICON_INSTANCE_VAR);
+ }
+ return super.getImageDescriptor(o);
+ }
+
+ /*
+ * @see IWorkbenchAdapter#getLabel(Object)
+ */
+ public String getLabel(Object o) {
+ if (o instanceof JSElement) {
+ return ((JSElement) o).getName();
+ }
+ return super.getLabel(o);
+ }
+
+ /*
+ * @see IWorkbenchAdapter#getParent(Object)
+ */
+ public Object getParent(Object o) {
+ if (o instanceof JSElement) {
+ return ((JSElement) o).getParent(null);
+ }
+ return super.getParent(o);
+ }
+
+}
--- /dev/null
+/*
+ * Created on May 20th, 2003
+ *========================================================================
+ * Modifications history
+ *========================================================================
+ * $Log: not supported by cvs2svn $
+ * Revision 1.1 2004/02/05 03:13:29 agfitzp
+ * Initial submission, outline view is broken due to refactoring
+ *
+ * Revision 1.4 2003/12/10 20:19:16 agfitzp
+ * 3.0 port
+ *
+ * Revision 1.3 2003/06/21 03:48:51 agfitzp
+ * fixed global variables as functions bug
+ * fixed length calculation of instance variables
+ * Automatic outlining is now a preference
+ *
+ * Revision 1.2 2003/05/30 20:53:08 agfitzp
+ * 0.0.2 : Outlining is now done as the user types. Some other bug fixes.
+ *
+ *========================================================================
+ */
+package net.sourceforge.phpeclipse.js.ui.preferences;
+
+import net.sourceforge.phpeclipse.js.ui.JSUIPlugin;
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.ColorFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents a preference page that
+ * is contributed to the Preferences dialog. By
+ * subclassing <samp>FieldEditorPreferencePage</samp>, we
+ * can use the field support built into JFace that allows
+ * us to create a page that is small and knows how to
+ * save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They
+ * are stored in the preference store that belongs to
+ * the main plug-in class. That way, preferences can
+ * be accessed directly via the preference store.
+ */
+
+public class JavaScriptPreferencePage
+ extends FieldEditorPreferencePage
+ implements IWorkbenchPreferencePage , PreferenceNames {
+
+ public JavaScriptPreferencePage() {
+ super(GRID);
+ setPreferenceStore(JSUIPlugin.getDefault().getPreferenceStore());
+ setDescription("Preferences for JavaScript editor.");
+ }
+
+/**
+ * Creates the field editors. Field editors are abstractions of
+ * the common GUI blocks needed to manipulate various types
+ * of preferences. Each field editor knows how to save and
+ * restore itself.
+ */
+
+ public void createFieldEditors() {
+ addField(new BooleanFieldEditor(P_AUTO_OUTLINE, "&Automatic Outlining", getFieldEditorParent()));
+ addField(new ColorFieldEditor(P_COMMENT_COLOR, "&Comment Color:", getFieldEditorParent()));
+ addField(new ColorFieldEditor(P_STRING_COLOR, "&String Color:", getFieldEditorParent()));
+ addField(new ColorFieldEditor(P_KEYWORD_COLOR, "&Keyword Color:", getFieldEditorParent()));
+ addField(new ColorFieldEditor(P_DEFAULT_COLOR, "D&efault Color:", getFieldEditorParent()));
+ }
+
+ public void init(IWorkbench workbench) {
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Created on May 15, 2003
+ *========================================================================
+ * Modifications history
+ *========================================================================
+ * $Log: not supported by cvs2svn $
+ * Revision 1.1 2004/02/05 03:13:29 agfitzp
+ * Initial submission, outline view is broken due to refactoring
+ *
+ * Revision 1.4 2003/12/10 20:19:16 agfitzp
+ * 3.0 port
+ *
+ * Revision 1.3 2003/06/21 03:48:51 agfitzp
+ * fixed global variables as functions bug
+ * fixed length calculation of instance variables
+ * Automatic outlining is now a preference
+ *
+ * Revision 1.2 2003/05/30 20:53:08 agfitzp
+ * 0.0.2 : Outlining is now done as the user types. Some other bug fixes.
+ *
+ *========================================================================
+ */
+package net.sourceforge.phpeclipse.js.ui.preferences;
+
+/**
+ * Publicly available list of preference names as constants.
+ * @author fitzpata
+ */
+public interface PreferenceNames
+{
+ String P_COMMENT_COLOR = "commentColor";
+ String P_STRING_COLOR = "stringColor";
+ String P_KEYWORD_COLOR = "keywordColor";
+ String P_DEFAULT_COLOR = "defaultColor";
+ String P_AUTO_OUTLINE = "autoOutline";
+}
--- /dev/null
+/*
+ * Copyright (c) 2003-2004 Alex Fitzpatrick and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Alex Fitzpatrick - initial implementation
+ *
+ * $Id: JSClassesView.java,v 1.1 2004-09-02 18:23:49 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.js.ui.views;
+
+import net.sourceforge.phpeclipse.js.ui.model.JSNameSorter;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.part.DrillDownAdapter;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * A view of all JavaScript syntactic elements in all projects.
+ */
+public class JSClassesView extends ViewPart {
+
+ private TreeViewer viewer;
+ private DrillDownAdapter drillDownAdapter;
+ private Action action1;
+ private Action action2;
+ private Action doubleClickAction;
+
+ /**
+ * The constructor.
+ */
+ public JSClassesView() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+ public void createPartControl(Composite parent) {
+ viewer =
+ new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+ drillDownAdapter = new DrillDownAdapter(viewer);
+ viewer.setContentProvider(new JSClassesViewContentProvider());
+ viewer.setLabelProvider(new WorkbenchLabelProvider());
+ viewer.setSorter(new JSNameSorter());
+ viewer.setInput(ResourcesPlugin.getWorkspace());
+ makeActions();
+ hookContextMenu();
+ hookDoubleClickAction();
+ contributeToActionBars();
+ }
+
+ /**
+ *
+ */
+ private void hookContextMenu() {
+ MenuManager menuMgr = new MenuManager("#PopupMenu");
+ menuMgr.setRemoveAllWhenShown(true);
+ menuMgr.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ JSClassesView.this.fillContextMenu(manager);
+ }
+ });
+ Menu menu = menuMgr.createContextMenu(viewer.getControl());
+ viewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuMgr, viewer);
+ }
+
+ /**
+ *
+ */
+ private void contributeToActionBars() {
+ IActionBars bars = getViewSite().getActionBars();
+ fillLocalPullDown(bars.getMenuManager());
+ fillLocalToolBar(bars.getToolBarManager());
+ }
+
+ private void fillLocalPullDown(IMenuManager manager) {
+ manager.add(action1);
+ manager.add(new Separator());
+ manager.add(action2);
+ }
+
+ private void fillContextMenu(IMenuManager manager) {
+ manager.add(action1);
+ manager.add(action2);
+ manager.add(new Separator());
+ drillDownAdapter.addNavigationActions(manager);
+ // Other plug-ins can contribute there actions here
+ manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+
+ private void fillLocalToolBar(IToolBarManager manager) {
+ manager.add(action1);
+ manager.add(action2);
+ manager.add(new Separator());
+ drillDownAdapter.addNavigationActions(manager);
+ }
+
+ private void makeActions() {
+ action1 = new Action() {
+ public void run() {
+ showMessage("Action 1 executed");
+ }
+ };
+ action1.setText("Action 1");
+ action1.setToolTipText("Action 1 tooltip");
+ action1.setImageDescriptor(
+ PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
+ ISharedImages.IMG_OBJS_INFO_TSK));
+
+ action2 = new Action() {
+ public void run() {
+ showMessage("Action 2 executed");
+ }
+ };
+ action2.setText("Action 2");
+ action2.setToolTipText("Action 2 tooltip");
+ action2.setImageDescriptor(
+ PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
+ IDE.SharedImages.IMG_OBJS_TASK_TSK));
+ doubleClickAction = new Action() {
+ public void run() {
+ ISelection selection = viewer.getSelection();
+ Object obj =
+ ((IStructuredSelection) selection).getFirstElement();
+ showMessage("Double-click detected on " + obj.toString());
+ }
+ };
+ }
+
+ private void hookDoubleClickAction() {
+ viewer.addDoubleClickListener(new IDoubleClickListener() {
+ public void doubleClick(DoubleClickEvent event) {
+ doubleClickAction.run();
+ }
+ });
+ }
+ private void showMessage(String message) {
+ MessageDialog.openInformation(
+ viewer.getControl().getShell(),
+ "Classes",
+ message);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IWorkbenchPart#setFocus()
+ */
+ public void setFocus() {
+ viewer.getControl().setFocus();
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2003-2004 Alex Fitzpatrick and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Alex Fitzpatrick - initial implementation
+ *
+ * $Id: JSClassesViewContentProvider.java,v 1.1 2004-09-02 18:23:49 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.js.ui.views;
+
+import net.sourceforge.phpeclipse.js.core.model.JSElement;
+import net.sourceforge.phpeclipse.js.core.parser.JSSyntaxModelFactory;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * Content provider for the JavaScript classes view.
+ */
+class JSClassesViewContentProvider
+ implements IStructuredContentProvider, ITreeContentProvider {
+ private IWorkspace invisibleRoot;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+ * java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object parent) {
+ if (parent.equals(ResourcesPlugin.getWorkspace())) {
+ if (invisibleRoot == null)
+ invisibleRoot = ((IWorkspace) parent);
+ return getChildren(invisibleRoot);
+ }
+ return getChildren(parent);
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+ */
+ public Object getParent(Object child) {
+ if (child instanceof IProject) {
+ return ((IProject) child).getWorkspace();
+ }
+
+ if (child instanceof JSElement) {
+ return ((JSElement) child).getParent(child);
+ }
+ return null;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+ */
+ public Object[] getChildren(Object parent) {
+
+ if (parent instanceof IWorkspace) {
+ return invisibleRoot.getRoot().getProjects();
+ }
+
+ if (parent instanceof IProject) {
+ return getClasses((IProject) parent);
+ }
+
+ if (parent instanceof JSElement) {
+ return ((JSElement) parent).getChildren(parent);
+ }
+
+ return new Object[0];
+ }
+ /**
+ * @param project
+ * @return
+ */
+ private Object[] getClasses(IProject project) {
+ return JSSyntaxModelFactory
+ .getInstance()
+ .getContentOutline(project)
+ .getChildren();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+ */
+ public boolean hasChildren(Object parent) {
+ return getChildren(parent).length > 0;
+ }
+}