IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

Interaction command toolbar


Sujet :

SWT/JFace Java

  1. #1
    Membre à l'essai
    Profil pro
    dev
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 16
    Points
    16
    Par défaut Interaction command toolbar
    Bonjour,

    J'ai un petit souci concernant une gestion de boutons.

    J'ai 2 boutons dans une ToolBar, un bouton Play et un bouton Stop reliés chacuns à 2 commands/handlers différents. Pas de souci ça fonctionne.

    Maintenant, je souhaite que le handler qui gère la commande Play désactive le bouton Play et active le bouton Stop et inversement, quand on clique sur Stop.

    Je souhaiterai connaitre la méthode propre pour faire ça, y en a-t-il une ?

    Merci d'avance pour votre aide.

  2. #2
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Salut,

    à mon avis ( j'ai déjà eu affaire à ce type de problématique, désactivé un bouton en fonction de l'appuie d'un autre .. ).

    Tu pourrais vérifier les états respectifs des boutons (avec une variable, ou comme tu le sens ) et en fonction de l'état reconnu, tu désactives l'autre.
    Par exemple, avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boutonPlay.setEnable(false);
    , ainsi le bouton sera grisé.

    Mais post un peu de ton code, se sera plus simple ! Pour voir comment tu t'y es pris avec tes handlers.

    A plus

  3. #3
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    La bonne méthode, pour arriver à ce que tu souhaites, consiste en la création d'un fournisseur de variable qui mettra à jour lui même l'état des boutons.
    Donc, pour ce faire, il te faut d'abord éditer ton plugin.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
       <!-- Création des 2 commandes -->
       <extension
             point="org.eclipse.ui.commands">
          <command
                id="org.my.plug.in.test.command.start"
                name="Start">
          </command>
          <command
                id="org.my.plug.in.test.command.stop"
                name="Stop">
          </command>
       </extension>
       <!-- Ajout des 2 commandes dans la toolbar principale -->
       <extension
             point="org.eclipse.ui.menus">
          <menuContribution
                locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
             <toolbar
                   id="org.my.plug.in.test.toolbar">
                <command
                      commandId="org.my.plug.in.test.command.start"
                      icon="icons/start.png"
                      style="push"
                      tooltip="Start the example">
                </command>
                <command
                      commandId="org.my.plug.in.test.command.stop"
                      icon="icons/stop.png"
                      style="push"
                      tooltip="Stop the example">
                </command>
             </toolbar>
          </menuContribution>
       </extension>
       <!-- Création des 2 handlers qui lanceront les exécutions des commandes -->
       <extension
             point="org.eclipse.ui.handlers">
          <handler
                class="org.my.plug.in.test.handler.StartHandler"
                commandId="org.my.plug.in.test.command.start">
             <activeWhen>
                <with
                      variable="org.my.plug.in.test.variable">
                   <equals
                         value="start">
                   </equals>
                </with>
             </activeWhen>
             <enabledWhen>
                <with
                      variable="org.my.plug.in.test.variable">
                   <equals
                         value="start">
                   </equals>
                </with>
             </enabledWhen>
          </handler>
          <handler
                class="org.my.plug.in.test.handler.StopHandler"
                commandId="org.my.plug.in.test.command.stop">
             <activeWhen>
                <with
                      variable="org.my.plug.in.test.variable">
                   <equals
                         value="stop">
                   </equals>
                </with>
             </activeWhen>
             <enabledWhen>
                <with
                      variable="org.my.plug.in.test.variable">
                   <equals
                         value="stop">
                   </equals>
                </with>
             </enabledWhen>
          </handler>
       </extension>
       <!-- Création du fournisseur de variables et définition de la variable -->
       <extension
             point="org.eclipse.ui.services">
          <sourceProvider
                provider="org.my.plug.in.test.provider.TestSourceProvider">
             <variable
                   name="org.my.plug.in.test.variable"
                   priorityLevel="workbench">
             </variable>
          </sourceProvider>
       </extension>
    Ensuite, tu créés les classes correspondantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    public class TestSourceProvider extends AbstractSourceProvider {
     
        private static final String START_ACTIVE = "start";
     
        private static final String STOP_ACTIVE = "stop";
     
        public static final String VARIABLE = "org.my.plug.in.test.variable";
     
        /**
         * Current state of the variable.
         */
        private boolean isPlaying;
     
        /**
         * Default constructor.
         */
        public TestSourceProvider() {
            isPlaying = false;
        }
     
        /**
         * {@inheritDoc}
         */
        public void dispose() {
        }
     
        /**
         * {@inheritDoc}
         */
        public Map < String, String > getCurrentState() {
            Map < String, String > currentState =
                new HashMap < String, String >(getProvidedSourceNames().length);
            String value;
            if (!isPlaying) {
                value = START_ACTIVE;
            } else {
                value = STOP_ACTIVE;
            }
            currentState.put(VARIABLE, value);
            return currentState;
        }
     
        /**
         * {@inheritDoc}
         */
        public String[] getProvidedSourceNames() {
            return new String[] { VARIABLE };
        }
     
        public void setPlaying(final boolean aState) {
            if (isPlaying == aState) {
                return;
            }
            isPlaying = aState;
            String value;
            if (!isPlaying) {
                value = START_ACTIVE;
            } else {
                value = STOP_ACTIVE;
            }
            fireSourceChanged(ISources.WORKBENCH, VARIABLE, value);
        }
    Les handlers:
    StartHandler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public Object execute(ExecutionEvent event) throws ExecutionException {
        ISourceProviderService sourceProviderService =
            (ISourceProviderService) HandlerUtil
                .getActiveWorkbenchWindow(event).getService(
                    ISourceProviderService.class);
        if (sourceProviderService != null) {
            ISourceProvider provider =
                sourceProviderService
                    .getSourceProvider(TestSourceProvider.VARIABLE);
            if (provider instanceof TestSourceProvider) {
                ((TestSourceProvider) provider).setPlaying(true);
            }
        }
        return null;
    }
    StopHandler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public Object execute(ExecutionEvent event) throws ExecutionException {
        ISourceProviderService sourceProviderService =
            (ISourceProviderService) HandlerUtil
                .getActiveWorkbenchWindow(event).getService(
                    ISourceProviderService.class);
        if (sourceProviderService != null) {
            ISourceProvider provider =
                sourceProviderService
                    .getSourceProvider(TestSourceProvider.VARIABLE);
            if (provider instanceof TestSourceProvider) {
                ((TestSourceProvider) provider).setPlaying(false);
            }
        }
        return null;
    }
    Et le tour est joué. Quand tu vas appeler la méthode setPlaying l'état de la variable sera communiqué à tes boutons et ils se mettront à jour.
    Pour plus de précisions, tu as un article là dessus sur Eclipse tips.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

Discussions similaires

  1. Command toolbar find last submitted block in the Log
    Par nostress dans le forum Macro
    Réponses: 0
    Dernier message: 16/05/2014, 11h10
  2. Répondre à une commande interactive
    Par Gregco dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 20/01/2011, 22h15
  3. [Débutant] Interaction entre deux commandes
    Par DUTMP dans le forum LabVIEW
    Réponses: 5
    Dernier message: 25/01/2010, 12h48
  4. interaction prog C et commandes shell/system
    Par drinkmilk dans le forum Administration système
    Réponses: 2
    Dernier message: 16/04/2007, 19h02
  5. [Collaboration/Interaction] Peut-on schématiser une interaction entre un bouton de commande et un autre objet ?
    Par manel007 dans le forum Autres Diagrammes
    Réponses: 5
    Dernier message: 21/09/2004, 01h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo