fixed accelerator problem; slightly improved PHP Perspective
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / PHPEditor.java
index 2d0b71d..de893a8 100644 (file)
@@ -11,11 +11,14 @@ Contributors:
     IBM Corporation - Initial implementation
     Klaus Hartlage - www.eclipseproject.de
 **********************************************************************/
+import net.sourceforge.phpdt.internal.ui.actions.CompositeActionGroup;
+import net.sourceforge.phpdt.ui.actions.GenerateActionGroup;
 import net.sourceforge.phpeclipse.IPreferenceConstants;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPCodeScanner;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPWordExtractor;
 import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.Action;
@@ -37,7 +40,10 @@ import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.actions.ActionGroup;
 import org.eclipse.ui.editors.text.TextEditor;
+import org.eclipse.ui.texteditor.ContentAssistAction;
 import org.eclipse.ui.texteditor.DefaultRangeIndicator;
 import org.eclipse.ui.texteditor.ITextEditorActionConstants;
 import org.eclipse.ui.texteditor.TextOperationAction;
@@ -45,9 +51,9 @@ import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 /**
  * PHP specific text editor.
  */
-public class PHPEditor extends TextEditor  {
+public class PHPEditor extends TextEditor {
 
-  protected PHPActionGroup actionGroup;
+  // protected PHPActionGroup fActionGroups;
   /** The outline page */
   private PHPContentOutlinePage fOutlinePage;
   private IPreferenceStore phpPrefStore;
@@ -55,13 +61,25 @@ public class PHPEditor extends TextEditor  {
   /** The line number ruler column */
   private LineNumberRulerColumn fLineNumberRulerColumn;
 
+  protected CompositeActionGroup fActionGroups;
+  /** The standard action groups added to the menu */
+  private GenerateActionGroup fGenerateActionGroup;
+  private CompositeActionGroup fContextMenuGroup;
   /**
    * Default constructor.
    */
   public PHPEditor() {
     super();
+    setRulerContextMenuId("#PHPRulerContext"); //$NON-NLS-1$
   }
 
+  /**
+   *  Returns the standard action group of this editor.
+   */
+  protected ActionGroup getActionGroup() {
+    return fActionGroups;
+  } 
+  
   public PHPContentOutlinePage getfOutlinePage() {
     return fOutlinePage;
   }
@@ -72,13 +90,23 @@ public class PHPEditor extends TextEditor  {
    */
   protected void createActions() {
     super.createActions();
-    setAction(
-      "ContentAssistProposal",
-      new TextOperationAction(
-        PHPEditorMessages.getResourceBundle(),
-        "ContentAssistProposal.",
-        this,
-        ISourceViewer.CONTENTASSIST_PROPOSALS));
+    
+       Action action;
+//    setAction(
+//      "ContentAssistProposal",
+//      new TextOperationAction(
+//        PHPEditorMessages.getResourceBundle(),
+//        "ContentAssistProposal.",
+//        this,
+//        ISourceViewer.CONTENTASSIST_PROPOSALS));
+       action= new ContentAssistAction(PHPEditorMessages.getResourceBundle(), "ContentAssistProposal.", this); //$NON-NLS-1$
+       action.setActionDefinitionId(PHPEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);            
+       setAction("ContentAssistProposal", action); //$NON-NLS-1$
+       
+
+//     System.out.println(action.getId());
+//     System.out.println(action.getActionDefinitionId());
+       
     setAction(
       "ContentAssistTip",
       new TextOperationAction(
@@ -87,19 +115,38 @@ public class PHPEditor extends TextEditor  {
         this,
         ISourceViewer.CONTENTASSIST_CONTEXT_INFORMATION));
 
-    Action action = new TextOperationAction(PHPEditorMessages.getResourceBundle(), "Comment.", this, ITextOperationTarget.PREFIX);
+    action = new TextOperationAction(PHPEditorMessages.getResourceBundle(), "Comment.", this, ITextOperationTarget.PREFIX);
     action.setActionDefinitionId(PHPEditorActionDefinitionIds.COMMENT);
     setAction("Comment", action);
-
+       
+//     System.out.println(action.getId());
+//     System.out.println(action.getActionDefinitionId());
+       
     action = new TextOperationAction(PHPEditorMessages.getResourceBundle(), "Uncomment.", this, ITextOperationTarget.STRIP_PREFIX);
     action.setActionDefinitionId(PHPEditorActionDefinitionIds.UNCOMMENT);
     setAction("Uncomment", action);
 
-    actionGroup = new PHPActionGroup(this, ITextEditorActionConstants.GROUP_EDIT);
+//     System.out.println(action.getId());
+//     System.out.println(action.getActionDefinitionId());
+       
+
+  //  fActionGroups = new PHPActionGroup(this, ITextEditorActionConstants.GROUP_EDIT);
 
     markAsStateDependentAction("Comment", true); //$NON-NLS-1$
     markAsStateDependentAction("Uncomment", true); //$NON-NLS-1$
+
+    fGenerateActionGroup= new GenerateActionGroup(this, ITextEditorActionConstants.GROUP_EDIT);
+
+    fActionGroups= new CompositeActionGroup(
+      new ActionGroup[] { fGenerateActionGroup }
+      );
+  
     
+    // We have to keep the context menu group separate to have better control over positioning
+    fContextMenuGroup= new CompositeActionGroup(new ActionGroup[] {
+      fGenerateActionGroup });
+//      rg, 
+//      new LocalHistoryActionGroup(this, ITextEditorActionConstants.GROUP_EDIT)});
   }
 
   /** The <code>PHPEditor</code> implementation of this 
@@ -110,6 +157,10 @@ public class PHPEditor extends TextEditor  {
     PHPEditorEnvironment.disconnect(this);
     if (fOutlinePage != null)
       fOutlinePage.setInput(null);
+      
+    if (fActionGroups != null)
+      fActionGroups.dispose();  
+      
     super.dispose();
   }
 
@@ -168,9 +219,20 @@ public class PHPEditor extends TextEditor  {
     super.editorContextMenuAboutToShow(menu);
     //  addAction(menu, "ContentAssistProposal"); //$NON-NLS-1$
     //  addAction(menu, "ContentAssistTip"); //$NON-NLS-1$
-    actionGroup.fillContextMenu(menu);
+    
+    // fActionGroups.fillContextMenu(menu);
+    
+    ActionContext context= new ActionContext(getSelectionProvider().getSelection());
+    fContextMenuGroup.setContext(context);
+    fContextMenuGroup.fillContextMenu(menu);
+    fContextMenuGroup.setContext(null);
   }
 
+  protected void updateStateDependentActions() {
+    super.updateStateDependentActions();
+    fGenerateActionGroup.editorStateChanged();
+  }
+  
   /** The <code>PHPEditor</code> implementation of this 
    * <code>AbstractTextEditor</code> method performs gets
    * the java content outline page if request is for a an 
@@ -188,27 +250,27 @@ 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$
-//    }
-//  }
+  //  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 = PHPWordExtractor.findWord(doc, pos);
@@ -291,7 +353,10 @@ public class PHPEditor extends TextEditor  {
     IVerticalRuler v = getVerticalRuler();
     if (v instanceof CompositeRuler) {
       CompositeRuler c = (CompositeRuler) v;
-      c.removeDecorator(1);
+      try {
+        c.removeDecorator(1);
+      } catch (Throwable e) {
+      }
     }
   }