RCP Menu Contribution - Menü Button wird als inaktiv angezeigt

S

Schnatter0815

Gast
Hallo,

folgendes Problem. Ich erweitere die MenuBar um eine Menü wie folgt:

3AudBWIDl7.JPG


Bei menuContribution hab ich menu:eek:rg.eclipse.ui.main.menu
File (menu) hat als Label file und als id
Das command unter File verweist auf das OpenCommand, welches auch einen Handler hat.

Ich kann den Button "Open" jedoch nicht anklicken (siehe Bild)

CFiuw6YiI7.jpg


Wie kann ich ihn "aktiv schalten".

Danke und Gruß
 
S

Schnatter0815

Gast
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>

<extension
id="application"
point="org.eclipse.core.runtime.applications">
<application>
<run
class="myapp.Application">
</run>
</application>
</extension>
<extension
point="org.eclipse.ui.perspectives">
<perspective
name="%perspective.name"
class="myapp.Perspective"
id="Myapp.perspective">
</perspective>
</extension>
<extension
point="org.eclipse.ui.views">
<view
name="%view.structural.name"
class="myapp.views.StructuralView"
id="Myapp.structuralView">
</view>
<view
allowMultiple="false"
class="myapp.views.MaterialView"
id="Myapp.materialView"
name="%view.material.name"
restorable="true">
</view>
<view
class="myapp.views.IfcView3d"
id="Myapp.3dView"
name="Ifc3DView"
restorable="true">
</view>
</extension>
<extension
point="org.eclipse.ui.perspectiveExtensions">
<perspectiveExtension
targetID="*">
<view
standalone="true"
minimized="false"
relative="org.eclipse.ui.editorss"
relationship="left"
id="Myapp.structuralView">
</view>
<view
id="Myapp.materialView"
minimized="false"
relationship="right"
relative="org.eclipse.ui.editorss"
standalone="true">
</view>
<view
id="Myapp.3dView"
minimized="false"
relationship="bottom"
relative="org.eclipse.ui.editorss"
standalone="true">
</view>
</perspectiveExtension>
</extension>
<extension
point="org.eclipse.ui.commands">
<command
defaultHandler="myapp.handlers.OpenIfcFileHandler"
id="myapp.commands.open"
name="open">
</command>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
class="myapp.handlers.OpenIfcFileHandler"
commandId="myapp.commands.open">
</handler>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="menu:eek:rg.eclipse.ui.main.menu">
<menu
id="myapp.menus.open"
label="File">
<command
commandId="myapp.commands.open"
icon="icons/open.png"
style="push">
</command>
</menu>
</menuContribution>
</extension>


</plugin>

[XML][/XML]
 

fifo

Mitglied
Verwende beim nächsten mal bitte die XML-Tags, dann kann man es besser lesen.

Was hast du in der Handler-Klasse myapp.handlers.OpenIfcFileHandler implementiert?
 

Huecheln

Mitglied
Wie ist dein Handler bzgl. enabled eingestellt?
Testweise kannst du die Methode isEnabled() überschreiben und einfach true zurückgeben. Müsste funktionieren wenn es daran liegt. Da ich glaube dass standardmäßig false zurückgegeben wird.

Edit: Hab gerade gesehen, dass beim AbstractHandler standardmäßig enabled=true eingetragen ist.
 
Zuletzt bearbeitet:
S

Schnatter0815

Gast
Dachte auch erst es liegt an dem isEnabled. Geb true zurück, bleibt aber so.
Java:
package myapp.handlers;

import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.commands.IHandlerListener;

public class OpenIfcFileHandler implements IHandler {

	@Override
	public void addHandlerListener(IHandlerListener handlerListener) {
		// TODO Auto-generated method stub

	}

	@Override
	public void dispose() {
		// TODO Auto-generated method stub

	}

	@Override
	public Object execute(ExecutionEvent event) throws ExecutionException {
		System.out.println("File Open");
		return new Object();
	}

	@Override
	public boolean isEnabled() {
		// TODO Auto-generated method stub
		return true;
	}

	@Override
	public boolean isHandled() {
		// TODO Auto-generated method stub
		return true;
	}

	@Override
	public void removeHandlerListener(IHandlerListener handlerListener) {
		// TODO Auto-generated method stub

	}

}
 

fifo

Mitglied
Wenn du org.eclipse.ui.handlers verwendest musst du auch über activeWhen definieren, wann der Hander aktiv sein soll. Ansonsten ist er immer inaktiv.
 
S

Schnatter0815

Gast
Hallo,

danke für die Antworten.

Wo kann ich das mit dem ActiveWhen einstellen? Und wieso klappt das nicht, wenn ich org.eclipse.ui.handlers einfach so verwende. Wäre über eine kurze Erklärung froh um zu verstehen warum das klappt und nicht nur froh zu sein das es klappt.
 

fifo

Mitglied
Über diese AktiveWhen kannst du definieren z.B. definieren das der Hander nur aktiv ist wenn ein bestimmter Editor geöffnet ist, oder wenn ein bestimmtes Objekt selektiert wurde usw.

Das ganze zu erklären würde jetzt glaube ich hier den Rahmen sprengen.
Hier ist ein nützlicher Artikel darüber:
Command Core Expressions - Eclipsepedia
 
S

Schnatter0815

Gast
Hallo,

klappt jetzt bei mir soweit. Ich habe es jetzt so verstanden. Wenn ich einen weiteren Handler über org.eclipse.ui.handlers mit dem Command über dessen ID verknüpfe macht er das Command inaktiv, d.h. ich kann es nicht anklicken, wenn ich nicht den Handler über activeWhen "aktiviere".

Als ich das activeWhen angegeben habe, wie von euch vorgeschlagen, ging es dann ja wunderbar. Mich wundert aber folgendes:

Man gibt bei dem Command ja auch einen defaultHandler an. Warum wird dieser nicht ausgeführt? Wenn ich zwei Handler mit dem Command verknüpfe (defaultHandler) und den Handler über org.eclipse.ui.handlers müsste ja wenigstens der defaultHandler funktionieren, wenn ich bei dem anderen kein activeWhen habe. Der Button bleibt aber ohne das activeWhen nicht anklickbar trotz defaultHandler.
 

Ähnliche Java Themen


Oben