Frage

Ich war teilweise erfolgreich darin, fast alle Popup -Menüs aus dem Commons Navigator -Framework zu entfernen, indem ich einfach konfigurierte plugin.xml Datei.
Es gibt 2 Menüs, die sich weigern zu gehen:

  • group.edit und
  • group.reorganize.

Mein plugin.xml Die Konfiguration sieht so aus:

<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>

Einstellen des allowsPlatformContribution zu False stoppt Beiträge, die zum Kontextmenü hinzugefügt werden sollen außer zum group.edit und group.reorganize... Das fängt für mich an, wie ein Fehler auszusehen.

Die offensichtliche Lösung besteht darin, die Einfügepunkte von meinem zu entfernen <popUpMenu> Aber ohne sie macht die Anwendung eine Ausnahme:

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)

Es macht die gleiche Ausnahme für die Reorganize -Gruppe.

War es hilfreich?

Lösung

Es gelingt mir, die Aktionen "Group.Edit" zu entfernen (kopieren/einfügen), und ich habe es so gemacht, indem ich die gemeinsamen Navigator -Erweiterungspunkte verwendet habe:

   <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>

Und mit "org.eclipse.ui.navigator.resources" in meinen Plugin -Abhängigkeiten habe ich "mypasteactionProvider" wie folgt implementiert:

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");
   }
}

Nun, das ist ein "entmutigter Zugang", aber ich habe mich entmutigt ;-) JM.D.

Andere Tipps

Im Allgemeinen sollten Sie die verwenden Befehlsframework Mit jeder aktuellen Version von Eclipse (3.3 oder höher) ersetzt dies den Mechanismus zur Bereitstellung von Popup -Menüs im gemeinsamen Navigator.

Dies Thread schlägt vor Um die Dinge zu entfernen, die dazu führen, dass die Menüelemente überhaupt erst angezeigt werden:

Sie sind wahrscheinlich in Aktionssätzen. Wenn Sie also das Aktionssatz identifizieren können, der den offensiven Beitrag verursacht, können Sie so etwas in Ihrem tun 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] });
    }

Der nächste Fehler, den ich gefunden habe, ist der 145233: Machen Sie eine offensichtliche Möglichkeit, Eingaben anzugeben (für RCP -Apps), mit einer Ähnlicher Hack.
Insekt 143430 (CommonNavigator muss initialInput anpassungsfähig sein) ist eine allgemeinere und würde darauf hinweisen, dass CNF mit Eclipse3.5 (Galileo) verbessert wurde.
Haben Sie dieses Problem auch mit 3.5 und einer benutzerdefinierten CNF -Klasse?


Wie im Artikel erwähnt "Eclipse CNF: Navigatorinhaltserweiterungen", CNF hat sich mit Eclipse3.5 entwickelt, und dieser Artikel scheint einen Baum mit echten benutzerdefinierten Kontextmenüeinträgen zu haben.

alt text

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top