2010-10-27 9 views
4

J'ai contribué une contribution de barre d'outils de style toggle à ma vue dans mon RCP. Maintenant, je veux savoir comment définir l'état du bouton (puisqu'il s'agit d'un bouton à bascule) de ma vue. Ou, au moins, comment initialiser son état après que la vue est chargée (l'état bascule peut varier, ce n'est pas statique)Comment initialiser l'état de sélection d'un bouton à bascule dans la barre d'outils d'une vue dans un eclipse rcp

J'ai essayé d'appeler de mon avis: getViewSite(). GetActionBars(). GetMenuManager(). getItems() (retourne un tableau de IContributionElements), que j'ai parcouru et cherché l'identifiant. mais le tableau contient seulement les modèles des boutons, et il n'y a aucune possibilité de changer la sélection à travers ces objets.

Aide !!

Répondre

6

Dans la définition de votre commande (en plug-in.xml) que les appels CommandContributionItem dans, définir un état élément comme ce qui suit:

<state class="org.eclipse.ui.handlers.RegistryToggleState:true" 
    id="org.eclipse.ui.commands.toggleState"> 
</state> 

le plus va initialiser l'état (activer/désactiver) à true/false selon ce que vous spécifiez après la « RegistryToggleState: » sec tion.

Pour changer l'état dans votre code, commencez par obtenir la référence à votre ParamterizedCommand comme vous le faisiez auparavant. Ensuite, obtenir la référence à l'objet de Command Sous-jacent du ParamaterizedCommmand et appeler: les méthodes

HandlerUtil.toggleCommandState(command); 
+0

Merci, cela a tout localisé. Très précis et précis, merci encore! – simlei

+0

Ajout: si quelqu'un se demande s'il est simplement possible de basculer l'état de l'élément de menu - il suffit de regarder le code dans la méthode de bascule HandlerUtil et de l'adapter. – simlei

+0

Pas pour mettre à jour visuellement une contribution, vous devez implémenter IElementUpdater et mettre à jour l'élément de l'interface utilisateur dans updateElement() – Kemoda

3

Vous pouvez lancer l'élément à ActionContributionItem, obtenir le Action et appelez setChecked():

((ActionContributionItem) item).getAction().setChecked(true); 
+1

Mon article est du type CommandContributionItem. Je peux appeler getCommand() au lieu de getAction() (retourner un type ParameterizedCommand), mais il n'y a pas de méthodes qui m'aident davantage – simlei

+0

@simlei Ah, désolé - J'utilise Actions dans ma barre d'outils, je ne sais pas comment faites-le avec les commandes –

0

Pour changer l'état d'un particulier, essayez command.getState(), et state.setValue(), comme indiqué dans l'exemple:

private void refreshToggleButtonState(String commandID, String constantID) { 

    ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class); 
    Command command = commandService.getCommand(commandID); 

    State state = command.getState(RegistryToggleState.STATE_ID); 
    if (Activator.getDefault().getPreferenceStore().getBoolean(constantID)) { 
     state.setValue(Boolean.TRUE); 
    } else { 
     state.setValue(Boolean.FALSE); 
    } 
} 

constantID est un paramètre de magasin de préférences, en supposant que vous en ayez un.