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

Eclipse Platform Discussion :

Gérer un bouton Toggle


Sujet :

Eclipse Platform

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut Gérer un bouton Toggle
    Salut à tous,

    J'ai un toggle bouton dans mon application RCP (au niveau des menus d'icones en haut) qui doit etre check ou pas selon l'editor ouvert.

    En gros, si l'utilisateur ouvre 2 editors en meme temps, il faut que le bouton en question puisse etre activé dans l'un et pas dans l'autre. Lorsque l'utilisateur change de fichier, avec les onglets, cette icone doit apparaitre "poussé" ou pas de facon automatique.

    J'ai suivi ce tutoriel, je suis pas certaine que ca va me mener ou je veux: http://eclipsesource.com/blogs/2009/...-contribution/.

    J'ai ajouté dans mon plugin.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <command
                id="fr.eldoon.gui.commands.Picking"
                name="Picking">
             <state
                   class="org.eclipse.ui.handlers.RegistryToggleState"
                   id="fr.eldoon.gui.commands.PickingState">
             </state>
          </command>
    et dans ma commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ICommandService service =
                (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
            Command command = service.getCommand("fr.eldoon.gui.commands.Picking");
            State state = command.getState("fr.eldoon.gui.commands.PickingState");
            state.setValue(true);
    La, dans mon esprit, ca aurait du afficher un toggle button toujours checked. Mais rien ne se fait graphiquement, il y a juste ma variable state qui se met effectivement à "true".

    Dans la suite du tutoriel, je comprend pas trop ce que je dois mettre en entrée de cette fonction?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void updateElement(UIElement element, Map paramters) {
      element.setChecked(isSelected);
    }
    Est ce que je suis sur la bonne voie avec ce tutoriel?


    Que pensez vous qu'il faut faire avec ce updateElement?


    Merci d'avance

    Edit: J'ai deja une variable qui me renvoie "true" ou "false" selon l'editor ouvert, ce que je veux c'est simplement l'affichage de cet état graphique dans l'icone concerné dans la barre des menus.

  2. #2
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Je crois que je suis partie dans la mauvaise direction.

    Il n'y aurait pas une ligne toute simple du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setBaseEnabled(true)
    Mais pour "pousser" le bouton et pas l'enabler?

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Bon en fait, ignorez mon dernier message.. Je sais pas comment m'y prendre, il faut que je fasse un "setSelected" sur mon bouton, qui est dans ma barre des menu.

    Comment je peux récupérer ce bouton? Peut être avec un "PlatformUI.getWorkbench...."?

  4. #4
    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,

    Tu n'es absolument pas parti dans la mauvaise direction. Juste il te manque la notification
    En gros, dans ton Handler (ou chaque fois que tu mets à jour le status), tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    commandService.refreshElements(event.getCommand().getId(), null);
    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Cela ne fonctionne pas chez moi..

    J'ai écrit ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ICommandService service =
                (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
            Command command = service.getCommand("fr.eldoon.gui.commands.Picking");
            State state = command.getState("fr.eldoon.gui.commands.PickingState");
            state.setValue(true);
            service.refreshElements(command.getId(), null);
    A chaque fois que le code est appelé, le State est bien à true mais l'affichage graphique ne suit pas. Dans ce cas la, le toggle button aurait du être "poussé" tout le temps non?

  6. #6
    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
    Selon le tutoriel il faut aussi que ton Handler implémente l'interface IElementUpdater:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void updateElement(final UIElement element, final Map parameters) {
        final ICommandService commandService =
          (ICommandService) PlatformUI.getWorkbench().getService(
              ICommandService.class);
        final Command command =
          commandService.getCommand("fr.eldoon.gui.commands.Picking");
        final State state =
          command.getState("fr.eldoon.gui.commands.PickingState");
        element.setChecked((Boolean) state.getValue());
    }
    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Oui d'accord mais la on revient à mon probleme initial. A quoi correspond ce UIelement? A mon bouton dans la barre?

    Comment récupérer cet UIElement pour pouvoir utiliser updateElement?

  8. #8
    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
    Tu n'as pas à le récupérer, c'est appelé par la plateforme automatiquement.
    Pas de questions technique par MP, les forums sont là pour ça.

  9. #9
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Tu es sur de toi? J'ai du mal comprendre, mais tu dis qu'il suffit de mettre la méthode updateElement dans le fichier sans rien faire de plus que dans le plugin.xml et cette méthode sera appelée automatiquement?

    Cela ne fonctionne pas comme cela: (toujours pour que ca soit toujours checked)

    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
    public class CmdHdlPicking extends AbstractHandler implements ISourceProviderListener {
    
    ................
    
        public CmdHdlPicking(){
            
        }
        
      @Override
        public Object execute(ExecutionEvent event) throws ExecutionException {
    ..............................
            return null;
        }
    
        private ISourceProvider getSourceProvider(ExecutionEvent event){
           ...........................
                }
    
        private void updateButton(){
            //boolean state1 = false;
            //if (null != this.activeIButton){
               // if (this.activeIButton.getMode() == //IButton.MODE_TRANSFORMING ){
                    //state1 = true;
               // }
                final ICommandService commandService =
                    (ICommandService) PlatformUI.getWorkbench().getService(
                        ICommandService.class);
                  final Command command =
                    commandService.getCommand("fr.eldoon.gui.commands.Picking");
                commandService.refreshElements(command.getId(), null);
            }
    
        public void updateElement(final UIElement element, final Map parameters) {
            final ICommandService commandService =
              (ICommandService) PlatformUI.getWorkbench().getService(
                  ICommandService.class);
            final Command command =
              commandService.getCommand("fr.eldoon.gui.commands.Picking");
            final State state =
              command.getState("fr.eldoon.gui.commands.PickingState");
            element.setChecked(true);
            
        }
    
      ..............................

  10. #10
    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
    Citation Envoyé par Gueritarish Voir le message
    Selon le tutoriel il faut aussi que ton Handler implémente l'interface IElementUpdater
    Citation Envoyé par Gueritarish Voir le message
    Tu n'as pas à le récupérer, c'est appelé par la plateforme automatiquement.
    Citation Envoyé par Ma29200 Voir le message
    Tu es sur de toi?
    Oui. Je teste avant de donner une solution. Ou alors, j'indique que je n'ai pas testé.
    Pour ton cas:
    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
    public class CmdHdlPicking extends AbstractHandler implements IElementUpdater, ISourceProviderListener {
     
      /**
       * {@inheritDoc}
       */
      @Override
      public Object execute(final ExecutionEvent event) throws ExecutionException {
        final ICommandService commandService =
          (ICommandService) PlatformUI.getWorkbench().getService(
              ICommandService.class);
        final Command command =
          commandService.getCommand("fr.eldoon.gui.commands.Picking");
        final State state =
          command.getState("fr.eldoon.gui.commands.PickingState");
        state.setValue(true);
        commandService.refreshElements(event.getCommand().getId(), null);
        return null;
      }
     
      /**
       * {@inheritDoc}
       */
      @Override
      public void updateElement(final UIElement element, final Map parameters) {
        final ICommandService commandService =
          (ICommandService) PlatformUI.getWorkbench().getService(
              ICommandService.class);
        final Command command =
          commandService.getCommand("fr.eldoon.gui.commands.Picking");
        final State state =
          command.getState("fr.eldoon.gui.commands.PickingState");
        element.setChecked((Boolean) state.getValue());
      }
    }
    Pas de questions technique par MP, les forums sont là pour ça.

  11. #11
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Oups j'ai zappé cette ligne .

    Désolée et un grand merci!!

  12. #12
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut class State ?
    Bonjour,

    Merci pour ce post, très utile !
    Cependant, il y a un truc que je n'ai pas compris, je dois créer une classe qui étends State, soit, mais que fait cette classe ?

    Merci
    Chris

  13. #13
    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,

    Tu n'as pas de classe State à étendre. Cette classe sert juste à connaître et / ou changer l'état du bouton. Comme précisé plus haut (tout à fait discrètement), il te faut implémenter l'interface IElementUpdater.

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

  14. #14
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut
    oups j'avais pas vu que c'était une "org.eclipse.ui.handlers.RegistryToggleState" ...
    oh pinaise !

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET]Comment gérer plusieurs boutons en 1 méthode Click ?
    Par Cydreav dans le forum Windows Forms
    Réponses: 4
    Dernier message: 05/02/2006, 23h53
  2. [FLASH 8] gérer des boutons dynamiquement
    Par gregooo dans le forum Flash
    Réponses: 1
    Dernier message: 04/02/2006, 21h22
  3. Gérer plusieur bouton pour un meme formulaire
    Par Phenomenium dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/01/2006, 13h08
  4. Gérer les boutons Minimize,Close d'une forme
    Par Chupakabra dans le forum Langage
    Réponses: 2
    Dernier message: 05/10/2005, 11h42
  5. Réponses: 5
    Dernier message: 29/10/2004, 16h20

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