Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java > SWT/JFace
SWT/JFace Forum d'entraide pour les API SWT/JFace. Avant de poster -> FAQ SWT/JFace
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 11/12/2012, 15h22   #1
cacoole
Invité de passage
 
Cacoole L
Inscription : décembre 2009
Messages : 8
Détails du profil
Informations personnelles :
Nom : Cacoole L

Informations forums :
Inscription : décembre 2009
Messages : 8
Points : 1
Points : 1
Par défaut Modifier l'état d'un toggle bouton

Bonjour,
Dans un plugin java / swt j'ai défini un bouton dans une toolbar d'une vue en utilisant une Extension.
Le type du bouton est toggle.
Ce bouton lance une fenêtre qui me permet de faire un filtre sur les éléments affichés dans la vue.
J'aimerai que l'état du bouton soit intelligent :
- reste appuyé si un filtre est en place
- relache si aucun filtre n'est en place dans la vue.
Je ne sais pas comment dans mon code accéder au bouton qui est défini dans les extensions du plugin?
Merci d'avance.
cacoole est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 10h49   #2
GouiTPT
Invité régulier
 
Homme
Ingénieur en apprentissage
Inscription : août 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur en apprentissage
Secteur : Industrie

Informations forums :
Inscription : août 2012
Messages : 12
Points : 8
Points : 8
Bonjour,

Pour accéder à la toolbar d'une vue tu peux utiliser ça :

Code :
getViewSite().getActionBars().getToolBarManager()
J'espère que ça pourra t'aider, sinon post un screenshot de ton onglet Extensions du Manifest.mf pour que nous puissions voir comment tu as ajouté ton bouton.

Bon courage,
Goui
GouiTPT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 09h59   #3
cacoole
Invité de passage
 
Cacoole L
Inscription : décembre 2009
Messages : 8
Détails du profil
Informations personnelles :
Nom : Cacoole L

Informations forums :
Inscription : décembre 2009
Messages : 8
Points : 1
Points : 1
Par défaut Problème non résolu

Mon problème est toujours le même : je ne sais pas comment accéder à mon bouton à l'extérieur de la méthode run...
Le bouton n'est pas un toggle mais un push, je souhaite pouvoir modifier son icon en fonction d'une variable interne (query)

Je joins le plugin.xml ou mon bouton est déclaré (nom du dit bouton : Filter)
Ainsi que le code associé au bouton (méthode run...) cf. j'ai mis en commentaire l'endroit ou je souhaite pouvoir modifier le bouton

Merci d'avance pour votre aide.

Code source java :

Code :
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
public class FilterPageService extends Action implements IViewActionDelegate   {
 
    FilterDatasManager datas = null;
 
    private static final long serialVersionUID = 1L;
    //IAction globalActionHandler = null;
 
 
    @Override
    public void init(IViewPart view) {
        /*
        FilterDatasManager filterButtonManager = FilterDatasManager.getInstance();
        filterButtonManager.AddListener(this);
        globalActionHandler = view.getViewSite().getActionBars(). getGlobalActionHandler("com.mongroup.tup.taskmanager.filter");
        */
    }
 
    @Override
    public void run(IAction action) {
 
        try {
 
            // --------------------------------
            // display to chose the filter data
            // --------------------------------
 
            Shell sh = new Shell(SWT.APPLICATION_MODAL);
            FilterPage filterPage = new FilterPage(sh);
            filterPage.open();
            sh.dispose();
            datas = filterPage.getFilterDatas();
 
            // ---------------------------------------
            // launch the filter in the Extractor View
            // ---------------------------------------
            LoadArtefactInExtractorView.runInJob();
 
            // change the icon of the button
            if ( datas.getQuery().contains("?") ) {
 
                // one filter have been done        
                Bundle bundle = Activator.getDefault().getBundle();
                ImageDescriptor myImage = ImageDescriptor.createFromURL(
                      FileLocator.find(bundle,
                                       new Path("icons/filter2.ico"),
                                                null));
                action.setImageDescriptor(myImage);
            }
            else {
                // no filter have been done    
                Bundle bundle = Activator.getDefault().getBundle();
                ImageDescriptor myImage = ImageDescriptor.createFromURL(
                      FileLocator.find(bundle,
                                       new Path("icons/filter.ico"),
                                                null));
                action.setImageDescriptor(myImage);
            }
 
 
            //changeIcon();
 
        } catch (Exception e) {
            MessageDialog.openInformation(new Shell(), "Error", e.getMessage());
        }
    }
 
    public void changeIcon()
    {
 
        // je voudrai ici pouvoir modifier l'icon du bouton comme ci dessus (en fonction de query...)
        // mais comment y accéder?
 
    }
 
 
    @Override
    public void selectionChanged(IAction arg0, ISelection arg1) {
        // TODO Auto-generated method stub
    }
 
}
Fichier plugin.xml :

