Question

J'ai réussi en partie à supprimer presque tous les menus contextuels du framework Commons Navigator simplement en configurant le plugin.xml dossier.
Il y a 2 menus qui refusent d'aller:

  • group.edit et
  • group.reorganize.

Mon plugin.xml La configuration ressemble à ceci:

<extension
          point="org.eclipse.ui.navigator.viewer">
       <viewer
             viewerId="org.eclipse.ui.example.navigator.view">
             <popupMenu allowsPlatformContributions="false">
                <insertionPoint
                    name="group.edit" />

                <insertionPoint
                    name="group.reorganize" />
             </popupMenu>
       </viewer>
       <viewerContentBinding
             viewerId="org.eclipse.ui.thermo.navigator.view">
          <includes>
             <contentExtension
                   pattern="org.eclipse.ui.navigator.resourceContent"/>
          </includes>
       </viewerContentBinding> 
</extension>

Définition du allowsPlatformContribution To False arrête les contributions à ajouter au menu contextuel à l'exception pour group.edit et group.reorganize... Cela commence à me ressembler à un bug.

La solution évidente consiste à supprimer les points d'insertion de mon <popUpMenu> Mais sans eux, l'application lance une exception:

Throwable: java.lang.IllegalArgumentException: Group not found: group.edit

java.lang.IllegalArgumentException: Group not found: group.edit
at org.eclipse.jface.action.ContributionManager.addToGroup(ContributionManager.java:131)
at org.eclipse.jface.action.ContributionManager.appendToGroup(ContributionManager.java:138)
at org.eclipse.ui.internal.navigator.resources.actions.EditActionGroup.fillContextMenu(EditActionGroup.java:74)
at org.eclipse.ui.internal.navigator.resources.actions.EditActionProvider.fillContextMenu(EditActionProvider.java:50)
at org.eclipse.ui.navigator.NavigatorActionService.addCommonActionProviderMenu(NavigatorActionService.java:205)
at org.eclipse.ui.navigator.NavigatorActionService.fillContextMenu(NavigatorActionService.java:172)
at org.eclipse.ui.internal.navigator.CommonNavigatorManager.fillContextMenu(CommonNavigatorManager.java:258)
at org.eclipse.ui.internal.navigator.CommonNavigatorManager$4.menuAboutToShow(CommonNavigatorManager.java:273)
at org.eclipse.jface.action.MenuManager.fireAboutToShow(MenuManager.java:335)
at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:463)
at org.eclipse.jface.action.MenuManager.access$1(MenuManager.java:459)
at org.eclipse.jface.action.MenuManager$2.menuShown(MenuManager.java:485)

Il lance la même exception pour le groupe de réorganisation.

Était-ce utile?

La solution

J'ai réussi à supprimer les actions "Group.Edit" (copie / coller) et je l'ai fait de cette façon, en utilisant les points d'extension du navigateur commun:

   <extension
         point="org.eclipse.ui.navigator.viewer">
      <viewerActionBinding
            viewerId="org.eclipse.ui.navigator.ProjectExplorer">
         <includes>
            <actionExtension
                  pattern="my.app.client.actions.MyAppEditActionExtension">
            </actionExtension>
         </includes>
      </viewerActionBinding>    
   </extension>
   <extension
         point="org.eclipse.ui.navigator.navigatorContent">
      <actionProvider
            class="my.app.client.workshop.MyPasteActionProvider"
            id="my.app.client.actions.MyAppEditActionExtension"
            overrides="org.eclipse.ui.navigator.resources.actions.EditActions"
            priority="highest">
         <enablement>
         <!-- A hack to allways be enabled -->
         <not>
            <systemTest
                  property="MyApp"
                  value="WONT-EVER-BE-SET">
            </systemTest>
         </not>
         </enablement>
     </actionProvider>
   </extension>

Et, avec l'ajout de "org.eclipse.ui.navigator.resources" dans mes dépendances de plugin, j'ai implémenté "mypastealprovider" comme ceci:

import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.ui.internal.navigator.resources.actions.EditActionProvider;

/**
 * Create the Edit actions (Cut/Copy/Paste) 
 * and register then globally in the workbench using EditActionProvider.
 * <p/>
 * Then, removes the Copy/Paste contributions in the pop-up menu.
 */
public class MyPasteActionProvider extends EditActionProvider {
   public void fillContextMenu(IMenuManager menu) { super.fillContextMenu(menu);
   // remove Copy/Paste contributions
   IContributionItem copyItemRemoved = menu.remove("org.eclipse.ui.CopyAction");
   IContributionItem pasteItemRemoved = menu.remove("org.eclipse.ui.PasteAction");
   }
}

Eh bien, c'est un "accès découragé" mais je me décourageais ;-) JM.D

Autres conseils

Généralement, vous devriez utiliser le Framework de commande Avec toute version récente d'Eclipse (3,3 ou plus), cela remplace le mécanisme pour fournir des menus contextuels dans le navigateur commun.

Cette Le fil suggère Pour supprimer les choses qui font apparaître les éléments de menu en premier lieu:

Ce sont probablement des ensembles d'action, donc si vous pouvez identifier l'ensemble d'action qui cause la contribution offensive, vous pouvez faire quelque chose comme ça dans votre WorkbenchAdvisor:

    ActionSetRegistry reg = WorkbenchPlugin.getDefault()
            .getActionSetRegistry();


    IActionSetDescriptor[] actionSets = reg.getActionSets();
    String[] removeActionSets = new String[] {
        "org.eclipse.ui.cheatsheets.actionSet",
        "org.eclipse.ui.edit.text.actionSet.annotationNavigation",
       "org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo",
          "org.eclipse.ui.WorkingSetActionSet",
        "org.eclipse.update.ui.softwareUpdates", };


    for (int i = 0; i < actionSets.length; i++)
    {
        boolean found = false;
        for (int j = 0; j < removeActionSets.length; j++)
        {
            if (removeActionSets[j].equals(actionSets[i].getId()))
                found = true;
        }


        if (!found)
            continue;
        IExtension ext = actionSets[i].getConfigurationElement()
                .getDeclaringExtension();
        reg.removeExtension(ext, new Object[] { actionSets[i] });
    }

Le bug le plus proche que j'ai trouvé est le 145233: rendre un moyen plus évident de spécifier les entrées (pour les applications RCP), avec un Hack similaire.
Punaise 143430 (Commonnavigator nécessite que l'initiale est adaptable) est plus général et indiquerait que CNF a ensuite été amélioré avec Eclipse3.5 (Galileo).
Alors, avez-vous également ce problème avec 3.5 et une classe CNF personnalisée?


Comme mentionné dans l'article "Eclipse CNF: Extensions de contenu Navigator", CNF a évolué avec Eclipse3.5, et cet article semble avoir un arbre avec de véritables entrées de menu contextuel personnalisés.

alt text

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top