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 :

Contribuer à la StatusLine de l'application


Sujet :

SWT/JFace Java

  1. #1
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut Contribuer à la StatusLine de l'application
    Bonjour à tous,
    je développe actuellement une RCP dans laquelle je dois indiquer un état de connexion (ON/OFF) à un service... par exemple savoir si je suis connecté ou pas à internet.
    Pour se faire j'aimerais un petit icone vert ou rouge suivant l état, que je souhaite ajouter dans la StatusLine qui se trouve en bas de mon appli.
    => Je ne trouve nulle part comment (si possible...) contribuer à cette statusline

    merci d'avance pr les idées

  2. #2
    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 : 41
    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
    Par défaut
    Salut,

    Alors là, carton rouge !!!
    Sujet déjà traité dans le forum Eclipse platform et dans ce forum...
    Pour accéder à la StatusLine, dans un Editor ou une View, il te faut faire un :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    IStatusLineManager statusManager = getXXXSite().getActionBars().getStatusLineManager();
    où XXX = Editor pour un Editor et XXX = View pour une View. (c'était le quota du capitaine obvious...).
    Ensuite, tu peux passer un message à la StatusLine en utilisant le Manager.

    Voilà, à+
    Gueritarish

  3. #3
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    tsu tsu tsu !! point du tout, pas de carton rouge
    en effet, ma question n'est pas tout à fait la même qui a été en effet posée moult fois...
    1. Je voulais savoir comment accéder à la StatusLine globale à l'appli, pas celle de l'Editor (à moins que ce ne soit la même ?)
    2. Après pour l'image, un getStatusLineManager().setMessage(image, message) devrait aller

    copie d'écran explicative jointe
    Images attachées Images attachées  

  4. #4
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    bon il semble que la barre tout en bas soit en effet celle de l'Editor, j'ai réussi à afficher un texte de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences()[0].getEditor(false).getEditorSite().getActionBars().getStatusLineManager().setMessage("TEST AFFICHAGE");
    pb : le texte ne s'affiche que quand l'Editor à le focus... pareil quand j'ajoute une Action, le bouton disparait si l'Editor n'est pas actif
    je n'étais pas loin pourtant !!

  5. #5
    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 : 41
    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
    Par défaut
    Salut,

    J'ai lu (dans cette discussion) qu'en fait, il n'y avait pas de "globalité" au StatusLineManager puisqu'il sert à afficher le statut de la Part (View ou Editor) active...
    Mais j'entrevois une solution grâce au IPartService. C'est une solution absolument pas testé, mais tu peux toujours essayer de faire un :
    Code Java : 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
    IPartService service =
                (IPartService) PlatformUI.getWorkbench().getService(
                    IPartService.class);
    service.addPartListener(new IPartListener() {
     
        public void partActivated(final IWorkbenchPart part) {
            printMessage(part);
        }
     
        public void partBroughtToTop(final IWorkbenchPart part) {
            printMessage(part);
        }
     
        public void partClosed(final IWorkbenchPart part) {
        }
     
        public void partDeactivated(final IWorkbenchPart part) {
        }
     
        public void partOpened(final IWorkbenchPart part) {
            printMessage(part);
        }
     
        private void printMessage(final IWorkbenchPart part) {
            IWorkbenchPartSite site = part.getSite();
            IActionBars bars = null;
            if (site instanceof IEditorSite) {
                bars = ((IEditorSite) site).getActionBars();
            } else if (site instanceof IViewSite) {
                bars = ((IViewSite) site).getActionBars();
            }
            if (bars != null) {
                IStatusLineManager statusLine = bars.getStatusLineManager();
                statusLine.setMessage("a Message");
            }
        }
    });
    Bien sûr rien ne t'oblige à utiliser une class anonyme interne... Tu peux très bien créer ta propre classe qui implémente IPartListener.
    Fait moi savoir si ça marche

    Voilà, à+
    Gueritarish

  6. #6
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    en effet après avoir bien fouiné et rencontré beaucoup de murs..cette statusLine est commune aux Vues et Editeurs...
    J'ai donc entrevu une solution à l'aide de getViewReferences() et getEditorReferences() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getViewReferences()[0].getView(false).getViewSite().getActionBars().getStatusLineManager().add(new Action(){ // code de l action });
    Mais ça ne plait pas du tout ! hors de question de faire ça pour toutes les vues et éditeurs....
    Et c'est là que j'ai trouvé LA solution

    => utiliser le point d'extension org.eclipse.ui.menus comme indiqué ici (tout en bas). Bon évidement dans mon appli ça ne marche, peux tu me confirmer que ça marche bien toi ?

    merci d'avance

  7. #7
    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 : 41
    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
    Par défaut
    Tu as testé la méthode que je te préconises? Ou t'as pas vu mon post précédent?
    Sinon, j'ai pas trop eu le temps de regarder ta méthode, mais bon, ça doit être faisable aussi ^^.

    Voilà, à+
    Gueritarish

  8. #8
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    ah oui pardon j'ai bien testé oui, mais ça ne correspond pas exactement à ce qu'il me faut ... en effet je dois pas écrire un message, je dois ajouter un Item carrément
    Mes vues et éditeurs affichent également des infos à l'aide de setMessage(...), du coup je perds mon info (état de connexion) qui doit être affichée en permanence...

    au final je pense devoir parcourir mes ViewReference, EditorReference uns à uns...

    [EDIT]
    j'ai aussi essayé ceci qui ne fonctionne pas
    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
     
    @Override
    			public void postWindowOpen(IWorkbenchWindowConfigurer configurer) {
    				IStatusLineManager statusline = configurer.
    			      getActionBarConfigurer().getStatusLineManager();
    				statusline.add(new Action(){
    					@Override
    					public ImageDescriptor getImageDescriptor() {
    						return Activator.getDefault().getImageRegistry().getDescriptor(Activator.UE_ICON);
    					}
     
    					@Override
    					public String getText() {
    						return "MON ACTION TEXTE";
    					}
    				});
    			}

  9. #9
    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 : 41
    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
    Par défaut
    Toujours pas testé, mais sache que le IStatusLineManager hérite de IContributionItem et que la classe StatusLineManager définit 3 groupes. Donc, tu peux très bien utiliser cet héritage pour faire un :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    statusLine.appendToGroup(StatusLineManager.END_GROUP, new MyContributionItem());
    Comme IContributionItem tu peux utiliser un StatusLineContributionItem ou en créer un toi même (puisqu'il te faut une image). En tout cas, en couplant ces 2 solutions, tu gardes un comportement "global" et une barre de statut "supplémentaire".
    Bien sûr toutes ces indications restent théoriques puisque je n'ai rien testé. Par contre, ça devrait t'aider à avancer ^^

    Voilà, à+
    Gueritarish

  10. #10
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    bon je viens de voir ça un peu tard ... mais au final je me sers effectivement d'un ContributionItem, le problème avant est que postWindowOpen(...) n'était pas appelé à la création du Workbench
    En procédant comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                            @Override
    			public void postStartup() {
    				IStatusLineManager statusline = getWorkbenchConfigurer().getWindowConfigurer(getWorkbenchConfigurer().getWorkbench().getActiveWorkbenchWindow()).getActionBarConfigurer().getStatusLineManager();
    				statusline.add(new ConnectionStateItem()/*mon item perso*/);
    			}
    ça fonctionne niquel

    merci encore une fois

  11. #11
    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 : 41
    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
    Par défaut
    Peux-tu poster la méthode "complète" (les étapes majeures en fait) pour intégrer ta solution pour aider les futurs "malheureux" qui auraient le même problème?
    Merci
    Gueritarish

  12. #12
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    bien sur pas de soucis,
    tout se passe dans la classe étendant WorkbenchAdvisor, la classe que l'on donne pour implémenter le 'run' de l'application (voir image jointe ).
    Ensuite voici le code quelle doit contenir :

    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
    public class AcquisitionWorkbenchAdvisor extends WorkbenchAdvisor implements
    IApplication{
    
    	public AcquisitionWorkbenchAdvisor() {
    		// ...
    	}
    
    	public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
    		//...
    		return null;
    	}
    
    	@Override
    	public void postStartup() {
    		IStatusLineManager statusline = getWorkbenchConfigurer().getWindowConfigurer(getWorkbenchConfigurer().getWorkbench().getActiveWorkbenchWindow()).getActionBarConfigurer().getStatusLineManager();
    		statusline.add(new ConnectionStateItem() /* MON ITEM PERSO*/);
    	}
    	
    	public void initialize(IWorkbenchConfigurer configurer) {
    		//...
    	}
    
    
    	@Override
    	public String getInitialWindowPerspectiveId() {
    		// ...
    		return null;
    	}
    
    	@Override
    	public Object start(IApplicationContext context) throws Exception {
    		//...
    		return null;
    	}
    
    	@Override
    	public void stop() {
    		// ...
    	}
    
    }
    la méthode postStartup() appelée après démarrage de l'application va ajouter à la StatusLine un ConnectionStateItem que j'ai moi même crée:

    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
     
    public class ConnectionStateItem extends ContributionItem {
     
    	private CLabel connexionStateLabel = null;
     
    	public ConnectionStateItem() {
    	}
     
     
    	@Override
    	public void fill(Composite parent) {
    		Label separator = new Label(parent, SWT.SEPARATOR);
    		connexionStateLabel = new CLabel(parent, SWT.SHADOW_NONE);
    		connexionStateLabel.setToolTipText("Mon tool tip");
     
    		// le code remplissant le composite...
    	}
    }
    voili voulou, je pense qu'il y a tout ce qu'il faut ^^
    Images attachées Images attachées  

  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 : 41
    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
    Par défaut
    C'est sympa, merci
    J'imagine que tu l'as déjà lu, mais fais quand même attention dans ta "collection" de "get" à ne pas tomber sur un élément null... C'est générateur de NullPointerException

  14. #14
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    en effet , mais j'avoue que j'étais à bout quand j'ai réussi à trouver cet enchainement magique , que je suis allé direct au but... mais c'est un TODO en effet

    et c'est avec plaisir

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

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 14h02
  2. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 15h39
  3. Réponses: 1
    Dernier message: 13/05/2002, 10h19
  4. [Kylix] Execution d'une application hors de l'edi
    Par Sadam Sivaller dans le forum EDI
    Réponses: 1
    Dernier message: 21/04/2002, 00h22
  5. Réponses: 2
    Dernier message: 15/04/2002, 13h56

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