Code xml :
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="com.mongroup.orc.service">
      <service
            class="com.mongroup.tup.service.common.SelectTaskService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.common.CheckTaskService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.software.DeliverTaskService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.confmgt.MakeBaselineService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.confmgt.RebaseTaskService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.common.SelectBaselineService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.system.DeliverTaskService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.common.SwitchToArgContextTaskService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.confmgt.MountViewService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.common.ExecuteCommandUriService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.confmgt.FindCheckOutService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.confmgt.SynchronizeTaskService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.software.TransferTaskService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.common.CreateContextService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.common.UpdateContextService"
            isWorkingContext="false">
      </service>
      <service
            class="com.mongroup.tup.service.newsmgt.ManageNewsService"
            isWorkingContext="false">
      </service>
   </extension>
   <extension
         point="org.eclipse.ui.popupMenus">
      <viewerContribution
            id="viewerContribution"
            targetID="ExtractorViewTableViewer">
         <action
               class="com.mongroup.tup.service.common.SelectTaskFromExtractorView"
               id="com.mongroup.tup.base.SelectTask"
               label="Select task"
               menubarPath="addition">
         </action>
         <action
               class="com.mongroup.tup.service.common.DisplaySelectedElementURI"
               id="com.mongroup.tup.displayURI"
               label="Display uri"
               menubarPath="addition">
         </action>
      </viewerContribution>
   </extension>
   <extension
         point="org.eclipse.ui.startup">
      <startup
            class="com.mongroup.tup.service.common.TaskManagerStartup"></startup>
   </extension>
   <extension
         point="org.eclipse.ui.views">
      <view
            class="com.mongroup.tup.views.TaskView"
            id="com.mongroup.tup.taskmanager.info"
            name="Selected task"
            restorable="true">
      </view>
      <view
            class="com.mongroup.tup.views.NewsView"
            icon="icons/imagesCA8RM68N.bmp"
            id="com.mongroup.tup.taskmanager.newsview"
            name="News page"
            restorable="true">
      </view>
   </extension>
   <extension
         point="org.eclipse.ui.viewActions">
      <viewContribution
            id="com.mongroup.tup.taskmanager.viewContribution1"
            targetID="com.mongroup.orc.desk.ui.views.ExtractorView">
         <action
               class="com.mongroup.tup.service.common.FilterPageService"
               icon="icons/filter.ico"
               id="com.mongroup.tup.taskmanager.filter"
               label="Filter"
               style="push"
               toolbarPath="additions"
               tooltip="Filter list of tasks">
         </action>
      </viewContribution>
   </extension>
   <extension
         point="com.mongroup.orc.service">
      <service
            class="com.mongroup.tup.service.common.LoadArtefactInExtractorView"
            isWorkingContext="false">
      </service>
   </extension>
 
</plugin>
cacoole est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 11h39   #4
GouiTPT
Invité régulier
 
Homme
Ingénieur en apprentissage
Inscription : août 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur en apprentissage
Secteur : Industrie

Informations forums :
Inscription : août 2012
Messages : 12
Points : 8
Points : 8
Ton bouton est en fait dans une IAction si j'ai bien compris.
Si tu rends celle-ci globale tu pourras y accéder partout dans ta classe.

Déclare la en global :
Code :
1
2
3
4
(...)
FilterDatasManager datas = null;
IAction action;                                 <== ICI
(...)
Et dans ta méthode run() :
Code :
1
2
3
4
5
(...)
@Override
    public void run(IAction action) {
          this.action = action;                 <== ICI
(...)
Tu auras accès à action dans changeIcon() où il te suffira de faire :
Code :
1
2
3
4
(...)
public void changeIcon() {
     action.setImageDescriptor(...);
(...)
GouiTPT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 12h07   #5
cacoole
Invité de passage
 
Cacoole L
Inscription : décembre 2009
Messages : 8
Détails du profil
Informations personnelles :
Nom : Cacoole L

Informations forums :
Inscription : décembre 2009
Messages : 8
Points : 1
Points : 1
Par défaut Pas mauvaise idée mais pas encore ce que je veut faire

effectivement la solution de la variable globale est pas mal en soit, cela dit ce n'est pas tout à fait ce que je recherche car il faudra avoir appuyer une fois sur le bouton pour y avoir ensuite accès via la globale.
Je voudrai y avoir accès tout de suite dès sa création afin d'avoir l'icone cohérente dès le début (affichage de la vue contenant la toolbar incluant le fameux bouton).

Je ne sais pas comment faire, la méthode run est bien elle me permet de modifier le bouton lorsqu'on click dessus, mais en dehors de cette méthode et notamment avant d'avoir appuyer dessus, comment faire en sorte d'avoir l'icone sur le bouton cohérente de ma variable interne.

Actuellement mon bouton est cohérent à partir du moment ou je clic dessus mais pas au démarrage...
cacoole est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 12h57   #6
GouiTPT
Invité régulier
 
Homme
Ingénieur en apprentissage
Inscription : août 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur en apprentissage
Secteur : Industrie

Informations forums :
Inscription : août 2012
Messages : 12
Points : 8
Points : 8
Mais pourtant l’icône tu la définis au début quand tu crées ton action dans ton Manifest.

Quoi qu'il en soit je te conseille de plutôt utiliser les Command que les Action.
Les Command sont plus récentes que les Action dans le développement RCP.

Je t'invite à lire pourquoi il vaut mieux utiliser les Command que les Action :
http://wiki.eclipse.org/FAQ_What_is_...d_an_action%3F
GouiTPT est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h27.


 
 
 
 
Partenaires

Hébergement Web