From c12e0fa4be1b82b8e9287c8addcfa50bb5f5625d Mon Sep 17 00:00:00 2001 From: khartlage Date: Sat, 26 Oct 2002 11:18:30 +0000 Subject: [PATCH] Added context help menu for php function names. The description of the fundtion opens in the help browser --- net.sourceforge.phpeclipse/plugin.xml | 4 +- .../phpeclipse/actions/PHPEclipseShowAction.java | 37 +++++--------- .../actions/PHPEclipseShowContextHelp.java | 52 ++++++++++++++------ .../phpeclipse/phpeditor/PHPEditor.java | 44 ++++++++++++++++- .../phpeclipse/phpeditor/PHPTextHover.java | 3 +- .../phpeclipse/phpeditor/php/PHPWordDetector.java | 1 + 6 files changed, 97 insertions(+), 44 deletions(-) diff --git a/net.sourceforge.phpeclipse/plugin.xml b/net.sourceforge.phpeclipse/plugin.xml index b2b4aca..98a1e91 100644 --- a/net.sourceforge.phpeclipse/plugin.xml +++ b/net.sourceforge.phpeclipse/plugin.xml @@ -97,7 +97,7 @@ id="net.sourceforge.phpeclipse.actions.showAction"> - + diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowAction.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowAction.java index 5018ac6..f375331 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowAction.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowAction.java @@ -21,18 +21,18 @@ import net.sourceforge.phpeclipse.PHPeclipsePlugin; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; +import org.eclipse.help.IHelp; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; - import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.help.IHelp; //import org.eclipse.jdt.internal.ui.actions.OpenBrowserUtil; // import org.eclipse.help.ui.browser.LaunchURL; @@ -88,31 +88,26 @@ public class PHPEclipseShowAction implements IObjectActionDelegate { // single file: IFile file = (IFile) resource; IPath path = file.getFullPath(); - // if (j2h==null) { - // shell = new Shell(); - // j2h = new Java2HTML(shell); - // } - String fileName = file.getLocation().toString(); - String lowerCaseFileName = fileName.toLowerCase(); + String localhostURL = file.getLocation().toString(); + String lowerCaseFileName = localhostURL.toLowerCase(); // fileName = "http://localhost"+fileName.replaceAll("c:", ""); String documentRoot = store.getString(PHPeclipsePlugin.DOCUMENTROOT_PREF); documentRoot = documentRoot.replace('\\', '/'); documentRoot = documentRoot.toLowerCase(); - MessageDialog.openInformation(shell, "lowerCaseFileName", "lowerCaseFileName: " + lowerCaseFileName); - + if (lowerCaseFileName.startsWith(documentRoot)) { - fileName = fileName.substring(documentRoot.length()); + localhostURL = localhostURL.substring(documentRoot.length()); } else { MessageDialog.openInformation(shell, "Wrong DocumentRoot", "Adjust DocumentRoot: " + documentRoot); return; } - fileName = store.getString(PHPeclipsePlugin.LOCALHOST_PREF) + fileName.replaceAll(documentRoot, ""); + localhostURL = store.getString(PHPeclipsePlugin.LOCALHOST_PREF) + localhostURL.replaceAll(documentRoot, ""); try { if (store.getBoolean(PHPeclipsePlugin.USE_EXTERNAL_BROWSER_PREF)) { - String[] arguments = { fileName }; + String[] arguments = { localhostURL }; MessageFormat form = new MessageFormat(store.getString(PHPeclipsePlugin.EXTERNAL_BROWSER_PREF)); Runtime runtime = Runtime.getRuntime(); @@ -120,23 +115,17 @@ public class PHPEclipseShowAction implements IObjectActionDelegate { // runtime.exec(store.getString(PHPeclipsePlugin.EXTERNAL_BROWSER_PREF) + " " + fileName); // runtime.exec("command.com /c start iexplore " + fileName); } else { - open(new URL(fileName), shell, fileName); + // MessageDialog.openInformation(shell, "localhostURL", "localhostURL: " + localhostURL); + // this doesn't work under win98 ? + // Program.launch(localhostURL); + open(new URL(localhostURL), shell, localhostURL); } } catch (MalformedURLException e) { MessageDialog.openInformation(shell, "MalformedURLException: ", e.toString()); } catch (IOException e) { - MessageDialog.openInformation(shell, "IOException", "Cannot show: " + fileName); + MessageDialog.openInformation(shell, "IOException", "Cannot show: " + localhostURL); } - - // MessageDialog.openInformation(shell, "PHPEclipse", "FileName - " + fileName); - // - // Runtime runtime = Runtime.getRuntime(); - // try { - // runtime.exec("command.com /c start iexplore "+fileName); - - // MessageDialog.openInformation(shell, "J2h Plug-in", "FileName - " + fileName); - // j2h.convert( fileName ); } } } diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowContextHelp.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowContextHelp.java index 2b5bd88..bc03293 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowContextHelp.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowContextHelp.java @@ -11,33 +11,53 @@ Contributors: **********************************************************************/ package net.sourceforge.phpeclipse.actions; +import net.sourceforge.phpeclipse.phpeditor.PHPEditor; import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.text.TextSelection; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IEditorActionDelegate; import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.actions.ActionDelegate; -import org.eclipse.ui.editors.text.TextEditor; -import org.eclipse.ui.internal.EditorPluginAction; -import org.eclipse.ui.part.FileEditorInput; public class PHPEclipseShowContextHelp extends ActionDelegate implements IEditorActionDelegate { - private TextEditor editor; - /** - * @see ActionDelegate#run(IAction) - */ + private IWorkbenchWindow window; + private PHPEditor editor; + + public void dispose() { + } + + public void init(IWorkbenchWindow window) { + this.window = window; + } + + public void selectionChanged(IAction action, ISelection selection) { + if (!selection.isEmpty()) { + if (selection instanceof TextSelection) { + action.setEnabled(true); + } else if (window.getActivePage() != null && window.getActivePage().getActivePart() != null) { + // + } + } + } + public void run(IAction action) { - EditorPluginAction editorPluginAction = (EditorPluginAction) action; - FileEditorInput input = (FileEditorInput) editor.getEditorInput(); - // Add your code here to perform the action - MessageDialog.openInformation(editor.getSite().getShell(), "Context Help: ", input.toString()); + if (editor == null) { + IEditorPart targetEditor = window.getActivePage().getActiveEditor(); + if (targetEditor != null && (targetEditor instanceof PHPEditor)) { + editor = (PHPEditor) targetEditor; + } + } + if (editor != null) { + editor.openContextHelp(); + } } - /** - * @see IEditorActionDelegate#setActiveEditor(IAction, IEditorPart) - */ public void setActiveEditor(IAction action, IEditorPart targetEditor) { - this.editor = (TextEditor) targetEditor; + if (targetEditor != null && (targetEditor instanceof PHPEditor)) { + editor = (PHPEditor) targetEditor; + } } } diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java index 470aa0f..df0c4cc 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java @@ -11,12 +11,21 @@ Contributors: IBM Corporation - Initial implementation Klaus Hartlage - www.eclipseproject.de **********************************************************************/ +import net.sourceforge.phpeclipse.phpeditor.php.PHPWordDetector; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.help.IHelp; +import org.eclipse.help.IHelpResource; import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.source.ISourceViewer; +import org.eclipse.swt.graphics.Point; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.editors.text.TextEditor; +import org.eclipse.ui.help.WorkbenchHelp; import org.eclipse.ui.texteditor.DefaultRangeIndicator; import org.eclipse.ui.texteditor.TextOperationAction; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; @@ -25,7 +34,7 @@ import org.eclipse.ui.views.contentoutline.IContentOutlinePage; * Java specific text editor. */ public class PHPEditor extends TextEditor { - + /** The outline page */ private PHPContentOutlinePage fOutlinePage; @@ -136,6 +145,39 @@ public class PHPEditor extends TextEditor { return super.getAdapter(required); } + public void openContextHelp() { + IDocument doc = this.getDocumentProvider().getDocument(this.getEditorInput()); + ITextSelection selection = (ITextSelection) this.getSelectionProvider().getSelection(); + int pos = selection.getOffset(); + String word = getFunctionName(doc, pos); + openContextHelp(word); + } + + private void openContextHelp(String word) { + open(word); + } + + public static void open(String word) { + IHelp help = WorkbenchHelp.getHelpSupport(); + if (help != null) { + IHelpResource helpResource = new PHPFunctionHelpResource(word); + WorkbenchHelp.getHelpSupport().displayHelpResource(helpResource); + } else { + // showMessage(shell, dialogTitle, ActionMessages.getString("Open help not available"), false); //$NON-NLS-1$ + } + } + + private String getFunctionName(IDocument doc, int pos) { + Point word = PHPWordDetector.findWord(doc, pos); + if (word != null) { + try { + return doc.get(word.x, word.y).replace('_', '-'); + } catch (BadLocationException e) { + } + } + return ""; + } + /* (non-Javadoc) * Method declared on AbstractTextEditor */ diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java index 884a557..3f8e79a 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java @@ -20,7 +20,8 @@ import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.Region; /** - * Example implementation for an ITextHover which hovers over Java code. + * Example implementation for an ITextHover + * which hovers over PHP code. */ public class PHPTextHover implements ITextHover { diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPWordDetector.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPWordDetector.java index b0c471b..d332885 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPWordDetector.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPWordDetector.java @@ -56,6 +56,7 @@ public class PHPWordDetector { ++position; } + start++; end = position; if (end > start) -- 1.7.1