2016-04-14 11 views
0

Ich habe eine Symbolleiste, die ich zum Umschalten zwischen Perspektiven verwenden. Jede Schaltfläche in meiner Symbolleiste öffnet eine andere Perspektive. Ich möchte betonen, dass der Benutzer fühlt, was zu der Zeit geöffnet ist, und ich möchte meine Knöpfe als Schalter mit den Zuständen "DOWN" und "UP" betätigen. Der Code, den ich neue BaseActions zur Symbolleiste hinzufügen verwenden:Benutzerdefinierte Toggle-Verwaltung in Eclipse RCP ToolBar

ToolBarManager toolBarManager = new ToolBarManager(); 
coolBar.add(toolBarManager); 
toolBarManager.add(ordersDownload); 

und Teil des Codes meiner BaseAction die Schaltfläche Verhalten ändert sich hin- und herzuschalten:

public class BaseAction implements IAction { 

@Override 
public int getStyle() { 
    return SWT.TOGGLE; 
} 

Innerhalb IAction gibt es ein Verfahren boolean isChecked aber es funktioniert nicht wie immer, wenn ich auf die Schaltfläche in der Symbolleiste klicke, wird der Status invertiert (DOWN -> UP, UP -> DOWN). Ich möchte nicht mehr als einen Button (Toggle) gleichzeitig mit Status DOWN haben, also möchte ich irgendwie Status UP für alle Buttons aufrufen und nur einen mit Status DOWN lassen.

The picture that shows how it should look like

+0

'getStyle' muss einen der' IAction.AS_xxxx' Werte zurückgeben - 'SWT.TOGGLE' ist nicht gültig. Es ist üblicher, 'org.eclipse.jface.action.Action' zu erweitern, anstatt zu versuchen, die gesamte' IAction' selbst zu implementieren. –

Antwort

0

Ok ist es teilweise gelöst. Wie in greg-449 vorgeschlagen, sollte IAction.AS_RADIO_BUTTON für den IAction-Stil verwendet werden. Nachdem ich die Separatoren (wie sie extends AbstractGroupMarker sind) von meiner Symbolleiste entfernt habe, gibt es immer einen Schalter DOWN (wenn ein Mausklick erfolgt, sind alle anderen Schalter auf UP gestellt). Jetzt muss ich programmatisch schaltet umschalten, die ich benutze:

ActionContributionItem lItem = (ActionContributionItem)Facade.toolbar.getItems()[1]; 
lItem.getWidget().notifyListeners(SWT.Selection, new Event()); 

, die zu einer anderen Perspektive wechselt (was bedeutet, dass meine IAction->runWithEvent Funktion richtig genannt wird), aber die angeklickt Toggle nicht eingeschaltet ist (nicht als DOWN eingestellt, die vorher benutzter Kippschalter bleibt DOWN)