This commit was generated by cvs2svn to compensate for changes in r55,
[phpeclipse.git] / net.sourceforge.phpeclipse.phphelp / src / net / sourceforge / phpdt / phphelp / actions / PHPEclipseShowContextHelp.java
diff --git a/net.sourceforge.phpeclipse.phphelp/src/net/sourceforge/phpdt/phphelp/actions/PHPEclipseShowContextHelp.java b/net.sourceforge.phpeclipse.phphelp/src/net/sourceforge/phpdt/phphelp/actions/PHPEclipseShowContextHelp.java
new file mode 100644 (file)
index 0000000..834d108
--- /dev/null
@@ -0,0 +1,96 @@
+/**********************************************************************
+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.phpdt.phphelp.actions;
+
+import net.sourceforge.phpeclipse.phpeditor.PHPEditor;
+import net.sourceforge.phpeclipse.phpeditor.php.PHPWordExtractor;
+import org.eclipse.help.IHelp;
+import org.eclipse.help.IHelpResource;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.TextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.graphics.Point;
+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.help.WorkbenchHelp;
+
+public class PHPEclipseShowContextHelp extends ActionDelegate implements IEditorActionDelegate {
+
+  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) {
+    if (editor == null) {
+      IEditorPart targetEditor = window.getActivePage().getActiveEditor();
+      if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
+        editor = (PHPEditor) targetEditor;
+      }
+    }
+    if (editor != null) {
+      ITextSelection selection = (ITextSelection) editor.getSelectionProvider().getSelection();
+      IDocument doc = editor.getDocumentProvider().getDocument(editor.getEditorInput());
+      int pos = selection.getOffset();
+      String word = getFunctionName(doc, pos);
+      openContextHelp(word);
+
+    }
+  }
+
+  public void setActiveEditor(IAction action, IEditorPart targetEditor) {
+    if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
+      editor = (PHPEditor) targetEditor;
+    }
+  }
+
+  public static void openContextHelp(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 = PHPWordExtractor.findWord(doc, pos);
+    if (word != null) {
+      try {
+        return doc.get(word.x, word.y).replace('_', '-');
+      } catch (BadLocationException e) {
+      }
+    }
+    return "";
+  }
+}