# RCP Menubar wird durch OLE-VIEW überschrieben



## tech84 (26. Apr 2010)

Hi,

ich habe mir ein Plug-in geschrieben, welches ein Excel-Ole-Objekt einbettet. Dieses Plugin wird in die RCP geladen, funktioniert alles auch soweit. Sobald die View des Plugin´s geöffnet wird, überschreibt die Menüleiste vom Excel-Ole-Objekt (Einfügen, Formeln, Daten,...) meine normale RCP-Menüleiste :-(

Ich hab´s schon hinbekommen und beim Starten des Plugin´s die "normale" Leiste ausgelesen und manuell beigefügt - aber das kann ja auch nicht die Lösung sein, ich komme einfach nicht an die Ole-menubar :-(

Hiiilffee...

Gruß,

tech


----------



## Gonzo17 (26. Apr 2010)

Also dass da ein paar Menüelemente hinzukommen, ist eigentlich ganz "normal" und passiert ja bei Programm auf Eclipse-Basis regelmäßig. Bin mir nicht ganz sicher, ob ich das richtig verstanden habe. Sagst du, dass dein Menü komplett verschwindet? Das wäre dann etwas komisch. Normalerweise hast du deine Menüeinträge, bei bestimmten Views/Editoren werden dann evtl noch weitere Einträge angezeigt und wenn diese Views/Editoren geschlossen werden, dann sind die Einträge davon auch wieder weg.


----------



## tech84 (26. Apr 2010)

Hi,

Plugin´s können und sollen ja Menüpunkte mitbringen, das ist soweit klar. Ich bette bei mir ja Excel in mein Eclipse ein, über OLE. Die normale Leiste wird dann bei mir komplett überschrieben - (mit der Standart Menüleiste aus MS Excel)

Das Hinzufügen der Menüpunkte geschiet durch die OLE Automation ansich, da habe ich nix mit zutun :-(

Vielleicht kann man mit diesen Verben ( vgl. Eclipse Corner Article: ActiveX Support In SWT) OLE dazu bringen, die Menüpunkte erst garnicht anzuzeigen??

Ich will einfach nur meine RCP-Menüleiste behalten, das ole-objekt als view hinzufügen - aber ohne die leiste :-( 

Gruß,

tech


----------



## Gonzo17 (26. Apr 2010)

Ich würds erstmal mit dem Stichwort Activities probieren. Das geht relativ einfach, indem du folgende Schritte kurz ausprobierst.

Gehe zuerst einmal auf deine plugin.xml und dann auf den Reiter "Extensions". Dort musst du eine neue Extension anlegen, nämlich "org.eclipse.ui.activities". 
Als nächstes erstellst du eine activity und ein activityPatternBinding. Die ID der activity ist relativ egal, du solltest sie halt nur wieder finden und sie sollte natürlich einmalig sein. Im activityPatternBinding trägst du die activityID dann ein und eine Zeile untendrunter das pattern. Da brauchst du jetzt die ID des Plug-Ins, dessen UI-Elemente du "blockieren" möchtest. Ich hab beispielsweise "org.eclipse.search.*" einmal eingetragen, um alle Menüeinträge, die etwas mit der Suche zu tun haben, zu unterdrücken. 

Kannst ja mal ausprobieren, ob das bei dir klappt (vielleicht auch erstmal mit was einfachem, um zu sehen ob du es grundsätzlich verstanden hast und es funktioniert).

Edit: Alternativ kannste es ja mal so versuchen, wie es in deinem Link steht. 


```
Display display = new Display();
	Shell shell = new Shell(display);
	OleFrame frame = new OleFrame(shell, SWT.NONE);

	Menu bar = new Menu(shell, SWT.BAR);
	shell.setMenuBar(bar);
	
	MenuItem fileItem1 = new MenuItem(bar, SWT.CASCADE);
	fileItem1.setText("&File_Item_1");
	MenuItem fileItem2 = new MenuItem(bar, SWT.CASCADE);
	fileItem2.setText("&File_Item_2");

	MenuItem containerItem = new MenuItem(bar, SWT.CASCADE);
	containerItem.setText("&Container_Item");

	MenuItem windowItem1 = new MenuItem(bar, SWT.CASCADE);
	windowItem1.setText("&Window_Item_1");
	MenuItem windowItem2 = new MenuItem(bar, SWT.CASCADE);
	windowItem2.setText("&Window_Item_2");

	frame.setFileMenus(new MenuItem[] {fileItem1, fileItem2});
	frame.setContainerMenus(new MenuItem[] {containerItem});
	frame.setWindowMenus(new MenuItem[] {windowItem1, windowItem2});
```


----------



## tech84 (27. Apr 2010)

Hi,

danke für den Tipp, kannte das noch garnicht! Allerdings möchte ich ja nicht komplett verhindern, dass das Plugin der RCP Menüeinträge hinzufügt. Die "normalen" Einträge, die in der Plugin.xml des plugins festgelegt sind, sollen ja erscheinen. Nur halt nicht die durch das OLE-Objekt erzeugten. Geht das auch?

In dem Auszug, den du gepostet hast, fügen die nur selber Menüpunkte hinzu - dann werden allerdings die OLE Menüpunkte auch wiederum überschrieben. Kann ich meine "alten" Menüpunkte evlt stattdessen reinschreiben? Wobei das ja schon etwas unsauber ist irgendwie :-(

Auf der Seite habe ich folgendes gelesen..


```
OLE.OLEIVERB_INPLACEACTIVATE – Activates an object in place without displaying tools, such as menus and toolbars,
```

ideal wäre es, dass OLE das menü nicht an die RCP sondern an die Viewpart heftet.. :autsch:

.. aber das bringt irgendwie auch nix!

Gruß, tech


----------

