Entfernen von Popupmenus aus CNF (Common Navigator Framework) in Sonnenfinsternis
-
18-09-2019 - |
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
undgroup.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.
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.