# Zugriff auf Commands in Toolbar



## Saxony (24. Jun 2009)

Hiho,

ich habe in einer View-Toolbar einen Command im Toggle-Style hinzugefügt. Ich sehe auch die dadurch entstandene Schaltfläche innerhalb meiner View-Toolbar. Soweit so gut. Tritt nun ein Ereignis auf - Nutzer klickt auf diese Schaltfläche - dann wird ja die execute Methode meines Handlers abgearbeitet. Wie komme ich aber nun an den Status (gedrückt / nicht gedrückt) dieser Schaltfläche heran?

bye Saxony


----------



## Saxony (15. Jul 2009)

Hiho,

ich muss da mal wieder reaktivieren! Sitze gerade wieder daran den Status von Buttons eine View Toolbar zu erhalten.

Und zwar gehe ich wie folgt vor:

1. Ich lege in meiner Plug-In.xml einen Command als Extension an (org.eclipse.ui.command).
2. Für diesen Command schreibe ich ebenso einen Handler (extends AbstractHandler)
3. darin überschreibe ich die execute Methode und fülle diese mit den dingen, welche passieren sollen wenn der Command ausgeführt wird
4. Diesen Command füge ich nun in der Plugin.xml als Extension (org.eclipse.ui.menus) der Toolbar meines Views hinzu.
5. Als style für diesen Command verwende ich Toggle
6. Starte ich die Anwendung macht er für den Command eine Schaltfläche innerhalb der View-Toolbar

7. und das ist nun die Frage - Wie kann ich den ToggleStatus der so erzeugten Schaltfläche inner halb der execute Methode des zugehörigen Handlers abfragen?

Wäre nett wenn das einer (Wildcard?) weiß!

bye Saxony


----------



## Vayu (15. Jul 2009)

musst mal n bissl mit rumspielen, aber soooo ungefähr kommste an deine commands ran


```
((SlaveCommandService)PlatformUI.getWorkbench()
    .getActiveWorkbenchWindow().getService(ICommandService.class))
    .getCommand("command.id")
```


----------



## Vayu (15. Jul 2009)

achso und über [c]getHandler[/c] kommste an deine HandlerKlasse ran, sprich die dahinterliegende action


----------



## Saxony (15. Jul 2009)

Hiho,

ja an den Command kommt man auch einfach mit ExecutionEvent.getCommand() 

Aber das ist ja nur ein Teil der Lösung - ich brauche im Endeffekt den Status des durch diesen Commands erzeugten ToggleButtons (pressed / unpressed).

Nunja ich war ja in der Zwischenzeit nicht untätig und habe etwas dazu gefunden.

Als erstes nehme man ein Eclipse 3.5 Galileo.
Dann kann man dort in der Plugin.xml bei den Command Extensions (org.eclipse.ui.commands) für ein Command noch ein State hinzufügen.

Als id nehme man: "org.eclipse.ui.commands.toggleState"
und als class: "org.eclipse.ui.handlers.RegistryToggleState"

Bei class kann man noch ein default mitgeben für den state

z.B. "org.eclipse.ui.handlers.RegistryToggleState:false"

So und nun *trommelwirbel*

In der execute Methode des Command Handler greift man so drauf zu:


```
public Object execute(ExecutionEvent event) throws ExecutionException {

	boolean state = HandlerUtil.toggleCommandState(event.getCommand());

	// do something with the state

	return null;
```

HandlerUtil#toggleCommandState(Command) gibts erst seit Eclipse 3.5.

Übrigens habe ich ja bis vor 6min noch mit 3.4 Ganymade gearbeitet, dann 3.5 Galileo gestartet als Workspace den alten von 3.4 genommen und es lief ohne zu murren. *freu*

bye Saxony


----------



## Vayu (15. Jul 2009)

arf du wolltest innerhalb der execute methode den status haben ... ok das hätte ich dir auch gleich sagen können  dachte du wolltest von ausserhalb an den status kommen.


----------



## Saxony (15. Jul 2009)

Vayu hat gesagt.:


> arf du wolltest innerhalb der execute methode den status haben ... ok das hätte ich dir auch gleich sagen können  dachte du wolltest von ausserhalb an den status kommen.





Saxony hat gesagt.:


> 7. und das ist nun die Frage - Wie kann ich den ToggleStatus der so erzeugten Schaltfläche inner halb der execute Methode des zugehörigen Handlers abfragen?



Jo wollte ich!


----------



## Vayu (15. Jul 2009)

hab ich überlesen


----------



## Saxony (15. Jul 2009)

Hiho,

mal noch ne Anmerkung der Vollständigkeit halber:

Sollte aus irgendwelchen Gründen der Toggle Status des Commands geändert werden.


```
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {

	boolean allowToggleState = // check for toggling allowed
		
	if (!allowToggleState) {
			
		State state = event.getCommand().getState("org.eclipse.ui.commands.toggleState")
		state.setValue(Boolean.FALSE);
	}

	return null;
}
```

bye Saxony


----------



## Saxony (16. Jul 2009)

Ich nochmal - wenn man nur über den State an den Status des ToggleCommands rangeht - also kein HandlerUtil#toggleCommandState(Command) nutzt - kann man auch bei Eclipse 3.4 bleiben!


----------

